[ Marko Simulak @ 21.11.2011. 22:04 ] @
Pozdrav, imam neki zadatak sastoji se od vise tacaka, stigao sam do jedne, zapelo mi je nosto...naime, taj slog treba da sadrzi ime, prezime, prosek...prvo sam trebao da kreiram datoteku slogova, zatim da ucitam niz u datoteku, nakon toga i jos necega, dobio sam da sortiram niz po proseku, e tu je zapelo, nisata se ne desava, mala pomoc mi treba, pretpostavljam da u proceduri sortiraj nesto ne valja. Evo koda:

Code:
program slogoviVezba1;
uses crt;
type
    ucenik=record
                  ime,prezime:string;
                  prosek:real;
                  opr,neopr,vladanje:integer;
    end;
    FileUcenik=file of ucenik;
    niz=array[1..100] of ucenik;
var
   f:FileUcenik;
   a:niz;
   n,i,sO,sNO:integer;
   osoba:ucenik;
procedure PisiSlog(var osoba:ucenik);
begin
     with osoba do
     begin
          writeln('ime: ',ime);
          writeln('prezime: ',prezime);
          writeln('prosek: ',prosek:6:2);
          writeln('opravdani: ',opr);
          writeln('neopravdani: ',neopr);
          writeln('vladanje: ',vladanje);
          writeln('--------------------');
     end;
end;
{---sortiranje---}
procedure razmeni(var a,b:ucenik);
var
   pom:ucenik;
begin
     a:=pom;
     a:=b;
     b:=pom;
end;
procedure sortiraj(var a:niz; n:integer);
var
   i,j:integer;
begin
     for i:=1 to n-1 do
         for j:=1 to n-i do
             if a[j].prosek>a[j+1].prosek then
                razmeni(a[j],a[j+1]);
end;
{---main---}
begin
     clrscr;
     assign(f,'UcenikVezba.dat');
     reset(f);
     while not eof(f) do
     begin
          i:=i+1;
          read(f,osoba);
          a[i]:=osoba;
     end;
     n:=i;
     for i:=1 to n do
         PisiSlog(a[i]);
     for i:=1 to n do
     begin
          sO:=sO+a[i].opr;
          sNO:=sNO+a[i].neopr;
     end;
     writeln('Ukupan broj opravdanih je: ',sO,', a ukupan broj neopravdanih je: ',sNO);
     sortiraj(a,n);
     close(f);
     repeat until keypressed;
end.


Hvala..
[ reiser @ 22.11.2011. 03:01 ] @
Prati komentare i ispravi:

Code:

{---sortiranje---}
 procedure razmeni(var a,b:ucenik);
 var
    pom:ucenik;
 begin
      a:=pom; // ovde treba pom := a, razmisli malo bolje i skontaces zasto
      a:=b;
      b:=pom;
 end;
 procedure sortiraj(var a:niz; n:integer);
 var
    i,j:integer;
 begin
      for i:=1 to n-1 do
          for j:=1 to n-i do // for j := i to n do, potrazi na guglu "bubble sort algorithm"
              if a[j].prosek>a[j+1].prosek then // if a[i].prosek > a[j].prosek then
                 razmeni(a[j],a[j+1]); // razmeni(a[i], a[j])
 end;
[ Marko Simulak @ 22.11.2011. 13:47 ] @
Nece opet..ne menja nista, probacu da uradim, na neki drugi nacin, da nije mozda greska u tome kako pozivam proceduru?
[ reiser @ 22.11.2011. 14:30 ] @
Zato sto sortiraj() pozivas nakon upisa slogova u datoteku. Trebas je pozivati pre pisi_slog() funkcije.
[ Marko Simulak @ 22.11.2011. 18:10 ] @
Aha, hvala, evo radi i ovako
Code:

program slogoviVezba1;
uses crt;
type
    ucenik=record
                  ime,prezime:string;
                  prosek:real;
                  opr,neopr,vladanje:integer;
    end;
    FileUcenik=file of ucenik;
    niz=array[1..100] of ucenik;
var
   f:FileUcenik;
   a:niz;
   n,i,sO,sNO:integer;
   osoba:ucenik;
procedure PisiSlog(var osoba:ucenik);
begin
     with osoba do
     begin
          writeln('ime: ',ime);
          writeln('prezime: ',prezime);
          writeln('prosek: ',prosek:6:2);
          writeln('opravdani: ',opr);
          writeln('neopravdani: ',neopr);
          writeln('vladanje: ',vladanje);
          writeln('--------------------');
     end;
end;
{---sortiranje---}
procedure razmeni(var a,b:ucenik);
var
   pom:ucenik;
begin
     pom:=a;
     a:=b;
     b:=pom;
end;
procedure sortiraj(var a:niz; n:integer);
var
   i,j:integer;
begin
     for i:=1 to n-1 do                             //bez da diram for:=j..., samo sam zamenio >,<
         for j:=1 to n-1 do                         //radi i ako stavim for j:=i to n do if a[j]>a[i] then razmeni(a[i],a[j]);
             if a[j].prosek<a[j+1].prosek then
                razmeni(a[j],a[j+1]);
end;
{---main---}
begin
     clrscr;
     assign(f,'UcenikVezba.dat');
     reset(f);
     while not eof(f) do
     begin
          i:=i+1;
          read(f,osoba);
          a[i]:=osoba;
     end;
     n:=i;
     for i:=1 to n do
     begin
          sortiraj(a,n);
          PisiSlog(a[i]);
     end;
     for i:=1 to n do
     begin
          sO:=sO+a[i].opr;
          sNO:=sNO+a[i].neopr;
     end;
     writeln('Ukupan broj opravdanih je: ',sO,', a ukupan broj neopravdanih je: ',sNO);
     close(f);
     repeat until keypressed;
end.