Procedura Top 10

0

Witam!
Piszę bazę danych z użyciem stosów i wskaźników. Jest to baza danych z filmami. Baza jest już ukończona, lecz chciałbym dodać opcję wyświetlania Top 10 filmów wg ocen lecz kompletnie nie wiem jak się do tego zabrać
Programiści - pomóżcie!


program baza;
uses crt;
type
       wdane=^dane;
       dane=record
               tytul:string[30];
               rezyser:string[40];
               ocena:real;
               gatunek:string[15];
               cenadvd:real;
               wsk:wdane;
               end;
       plik=file of dane;
    
var
       filmy:wdane;
       p:plik;
       procedure dodaj(var wierzcholek:wdane);
               var
                       poprzedni:wdane;
                       pom:string;
               begin
                       repeat
                       clrscr;
                       writeln('Wprowadź tytuł filmu... (pozostaw puste by zakończyć dopisywanie) '); readln(pom);
                       if pom <> '' then
                       begin
                               poprzedni:=wierzcholek;
                               new(wierzcholek);
                               with wierzcholek^ do begin
                                       tytul:=pom;
                                         write('Wprowadź imię i nazwisko reżysera... ');
                                          readln(rezyser);
                                           write('Wprowadź ocenę filmu... (w skali 0-10) ');
                                            readln(ocena);
                                             write('Wprowadź gatunek filmu... ');
                                              readln(gatunek);
                                               write('Wprowadź cenę DVD filmu...');
                                                readln(cenadvd);

                                                   wsk:=poprzedni;
                                                    clrscr;
                               end;
                       end;
               until pom='';
       end;

       procedure wyswietl(wierzcholek:wdane);
       begin
               clrscr;
               while wierzcholek<>NIL do
               begin
                       with wierzcholek^ do begin
                        writeln('Tytuł filmu: ',tytul);
                         Writeln('Reżyser: ',rezyser);
                          Writeln('Ocena: ',ocena:0:2);
                           Writeln('Gatunek: ',gatunek);
                            writeln('Cena DVD: ',cenadvd:0:2);
                               Writeln;
                                wierzcholek:=wsk;
                       end;
               end;
               readln;
               end;

       Procedure szukaj(wierzcholek:wdane);
       var
               szuk:string;
       begin
               Writeln('Podaj tytuł filmu, którego szukasz...');
               readln(szuk);
               while wierzcholek<>NIl do
               begin
                       with wierzcholek^ do
                       If szuk=tytul then begin
                        writeln('Tytuł filmu: ',tytul);
                         Writeln('Reżyser: ',rezyser);
                          Writeln('Ocena: ',ocena:0:2);
                           Writeln('Gatunek: ',gatunek);
                            writeln('Cena DVD: ',cenadvd:0:2);
                             writeln;
                       end;
                       wierzcholek:=wierzcholek^.wsk;
                       end;
                       readln;
       end;

       Procedure adresnaz(wierzcholek:wdane);
       var
               szukane,szukanee:string;
       begin
       Writeln('Podaj tytuł filmu, którego szukasz...');
       readln(szukane);
       Writeln('Podaj reżysera, którego szukasz...');
       readln(szukanee);
       while wierzcholek<>NIl do
               begin
                       with wierzcholek^ do begin
                       If (szukane=tytul) and (szukanee=rezyser) then begin
                        writeln('Tytuł filmu: ',tytul);
                         Writeln('Reżyser: ',rezyser);
                          Writeln('Ocena: ',ocena:0:2);
                           Writeln('Gatunek: ',gatunek);
                            Writeln('Cena DVD: ',cenadvd:0:2);
                             writeln;
                       end;
                       end;
                       wierzcholek:=wierzcholek^.wsk;
                       end;
                       readln;

                       end;


       Procedure dodawanie(var wierzcholek:Wdane);
       var
                       poprzedni:wdane;
                       pom:string;
               begin
                       repeat
                       clrscr;
                       writeln('Wprowadź tytuł filmu... (naciśnij ENTER by zakończyć) ');
                       readln(pom);
                       if pom <> '' then
                       begin
                               poprzedni:=wierzcholek;
                               new(wierzcholek);
                               with wierzcholek^ do begin
                                       tytul:=pom;
                                         write('Wprowadź imię i nazwisko reżysera... ');
                                           readln(rezyser);
                                            write('Wprowadź ocenę... ');
                                             readln(ocena);
                                               write('Wprowadź gatunek...');
                                                 readln(gatunek);
                                                  write('Wprowadź cenę DVD...');
                                                   readln(cenadvd);
                                                    wsk:=poprzedni;
                                                     clrscr;
                               end;
                       end;
               until pom='';
       end;

       Procedure zapisywanie(var wierzcholek:Wdane; var p:Plik);
       var
               pom:wdane;
       begin
               assign(p,'Stos');
               rewrite(p);
               while wierzcholek<> NIL do
               begin
                       Write(p,wierzcholek^);
                       pom:=wierzcholek^.wsk;
                       dispose(wierzcholek);
                       wierzcholek:=pom;
                       end;
                       Close(p);
                       end;

       Procedure odczytzpliku(var wierzcholek:Wdane;var p:Plik);
       var
               pom:dane;
               poprzedni:wdane;
       begin
               assign(p,'Stos');
               reset(p);
               While not eof(p) do begin
               poprzedni:=wierzcholek;
               read(p,pom);
               new(wierzcholek);
               wierzcholek^.tytul:=pom.tytul;
               wierzcholek^.rezyser:=pom.rezyser;
               wierzcholek^.ocena:=pom.ocena;
               wierzcholek^.gatunek:=pom.gatunek;
               wierzcholek^.cenadvd:=pom.cenadvd;
               wierzcholek^.wsk:=poprzedni;
               end;
               close(p);
       end;

       procedure menu(var p:plik;filmy:wdane);
       var
               caser:byte;
       begin
               repeat
               clrscr;
               writeln('-------------BAZA-----DANYCH-------------');
               writeln('1 - Tworzenie nowego stosu' );
               writeln('2 - Wyswietlanie zawartosci stosu' );
               writeln('3 - Dopisywanie danych do stosu');
               writeln('4 - Szukanie wg tytułu');
               writeln('5 - Szukanie wg tytułu i reżysera');
               writeln('6 - Odczyt danych z pliku');
               writeln('7 - Zapis danych do pliku');
               writeln('8 - Koniec pracy z programem');

               readln(caser);
               case caser of
               1:dodaj(filmy);
               2:wyswietl(filmy);
               3:dodawanie(filmy);
               4:szukaj(filmy);
               5:adresnaz(filmy);
               6:odczytzpliku(filmy,p);
               7:zapisywanie(filmy,p);
               end;
               until caser=8;
       end;

   
       begin
               clrscr;
               filmy:=Nil;

               writeln('Witam w bazie danych! (Wcisnij ENTER by kontynuowac...');
               readln;
               menu(p,filmy);

       end.

Proszę o napisanie procedury top 10 :D

0

Próbowałem sortowania bąbelkowego.
Wykombinowałem i pokazywały mi się oceny, lecz nie wiem jak zrobić żeby pokazywał się tytuł filmu i obok tego ocena.
Źle sprecyzowałem problem xd

0

Próbowałem sortowania bąbelkowego.
Wykombinowałem i pokazywały mi się oceny, lecz nie wiem jak zrobić żeby pokazywał się tytuł filmu i obok tego ocena.
Źle sprecyzowałem problem xd

0

a co za problem użyć pos()?

0

a co byś powiedział, jak byś utworzył tablicę danych z Twojego rekordu. Tablice dynamiczną.

lista : Array of dane;

Potem aby wyświetlić poszczególne elementy możesz odwołać się indeksem do tablicy.

0

Jakoś sobie poradziłem.
Umieszczam rozwiązanie jeśliby się komuś kiedyś miało przydać.

 procedure top10(wierzcholek:wdane);
       const
                n=10;
       type
                rec=record
                oc:integer;
                tyt:string;
                end;
                toptab=array[1..n] of rec;
       var
                t:toptab;
                i,tmp,k,p,s:integer;
                tmp2:string;

       begin
                for i:=1 to n do
                begin
                t[i].oc:=0;
                t[i].tyt:='';
                end;
        i:=0;
                 while wierzcholek<>NIL do
               begin
                       with wierzcholek^ do begin
                       i:=i+1;
                        t[i].tyt:=tytul;
                        t[i].oc:=ocena;

                               Writeln;
                                wierzcholek:=wsk;
                       end;
               end;
               k:=n-1;
               repeat
                p:=0;
                        for i:=1 to k do
                         if t[i].oc>t[i+1].oc then begin
                                p:=p+1;
                                tmp:=t[i].oc;
                                tmp2:=t[i].tyt;
                                t[i].oc:=t[i+1].oc;
                                t[i].tyt:=t[i+1].tyt;
                                t[i+1].oc:=tmp;
                                t[i+1].tyt:=tmp2;
                         end;
                          k:=k-1;
                         until (p=0) or (k=0) ;


                s:=10;
                for i:=1 to n do
                begin


                        write(i,'. ',t[s].tyt,' ',t[s].oc);
                        writeln;
                        s:=s-1;
                end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1