|
[ 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.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|