Ajutor Pascal, Ajutor Pascal |
Bine ati venit ca musafir! ( Logare | Inregistrare )
Ajutor Pascal, Ajutor Pascal |
13 Apr 2008, 01:10 PM
Mesaj
#1
|
|
Musteriu Grup: Musterii Mesaje: 1 Inscris: 13 April 08 Forumist Nr.: 11.490 |
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? |
|
|
15 Apr 2008, 09:44 PM
Mesaj
#2
|
|
Domnitor Grup: Membri Mesaje: 4.405 Inscris: 16 May 04 Din: Bucuresti, the belly of heck Forumist Nr.: 3.508 |
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++... -------------------- |
|
|
15 Apr 2008, 10:24 PM
Mesaj
#3
|
|
Cronicar Grup: Admin Mesaje: 5.082 Inscris: 26 December 05 Din: Bucuresti Forumist Nr.: 7.531 |
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... -------------------- pantha rhei
Universul Fractal The universe appears to be fractal, cyclic and self-regenerating. Implied is that it is eternal and infinite. |
|
|
Promo Contextual |
15 Apr 2008, 10:24 PM
Mesaj
#
|
ContextuALL |
|
|
|
16 Apr 2008, 04:18 PM
Mesaj
#4
|
|
Domnitor Grup: Membri Mesaje: 3.203 Inscris: 6 April 04 Din: On the Rhine Forumist Nr.: 2.942 |
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. -------------------- Black holes are where God divided by zero.
|
|
|
Versiune Text-Only | Data este acum: 27 September 2024 - 04:28 PM |