Skocz do zawartości

stos oparty na liście jednokierunkowej sortujący wyrazy alfabetycznie


oneseven

Polecane posty

Witam, chciałbym zwrócić się o pomoc do użytkowników tego forum. Mam do napisania program, który będzie oparty na liście rekordów. Program po podaniu danego wyrazu przez użytkownika ma wstawić go do listy alfabetycznie. Mam jednak lekki problem z porównaniem zawartości kolejnych rekordów, program który napisałem działa tylko dla dwóch pierwszych wyrazów, potem samoistnie się wyłącza a delphi nie pokazuje żadnego błędu. Jeśli ktoś mógłby udzielić jakichś rad, byłbym bardzo wdzięczny. Oto kod, który dotychczas napisałem (funkcja Sprawdz porównuje po kolei wszystkie elementy stringa jakim jest przekazany do niej wyraz i wywołuje się rekurencyjnie):

program pgrzast;
{$APPTYPE CONSOLE}
type
 _wsk = ^wpis;
 wpis = record
slowo: string;
dalej: _wsk;
end;
function sprawdz(s1, s2:string):boolean;
var
 a:integer;
begin
 if ord(s1[1]) < ord(s2[1]) then result:= true
 else if ord(s1[1]) < ord(s2[1]) then result :=false
 else if ord(s1[1]) = ord(s2[1]) then
result:=sprawdz(copy(s1,2,length(s1)),copy(s2,2,length(s2)))
end;
procedure podstaw(pocz:_wsk; var e,tmp: _wsk);
begin
tmp:=pocz;
 	while pocz <> nil do
   	begin
     	if Sprawdz(e^.slowo,pocz^.slowo) then tmp:=tmp^.dalej;
     	pocz:=pocz^.dalej;
   	end;
 	e^.dalej:=tmp^.dalej;
 	tmp^.dalej:=e;
end;
procedure Dodaj(var pocz: _wsk);
var
 e,tmp: _wsk;
begin
 new(e);
 writeln('Podaj slowo do wpisania:');
 readln(e^.slowo);
 if pocz = nil then
begin
 	e^.dalej:=pocz;
 	pocz:=e;
end
 else
begin
 	tmp:=nil;
 	podstaw(pocz,e,tmp);
end;
end;//Dodaj
procedure PokazListe(Pocz: _wsk);
begin
while Pocz<>nil do
     	begin
     	write(Pocz^.slowo,^i);
     	Pocz:=Pocz^.dalej;
end;
end;

//GLOWNY
var
pocz: _wsk;
slowo1,slowo2:string;
znak:char;
begin
Pocz:=nil;
repeat
 	writeln('Lista jednokierunkowa');
 	writeln('1 - pokaz cala Liste');
 	writeln('2 - dodaj element do Listy');
 	writeln('q - zakoncz program');
 	readln(znak);
 	case znak of
  		'1': PokazListe(Pocz);
  		'2': Dodaj(Pocz);
  		'q': writeln('Do zobaczenia...');
  		else
      		write('Wybrales inny klawisz, nacisnij ENTER aby wrocic');
 	end;
 	readln;
until znak='q';
end.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...