Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 2.021 pregleda

Najnovija ↓

Sortiranje niza u datoteci...kako? 21.11.2011. u 23:04 · pre 181 mesec #1
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.. :D
Re: Sortiranje niza u datoteci...kako? 22.11.2011. u 04:01 · pre 181 mesec #2
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;
Re: Sortiranje niza u datoteci...kako? 22.11.2011. u 19:10 · pre 181 mesec #5
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.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme