Creeaza.com - informatii profesionale despre


Cunostinta va deschide lumea intelepciunii - Referate profesionale unice
Acasa » scoala » informatica
informatica - Limbajul Pascal

informatica - Limbajul Pascal


 

CUPRINS



  1. Limbajul Pascal
  2. Situatie olimpici
  3. Explicatia programului
  4. Codul programului
  5. Bibliografie

2. Situatie olimpici

Ne propunem sa scriem un program ce va tine evidenta notelor luate de olimpici. Programul va contine campurile "Nume si prenume", "Materie", "Medie" si "Admis". La campul "Admis" vor fi admisi primii "n" elevi de la fiecare materie, "n" fiind dat de utilizator. In acest camp se va completa automat cu "admis" sau "respins". Se va tine cont de conditia ca la o nota sub 8, elevul nu se considera admis.

3. Exlicatia programului

Programul a fost scris in limbajul de programare Pascal si a fost compilat de Free Pascal compiler. Acesta contine sase optiuni pentru gestionarea bazei de date si inca o optiune pentru iesirea din program.

Prima optiune ce raspunde la apasarea tastei 1, se ocupa cu adaugarea datelor intr-un fisier. Va fi cerut numele fisierului si in caz ca se constata neexistenta sa, veti avea la alegere intre crearea fisierului si reintroducerea numelui fisierului. Va urma apoi introducerea datelor in fisier.

Dupa efectuarea fiecarei operatii veti fi intrebat daca doriti una noua. Daca doriti atunci apasati tasta ENTER sau oricare caracter. In caz contrar, introduceti combinatia "nu".

A doua optiune afiseaza datele din memoria interna. Inainte de a alege aceasta optiune efectuati o operatie de adaugare in fisier sau de extragere din fisier.

Optiunea 3 extrage datele dintr-un fisier cu numele dat de utilizator.

A patra optiune afla primii n elevi de la fiecare materie.

A cincea optiune salveaza datele prelucrate anterior de program in fisierul de unde provin.

Optiunea 6 aranjeaza in ordine alfabetica numele elevilor.

Optiunea 0 opreste executia programului. Apasati apoi tasta ENTER pentru a iesi din program.

Codul programului

program situatie_olimpici;

type OLIMPICI=record

nume:string;

materie:string;

medie:real;

admis:string;

end;

vector=array[1..100] of OLIMPICI;

var v:vector;

i,n,optiune:integer; alege,nume_fisier:string;

b_alege:boolean;

procedure adaugare_text;

var f:text; nr,loc:integer; str:string; nr2:real;

begin

writeln;

if length(nume_fisier)=0 then

begin

write('Dati numele fisierului: ');

readln(nume_fisier);

end

else

begin

write('Doriti sa adaugati in alt fisier?('da' daca doriti) ');

readln(alege);

if alege='da' then

begin

write('Dati numele fisierului: ');

readln(nume_fisier);

end;

end;

assign(f,nume_fisier);

reset(f);

repeat

if ioresult<>0 then

begin

writeln('Fisierul ',nume_fisier,' nu exista!');

writeln('1: Creare fisier');

writeln('2: Reintroducere nume fisier');

writeln('Dati optiunea: ');

readln(optiune);

case optiune of

1: begin

rewrite(f);

reset(f);

end;

2: begin

write('Dati numele fisierului: ');

readln(nume_fisier);

assign(f,nume_fisier);

reset(f)

end

else

writeln('Optiune incorecta!');

end;

end;

until ioresult=0;

write('Dati numarul de elevi ce doriti sa adaugati: ');

readln(nr);

append(f);

for i:=1 to nr do

with v[i] do

begin

writeln;

write('nume si prenume: '); readln(nume);

writeln(f,nume);

write('materia: '); readln(materie);

writeln(f,materie);

write('medie: '); readln(medie);

writeln(f,medie:2:2);

admis:='necunoscut';

writeln(f,admis);

end;

reset(f);


i:=0;

while not eof(f) do

begin

inc(i);

with v[i] do

begin

readln(f,nume);

readln(f,materie);

readln(f,str); val(str,nr2,loc); medie:=nr2;

readln(f,admis);

end;

end;

n:=i;

close(f);

writeln;

writeln('Datele au fost adaugate in fisierul ',nume_fisier);

end;

procedure afisare;

begin

writeln;

writeln(' Nr | Nume si prenume | Materie | Medie | Admis ');

writeln('-------- ----- ------ -------- ----- ------ --');

for i:=1 to n do

with v[i] do

writeln(i:3,' |',nume:20,' |',materie:16,' |',medie:8:2,' |',admis:13);

end;

procedure extragere_text;

var f:text; loc:integer; str:string; nr:real;

begin

if length(nume_fisier)=0 then

begin

write('Dati numele fisierului: ');

readln(nume_fisier);

end

else

begin

write('Doriti sa extrageti din alt fisier?('da' daca doriti) ');

readln(alege);

if alege='da' then

begin

write('Dati numele fisierului: ');

readln(nume_fisier);

end;

end;

assign(f,nume_fisier);

reset(f);

repeat

if ioresult<>0 then

begin

write('Fisierul nu exista; reintroduceti: ');

readln(nume_fisier);

assign(f,nume_fisier);

reset(f);

end;

until ioresult=0;

i:=0;

while not eof(f) do

begin

inc(i);

with v[i] do

begin

readln(f,nume);

readln(f,materie);

readln(f,str); val(str,nr,loc); medie:=nr;

readln(f,admis);

end;

end;

n:=i;

close(f);

afisare;

writeln;

writeln('Datele au extrase din fisierul ',nume_fisier);

end;

procedure suprascriere;

var f:text;

begin

writeln;

if length(nume_fisier)=0 then

begin

write('Nu este memorat numele fisierului; reintroduceti numele: ');

readln(nume_fisier);

assign(f,nume_fisier);

rewrite(f);

end;

assign(f,nume_fisier);

rewrite(f);

for i:=1 to n do

with v[i] do

begin

writeln(f,nume);

writeln(f,materie);

writeln(f,medie:2:2);

writeln(f,admis);

end;

close(f);

writeln;

writeln('Datele au fost suprascrise!');

end;

procedure ordonare;

var aux:OLIMPICI; j:integer;

begin

writeln;

for i:=1 to n do

for j:=1 to n-1 do

if v[j].nume > v[j+1].nume then

begin

aux:=v[j];

v[j]:=v[j+1];

v[j+1]:=aux;

end;

afisare;

end;

procedure aflare_olimpici;

var nr,j,k,m:integer; aux:OLIMPICI;

b:array[1..100] of integer;

begin

writeln;

write('Dati nr maxim de elevi admisi: ');

readln(nr);

for i:=1 to n do

for j:=1 to n-1 do

if v[j].materie > v[j+1].materie then

begin

aux:= v[j];

v[j]:=v[j+1];

v[j+1]:=aux;

end;

i:=1; j:=1; b[j]:=0;

while i<=n do

begin

if v[i].materie=v[i+1].materie then

inc(i)

else

begin

inc(j);

b[j]:=i;

inc(i);

end;

end;

m:=j;

for j:=1 to m-1 do

begin

for i:=b[j]+1 to b[j+1] do

for k:=b[j]+1 to b[j+1]-1 do

if v[k].medie < v[k+1].medie then

begin

aux:= v[k];

v[k]:=v[k+1];

v[k+1]:=aux;

end;

if nr < (b[j+1]-b[j]) then

begin

for i:=(b[j]+1) to b[j]+nr do

with v[i] do

begin

if medie >8 then

admis:='admis'

else

admis:='respins';

end;

for i:=b[j]+nr+1 to b[j+1] do

v[i].admis:='respins';

end

else

begin

for i:=b[j] to b[j+1] do

if v[i].medie >= 8 then

v[i].admis:='admis'

else

v[i].admis:='respins';

end;

for i:=b[j]+1 to b[j+1] do

for k:=b[j]+1 to b[j+1]-1 do

if v[k].nume > v[k+1].nume then

begin

aux:=v[k];

v[k]:=v[k+1];

v[k+1]:=aux;

end;

end;

afisare;

end;

begin

writeln('SITUATIE OLIMPICI':45);

repeat

b_alege:=false;

writeln;

writeln('1: Adaugare date intr-un fisier sau creare fisier si introducere date');

writeln('2: Afisare date');

writeln('3: Extragere date dintr-un fisier');

writeln('4: Evidentierea primilor 'n' olimpici admisi la etapa urmatoare');

writeln('5: Salvarea datelor din memoria programului peste datele din fisierul deschis');

writeln('6: Aranjare in ordine alfabetica');

writeln('0: Iesire din program');

writeln;

write('Dati optiunea: ');

readln(optiune);

case optiune of

1: adaugare_text;

2: afisare;

3: extragere_text;

4: aflare_olimpici;

5: suprascriere;

6: ordonare;

0: break

else

writeln('Optiune incorecta!');

end;

writeln;

write('Doriti sa efectuati o alta operatie?('nu' daca nu doriti) ');

readln(alege);

if alege='nu' then

b_alege:=true;

until b_alege;

writeln;

writeln('Ati ales sa iesiti din SITUATIE OLIMPICI');

readln;

end.

Bibliografie

  • I. Tomescu, Bazele informaticii, manual pentru licee/clase de informatica, clasa a X-a, editura Didactica si Pedagogica, Bucuresti, 1996
  • S. Tudor, Tehnici de programare, manual clasa a X-a, editura L&S Infomat, 1996




Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.