Witam, mam problem: napisałem program w turbo pascalu. Tworzy katalog plyt dvd. Problem jest taki, że nie działa i nie wiem, co może być nie tak(pewnie jest problem z ostatnimi linikami: menu). Proszę o pomoc. To mój program:
Program Katalog_Plyt;
uses Crt;
type
string30=string[30];
string25=string[25];
Plyta=record
Tytul:string[30];
Rezyser:string[25];
Gatunek:string[25];
Licznik:word;
end;
const
MAX_PAMIEC=63000;
Pojemnosc=MAX_PAMIEC div SizeOf(Plyta);
var
Katalog:array[1..Pojemnosc] of Plyta;
LbPoz:integer;
procedure Wprowadz_Dane (var r:Plyta);
begin
with r do
begin
write('Tytul:');
readln(Tytul);
write('Rezyser:');
readln(Rezyser);
write('Gatunek:');
readln(Gatunek);
end;
end;
procedure Wypisz_Dane(r:Plyta);
begin
with r do
begin
write('Tytul:');
writeln(Tytul);
write('Rezyser:');
writeln(Rezyser);
write('Gatunek:');
writeln(Gatunek);
end;
writeln;
end;
procedure Dodaj_Plyte;
begin
Inc(LbPoz);
Write('Nowa pozycja w katalogu:',LbPoz);
Wprowadz_Dane(Katalog[LbPoz]);
Katalog[LbPoz].Licznik:=0;
end;
procedure Usun_Plyte(Numer:integer);
begin
Katalog[Numer]:=Katalog[LbPoz];
Dec(LbPoz);
end;
function Szukaj(Tekst:string; Pozycja:integer):integer;
var
i:integer;
begin
i:=Pozycja;
while (Pos(Tekst, Katalog[i].Tytul)=0) and (i<=LbPoz) do
if i<=LbPoz then
Szukaj:=i
else
Szukaj:=-1;
end;
procedure Sprawdz_Plyty(Tytul:string);
var
i:integer;
begin
write('Podaj tytul szukanej plyty:');
readln(Tytul);
repeat
i:=Szukaj(Tytul,i);
if i<>-1 then
begin
writeln('Pozycja w katalogu nr',i,':');
Wypisz_Dane(Katalog[i]);
Inc(i);
end;
until i=-1;
end;
function Porownaj_Tytul(r1,r2:Plyta):integer;
begin
if r1.Tytul<r2.Tytul then Porownaj_Tytul:=-1
else Porownaj_Tytul:=1;
end;
function Porownaj_Rezyser(r1,r2:Plyta):integer;
begin
if r1.Rezyser<r2.Rezyser then Porownaj_Rezyser:=-1
else Porownaj_Rezyser:=1;
end;
procedure Sortuj(kryterium:integer);
var
i,j:integer;
Czy_Wiekszy:integer;
Pomoc:Plyta;
begin
for i:=1 to LbPoz-1 do
for j:=i to LbPoz do
begin
if Kryterium=1 then Czy_Wiekszy:=Porownaj_Tytul(Katalog[i],Katalog[j])
else Czy_Wiekszy:=Porownaj_Rezyser(Katalog[i],Katalog[j]);
if Czy_Wiekszy=1 then
begin
Pomoc:=Katalog[i];
Katalog[i]:=Katalog[j];
Katalog[j]:=Pomoc;
end;
end;
end;
procedure Wypisz_Katalog;
var
Kryterium:integer;
Wypisz:integer;
begin
write('Sortowanie wedlug tytulow (1)', 'lub nazwisk autorow(2)');
readln(Kryterium);
Sortuj(Kryterium-1);
readln;
end;
function Menu:integer;
var
c:char;
menu:word;
begin
ClrScr;
writeln('Katalog plyt');
writeln;
writeln('Wybierz funkcje:');
writeln('1: Wyszukiwanie pozycji wg tytulu');
writeln('2: Wyswietlenie wszystkich pozycji');
writeln('3: Dodawanie plyty do katalogu');
writeln('0: Koniec pracy');
writeln;
readln(menu);
case menu of
1:Sprawdz_Plyty;
2:Wypisz_Dane;
3:Wprowadz_Dane;
else
readln;
end;
end.
Program Katalog_Plyt;
uses Crt;
type
string30=string[30];
string25=string[25];
Plyta=record
Tytul:string[30];
Rezyser:string[25];
Gatunek:string[25];
Licznik:word;
end;
const
MAX_PAMIEC=63000;
Pojemnosc=MAX_PAMIEC div SizeOf(Plyta);
var
Katalog:array[1..Pojemnosc] of Plyta;
LbPoz:integer;
procedure Wprowadz_Dane (var r:Plyta);
begin
with r do
begin
write('Tytul:');
readln(Tytul);
write('Rezyser:');
readln(Rezyser);
write('Gatunek:');
readln(Gatunek);
end;
end;
procedure Wypisz_Dane(r:Plyta);
begin
with r do
begin
write('Tytul:');
writeln(Tytul);
write('Rezyser:');
writeln(Rezyser);
write('Gatunek:');
writeln(Gatunek);
end;
writeln;
end;
procedure Dodaj_Plyte;
begin
Inc(LbPoz);
Write('Nowa pozycja w katalogu:',LbPoz);
Wprowadz_Dane(Katalog[LbPoz]);
Katalog[LbPoz].Licznik:=0;
end;
procedure Usun_Plyte(Numer:integer);
begin
Katalog[Numer]:=Katalog[LbPoz];
Dec(LbPoz);
end;
function Szukaj(Tekst:string; Pozycja:integer):integer;
var
i:integer;
begin
i:=Pozycja;
while (Pos(Tekst, Katalog[i].Tytul)=0) and (i<=LbPoz) do
if i<=LbPoz then
Szukaj:=i
else
Szukaj:=-1;
end;
procedure Sprawdz_Plyty(Tytul:string);
var
i:integer;
begin
write('Podaj tytul szukanej plyty:');
readln(Tytul);
repeat
i:=Szukaj(Tytul,i);
if i<>-1 then
begin
writeln('Pozycja w katalogu nr',i,':');
Wypisz_Dane(Katalog[i]);
Inc(i);
end;
until i=-1;
end;
function Porownaj_Tytul(r1,r2:Plyta):integer;
begin
if r1.Tytul<r2.Tytul then Porownaj_Tytul:=-1
else Porownaj_Tytul:=1;
end;
function Porownaj_Rezyser(r1,r2:Plyta):integer;
begin
if r1.Rezyser<r2.Rezyser then Porownaj_Rezyser:=-1
else Porownaj_Rezyser:=1;
end;
procedure Sortuj(kryterium:integer);
var
i,j:integer;
Czy_Wiekszy:integer;
Pomoc:Plyta;
begin
for i:=1 to LbPoz-1 do
for j:=i to LbPoz do
begin
if Kryterium=1 then Czy_Wiekszy:=Porownaj_Tytul(Katalog[i],Katalog[j])
else Czy_Wiekszy:=Porownaj_Rezyser(Katalog[i],Katalog[j]);
if Czy_Wiekszy=1 then
begin
Pomoc:=Katalog[i];
Katalog[i]:=Katalog[j];
Katalog[j]:=Pomoc;
end;
end;
end;
procedure Wypisz_Katalog;
var
Kryterium:integer;
Wypisz:integer;
begin
write('Sortowanie wedlug tytulow (1)', 'lub nazwisk autorow(2)');
readln(Kryterium);
Sortuj(Kryterium-1);
readln;
end;
function Menu:integer;
var
c:char;
menu:word;
begin
ClrScr;
writeln('Katalog plyt');
writeln;
writeln('Wybierz funkcje:');
writeln('1: Wyszukiwanie pozycji wg tytulu');
writeln('2: Wyswietlenie wszystkich pozycji');
writeln('3: Dodawanie plyty do katalogu');
writeln('0: Koniec pracy');
writeln;
readln(menu);
case menu of
1:Sprawdz_Plyty;
2:Wypisz_Dane;
3:Wprowadz_Dane;
else
readln;
end;
end.