Ajutor - Cauta - Forumisti - Calendar
Versiune completa:Ajutor Pascal
HanuAncutei.com - ARTA de a conversa > Odaia IT > Software, Hardware si Programare
Yusuke
Buna. Doresc sa fac un program in pascal (un catalog).
Acesta este codul:
program catalog;
uses crt;
type materie=record
nume:string[15];
notabs:array[1..20]of string[2];
teza:1..10;
media_sem:array[1..2] of 1..10;
media_anuala:real;
end;
elevi=record
nume:string[30];
materii:array[1..20] of materie;
media_generala:real;
end;
vector=array[1..30] of elevi;
var a,m,n,i,k,j,l:byte;
clasa:vector;
s,aux:string;
d,f,g,h:text;
nteza:array[1..20] of string[15];
procedure aranjare (var clasa:vector); {aranjeaza numele elevilor in ordine alfabetica}
var i,j:byte;
begin
for i:=1 to n-1 do
for j:=2 to n do
if clasa[i].nume>clasa[j].nume then begin
aux:=clasa[i].nume;
clasa[i].nume:=clasa[j].nume;
clasa[j].nume:=aux;
end;
end;
procedure citire; {px citeste datele dintr-un catalog deja existent}
begin
assign(f,'c:/bp/bin/atestat/note.txt');
assign(g,'c:/bp/bin/atestat/materii.txt');
assign(h,'c:/bp/bin/atestat/elevi.txt');
reset(f);
reset(g);
reset(h);
i:=1; j:=1; n:=1; m:=1;
while not eof(h) do begin
readln(h,clasa[i].nume);
i:=i+1;
n:=n+1;
end;
while not eof(g) do begin
readln(g,clasa[1].materii[j].nume);
j:=j+1;
m:=m+1;
end;
for i:=2 to n do
for j:=1 to m do
clasa[i].materii[j].nume:=clasa[1].materii[j].nume;
for i:=2 to n do
for j:=1 to m do
begin
k:=1;
while (not eoln(f))and (not eof(f)) do
begin
read(f,clasa[i].materii[j].notabs[k]);
k:=k+1;
end;
readln(h);
end;
close(f);
close(g);
close(h);
end;
procedure crearecat; {Initializeaza vectorii cu valori si citeste elevii si materiile}
begin
write('Dati nr. de elevi din cls. ');
readln(n);
for i:=1 to n do
begin
write('Dati numele elevului ',i,': ');
readln(clasa[i].nume);
end;
aranjare(clasa);
write('Dati nr. de materii al unei clase:');
readln(m);
for i:=1 to m do
begin
write('Introduceti materia ',i,': ');
readln(clasa[1].materii[i].nume);
end;
for i:=2 to n do
for j:=1 to m do
clasa[i].materii[j]:=clasa[1].materii[j];
for i:=1 to n do
for j:=1 to m do
for k:=1 to 20 do
clasa[i].materii[j].notabs[k]:=' ';
end;
procedure notateza;
var i,j,k:byte;
aux1,aux2:string;
begin
repeat
writeln('Dati numele elevului: ');
readln(aux1);
i:=0;
while (aux1<>clasa[i].nume) and (i<=n) do
i:=i+1;
until aux1=clasa[i].nume;
repeat
writeln('Introduceti materia: ');
readln(aux2);
j:=0;
while (j<=m) and (aux2<>clasa[i].materii[j].nume) do
j:=j+1;
until aux2=clasa[i].materii[j].nume;
writeln('Introduceti teza:');
readln(clasa[i].materii[j].teza);
end;
procedure update; {Actualizeaza note sau absente in catalog}
var i,j,k:byte;
aux1,aux2:string;
begin
repeat
writeln('Dati numele elevului: ');
readln(aux1);
i:=0;
while (aux1<>clasa[i].nume) and (i<=n) do
i:=i+1;
until aux1=clasa[i].nume;
repeat
writeln('Introduceti materia: ');
readln(aux2);
j:=0;
while(aux2<>clasa[i].materii[j].nume) and (j<=m) do
j:=j+1;
until aux2=clasa[i].materii[j].nume;
k:=1;
while clasa[i].materii[j].notabs[k]<>' ' do
k:=k+1;
repeat
writeln('introduceti nota sau "da" pentru absenta elevului ',clasa[i].nume,' la materia ',clasa[i].materii[j].nume,':');
readln(clasa[i].materii[j].notabs[k]);
until(clasa[i].materii[j].notabs[k]='1') or (clasa[i].materii[j].notabs[k]='2') or (clasa[i].materii[j].notabs[k]='3')
or (clasa[i].materii[j].notabs[k]='4') or (clasa[i].materii[j].notabs[k]='5') or (clasa[i].materii[j].notabs[k]='6')
or (clasa[i].materii[j].notabs[k]='7') or (clasa[i].materii[j].notabs[k]='8') or (clasa[i].materii[j].notabs[k]='9')
or (clasa[i].materii[j].notabs[k]='10') or (clasa[i].materii[j].notabs[k]='da');
end;
procedure salvare; {Salveaza in fisier text}
begin
assign(d,'c:/bp/bin/atestat/teza.txt');
assign(f,'c:/bp/bin/atestat/note.txt');
assign(g,'c:/bp/bin/atestat/materii.txt');
assign(h,'c:/bp/bin/atestat/elevi.txt');
rewrite(d);
rewrite(g);
rewrite(h);
rewrite(f);
for i:=1 to n do
writeln(h,clasa[i].nume);
for j:=1 to m do
writeln(g,clasa[1].materii[j].nume);
for i:=1 to n do
for j:=1 to m do begin
for k:=1 to 20 do
write(f,clasa[i].materii[j].notabs[k],' ');
writeln(f);
end;
for i:=1 to n do begin
for j:=1 to m do
writeln(d,clasa[i].materii[j].teza,' ');
writeln(d);
end;
close(d);
close(f);
close(g);
close(h);
end;
procedure afisare; {afiseaza pe ecran notele si absentele unui elev la o anumita materie}
var aux1:string[30];
aux2:string[15];
begin
repeat
writeln('Dati numele elevului: ');
readln(aux1);
i:=0;
while (aux1<>clasa[i].nume) and (i<=n) do
i:=i+1;
until aux1=clasa[i].nume;
repeat
writeln('Introduceti materia: ');
readln(aux2);
j:=0;
while(aux2<>clasa[i].materii[j].nume) and (j<=m) do
j:=j+1;
until aux2=clasa[i].materii[j].nume;
writeln('Elevul selectat este: ',clasa[i].nume);
writeln('Materia selectata este: ',clasa[i].materii[j].nume);
writeln('Notele acestui elev sunt: ');
a:=0;
for k:=1 to 20 do
if clasa[i].materii[j].notabs[k]='da' then a:=a+1
else write( clasa[i].materii[j].notabs[k],' ');
writeln;
writeln('Nota din teza este: ',clasa[i].materii[j].teza);
writeln;
writeln(clasa[i].nume,' are ',a,' absente la ',clasa[i].materii[j].nume);
end;
begin {Program principal}
citire;
clrscr;
writeln('Introduceti 1 pentru a crea un catalog');
writeln('Introduceti 2 pentru a da note unui elev');
writeln('Introduceti 3 pentru a da nota de la teza');
writeln('Introduceti 4 pentru a vizualiza notele unui elev la o anumita materie');
writeln('Introduceti 5 pentru a iesi din program');
readln(a);
while (a>0) and(a<5) do
begin
case a of
1:crearecat;
2:update;
3:notateza;
4:afisare;
end;
salvare;
writeln('Introduceti 1 pentru a crea un catalog');
writeln('Introduceti 2 pentru a da note unui elev');
writeln('Introduceti 3 pentru a da nota de la teza');
writeln('Introduceti 4 pentru a vizualiza notele unui elev la o anumita materie');
writeln('Introduceti 5 pentru a iesi din program');
readln(a);
salvare;
clrscr;
end;
writeln;
clrscr;
end.

Il rulez, creez catalogul cu elevi, materii si note/absente dar nu-mi functioneaza procedura de citire , care ar trebui sa citeasca datele dintr-un catalog creat anterior, ca sa pot adauga date in plus.
Ma poate ajuta cineva cu ceva indicatii?


Blakut
QUOTE
procedure citire; {px citeste datele dintr-un catalog deja existent}
begin
assign(f,'c:/bp/bin/atestat/note.txt');
assign(g,'c:/bp/bin/atestat/materii.txt');
assign(h,'c:/bp/bin/atestat/elevi.txt');
reset(f);
reset(g);
reset(h);
i:=1; j:=1; n:=1; m:=1;
while not eof(h) do begin
readln(h,clasa[i].nume);
i:=i+1;
n:=n+1;
end;
while not eof(g) do begin
readln(g,clasa[1].materii[j].nume);
j:=j+1;
m:=m+1;
end;
for i:=2 to n do
for j:=1 to m do
clasa[i].materii[j].nume:=clasa[1].materii[j].nume;
for i:=2 to n do
for j:=1 to m do
begin
k:=1;
while (not eoln(f))and (not eof(f)) do
begin
read(f,clasa[i].materii[j].notabs[k]);
k:=k+1;
end;
readln(h);
end;
close(f);
close(g);
close(h);
end;


Ce fac functiile reset(f)..g etc?

Daca ai un catalog cu trei elevi, unul cu nume cu a, altul cu b si altul cu d si vrei sa bagi in catalog unul cu c, ulterior, cum procedeaza programul?
De ce folosesti 3 fisiere in loc de unul?

Sfatul meu, inainte de toate e sa folosesti C++...
Erwin
han.gif Yusuke!

Blakut:
QUOTE
Sfatul meu, inainte de toate e sa folosesti C++...


bănui că la liceu īncă se mai īnvaţă Pascal şi mi se pare logic, pentru că ăsta e şi scopul iniţial al Pascal-ului, să poţi scrie un program cāt mai aproape de descrierea algoritmului īn pseudocod... dacă nu e o temă de liceu, alte limbaje (de baze de date de pildă) rezolvă problema mult mai elegant...
dead-cat
scrie elevii, materia, notele etc. intr-o tabela (de mysql de ex).
media o calculezi din sql iar ordonarea samd o faci infinit mai simplu.
Aceasta este o versiune "Text-Only" a continutului acestui forum. Pentru a vizualiza versiunea completa, cu mai multe informatii, formatari si imagini,click aici.
Invision Power Board © 2001-2024 Invision Power Services, Inc.