Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sortiranje niza u datoteci...kako?

[es] :: Pascal / Delphi / Kylix :: Sortiranje niza u datoteci...kako?

[ Pregleda: 1459 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon Sortiranje niza u datoteci...kako?21.11.2011. u 22:04 - pre 151 meseci
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..
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Sortiranje niza u datoteci...kako?22.11.2011. u 03:01 - pre 151 meseci
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;
 
Odgovor na temu

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon Re: Sortiranje niza u datoteci...kako?22.11.2011. u 13:47 - pre 151 meseci
Nece opet..ne menja nista, probacu da uradim, na neki drugi nacin, da nije mozda greska u tome kako pozivam proceduru?
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Sortiranje niza u datoteci...kako?22.11.2011. u 14:30 - pre 151 meseci
Zato sto sortiraj() pozivas nakon upisa slogova u datoteku. Trebas je pozivati pre pisi_slog() funkcije.
 
Odgovor na temu

Marko Simulak
123456adada

Član broj: 272268
Poruke: 104



+1 Profil

icon Re: Sortiranje niza u datoteci...kako?22.11.2011. u 18:10 - pre 151 meseci
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.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Sortiranje niza u datoteci...kako?

[ Pregleda: 1459 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.