[Pascal] Sortowanie nie działa

Witam

 

Mam problem, otóż napisałem program na sortowanie tablicy lecz nie działa on z niewiadomych mi względów. Proszę o pomoc. Z góry dziękuje. 

 

Program skoczkowie;
var sko: array[1..10] of char = (a, b, c, d, e, f, g, h, y, t);
wyn: array[1..10] of integer;
var i, j, k: integer;
 
procedure rezultaty;
begin
Writeln('Wypisz wyniki');
for i:= 1 to 10 do
Readln (wyn[i]);
end;
 
PROCEDURE zamiana;  
   begin
     k :=wyn[i];
     wyn[i] :=wyn[i-1];
     wyn[i-1] :=k;
   end;
Procedure sortowanie;
for i:=1 to 10 do  
 begin
     for j:=10 downto i+1 do 
       begin
           if wyn[i-1]>wyn[i] then zamiana; 
      end;
end;
 
for i:=0 to 10 do
writeln(wyn[i]);
readln;
end.

Patrzyłeś w ogóle na wyniki błędów kompilacji? :slight_smile: Co to są te “char = (a, b,…”? Nie powinieneś ich mieć w ‘’? No i co Ty niby sortujesz, skoro ani nie uruchamiasz nigdzie procedury sortowanie, ani nie dotykasz nigdzie tablicy innej niż wyn, która nie jest zainicjalizowana żadnymi wartościami? :slight_smile: Całość do przepisania na nowo.

Nie wiem czy dobrze zrozumiałem, ale chyba mieliśmy posortować jedna tablice.

 

To są nazwiska skoczków. 

 

Myślałem ze to kod do sortowania

Procedure sortowanie;
for i:=1 to 10 do  
 begin
     for j:=10 downto i+1 do 
       begin
           if wyn[i-1]>wyn[i] then zamiana; 
      end;
end;

A ten kod nie zmusza na wpisanie wartości ?

procedure rezultaty;
begin
Writeln('Wypisz wyniki');
for i:= 1 to 10 do
Readln (wyn[i]);
end;

Żeby sortować, musisz mieć jakieś dane. Tablica wyn nigdy żadnych danych nie otrzymuje, więc nie bardzo wiem co chcesz sortować. Program tym bardziej nie wie.

Nie ważne czy to tablica skoczków, czy czegoś innego - inicjalizujesz ją nie znakami, a identyfikatorami (nazwami zmiennych), które nie istnieją. I nie używasz jej nigdzie w kodzie, więc po co ona tam jest?

Program musi mieć pewną konkretną strukturę. Twój nie ma żadnej: masz 4x begin i 5x end. Procedura zamiana i sortowanie prawdopodobnie działałyby poprawnie, gdyby wszystko inne nie było źle napisane.

Gdybyś przeczytał dokładnie wstęp do programowania w pascalu to wiedziałbyś że program zaczynamy do “begin” kończymy na “end.”. Oczywiście “begin” można pominąć ale dzięki temu zrozumiał byś że w twoim programie uruchamia się tylko fragment:

for i:=0 to 10 do
writeln(wyn[i]);
readln;

Reszta to procedury które możesz wywołać z innej procedury lub bloku głównego “begin…end.” i tylko wtedy będą się wykonywały.

Przeczytaj jakiś kurs programowania dla początkujących.

Przeczytaj co to programowanie proceduralne.

Dziękuję za znalezienie błędów. Postaram sie je poprawić :slight_smile: