Pomoc przy dokończeniu programu w Pascalu

0
program psc;
uses crt;
var
 wybor:char;
 a,b,c,d:integer;
 liczba:array[1..9999] of integer;
 label start,rm,again,again2;
 
 procedure rosnaco;
 begin
 for c:=1 to a do
 for b:=1 to a do
  if <liczba[b]>liczba[b+1]> then
   bagin
   p:=liczba[b];
   liczba[b]:=liczba[b+1];
   liczba[b+1]:=p;
   end;
clrscr;
writeln <'Twoje liczby w kolejnosci rosnacej:'>;

Tyle napisałem i teraz nie wiem jak to dokończyć, jeżeli mogę to proszę o dokończenie tego programu gdyż jest to koniec roku szkolnego. Praca na jutro a mam do przygotowania jeszcze wiele rzeczy na jutro. Polecenie: Napisz program, który poprosi użytkownika o wpisanie 20 liczb z zakresu od 1 do 100. Następnie posortuje te liczby od najmniejszej do największej.

0

Panie kto panu to tak spier...

Zapomniałeś wprowadzić jakieś randomowe liczby do tablicy i pewnie sortujesz pustą tablicę, albo ręcznie to zrobić.

No i wynik wyświetlić reszta chyba jest dobrze, ale nie zapomnij zrobić pranka nauczycielowi jak ci maila podał, zarejestruj go na redtube what ever :)

0

Proszę o pomoc bo ja kompletnie tego nie czaje. Zrobiłem to według internetowych poradników. Tak poza tym tego nie rozumiem ale potrzebuję na jutro.

2

Podany kod jest niekompletny (brakuje końcówki); Poza tym masz nieużywane zmienne i w ogóle niedobre zmienne - label powinieneś od razu skasować i zapomnieć, że istnieje takie coś; Inna sprawa to dziwny typ tablicy - naprawdę potrzebujesz tablicy na 10000 elementów? o.O

Pierwszym kardynalnym błędem jest brak znajomość składni języka i budowy modułów, następnie techniki dawno zapomniane, potem implementacja algorytmu; Zmienne globalne to zły pomysł, w kółko wałkowany;

Tak więc wklej tu cały kod, a powytyka się błędy.

0

Właśnie na tym zakończyłem pracę nad tym bo nie wiem co dalej.
Nic więcej nie mam prócz:

program psc;
uses crt;
var
 wybor:char;
 a,b,c,d:integer;
 liczba:array[1..9999] of integer;
 label start,rm,again,again2;
 
 procedure rosnaco;
 begin
 for c:=1 to a do
 for b:=1 to a do
  if <liczba[b]>liczba[b+1]> then
   bagin
   p:=liczba[b];
   liczba[b]:=liczba[b+1];
   liczba[b+1]:=p;
   end;
clrscr;
writeln <'Twoje liczby w kolejnosci rosnacej:'>;
0

No to w takim razie jest jeszcze gorzej, bo brakuje Ci głównego bloku programu:

program psc;

uses
  {...}

var
  {...}

  procedure Sort();
  begin
    {...}
  end;

begin
  // tego brakuje
end.
0

Jak wprowadzić do tego bloku zakres od 1-100 i żeby tylko 20 liczb pobierało?

0

Jaki zakres i do jakiego bloku?

0

Do tego od Ciebie, zakres liczb możliwych do wpisania i ich ilość. Wczytanie 20 liczb w zakresie od 1-100 i sortowanie.

1

@Piekos18 - zakres wartości dla pojedynczej liczby można określić za pomocą deklaracji specjalnego typu:

type
  TMyNumber = 1 .. 100;

Jednak robiąc to w ten sposób, zakres wartości będzie stały i musi być znany w czasie kompilacji; Jeżeli zakres może określić użytkownik, trzeba pobrać jedną liczbę dla wartości minimalnej oraz drugą, dla wartości maksymalnej; Coś w tym stylu:

var
  intMin, intMax: Integer;
begin
  Write('Range minimum: ');
  ReadLn(intMin);
  Write('Range maximum: ');
  ReadLn(intMax);

{...}

Następnie przy wprowadzaniu liczb, sprawdzać, czy podana liczba zawiera się w zakresie, np. tak:

var
  intNumber: Integer;
begin
  {...}

  Write('Type number: ');
  ReadLn(intNumber);

  if InRange(intNumber, intMin, intMax) then
    {...}

Reszta to pobranie liczby i użycie jej jako maksimum dla pętli For (aby określić ilość wprowadzanych liczb przez użytkownika); Można także wykorzystać inne pętle, ale raczej nie będzie z tego żadnego zysku - wręcz przeciwnie; A tym bardziej, jeśli użyjesz etykiet...

PS: Nadal nie wiem z jakiego środowiska korzystasz; Moje przykłady dotyczą najnowszego FPC;


A skoro już negować **label**ki, to może podam przykład dla języka asmascal™ - raczej nie przypomina to Pascala :D

uses
  Crt, Math;
label
  start, range_min, range_max, type_num, num_valid, finish;
var
  intMin, intMax, intNumber: Integer;
begin
  start:
    ClrScr();
  range_min:
    Write('Type minimum: ');
    ReadLn(intMin);
  range_max:
    Write('Type maximum: ');
    ReadLn(intMax);
    if intMax <= intMin then
    begin
      WriteLn('Value invalid - enter a number bigger than ', intMin);
      goto range_max;
    end;
  type_num:
    Write('Type numer: ');
    ReadLn(intNumber);
    if not InRange(intNumber, intMin, intMax) then
    begin
      WriteLn('Number invalid - enter a number from ', intMin, ' to ', intMax);
      goto type_num;
    end;
  num_valid:
    WriteLn('Great, You entered the valid number - ', intNumber);
  finish:
    WriteLn('Press Enter to exit...');
    ReadLn();
end.

Wygląda cudnie.

1

A skoro już negować **label**ki, to może podam przykład dla języka asmascal™ - raczej nie przypomina to Pascala :D

Te bloki begin/end to antywzorzec przy goto ;-P

uses
  Crt, Math;
label
  start, range_min, range_max, type_num, num_valid, finish;
var
  intMin, intMax, intNumber: Integer;
begin
  start:
    ClrScr();
  range_min:
    Write('Type minimum: ');
    ReadLn(intMin);
  range_max:
    Write('Type maximum: ');
    ReadLn(intMax);
    if intMax <= intMin then goto type_num;
    WriteLn('Value invalid - enter a number bigger than ', intMin);
    goto range_max;
  type_num:
    Write('Type numer: ');
    ReadLn(intNumber);
    if InRange(intNumber, intMin, intMax) then goto num_valid;
    WriteLn('Number invalid - enter a number from ', intMin, ' to ', intMax);
    goto type_num;
  num_valid:
    WriteLn('Great, You enter the valid number - ', intNumber);
  finish:
    WriteLn('Press Enter to exit...');
    ReadLn();
end.
0

Można zrobić też bardziej toporny warunek może i bardziej zrozumiały dla autora tematu, przykładowo :

Program test;
const MAX = 20;
var
number, iterator:integer;
array_n:array[1..MAX] of integer;
begin
 FOR iterator := 1 TO MAX DO
  begin
   while true do
    begin
     Write('Wprowadz licze [',iterator,'] = ');
     ReadLn(number);
     if TU_WPISZ_WARUNEK THEN //Odpowiedni warunek
      break //przerwij petle while
     else
      WriteLn('Podales zla liczbe! Wprowadz jeszcze raz');
     end;
     array_n[iterator] := number;
  end;
  FOR iterator := 1 TO MAX DO
   WriteLn('[',iterator,'] = ', array_n[iterator]);
//Procedura sortująca i wyświetl po sortowaniu
  readln;
end.

Rozumiem, że działamy w dziedzinie liczb naturalnych <1,100>

0

@Nomysz - wystarczy jedna pętla, nie muszą być dwie; Poza tym, podane wcześniej kody mają pomóc pytaczowi - zrozumieć i napisać swój kod, który nie będzie korzystał z etykiet.

1 użytkowników online, w tym zalogowanych: 0, gości: 1