witam,
nie mogę znaleźć błędu w kodzie, albo mi tablicy nie sortuje albo sortuje tylko tego nie wyświetla, nie wiem gdzie może być błąd, proszę więc o pomoc, nie jestem doświadczony w programowaniu więc błąd może być banalny.
z góry dzięki
program SortowanieFlagami; {autor: mb}
{$APPTYPE CONSOLE}
uses
SysUtils,
Math;
var
a:array of integer;
f,t:integer;
procedure generuj01 (var a:array of integer);
var
i:integer;
begin
randomize;
for i:=0 to high(a) do
a[i]:=random(2);
end;
procedure generuj012 (var a:array of integer);
var
i:integer;
begin
randomize;
for i:=0 to high(a) do
a[i]:=random(3);
end;
procedure wyswietl (var a:array of integer);
var
i:integer;
begin
for i:=0 to high(a) do
write(a[i],' ');
writeln;
end;
procedure flagapolska(a:array of integer);
var
k0,p1,x:integer;
begin
k0:=-1;
p1:=high(a)+1;
while k0
begin
repeat k0:=k0+1 until (a[k0]=1) or (k0=high(a));
repeat p1:=p1-1 until (a[p1]=0) or (p1=0);
if k0
begin
x:=a[k0];
a[k0]:=a[p1];
a[p1]:=x;
end;
end;
end;
procedure flagafrancuska(a:array of integer);
var
k0,k1,p2,x1,x2:integer;
begin
k0:=-1;
k1:=0;
p2:=high(a)+1;
while k1
begin
if a[k1]=0 then
begin
inc(k0);
x1:=a[k0];
a[k0]:=a[k1];
a[k1]:=x1;
inc(k1);
end
else
if a[k1]=1 then inc(k1)
else
begin
dec(p2);
x2:=a[k1];
a[k1]:=a[p2];
a[p2]:=x2;
end;
end;
end;
begin
Writeln('Program sortujacy flagami');
Writeln('Wybierz 1 dla sortowania FLAGA POLSKA');
Writeln('Wybierz 2 dla sortowania FLAGA FRANCUSKA');
Readln(f);
writeln;
case f of
1:begin
writeln('Wybrales sortowanie FLAGA POLSKA');
writeln('Podaj dlugosc tablicy');
readln(t);
setlength(a,t);
generuj01(a);
writeln;
writeln('Wylosowano nastepujaca tablice do posortowania');
wyswietl(a);
flagapolska(a);
writeln;
writeln('Oto posortowana tablica:');
wyswietl(a);
writeln;
end;
2:begin
writeln('Wybrales sortowanie FLAGA FRANCUSKA');
writeln('Podaj dlugosc tablicy');
readln(t);
setlength(a,t);
generuj012(a);
writeln;
writeln('Wylosowano nastepujaca tablice do posortowania');
wyswietl(a);
flagafrancuska(a);
writeln;
writeln('Oto posortowana tablica:');
wyswietl(a);
writeln;
end;
else writeln('Zly znak wprowadzony z klawiatury! Wybierz 1 lub 2.');
end;
writeln('Dziekuje za skorzystanie z programu');
writeln('Nacisnij ENTER, aby zakonczyc...');
readln;
end.