Sorting linked lists in Pascal

Posted by user3712174 on Stack Overflow See other posts from Stack Overflow or by user3712174
Published on 2014-06-05T17:06:19Z Indexed on 2014/06/08 3:25 UTC
Read the original article Hit count: 153

Filed under:
|
|
|

I'm doing my final project for Informatics class and I can't get my sorting procedure to work. Have a look at my program, specifically the bolded part (some things are in Croatian. - if you need something translated, let me know):

   type  pokazivac=^slog;
      slog=record
                 prezime_ime:string[30];
                 redni_broj:string[2];
                 fakultet:string[50];
                 bodovi:integer;
                 sljedeci:pokazivac;
     end;
var pocetni, trenutni, prethodni:pokazivac;
    i:integer;

procedure racunaj;
var i,a,c:integer;
    b,d,e,f,g,h,j:real;

begin
        write('Postotak bodova (u decimalnom zapisu) koje ucenik ostvaruje na temelju prosjeka ocjena - ');
        readln(e);
        e:=e*1000/4;
        write('Prosjek ocjena u prvom razredu : ');
        readln(f);
        f:=f/5*e;
        write('Prosjek ocjena u drugom razredu : ');
        readln(g);
        g:=g/5*e;
        write('Prosjek ocjena u trecem razredu : ');
        readln(h);
        h:=h/5*e;
        write('Prosjek ocjena u cetvrtom razredu : ');
        readln(j);
        j:=j/5*e;
        d:=f+g+h+j;
        write('Broj predmeta (ne racunajuci hrvatski jezik, strani jezik i matematiku) koju je ucenik/ca polagao na maturi - ');
        readln(a);
        write('Postotak rijesnosti ispita iz hrvatskog jezika te zatim maksimum bodova koje je ucenik/ca mogao ostvariti - ');
        readln(b);
        readln(c);
        d:=d+b*c;
        write('Postotak rijesnosti ispita iz stranog jezika te zatim maksimum bodova koje je ucenik/ca mogao ostvariti - ');
        readln(b);
        readln(c);
        d:=d+(b*c);
        write('Postotak rijesnosti ispita iz matematike te zatim maksimum bodova koje je ucenik/ca mogao ostvariti - ');
        readln(b);
        readln(c);
        d:=d+(b*c);
        for i:=1 to a do
        begin
             writeln('Postotak rijesnosti dodatnog predmeta te zatim maksimum bodova koje je ucenik/ca mogao ostvariti - ');
             readln(b);
             readln(c);
             d:=d+(b*c);
        end;
        d:=round(d);
        writeln('Vas broj bodova je: ', d:4:2);
        write('Za nastavak pritisnite ENTER..');
        readln;
end;
procedure unos;
begin
     new(trenutni);
     write('Redni broj ucenika - ');readln(trenutni^.redni_broj);
     write('Prezime i ime - ');readln(trenutni^.prezime_ime);
     write('Naziv fakultet - ');readln(trenutni^.fakultet);
     write('Bodovi - ');readln(trenutni^.bodovi);
     trenutni^.sljedeci:=pocetni;
     pocetni:=trenutni;
end;
procedure ispis;
begin
writeln();
writeln('Lista popisanih ucenika:');
writeln();
     trenutni:=pocetni;
     while trenutni<>NIL do
     begin
          with trenutni^do
          begin
          writeln('IME: ',prezime_ime);
          writeln('FAKULTET: ',fakultet);
          writeln('BODOVI: ',bodovi);
          writeln();
          end;
          trenutni:=trenutni^.sljedeci;
     end;
     writeln();
     write('Za nastavak pritisnite ENTER..');
     readln;
end;
procedure brisi;
var s:string;
begin
     trenutni:= pocetni;
     prethodni:=pocetni;
     write('Redni broj ucenika kojeg zelite izbrisati - ');
     readln(s);
     while trenutni<>NIL do
     begin
          if trenutni^.redni_broj=s then
          begin
               prethodni^.sljedeci:=trenutni^.sljedeci;
               dispose(trenutni);
               break;
          end;
          trenutni:=trenutni^.sljedeci;
    end;
end;
procedure izmjeni;
var s:string;
begin
     trenutni:=pocetni;
     write('Redni broj ucenika cije podatke zelite izmijeniti - ');
     readln(s);
     while trenutni<> NIL do
     begin
          if trenutni^.redni_broj=s then
          begin
             write(trenutni^.prezime_ime, ' - '); readln(trenutni^.prezime_ime);
             write(trenutni^.fakultet, ' - '); readln(trenutni^.fakultet);
             write(trenutni^.bodovi, ' - '); readln(trenutni^.bodovi);
             break;
          end;
          trenutni:=trenutni^.sljedeci;
     end;
end;
**procedure sortiraj;
var t1,t2,t:pokazivac;
begin
     t1:=pocetni;
     while t1 <> NIL do
     begin
          t2:=t1^.sljedeci;
          while t2<>NIL do
          if t2^.bodovi<t1^.bodovi then
             begin
                  new(t);
                  t^.redni_broj:=t1^.redni_broj;
                  t^.prezime_ime:=t1^.prezime_ime;
                  t^.fakultet:=t1^.fakultet;
                  t^.bodovi:=t1^.bodovi;
                  t1^.redni_broj:=t2^.redni_broj;
                  t1^.prezime_ime:=t2^.prezime_ime;
                  t1^.fakultet:=t2^.fakultet;
                  t1^.bodovi:=t2^.bodovi;
                  t2^.redni_broj:=t^.redni_broj;
                  t2^.prezime_ime:=t^.prezime_ime;
                  t2^.fakultet:=t^.fakultet;
                  t2^.bodovi:=t^.bodovi;
                  dispose(t);
             end;
             t2:=t2^.sljedeci;
     end;
     t1:=t1^.sljedeci;
write('Za nastavak pritisnite ENTER..');
readln;
end;**
begin
  pocetni:=NIL;
  trenutni:=NIL;
  writeln('******************************************');
  writeln('**********DOBRODOSLI U FAX-O-MAT**********');
  writeln('******************************************');
  repeat
        writeln('1 - Racunaj broj bodova');
        writeln('2 - Dodaj ucenika');
        writeln('3 - Brisi ucenika');
        writeln('4 - Ispis liste');
        writeln('5 - Izmjeni podatke');
        writeln('6 - Sortiraj listu prema broju bodova');
        writeln('0 - Kraj');
        readln(i);
        case i of
             1:racunaj;
             2:unos;
             3:brisi;
             4:ispis;
             5:izmjeni;
             6:sortiraj;
        end;
  until i=0;
end.  

Either it crashes with a fatal error, or when I press the number 6, nothing happens. The pointer keeps blinking and I can't enter any more numbers.

© Stack Overflow or respective owner

Related posts about sorting

Related posts about linked-list