brollyssj82000 Posted April 13, 2008 Report Posted April 13, 2008 Buna. Doresc sa fac un program in pascal (un catalog). Acesta este codul: rogram catalog_atestat; uses crt; type note=record nota:array[1..10]of string[8]; abs:array[1..10] of string[5]; end; var catalog:array[1..30,1..20] of note; elevi:array[1..30]of string[25]; materii:array[1..20] of string[15]; e,f,g,h,z:text; procedure aranjare; {aranjeaza elevii in ordine alfabetica} var aux:string[25]; i,j:byte; begin for i:=1 to n-1 do for j:=2 to n do if elevi>elevi[j] then begin aux:=elevi; elevi:=elevi[j]; elevi[j]:=aux; end; end; procedure citireelevi; {creeaza fisierul text cu numele elevilor} begin writeln('Dati nr. de elevi:'); readln(n); assign(f,'c:\bp\bin\atestat\elevi.txt'); rewrite(f); for i:=1 to n do begin writeln('Dati numele elevului ',i); readln(elevi); end; aranjareelevi; for i:=1 to n do writeln(f,elevi); clrscr; end; procedure citirematerii; {creeaza fisierul text cu materii} begin writeln('Dati nr. de materii:'); readln(m); assign(g,'c:\bp\bin\atestat\materii.txt'); rewrite(g); for i:=1 to m do begin writeln('Dati materia:'); readln(materii); writeln(g,materii); end; clrscr; end; procedure initcatalog; var i,j,k:byte; begin for i:=1 to n do for j:=1 to m do for k:=1 to 10 do begin catalog[i,j].nota[k]:=' '; catalog[i,j].abs[k]:=' '; end; end; procedure crearecatalog; begin citireelevi; citirematerii; initcatalog; end; procedure salvare; begin assign(h,'c:\bp\bin\atestat\note.txt'); assign(e,'c:\bp\bin\atestat\absente.txt'); rewrite(e); rewrite(h); for i:=1 to n do for j:=1 to m do begin for k:=1 to 10 begin write(h,catalog[i,j].nota[k],' '); write(e,catalog[i,j].abs[k],' '); end; writeln(h); writeln(e); end; 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? Quote
brollyssj82000 Posted April 13, 2008 Author Report Posted April 13, 2008 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;beginfor i:=1 to n-1 dofor j:=2 to n doif clasa.nume>clasa[j].nume then begin aux:=clasa.nume; clasa.nume:=clasa[j].nume; clasa[j].nume:=aux; end;end;procedure citire; {px citeste datele dintr-un catalog deja existent}beginassign(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 beginreadln(h,clasa.nume);i:=i+1;n:=n+1;end;while not eof(g) do beginreadln(g,clasa[1].materii[j].nume);j:=j+1;m:=m+1;end;for i:=2 to n dofor j:=1 to m doclasa.materii[j].nume:=clasa[1].materii[j].nume;for i:=2 to n dofor j:=1 to m dobegink:=1;while (not eoln(f))and (not eof(f)) dobeginread(f,clasa.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}beginwrite('Dati nr. de elevi din cls. ');readln(n);for i:=1 to n dobeginwrite('Dati numele elevului ',i,': ');readln(clasa.nume);end;aranjare(clasa);write('Dati nr. de materii al unei clase:');readln(m);for i:=1 to m dobeginwrite('Introduceti materia ',i,': ');readln(clasa[1].materii.nume);end;for i:=2 to n dofor j:=1 to m doclasa.materii[j]:=clasa[1].materii[j];for i:=1 to n dofor j:=1 to m dofor k:=1 to 20 doclasa.materii[j].notabs[k]:=' ';end;procedure notateza;var i,j,k:byte; aux1,aux2:string;beginrepeatwriteln('Dati numele elevului: ');readln(aux1);i:=0;while (aux1<>clasa.nume) and (i<=n) doi:=i+1;until aux1=clasa.nume;repeatwriteln('Introduceti materia: ');readln(aux2);j:=0;while (j<=m) and (aux2<>clasa.materii[j].nume) doj:=j+1;until aux2=clasa.materii[j].nume;writeln('Introduceti teza:');readln(clasa.materii[j].teza);end;procedure update; {Actualizeaza note sau absente in catalog}var i,j,k:byte; aux1,aux2:string;beginrepeatwriteln('Dati numele elevului: ');readln(aux1);i:=0;while (aux1<>clasa.nume) and (i<=n) doi:=i+1;until aux1=clasa.nume;repeatwriteln('Introduceti materia: ');readln(aux2);j:=0;while(aux2<>clasa.materii[j].nume) and (j<=m) doj:=j+1;until aux2=clasa.materii[j].nume;k:=1;while clasa.materii[j].notabs[k]<>' ' dok:=k+1;repeatwriteln('introduceti nota sau "da" pentru absenta elevului ',clasa.nume,' la materia ',clasa.materii[j].nume,':');readln(clasa.materii[j].notabs[k]);until(clasa.materii[j].notabs[k]='1') or (clasa.materii[j].notabs[k]='2') or (clasa.materii[j].notabs[k]='3') or (clasa.materii[j].notabs[k]='4') or (clasa.materii[j].notabs[k]='5') or (clasa.materii[j].notabs[k]='6') or (clasa.materii[j].notabs[k]='7') or (clasa.materii[j].notabs[k]='8') or (clasa.materii[j].notabs[k]='9') or (clasa.materii[j].notabs[k]='10') or (clasa.materii[j].notabs[k]='da');end;procedure salvare; {Salveaza in fisier text}beginassign(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 dowriteln(h,clasa.nume);for j:=1 to m dowriteln(g,clasa[1].materii[j].nume);for i:=1 to n dofor j:=1 to m do beginfor k:=1 to 20 dowrite(f,clasa.materii[j].notabs[k],' ');writeln(f);end;for i:=1 to n do beginfor j:=1 to m dowriteln(d,clasa.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];beginrepeatwriteln('Dati numele elevului: ');readln(aux1);i:=0;while (aux1<>clasa.nume) and (i<=n) doi:=i+1;until aux1=clasa.nume;repeatwriteln('Introduceti materia: ');readln(aux2);j:=0;while(aux2<>clasa.materii[j].nume) and (j<=m) doj:=j+1;until aux2=clasa.materii[j].nume;writeln('Elevul selectat este: ',clasa.nume);writeln('Materia selectata este: ',clasa.materii[j].nume);writeln('Notele acestui elev sunt: ');a:=0;for k:=1 to 20 doif clasa.materii[j].notabs[k]='da' then a:=a+1 else write( clasa.materii[j].notabs[k],' ');writeln;writeln('Nota din teza este: ',clasa.materii[j].teza);writeln;writeln(clasa.nume,' are ',a,' absente la ',clasa.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) dobegin 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? Quote
oXyGeN Posted April 15, 2008 Report Posted April 15, 2008 zi daca mai stai pe forum pana maine ca atunci ti-l fac k-lumea de la 0 cu mai multe optiuni... Quote
brollyssj82000 Posted April 15, 2008 Author Report Posted April 15, 2008 In fiecare zi sunt pe forum. Quote
oXyGeN Posted April 16, 2008 Report Posted April 16, 2008 Done !Nu tre` sa creezi niciun fisier... se fac toate automat pe parcurs ce adaugi elevi/materii ... poti citi un catalog deja facut daca e facut dupa schema : nume elev:nota:materie:nota(ex: Pop Ion:nota:matematica:10)nume elev:teza:materie:nota(ex: Pop Ion:teza:matematica:10)nume elev:absenta:materie:absenta(ex: Pop Ion:absenta:matematica:25.01.2008)Sper sa nu ai probleme in utilizarea programului. Bafta !Poftim si sursa: uses crt;var a,b,c,d:text; nr,nr2,elevi,materii,IOR,i,j,nota:byte; elev,materie,s,absenta,detalii,c2:string; ok,ok2,ok3:boolean;procedure meniu;beginclrscr;writeln('1. Adaugare elevi in catalog.');writeln('2. Adaugare materii in catalog.');writeln('3. Adaugare nota materie elev.');writeln('4. Adaugare nota teza elev.');writeln('5. Adaugare absenta elev.');writeln('6. Afisare date elev.');writeln('7. Iesire din program.');writeln;write('Introduceti numarul optiunii dorite: ');readln(nr);end;beginassign(a,'elevi.txt');assign(b,'materii.txt');assign(c,'detalii.txt');repeatmeniu;if nr=1 then begin {$I-} reset(a); {$I+} IOR:=IOResult; if IOR=2 then rewrite(a) else append(a); clrscr; write('Introduceti nr. de elevi pe care doriti sa-i adaugati: '); readln(elevi); for i:=1 to elevi do begin ok:=false; repeat write('Introduceti numele elevului ',i,': ');readln(elev); for j:=1 to length(elev) do if elev[j]=' ' then ok:=true; if ok=false then begin writeln; writeln('Ati introdus un nume incorect.'); writeln('Numele elevului trebuie sa fie compus din doua parti : Nume si Prenume.'); writeln('exemplu: Pop Ion'); writeln('Apasati tasta ENTER pentru a introduce un nume corect de elev.'); readkey; writeln; end; until ok=true; writeln(a,elev); end; writeln; writeln('Actualizarea catalogului s-a efectuat cu succes.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; close(a); end else if nr=2 then begin clrscr; {$I-} reset(; {$I+} IOR:=IOResult; if IOR=2 then rewrite( else append(; write('Introduceti numarul de materii pe care doriti sa le adaugati: '); readln(materii); for i:=1 to materii do begin write('Introduceti materia ',i,': '); readln(materie); writeln(b,materie); end; writeln; writeln('Actualizarea catalogului s-a efectuat cu succes.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; close(; end else if nr=3 then begin clrscr; {$I-} reset(a); {$I+} IOR:=IOResult; if IOR=2 then begin writeln('Catalogul nu a fost creat inca.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end else begin write('Introduceti numele elevului la care doriti sa adaugati o nota: '); readln(elev); reset(a);reset(; {$I-} reset(c); {$I+} IOR:=IOResult; if IOR=2 then rewrite(c) else append(c); ok:=false; while not eof(a) do begin readln(a,s); if s=elev then ok:=true; end; if ok then begin write('Introduceti materia la care vreti sa adaugati o nota elevului ',elev,': '); readln(materie); ok2:=false; while not eof( do begin readln(b,s); if s=materie then ok2:=true; end; if ok2 then begin write('Introduceti nota pentru elevul ',elev,' la materia ',materie,': '); readln(nota); ok3:=false; for i:=1 to 10 do if nota=i then ok3:=true; if ok3 then begin {$I-} reset(c); {$I+} IOR:=IOResult; if IOR=2 then rewrite(c) else append(c); writeln(c,elev,':nota:',materie,':',nota); writeln; writeln('Actualizarea catalogului s-a efectuat cu succes.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end else begin writeln('Nota incorecta'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end end else begin writeln('materie inexistenta'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end; end else begin writeln('Elev inexistent.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end; close(a); close(; close(c); end; end else if nr=4 then begin begin clrscr; write('Introduceti numele elevului la care doriti sa adaugati nota la teza: '); readln(elev); reset(a); reset(; {$I-} reset(c); {$I+} IOR:=IOResult; if IOR=2 then rewrite(c) else append(c); ok:=false; while not eof(a) do begin readln(a,s); if s=elev then ok:=true; end; if ok then begin write('Introduceti materia de teza la care vreti sa adaugati o nota elevului ',elev,': '); readln(materie); ok2:=false; while not eof( do begin readln(b,s); if s=materie then ok2:=true; end; if ok2 then begin write('Introduceti nota de teza pentru elevul ',elev,' la materia ',materie,': '); readln(nota); ok3:=false; for i:=1 to 10 do if nota=i then ok3:=true; if ok3 then begin {$I-} reset(c); {$I+} IOR:=IOResult; if IOR=2 then rewrite(c) else append(c); writeln(c,elev,':teza:',materie,':',nota); writeln; writeln('Actualizarea catalogului s-a efectuat cu succes.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end else begin writeln('Nota incorecta'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end end else begin writeln('Materie inexistenta'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end; end else begin writeln('Elev inexistent.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end; close(a); close(; close(c); end end else if nr=5 then begin clrscr; write('Introduceti numele elevului la care doriti sa adaugati o absenta: '); readln(elev); reset(a); reset(; append(c); ok:=false; while not eof(a) do begin readln(a,s); if s=elev then ok:=true; end; if ok then begin write('Introduceti materia la care vreti sa adaugati o absenta elevului ',elev,':'); readln(materie); ok2:=false; while not eof( do begin readln(b,s); if s=materie then ok2:=true; end; if ok2 then beginwrite('Introduceti data absentei pentru elevul ',elev,' la materia ',materie,'(format:zz.ll.aaaa ; ex:25.01.2008): '); readln(absenta); ok3:=true; if ok3 then begin {$I-} reset(c); {$I+} IOR:=IOResult; if IOR=2 then rewrite(c) else append(c); writeln(c,elev,':absenta:',materie,':',absenta); writeln; writeln('Actualizarea catalogului s-a efectuat cu succes.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end else begin writeln('Absenta incorecta.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end end else begin writeln('Materie inexistenta.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end; end else begin writeln('Elev inexistent.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end; close(a); close(; close(c); end else if nr=6 then begin clrscr; {$I-} reset(a); {$I+} IOR:=IOResult; if IOR=2 then begin writeln('Catalogul nu a fost creat inca.'); writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end else repeat clrscr; reset(a); reset(; reset(c); writeln('1.Afisare note materii elevi.'); writeln('2.Afisare note teze elevi.'); writeln('3.Afisare absente elevi.'); writeln('4.Revenire meniul principal.'); writeln; write('Introduceti numarul optiunii dorite: ');readln(nr2); writeln; if nr2=1 then begin write('Introduceti numele elevului la care doriti sa vizualizati notele: '); readln(elev); ok:=false; while not eof(a) do begin readln(a,s); if s=elev then ok:=true; end; if ok then begin write('Introduceti materia la care vreti sa vizualizati notele elevului ',elev,': '); readln(materie); ok2:=false; while not eof( do begin readln(b,s); if s=materie then ok2:=true; end; if ok2 then begin writeln('Elevul ',elev,' are la materia ',materie,' notele:'); while not eof(c)do begin readln(c,detalii); c2:=copy(detalii,1,length(elev)); if c2=elev then begin c2:=copy(detalii,length(elev)+2,4); if c2='nota' then begin c2:=copy(detalii,length(elev)+7,length(materie)); if c2=materie then begin c2:=copy(detalii,length(elev)+8+length(materie),2); writeln(c2); end; end; end; end; writeln; writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end; if ok2=false then begin writeln('materie inexistenta'); writeln('Apasati tasta ENTER pentru a reveni la meniu'); readkey; end; end; if ok=false then begin writeln('Elev inexistent.'); writeln('Apasati tasta ENTER pentru a reveni la meniu'); readkey; end; end; if nr2=2 then begin write('Introduceti numele elevului la care doriti sa vizualizati notele: '); readln(elev); ok:=false; while not eof(a) do begin readln(a,s); if s=elev then ok:=true; end; if ok then begin write('Introduceti materia la care vreti sa vizualizati notele de teza ale elevului ',elev,': '); readln(materie); ok2:=false; while not eof( do begin readln(b,s); if s=materie then ok2:=true; end; if ok2 then begin writeln('Elevul ',elev,' are la materia ',materie,' nota de teza:'); while not eof(c)do begin readln(c,detalii); c2:=copy(detalii,1,length(elev)); if c2=elev then begin c2:=copy(detalii,length(elev)+2,4); if c2='teza' then begin c2:=copy(detalii,length(elev)+7,length(materie)); if c2=materie then begin c2:=copy(detalii,length(elev)+8+length(materie),2); writeln(c2); end; end; end; end; writeln; writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end; if ok2=false then begin writeln('materie inexistenta'); writeln('Apasati tasta ENTER pentru a reveni la meniu'); readkey; end; end; if ok=false then begin writeln('Elev inexistent.'); writeln('Apasati tasta ENTER pentru a reveni la meniu'); readkey; end; end; if nr2=3 then begin write('Introduceti numele elevului la care doriti sa vizualizati notele: '); readln(elev); ok:=false; while not eof(a) do begin readln(a,s); if s=elev then ok:=true; end; if ok then begin write('Introduceti materia la care vreti sa vizualizati absentele elevului ',elev,': '); readln(materie); ok2:=false; while not eof( do begin readln(b,s); if s=materie then ok2:=true; end; if ok2 then begin writeln('Elevul ',elev,' are la materia ',materie,' absentele:'); while not eof(c)do begin readln(c,detalii); c2:=copy(detalii,1,length(elev)); if c2=elev then begin c2:=copy(detalii,length(elev)+2,7); if c2='absenta' then begin c2:=copy(detalii,length(elev)+10,length(materie)); if c2=materie then begin c2:=copy(detalii,length(elev)+11+length(materie),10); writeln(c2); end; end; end; end; writeln; writeln('Apasati tasta ENTER pentru a reveni la meniu.'); readkey; end; if ok2=false then begin writeln('materie inexistenta'); writeln('Apasati tasta ENTER pentru a reveni la meniu'); readkey; end; end; if ok=false then begin writeln('Elev inexistent.'); writeln('Apasati tasta ENTER pentru a reveni la meniu'); readkey; end; end; close(a); close(; close(c); until nr2=4; end else if nr=7 then exit;until nr=7;readlnend. Quote
brollyssj82000 Posted April 17, 2008 Author Report Posted April 17, 2008 Multumesc pentru program. Daca voi intimpina probleme te voi anunta. Multumesc mult. Quote
brollyssj82000 Posted April 30, 2008 Author Report Posted April 30, 2008 oXyGeN nu ai si un ID de mess? vreau sa te mai intreb cateva chestii legate de program daca nu te superi. ID-ul meu este brollyssj82000 Quote
brollyssj82000 Posted May 5, 2008 Author Report Posted May 5, 2008 Nu mai trebuie. Am rezolvat problema Quote