Kod:
program pesme;
uses crt;
type
pokazivac=^izvodjac;
izvodjac=record
bodovi:integer;
naziv:string[80];
pesma:string[30];
redB:integer;
sledeci:pokazivac;
end;
{Ovako znam da uradim
izvodjac=record
naziv:string;
pesma:string;
bodovi:integer;
end;
lista=record
redbr:integer;
sledeci:pokazivac;
end;
a pokazivac bi presako u ^lista}
var{Globalne promenjive}
Redb:integer; {Na pocetku pitam koliko pesama ima, radi izlaza
i radi odvojenog unsa imena , naziva pesme,da bih odvojio proces od glasanja}
Prvi:pokazivac;
{***************pocetak-----------------------------------------------------}
Procedure ispis(prvi:pokazivac); {Ispisuje listu}
var
brojac:byte;
begin
brojac:=0;
while (prvi <> nil) do begin
writeln(prvi^.naziv:10,' | ',prvi^.pesma,':',prvi^.bodovi);{Ispisuje }
prvi:=prvi^.sledeci; {Linujem na sledeci}
{Pa nastavljam dalje}
inc(brojac); {Zastita zbog duzine ekrana}
if brojac=35 then begin;brojac:=0; end;
end;
end;
Procedure Menu;
var {Mora malo da se preradi}
opcija:char;
begin {smesna}
writeln;writeln;writeln;
writeln('.---+-----------+-----------------------.');
writeln('| | opcije: | |');
writeln('| 1 | ispis |');
writeln('| 2 | Glasj |');
writeln('| 3 | Promeni naziv pesme |');
writeln('| 4 | Snimi rezultat u datoteku |');
writeln('| | |');
writeln('| 5 | --> IZLAZ |');
writeln('+---'' |');
writeln('| |');
writeln('`---------------------------------------''');
Repeat
opcija:=readkey;
if not(opcija in ['1'..'5']) then continue else clrscr;
case opcija of
'1':sortl; {Sotiranje}
'4':if (prvi<>nil) then begin
ispis(prvi);
writeln;
writeln ('pritisni bilo koji taster za kraj');
readkey;
clrscr;
end
else writeln('Lista je prazna');
end;
Menu;{Rekurzijica}
until opcija='5';
end; {Menu}
Procedure isprazni (var temp1:pokazivac);
{Procedura sluzi da isprazni listu, daje joj se samo pozicija odakle pocinjem da
praznim listu, u pitanju su jednostruke liste}
var
temp2:pokazivac;{ lokalna promenjive cisto zbog promene}
BEGIN
writeln;
while(temp1<>nil) do
begin {Dok ne dodje na kraj}
temp2:=temp1^.sledeci; {Menjam,da bi posle zamenio}
dispose(temp1); {Praznim}
temp1:=temp2; {Sa sledecom nastavljam}
end;
temp1:=nil;{Pozicija}
end;
Procedure linkovanje(var curr:pokazivac;var nw:pokazivac);{Dodaje u listu}
BEGIN
nw^.sledeci:=curr;
curr:=nw; {Linkovanje jednog na drugi}
END;
Procedure redbroj(var redbroj:integer);
begin
writeln ('Ovaj program je namenjen za glasanje na muzickom festivalu');
writeln;
WRITELN;
WRITELN ('Sada unesite koliko ce biti takmicara');
repeat
{$I-}
readln (redbroj);
if (ioresult<>0) or (redbroj<2) or (redbroj>20) writeln (perr);
until (ioresult=0) and (redbroj>1) and (redbroj<21);{$i+};
end;
Procedure sortl; {Sortirane}
var
nw,temp:Pokazivac;
Procedure citajd(var nw:Pokazivac;autor,pesma:string); {Sluzi za glasanje, da se u slog ubaci bodovi}
begin
nw^.sledeci:=nil;
writeln ('Molimo vas ocenite datu pesmu ocenom od 1 d0 10');
writeln(autor:14,':',pesma);
readln(nw^.bodovi);{Ovo treba da se pobojsa u kasnijoj reviziji
tako sto nece menajti vrednost vec sabirati}
end;
Begin
if (prvi<>nil) then isprazni(prvi); {Oslobodi memoriju}}
new(prvi);
nw:=nil;
{Ovde treba da se postovi nesto za uslov while ili repeat}
new(nw);
ispis(prvi);{Treba da ostampam stanje na tabeli pre glasanja}
citajd(nw);
IF (prvi^.bodovi > nw^.bodovi) THEN {Ako je veci od prvog ubaci ga iza prvog}
linkovanje(prvi,nw)
ELSE
BEGIN
temp:=prvi;
while (temp^.sledeci <> NIL) AND (temp^.sledeci^.bodovi < nw^.bodovi) do temp:=temp^.sledeci;
{A ako nije nastavi sekvencijalno}
dodajl(temp^.sledeci,nw); END;
end;
temp:=nil;
end;
END;
BEGIN {------------- MAIN PROGRAM ------------------------------------------}
TextMode(c80+Font8x8);
TextColor(4);TextBackground(7);
{Ovde kasnije sredi nadogradnja
za sada nisam podesio menije ali je to lamerska stvar,
treba prvo da ide nesto kao broj prijavljenih ucesnika,
pa onda da se ubaci njihov naziv i naziv pesme,
pa onda da startuje meni, koji ce imati opcije tipa glasanje}
clrscr;
writeln; writeln;
prvi:=nil;
Menu;
END.{main
Ja sam samo dovde uspeo sam da dodjem.