Tym razem proszę o radę, jak przesortować elementy tablicy malejąco. Ja coś takiego kombinowałem:
program sortuj;
uses crt;
var
A:ARRAY[1..8] of integer;
i,max,pom:integer;
begin
clrscr;
for i:=1 to 8 do A[i]:=i;
for i:=1 to 8 do write(A[i],',');
writeln;
i:=0;
while i<9 do
begin
i:=i+1;
A[i]:=pom;
if A[i]>pom then
begin
pom:=A[i];
A[i]:=A[i-1];
write(pom,',');
end;
end;
readln;
end.
ale jak można było się spodziewać, nie podołałem zadaniu. Pogubiłem się w części zasadniczej, tj. porównywanie i przypisywanie zmiennej tymczasowej.
Dobrym algorytmem na początek nauki jest sortowanie bąbelkowe. Możesz wygooglać sboie opis tego algorytmu. W zależności czy zastosujesz porównanie większy czy mniejszy uzyskasz odpowiedni kierunek sortowania.
Dlaczego używasz
i:=0;
while i<9 do
begin
i:=i+1;
zamiast zwykłego _for_a? Dokładnie przeczytaj co napisałeś
A[i]:=pom;
if A[i]>pom then
i zasatanów się dlaczego jest to bez sensu.
Nauczyłbyś się w końcu robić wcięcia żeby kod był bardziej czytelny.
To wygląda na próbę sortowania bąbelkowego, ale oczywiście nieudaną. Zanim następnym razem napiszesz temat, przeczytaj kod na głos i odpowiedz sobie: “Czy to ma sens?” Masz u siebie na początku pętli:
A[i]:=pom;
Przypisuję aktualnej komórce zmienną pom
if A[i]>pom then
Potem porównuję tę samą komórkę (która ma wartość zmiennej pom) ze zmienną pom, a więc warunek nigdy nie zostanie spełniony, bo porównujesz te same wartości (nieprawda, że a>a)! Czy o to chodziło? Na pewno nie. Spróbuj napisać taki kod:
Powtarzaj
CosJeszczeZmieniono := false
for i = 1 ... MAX-1
Jeśli a[i]
begin
Zamien pozycję [b]i[/b] oraz [b]i+1[/b]
CosJeszczeZmieniono := true
end;
Dopóki (CosJeszczeZmieniono = true)
[/code]
Rolek0 i B.Andy- ja wiem, że to, co napisałem, to brednie. Chciałem zrobić if A[i+1]>pom, ale wyskakiwał błąd 201.I nie miałem pomysłu, co z tym zrobić.
“Nie miałem pomysłu co z tym zrobić” oznaczało to, że wiedziałem, że jest to błąd związany z przepełnieniem rozmiaru tablicy oraz to, że nie miałem pomysłu na jakąś zmianę. Już się zabieram za wasze rady.