Witam, mam do napisania program pt. "Loty"
-Plik wejściowy zawiera dane: numer lotu, numer rezerwacji, numer miejsca, imię i nazwisko.
-Pliki wynikowe (po jednym dla każdego lotu) mają zawierać: numer miejsca, numer rezerwacji,
imię i nazwisko pasażera (posortowane według numerów miejsc.
Utknąłem i nie wiem czemu program nie działa. Prosze o wskazówki :)
Oto treść:
program loty;
uses crt, Sysutils;
{******************************************************************************}
type
PPasazer= ^TPasazer;
PLinia= ^TLinia;
TLinia=record
Next: PLinia;
Linia: String;
Pasazer: PPasazer;
end;
TPasazer=record
Next: PPasazer;
Miejsce: Integer;
Dane: string;
end;
{******************************************************************************}
procedure Wstaw_pasazera(var Pasazer: PPasazer; WskDoPasazer: PPasazer);
var
tmpp:PPasazer;
begin
tmpp:=WskDoPasazer; {wskaznik pomocniczy pokazuje na pierwszego pasazera w liscie danej Linii samolotowej}
while (tmpp^.Miejsce< Pasazer^.Miejsce)and(tmpp^.Next<>NIL)do tmpp:=tmpp^.Next; {porównuje numery miejsc w samolocie i sortuje}
Pasazer^.Next:=tmpp^.Next;
tmpp^.Next:=Pasazer;
end;
{******************************************************************************}
function Pasazer(Nazwa: String; Miejsce: Integer):PPasazer;
var
tmpp:PPasazer;
begin
new(tmpp);
tmpp^.Dane:=Nazwa;
tmpp^.Miejsce:=Miejsce;
tmpp^.Next:=NIL;
Pasazer:=tmpp;
end;
{******************************************************************************}
procedure Dodaj_linie(var Head: PLinia; Nazwa_linii: String; Nowy_pasazer: PPasazer);
var
Nowa_Linia, tmp: PLinia;
begin
tmp:=Head;
if Head = NIL then {jezeli w strukturze nie ma jeszcze zadnych linii}
begin
new(Nowa_Linia);
Nowa_Linia^.Linia:=Nazwa_linii;
Nowa_Linia^.Next:=NIL;
Head:=Nowa_Linia;
tmp:=Nowa_linia;
Nowa_Linia^.Pasazer:=Nowy_pasazer;
end else begin
while (Nazwa_linii<>tmp^.Linia)and(tmp^.Next<>NIL) do tmp:= tmp^.Next; {sprawdzamy czy linia juz istnieje w naszej strukturze}
if (Nazwa_linii<>tmp^.Linia) then {linia nie isnieje, laduje na koncu struktury}
begin
new(Nowa_Linia);
Nowa_Linia^.Linia:=Nazwa_linii;
Nowa_Linia^.Pasazer:=Nowy_Pasazer;
tmp^.Next:=Nowa_Linia;
end else begin
Wstaw_pasazera(Nowy_pasazer, tmp^.Pasazer); {sytuacja, gdy dana linia juz istnieje w strukturze i musimy pasazera wstawić w dobrej kolejnosci}
end;
end;
end;
{******************************************************************************}
procedure WczytajPlik(nazwa_pliku: string; var Head: PLinia);
var
Plik: text;
Linijka, Nazwa_linii, Nazwa: String;
Nowy_pasazer:PPasazer;
Miejsce: Integer;
begin
if FileExists(nazwa_pliku) then
begin
Assign(Plik, nazwa_pliku);
Reset(Plik);
while not eof(Plik) do
begin
ReadLn(Plik, Linijka);
Nazwa_linii:=Copy(Linijka,0,pos(' ',Linijka)); {wrzuc fragmenty stringa do konkretnych}
Delete(Linijka,1,pos(' ',Linijka)); {zmiennych, potem usuwaj }
Val((Copy(Linijka,0,pos(' ',Linijka)-1)),miejsce); {pamietaj, ze to integer}
Delete(Linijka,1,pos(' ',Linijka)); {zmien go ze stringa !}
nazwa:=Copy(Linijka,0,pos(' ',Linijka)-1);
Delete(Linijka,1,pos(' ',Linijka));
nazwa:=nazwa + ' '+ Linijka;
Delete(Linijka,1,pos(' ',Linijka));
Nowy_pasazer:=Pasazer(Nazwa, Miejsce);
Dodaj_linie(Head, Nazwa_linii, Nowy_pasazer);
end;
Close(Plik);
end else
WriteLn('Plik "',nazwa_pliku,'" nie istnieje!');
end;
{******************************************************************************}
procedure Zakonczenie_dzialania(var Head: PLinia);
var
tmpp: PPasazer;
tmp: PLinia;
P: Text;
begin
tmp:=Head;
repeat
Assign(P, tmp^.Linia); {Zapis pasazerow do pliku tekstowego o nazwie tmp^.Linia}
Rewrite(P);
tmpp:=tmp^.Pasazer;
repeat
WriteLn(P,tmpp^.Miejsce:10,tmpp^.Dane);
tmpp:=tmpp^.Next;
until(tmpp^.Next=NIL) ;
tmp:=tmp^.Next;
Close(P);
until (tmp^.Next=NIL);
end;
{******************************************************************************}
procedure Wyczysc_pasazer(var wsk:PPasazer);
begin
if(wsk^.Next<>NIL) then Wyczysc_pasazer(wsk^.Next);
dispose(wsk);
end;
procedure Wyczysc(var Head:PLinia);
var tmp:PLinia;
begin
tmp:=Head;
if (tmp^.Next<>NIL) then
begin
Wyczysc(tmp^.Next);
Wyczysc_pasazer(tmp^.Pasazer);
end;
dispose(tmp);
end;
{******************************************************************************}
var
Head: PLinia;
Opcja:byte;
begin
Head:=NIL;
WczytajPlik('text.txt', Head);
Zakonczenie_dzialania(Head);
Wyczysc(Head);
readln();
end.
dodanie znacznika <code class="delphi">- fp