Jump to content
brollyssj82000

Pascal

Recommended Posts

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?

Link to comment
Share on other sites

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.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}

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.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.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.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.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.nume);

end;

for i:=2 to n do

for j:=1 to m do

clasa.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.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.nume) and (i<=n) do

i:=i+1;

until aux1=clasa.nume;

repeat

writeln('Introduceti materia: ');

readln(aux2);

j:=0;

while (j<=m) and (aux2<>clasa.materii[j].nume) do

j:=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;

begin

repeat

writeln('Dati numele elevului: ');

readln(aux1);

i:=0;

while (aux1<>clasa.nume) and (i<=n) do

i:=i+1;

until aux1=clasa.nume;

repeat

writeln('Introduceti materia: ');

readln(aux2);

j:=0;

while(aux2<>clasa.materii[j].nume) and (j<=m) do

j:=j+1;

until aux2=clasa.materii[j].nume;

k:=1;

while clasa.materii[j].notabs[k]<>' ' do

k:=k+1;

repeat

writeln('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}

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.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.materii[j].notabs[k],' ');

writeln(f);

end;

for i:=1 to n do begin

for j:=1 to m do

writeln(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];

begin

repeat

writeln('Dati numele elevului: ');

readln(aux1);

i:=0;

while (aux1<>clasa.nume) and (i<=n) do

i:=i+1;

until aux1=clasa.nume;

repeat

writeln('Introduceti materia: ');

readln(aux2);

j:=0;

while(aux2<>clasa.materii[j].nume) and (j<=m) do

j:=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 do

if 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) 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?

Link to comment
Share on other sites

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;
begin
clrscr;
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;

begin
assign(a,'elevi.txt');
assign(b,'materii.txt');
assign(c,'detalii.txt');
repeat
meniu;
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
begin
write('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;
readln
end.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...