raport_exemplu (1)

68
PLANUL Calendaristic al activității practicii de inițiere în specialitate Nr. Denumirea unității de învățare Termenul de execuție Nr.de ore Conducăto rul practicii 1. Introducerea. Familizarea cu sarcina individuală de lucru în procesul practicii de inițiere. 1.06.201 5 2 2. Elemente de programare modulară în limbajele: Pascal și C/C++ 1.06.201 5 3.06.201 5 14 3. Aplicații ale tehnicilor de programare utilizate în procesul de studiu în baza limbajelor: Pascal și C++ 3.06.201 5 9.06.201 5 24 4. Elemente de programare orientată pe obiecte în baza limbajului C++ 9.06.201 5 15.06.20 15 24 6. Formarea deprinderilor de lucru în echipe 15.06.20 15 18.06.20 14 16 7. Prezentarea raportului pentru practică 18.06.20 15 19.06.20 15 10 Total 90 1

Upload: dubalarinicolai

Post on 28-Jan-2016

3 views

Category:

Documents


0 download

DESCRIPTION

Exemplu

TRANSCRIPT

Page 1: Raport_Exemplu (1)

PLANUL

Calendaristic al activității practicii de inițiere în specialitate

Nr. Denumirea unității de învățareTermenul de execuție

Nr.deore

Conducătorul practicii

1. Introducerea. Familizarea cu sarcina individuală de lucru în procesul practicii de inițiere.

1.06.20152

2. Elemente de programare modulară în limbajele: Pascal și C/C++

1.06.20153.06.2015

14

3. Aplicații ale tehnicilor de programare utilizate în procesul de studiu în baza limbajelor: Pascal și C++

3.06.20159.06.2015

24

4. Elemente de programare orientată pe obiecte în baza limbajului C++

9.06.201515.06.2015

24

6. Formarea deprinderilor de lucru în echipe

15.06.201518.06.2014

16

7. Prezentarea raportului pentru practică 18.06.201519.06.2015

10

Total 90

1

Page 2: Raport_Exemplu (1)

Cuprins

Lucrare practică Nr.1 Elemente de programare modulară în limbajele Pascal și C/C++

Pag. 3

Lucrare practică Nr.2 Aplicații ale tehnicilor de programare utilizate în procesul de studiu în baza limbajelor: Pascal și C++

Pag. 14

Lucrare practică Nr.3 Elemente de programare orientată pe obiecte în baza limbajului C++

Pag. 37

Lucrare practică Nr.4 Formarea deprinderilor de lucru în echipe Pag. 52

2

Page 3: Raport_Exemplu (1)

Lucrare practică Nr.1 Elemente de programare modulară în limbajele Pascal și C/C++

Problema 17: Elaboraţi un program prin intermediul căruia se va determina valoarea expresiei:

De la tastatură se citeşte valoarea lui x. Rezultatul va fi afişat cu o precizie de 3 cifre după virgulă.

Varianta C++#include<iostream.h>#include<conio.h>#include<math.h>#include<iomanip.h>int m,x,f;main(){m=x*2;cout<<"x= "; cin>>x;cout<<"I. f(x)="<<setprecision(3)<<pow(x,3)+pow(x,2)<<endl;cout<<"II. f(x)="<<setprecision(3)<<(1/x)+(1/pow(x,2))<<endl;cout<<"III. f(x)="<<setprecision(3)<<abs(x)/(pow(x,2)+1)<<endl;

Varianta Pascal

program p1;var x,m,i:integer;n:real;const e=2.71828182846;beginm:=x*2;n:=1;write('x='); readln(x);for i:=1 to 3 don:=n*x;writeln('I. f(x)= ',n+sqr(x));

writeln('II. f(x)=',(1/x)+(1/sqr(x)));writeln('III. f(x)=',abs(x)/(sqr(x)+1));

3

Page 4: Raport_Exemplu (1)

cout<<"IV. f(x)="<<setprecision(3)<<pow(x,2)*log(x)<<endl;cout<<"V. f(x)="<<setprecision(3)<<sin(x)+((1/2)*sin(m))<<endl;cout<<"VI. f(x)="<<setprecision(3)<<pow(x,2)+(8/x)<<endl;cout<<"VII. f(x)="<<setprecision(3)<<pow(pow(M_E,-x),2)<<endl;cout<<"VIII. f(x)="<<setprecision(3)<<(pow(M_E,x)-pow(M_E,-x))/2<<endl;cout<<"IX. f(x)="<<setprecision(3)<<(pow(M_E,x)-pow(M_E,-x))/(pow(M_E,x)+pow(M_E,-x))<<endl;cout<<"X. f(x)="<<setprecision(3)<<tan(x)/x<<endl;getch();}

writeln('IV. f(x)=',sqr(x)*log2(x));writeln('V. f(x)=',sin(x)+((1/2)*sin(m)));writeln('VI. f(x)=',sqr(x)+(8/x));for i:=1 to x don:=n*e; writeln('VII. f(x)=',sqr(1/n));for i:=1 to x don:=n*e; writeln('VIII. f(x)=',(n-(1/n))/2);writeln('IX. f(x)=',(n-(1/n))/(n+(1/n)));writeln('X. f(x)=',tan(x)/x);end.

Rezultat Rezultat

4

Page 5: Raport_Exemplu (1)

Problema 18: De la tastatură se citesc valorile variabilelor x şi y, care sunt numere reale. Elaboraţi un program prin intermediul căruia se va determina valoarea funcţiei f(x,y). Rezultatul va fi afişat la ecran cu o precizie de 4 cifre după virgulă:

Varianta C++#include<conio.h>#include<iostream.h>#include<iomanip.h>#include<math.h> int x,y; float fxy1,fxy2,fxy3,fxy4,fxy5,fxy6,fxy7,fxy8,fxy9,fxy10; main(){cout<<"Dati expresia xy:"<<endl;cout<<"x= "; cin>>x;cout<<"y= "; cin>>y;fxy1=pow(x,y)+pow(y,x)/pow(x,-y)+pow(y,-x);fxy2=(sin(x)/cos(x)

Varianta Pascalprogram p2;var fxy1,fxy2,fxy3,fxy4,fxy5,fxy6,fxy7,fxy8,fxy9,fxy10:real;x,y:integer;const e=2.71828182846;const p=3.14159265359;beginwrite('x,y= '); readln(x,y);fxy1:=powER(x,y)+powER(y,x)/powER(x,-y)+powER(y,-x);;fxy2:=(sin(x)/cos(x)+sin(y)/cos(y)/sqrt(abs(x-y)+1));

5

Page 6: Raport_Exemplu (1)

+sin(y)/cos(y)/pow(abs(x-y)+1,0.5));fxy3=abs(x-y)/x+sin(M_PI/y)*cos(M_PI/x);fxy4=sqrt((fabs(x+y))/sqrt(1/fabs(x-y))*(fabs(x)+1));;fxy5=sin(x)+sin(y)/pow(M_E,y)+pow(M_E,x);fxy6=pow(y,1.0/x)+pow(x,1.0/y);fxy7=x-y/abs(x+y)+1+pow(x,2)-pow(y,2)/pow(x,2)+pow(y,2)+1;fxy8=pow(cos(x),2)+2*pow(sin(y),2)/M_PI;fxy9=(x+y)/sqrt((pow(x,2)+pow(y,2)+1)*pow(sin(x+y),2));fxy10=log(x)+log(y)/pow(M_E,y)+pow(M_E,-x);cout<<"fxy1="<<setprecision(4)<<fxy1<<endl;cout<<"fxy2="<<setprecision(4)<<fxy2<<endl;cout<<"fxy3="<<setprecision(4)<<fxy3<<endl;cout<<"fxy4="<<setprecision(4)<<fxy4<<endl;cout<<"fxy5="<<setprecision(4)<<fxy5<<endl;cout<<"fxy6="<<setprecision(4)<<fxy6<<endl;cout<<"fxy7="<<setprecision(4)<<fxy7<<endl;cout<<"fxy8="<<setprecision(4)<<fxy8<<endl;cout<<"fxy9="<<setprecision(4)<<fxy9<<endl;cout<<"fxy10="<<setprecision(4)<<fxy10<<endl;getch();

fxy3:=abs(x-y)/x+sin(p/y)*cos(p/x);fxy4:=sqrt((abs(x+y))/sqrt(1/abs(x-y))*(abs(x)+1));fxy5:=sin(x)+sin(y)/powER(e,y)+power(e,x);fxy6:=power(y,1.0/x)+power(x,1.0/y);fxy7:=x-y/abs(x+y)+1+sqr(x)-sqr(y)/sqr(x)+sqr(y)+1;fxy8:=sqr(cos(x))+2*sqr(sin(y))/p;fxy9:=(x+y)/sqrt((sqr(x)+sqr(y)+1)*sqr(sin(x+y)));fxy10:=log2(x)+log2(y)/power(e,y)+power(e,-x);writeln('I: f(x)(y)=',fxy1);writeln('II: f(x)(y)=',fxy2);writeln('III: f(x)(y)=',fxy3);writeln('IV: f(x)(y)=',fxy4);writeln('V: f(x)(y)=',fxy5);writeln('VI: f(x)(y)=',fxy6);writeln('VII: f(x)(y)=',fxy7);writeln('VIII: f(x)(y)=',fxy8);writeln('IX: f(x)(y)=',fxy9);writeln('X: f(x)(y)=',fxy10);end.

6

Page 7: Raport_Exemplu (1)

}Rezultat Rezultat

Problema 63: De la tastatură se citesc elementele unui vector de dimensiune n (n<1000) cu numere întregi. Elaboraţi un program prin intermediul căruia al treilea element va fi înlocuit cu elementul maximal şi invers. Se vor afişa elementele vectorului modificat.

Varianta C++#include<iostream.h>#include<conio.h>#include<iomanip.h>int t[100],i,n,m,a;main(){cout<<"n= "; cin>>n;for(i=1;i<=n;i++){cout<<"t["<<i<<"]= "; cin>>t[i];}m=t[1];for(i=2;i<=n;i++){if(t[i]>m) a=i; m=t[i];}t[a]=t[3];t[3]=m;for(i=1;i<=n;i++){cout<<t[i]<<" ";}getch();}

Varianta Pascal

program p4;var t: array[1..100] of integer;i,n,m,a:integer;beginwrite('n= '); readln(n);for i:=1 to n do beginwrite('t[',i,']= '); readln(t[i]); end;m:=t[1];for i:=2 to n do if(t[i]>m) then a:=i; m:=t[i]; t[a]:=t[3];t[3]:=m;for i:=1 to n dowrite(t[i],' ');end.

Rezultat Rezultat

7

Page 8: Raport_Exemplu (1)

Problema 64: De la tastatură se citesc elementele unui tablou bidimensional cu n linii şi m coloane. Elaboraţi un program care va afişa la ecran elementele tabloului şi va mări elementele unei linii cu 10. Numărul de ordine a liniei se citeşte de la tastatură. Rezultatul se va afişa la ecran.

Varianta C++#include<iostream.h>#include<conio.h>#include<iomanip.h>int t[100][100],x,i,j,n,m;main(){cout<<"linii= "; cin>>n;cout<<"coloane= "; cin>>m;for(i=1;i<=n;i++)for(j=1;j<=m;j++){cin>>t[i][j];}cout<<"x= "; cin>>x;

for(i=1;i<=n;i++){for(j=1;j<=m;j++)cout<<t[i][j]<<" ";cout<<endl;}for(j=1;j<=m;j++){cout<<t[x][j]+10<<" ";cout<<endl;}getch();}

Varianta Pascal

program p4;var t: array[1..100,1..100] of integer;x,i,j,n,m:integer;beginwrite('linii= '); readln(n);write('coloane= '); readln(m);for i:=1 to n dofor j:=1 to m do beginreadln(t[i][j]);end;write('x= '); readln(x);for i:=1 to n do beginwriteln;for j:=1 to m dowrite(t[i][j],' ');end;writeln;for j:=1 to m do beginwrite(t[x][j]+10,' ');end;end.

Rezultat Rezultat

8

Page 9: Raport_Exemplu (1)

Problema 89: Fişierul date.in conţine elementele unei matrice. În prima linie sunt scrise numărul de lini şi de coloane separate printr-un spaţiu. Pe următoarele linii sunt scrise elementele matricei. Elaboraţi un program care va afişa la ecran si va scrie în fişierul date.out elementele matricei şi suma de pe fiecare linie.

Varianta C++#include<iostream.h>#include<conio.h>#include<fstream.h>using namespace std;ifstream fin("date.txt");ofstream fout("date.out");int i,j,a[100][100],m,n,v;main(){fin>>n>>m;for(i=1;i<=n;i++)for(j=1;j<=m;j++)\fin>>a[i][j];

for(i=1;i<=n;i++){for(j=1;j<=m;j++)fout<<a[i][j];fout<<endl;}

for(i=1;i<=n;i++){

Varianta Pascalprogram p89;var f:text;x:array[1..100,1..100] of integer;n,i,j,m,v:integer;beginassign(f,'date.txt');reset(f);readln(f,n);readln(f,m);for i:=1 to n do beginfor j:=1 to m doread(f,x[i,j]);end;for i:=1 to n do beginfor j:=1 to m do beginwrite(x[i,j]);end;writeln;end;

for j:=1 to m do begin

9

Page 10: Raport_Exemplu (1)

for(j=1;j<=m;j++)cout<<a[i][j];cout<<endl;}

for (j=1;j<=n;j++){v=a[1][j];for (i=1;i<=m;i++){if (v>a[i][j]){v=a[i][j];}}cout<<v<<endl;fout<<v<<endl;}getch();}

v:=x[1,j];for i:=1 to n do beginif (v>x[i,j]) then beginv:=x[i,j];end; end;writeln(v);end;end.

Rezultat Rezultat

Problema 9: De la tastatura se introduce ujn numar natural n. Calculati suma primilor n termeni: 1+2/(1+2)+3/(1+2+3)+...+n/(1+2+...+n).

Varianta C++#include<iostream.h>#include<conio.h>int n,i,k;double suma(int n, int k){ if (n==0) return 0; else return suma(n-1,0) + n/(k+n); }main()

Varianta Pascal

program p3;var n,i,k:integer;function suma(n,k:integer):real;beginwhile n=0 dosuma(n-1,0)+n/(k+n);end;

10

Page 11: Raport_Exemplu (1)

{cin>>n;for(i=1;i<n;i++){ k=k+i; }cout<<suma(n,k);getch();}

beginreadln(n);for i:=1 to n do k=k+i; write(suma(n,k));end.

Rezultat Rezultat

Problema 9: Se da un arbore prin vectorul de tip tata. Calculați și afișați distante dintre oricare doua vârfuri ale arborelui sub forma unei matrici.Distanta dintre doua vârfuri este egala cu lungimea lanțului care le unește. Exemplu: date.in 6 2 0 2 1 3 1 date.out 0 1 2 1 3 1 1 0 1 2 2 22 1 0 3 1 31 2 3 0 4 2 3 2 1 4 0 4 1 2 3 2 4 0

Varianta C++#include<fstream.h>#include<iostream.h>ifstream fin("9.txt");ofstream fout("9.out");int n,t[100],a[100][100],p[100];void citire(){fin>>n;for(int i=1;i<=n;i++)fin>>t[i];}void df(int s, int v, int niv){a[s][v]=a[v][s]=niv;p[v]=1;

Varianta PascalCod program

11

Page 12: Raport_Exemplu (1)

for(int i=1;i<=n;i++)if((t[i]==v || i==t[v]) && !p[i]) df(s,i,niv+1);}

void afis(){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)fout<<a[i][j]<<" ";fout<<endl;}}

main(){ citire(); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) p[j]=0; df(i,i,0); } afis(); fin.close(); fout.close(); return 0;}Rezultat Rezultat

Problema 10: Se citește un număr natural n. Construiți un arbore cu proprietatea ca fiecare vârf are numărul de descendenți direcți cu 1 mai mare decât nivelul pe care se afla. Excepție fac frunzele și nodul pentru care se termina cele n vârfuri. Astfel, rădăcina (aflata pe nivelul 0) are un singur descendent direct, vârful de pe nivelul 1 are 2, cele de pe nivelul 2 au cate trei, etc. Arborele va fi reprezentat prin vectorul legăturilor de tip tata. Exemplu: n=15 Vectorul tata: 0 1 2 2 3 3 3 4 4 4 5 5 5 5 6Varianta C++ Varianta Pascal

12

Page 13: Raport_Exemplu (1)

#include<fstream.h>#include<iostream.h>const int inf=15000;int t[100],n;ifstream f("10.txt");ofstream g("10.out");

int main() { int v,k,niv,p,i; f>>n; t[1]=0; p=1; niv=1; k=2; v=1; while(k<=n) { p=p*niv; for(i=1;i<=p && k<=n;i++) { t[k++]=v; if(i%niv==0) v++; } niv++; } for(i=1;i<=n;i++) g<<t[i]<<" "; f.close(); g.close(); return 0;}

Cod program

Rezultat Rezultat

13

Page 14: Raport_Exemplu (1)

Lucrare practică Nr.2 Aplicații ale tehnicilor de programare utilizate în procesul de studiu în baza limbajelor: Pascal și C++

Problema 1: Se consideră numerele naturale din mulțimea {1, 2, 3, ..., n}. Să se determine toate elementele acestei mulțimi, pentru care suma cifrelor este egală cu un număr dat m.

Varianta C++#include<iostream.h>#include<conio.h>int n, ns,sol[100];void afis(int l){int i;ns++;for(i=1;i<=l;i++) cout<<sol[i]<<" ";cout<<endl;}

void gasire(int i, int sp){int j;if (sp==n && i>2) afis(i-1);else for(j=sol[i-1]+1;j<=n-sp;j++)if (j==sol[i-1]+1 || i==1){sol[i]=j;gasire(i+1, sp+j);}}main(){cin>>n;ns=0;gasire(1,0);getch();}

Varianta PascalCod program

Rezultat Rezultat

14

Page 15: Raport_Exemplu (1)

Problema 5: 5) Se consideră mulțimea P={P1,P2,...,Pn} formată din n puncte (2≤n≤30) pe un plan euclidian. Fișierul date.in conține în prima linie numărul n, care reprezintă numărul de puncte din plan pe liniile următoare se regăsesc coordonatele punctelor. Fiecare punct Pj este definit prin coordonatele sale xj , yj . Elaborați un program care afișează la ecran coordonatele punctelor Pa , Pb distanța dintre care este maximă. Distanța dintre punctele Pj ,Pm se calculează cu ajutorul formulei:

d jm=√(x j−xm)2+( y j− ym)2

Varianta C++#include<iostream.h>#include<iomanip.h>#include<conio.h>#include<math.h>class pt{public:int x,y;}*t;double pit(pt m,pt n){return sqrt( pow(n.x-m.x,2)+pow(n.y-m.y,2) );}main(){randomize();int n;cout<<"n=";cin>>n;t=new pt[n];for(int i=0;i<n;i++){cin>>t[i].x;cin>>t[i].y; cout<<"t["<<i<<"]("<<setw(3)<<t[i].x<<";"<<setw(3)<<t[i].y<<")"<<endl;}double maxdist=0,pt1=-1,pt2=-1;for(int i=0;i<n-1;i++)for(int j=i+1;j<n;j++) if(pit(t[i],t[j])>=maxdist){ maxdist=pit(t[i

Varianta Pascal

Program P152; Const nmax=30; Type Punct = record X, y: real; End; Indice = 1..nmax; Var P:array[Indice] of Punct; J, m, n:Indice; Dmax:real;PA, pb: Punct; Function Distanta(A, B: Punct): real; Begin Distanta:=sqrt(sqr(A.x-B.x)+sqr(A.y-B.y)); End; Function SolutiePosibila(j, m:Indice):Boolean; Begin If j<>m then SolutiePosibila:=true Else SolutiePosibila:=false; End; Procedure PrelucrareaSolutiei(A, B: Punct); Begin

15

Page 16: Raport_Exemplu (1)

],t[j]);pt1=i;pt2=j;}cout<<"Distanta maxima e intre punctele t["<<pt1<<"] si t["<<pt2<<"] = "<<setprecision(6)<<maxdist<<endl;getch();}

If Distanta(A,B)>dmax then Begin PA:=A; PB:=B;Dmax:=Distanta(A,B); End; End; Begin Write('Dati n='); readln(n); Writeln('Dati coordonatele x, y ale punctelor'); For j:=1 to n do Begin Write('P[', j,']: '); readln(P[j].x, P[j].y); End;Dmax:=0; For j:=1 to n do For m:=1 to n do if SolutiePosibila(j, m) then PrelucrareaSolutiei(P[j], P[m]); Writeln('Solutia: PA=(', PA.x:5:2, ',', PA.y:5:2, ')'); Writeln('Solutia: PB=(', PB.x:5:2, ',', PB.y:5:2, ')'); Readln; End.

Rezultat Rezultat

16

Page 17: Raport_Exemplu (1)

Problema 4: Suma componentelor prime. Fie a o variabilă indexată, ale cărei componente A(1) , A(2),..., A(n) sunt numere naturale nenule. Să se determine suma componentelor care sunt numere prime. Atunci când un număr prim se repetă, el va fi luat în consideraţie o singură dată.

Varianta C++#include<iostream.h>#include<conio.h>int n,v[30],i,k,nr=0,prim;main(){cout<<"n= "; cin>>n;for(i=1;i<=n;i++){cout<<"[v"<<i<<"]=";cin>>v[i];}for(i=1;i<=n;i++){prim=1;for(k=2;k<=v[i]/2;k++)if (v[i]%k==0)prim=0;if(prim==1)nr=nr+v[i];}cout<<nr;getch();}

Varianta PascalCod program

Rezultat Rezultat

Problema 9: MeniuriLa inaugurarea unui restaurant sunt prezente mai multe persoane. Clienţii îşi aleg din meniul pus la dispoziţie câte o specialitate. Dar deocamdată restaurantul a angajat un singur bucătar care pregăteşte mâncărurile una după alta, deci clienţii nu pot fi serviţi decât pe rând. Presupunând că bucătarul se apucă de lucru după ce s-au strâns toate comenzile, stabiliţi în ce ordine trebuie

17

Page 18: Raport_Exemplu (1)

să pregătească specialităţile, astfel încât timpul mediu de aşteptare a clienţilor să fie minim.Date de intrarePrima linie a fişierului de intrare MENIU.IN conţine un număr natural n, reprezentând numărul clienţilor. Următoarea linie conţine n numere întregi, reprezentând timpul necesar pregătirii mâncărurilor comandate, în ordine, pentru cele n persoane. Aceste numere vor fi separate prin câte un spaţiu.Date de ieşireFişierul de ieşire MENIU.OUT va conţine două linii. Pe prima linie se va scrie un număr real cu două zecimale, reprezentând timpul mediu de aşteptare, iar pe a doua linie se vor afla n numere, reprezentând numerele de ordine ale persoanelor din restaurant, în ordinea în care trebuie servite. Restricţii şi precizări • 1 ≤ n ≤ 1000; • 1 ≤ t ≤ 100, unde t reprezintă timpul necesar preparării unei specialităţi de mâncare; • dacă există mai multe soluţii, în fişier se va scrie una singură.Exemplu MENIU.IN 5 30 40 20 25 60MENIU.OUT86.00 3 4 1 2 5

Varianta C++#include<fstream.h>ifstream fin("meniu.txt");ofstream fout("meniu.out");void citire(int &n, int a[]){fin>>n;for(int i=1;i<=n;i++)fin>>a[i];}void ordonare(int n, int a[]){int i,j;int aux;for(i=1;i<n;i++)for(j=i+1;j<=n;j++)if(a[i]>a[j]){aux=a[i]; a[i]=a[j];

Varianta PascalCod program

18

Page 19: Raport_Exemplu (1)

a[j]=aux;}}void afisare(int n, int a[]){for(int i=1;i<=n;i++)fout<<a[i]<<" ";}

void greedy(int n, int a[]){int s[100];int i,k;k=1;s[1]=a[1];for(i=2;i<=n;i++)if(s[k]<a[i]) s[++k]=a[i];afisare(k,s);}

void medie(int a[], int n){int s,m;for(int i=0;i<n;i++){s=s+a[i];}m=s/n;fout<<m<<endl;}

int main(){int n;int a[100];citire(n,a);ordonare(n,a);medie(a,n);greedy(n,a);fin.close();fout.close();}Rezultat Rezultat

19

Page 20: Raport_Exemplu (1)

Problema 14: MediciO asociaţie caritabilă asigură consultaţii medicale gratuite pentru cei fără posibilităţi materiale. Există un singur cabinet dotat cu aparatură medicală. Din acest motiv la un moment dat un singur medic poate face consultaţii. Asociaţia apelează la n medici de diverse specialităţi, care îşi oferă benevol serviciile. Fiecare prezintă un singur interval [si, fi] de-a lungul aceleiaşi zile, în care este disponibil. Ajutaţi asociaţia să realizeze o planificare a consultaţiilor în cabinet, astfel încât numărul de medici să fie maxim. Date de intrare Prima linie a fişierului de intrare MEDICI.IN conţine numărul n al medicilor. A doua şi a treia linie conţin orele de început şi respectiv orele de sfârşit, corespunzătoare celor n medici (numere întregi). Numerele sunt separate prin câte un spaţiu. Date de ieşire Fişierul de ieşire MEDICI.OUT va conţine pe prima linie un număr k, reprezentând numărul maxim de medici care se pot selecta, astfel încât să fie îndeplinită condiţia din enunţ. A doua linie va conţine k numere care vor reprezenta indicii medicilor selectaţi.Restricţii şi precizări • 1 ≤ n ≤ 1000; • 1 ≤ fi < si ≤ 1000, pentru i = 1, 2, ..., n. Exemplu MEDICI.IN2 6 20 4 3 8 23 7MEDICI.OUT

20

Page 21: Raport_Exemplu (1)

3 1 4 3

Varianta C++#include<fstream.h>ifstream fin("medici.txt");ofstream fout("medici.out");

struct medici{int s,d;};

void citire(int &n, medici a[]){fin>>n;for(int i=1;i<=n;i++)fin>>a[i].s>>a[i].d;}

void ordonare(int n, medici a[]){int i,j;medici aux;for(i=1;i<n;i++)for(j=i+1;j<=n;j++) if(a[i].d>a[j].d){aux=a[i]; a[i]=a[j]; a[j]=aux;}}

void afisare(int n, medici a[]){for(int i=1;i<=n;i++) fout<<a[i].s<<","<<a[i].d<<" ";}

void greedy(int n, medici a[]){medici s[100];int i,k;k=1;s[1]=a[1];for(i=2;i<=n;i++){if(s[k].d<a[i].s) s[++k]=a[i];}afisare(k,s);}

void numar(int n, medici a[]){medici s[100];int i,k;k=1;

Varianta PascalCod program

21

Page 22: Raport_Exemplu (1)

s[1]=a[1];for(i=2;i<=n;i++){if(s[k].d<a[i].s) s[++k]=a[i];n--; }fout<<n<<endl;}int main(){int n;medici a[100];citire(n,a);ordonare(n,a);numar(n,a);greedy(n,a);fin.close();fout.close();}Rezultat Rezultat

Problema 9: Pe o tablă de șah nXn sunt plasate m piese marcate prin valoarea -1, iar prin valoarea 0 sunt marcate pozitiile libere. Într-o pozitie (i0,j0) se află un cal, iar într-o poziție (i1,j1) un rege. Să se determine toate traseele pe care calul poate să meargă din poziția inițială până în cea a regelui și să se întoarcă de unde a plecat fără a trece de 2 ori prin aceeași poziție și mergând doar pe poziții libere.

Se citesc mai intâi n și m, iar apoi m perechi reprezentând coordonatele pieselor. Ultimele se citesc coordonatele calului și ale regelui.

Varianta C++#include<fstream.h>fstream f("sah.txt", ios::in);fstream g("sah.out",ios::out);int a[10][10],n,io,jo,i1,j1,b[10]

Varianta PascalCod program

22

Page 23: Raport_Exemplu (1)

[3],i;di[8]={-2,-2,-1,1,2,2,1,-1};dj[8]={-1,1,2,2,1,-1,-2,-2};

int inside(int i,int j){return i>=1 && j>=1 && i<=n && j<=n;}

void citire(){f>>n;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)f>>a[i][j];f>>io>>jo>>i1>>j1;}void afis(int k){for(int i=1;i<=n;i++){g<<endl;for(int j=1;j<=n;j++)g<<a[i][j]<<" ";}g<<endl;for(i=0;i<k; i++)g<<b[i][1]<<","<<b[i][2]<<" ";g<<endl;}

void back(int i,int j,int k){if(i==io && j==jo && a[i1][j1]>0) afis(k);else for(int p=0;p<=7;p++){int inou,jnou;inou=i+di[p];jnou=j+dj[p];if(inside(inou,jnou)&& a[inou][jnou]==0){a[inou][jnou]=k+1;b[k][1]=inou;b[k][2]=jnou;back(inou,jnou,k+1);a[inou][jnou]=0;}}}

23

Page 24: Raport_Exemplu (1)

main(){citire();b[0][1]=io;b[0][2]=jo;back(io,jo,1);}Rezultat Rezultat

Problema 14: Generarea produsului cartezianSe consideră n mulţimi A1, A2, ... , An de forma {1,2..,an}. Să se genereze produsul  cartezian al acestor mulţimi.Am considerat mulţimile de forma {1,2..,an} pentru a simplifica problema, în special la partea de citire si afişare, algoritmul de generare rămânând nemodificat.Identificăm următoarele particularităţi şi condiţii:

Fiecare element Xk din vectorul soluţie aparţine unei mulţimi {1,2..,ak}. Aici este o diferenţă faţă de algoritmii anteriori în care fiecare element din soluţie era luat din aceeaşi mulţime şi trebuie să avem grijă la acest fapt când scriem programul.

Nu există condiţii între elementele vectorului soluţie. Obţinem soluţia când s-au generat n valori.

Varianta C++#include<iostream.h>#include<conio.h>int n,s[100],m[100];void init (int k){s[k]=0;}int succesor(int k){if(s[k]<m[k]){s[k]=s[k]+1; return 1;}else return 0;}int valid(){return 1;}int solutie(int k){return k==n;}void tipar(){

Varianta PascalCod program

24

Page 25: Raport_Exemplu (1)

for(int i=1;i<=n;i++)cout<<s[i]<<" ";cout<<endl;}void bt(int k){init(k);while(succesor(k))if(valid())if(solutie(k)) tipar();else bt(k+1);}void main(){cout<<"n= ";cin>>n;for(int i=1;i<=n;i++){ cout<<"Nr. de elemente multimea"<<i<<" ";cin>>m[i];}bt(1);getch();}Rezultat Rezultat

Problema 3: Se citește un număr natural n și apoi o mulțime cu n elemente numere naturale.Folosind interschimbări de elemente Generați și afisați permutările mulțimii citite.

Varianta C++#include<iostream.h>#include<conio.h>int a[20],b[20];void permutari(int k, int

Varianta PascalCod program

25

Page 26: Raport_Exemplu (1)

len){if(k-1 == len){for(int i = 1; i <= len; i++)cout << a[i];cout << endl; }else{for(int i = 1; i <= len; i++)if(!b[i]){a[k] = i;b[i] = 1;permutari(k+1, len);b[i] = 0;}}}

main(){int n;cin >> n;permutari(1, n);getch();}Rezultat Rezultat

Problema 6: Avem o colecție de 4 cărți diferite scrise de un autor și alte 6 cărți diferite scrise de alt autor. În cate moduri putem alege 4 cărți din care 2 scrise de un autor și celelate 2 scrise de celălat autor.

Varianta C++#include<iostream.h>#include<conio.h>int c1,c2;main(){c1=(4*3)/(1*2);c2=(6*5)/(1*2);

Varianta PascalCod program

26

Page 27: Raport_Exemplu (1)

cout<<"Cele 4 carti se pot alege in "<<c1*c2<<" moduri";getch();}Rezultat Rezultat

Problema 3: Turnurile din Hanoi. Se dau trei tije, a, b și c. Pe tija a se află n discuri de dimensiuni diferite, ordonate în ordinea diametrelor (discul cel mai mare la bază). Se doreşte mutarea tuturor discurilor de pe tija a pe tija b, utilizând tija intermediară c, cucondiţia că un disc cu diametrul mai mare să nu fie pus pe vreo tijă peste un disc cu dimensiune mai mică.

Varianta C++#include<iostream.h>#include<conio.h>void hanoi(int n, char a, char b, char c,char t1[10], char t2[10], char t3[10]){if(n>=1){hanoi(n-1,a,c,b,t1,t3,t2);int x=strlen(t2);t2[x]=t1[strlen(t1)-1];t2[x+1]=0;strcpy(t1+strlen(t1)-1, t1+strlen(t1));cout<<t1<<endl<<t2<<endl<<t3<<endl;cout<<a<<"->"<<b<<endl<<endl;hanoi(n-1,c,b,a,t3,t2,t1);}}int main(){char t1[10]="A", t2[10]="B", t3[10]="C";int n;cin>>n;for(int i=n;i>=1;i--) t1[n-i+1]=i+'0';t1[n+1]=0;hanoi(n,'A','B','C',t1,t2,t3);getch();

Varianta PascalCod program

27

Page 28: Raport_Exemplu (1)

}Rezultat Rezultat

Problema 6: Într-o placă dreptunghiulară cu dimensiunile N pe L sunt n puncte (2≤n≤30). Fişierul date.in conţine în prima linie numărul n, care reprezintă numărul de puncte din plan pe liniile următoare se regăsesc coordonatele

punctelor. Elaboraţi un program care afişează la ecran coordonatele punctelor Pa, Pb distanţa dintre care este minimă. Distanţa dintre punctele Pj , Pm se

calculează cu ajutorul formulei: d jm=√(x j−xm)2+( y j− ym)2

Varianta C++#include<fstream.h>#include<iomanip.h>#include<math.h>fstream f("punct.txt",ios::in);fstream g("punct.out",ios::out);class pt{public:int x,y;}*t;

double pit(pt m,pt n){return sqrt( pow(n.x-m.x,2)+pow(n.y-m.y,2) );}

main(){randomize();int n;f>>n;t=new pt[n];for(int i=0;i<n;i++){

Varianta PascalCod program

28

Page 29: Raport_Exemplu (1)

f>>t[i].x;f>>t[i].y;g<<"t["<<i<<"]("<<setw(3)<<t[i].x<<";"<<setw(3)<<t[i].y<<")"<<endl;}double maxdist=0,pt1=-1,pt2=-1;for(int i=0;i<n-1;i++)for(int j=i+1;j<n;j++)if(pit(t[i],t[j])>=maxdist){maxdist=pit(t[i],t[j]);pt1=i;pt2=j;}g<<"Distanta maxima e intre punctele t["<<pt1<<"] si t["<<pt2<<"] = ";g<<setprecision(6)<<maxdist<<endl;}Rezultat Rezultat

Problema 9: Folosind metoda divide et impera, scrieți o funcție care să determine dacă un tablou cu elemente întregi este ordonat crescător.

Varianta C++#include<iostream.h>#include<conio.h>int main(){int v[100];int i,n,crescator;cout<<"Dati dimensiunea vectorului ";cin>>n;for(i=0;i<n;i++){cout<<"Dati valoarea "<<i+1<<" ";cin>>v[i];}

Varianta PascalCod program

29

Page 30: Raport_Exemplu (1)

crescator=1;i=0;while((i<n-1)&&(crescator!=0)){if(v[i]>v[i+1])crescator=0;i++;}if(crescator==0)cout<<"Vectorul nu este ordonat crescator";else cout<<"Vectorul este ordonat crescator !";getch();}Rezultat Rezultat

Problema …: Enunțul problemei

Varianta C++Cod program

Varianta PascalCod program

Rezultat Rezultat

Problema …: Enunțul problemei

Varianta C++Cod program

Varianta PascalCod program

Rezultat Rezultat

Problema 3: Se citește un vector cu n elemente numere naturale. Sa se calculeze suma elementelor vectorului folosind divide et impera.

30

Page 31: Raport_Exemplu (1)

Varianta C++#include<iostream.h>#include<conio.h>int suma(int a[100], int s, int d){if(s==d) return a[s];else return suma(a,s,(s+d)/2)+suma(a,(s+d)/2+1,d);}main(){int a[100],n,i;cin>>n;for(i=1;i<=n;i++) cin>>a[i];cout<<suma(a,1,n);getch();}

Varianta PascalCod program

Rezultat Rezultat

Problema 1: O tabla de șah se citește ca o matrice n*n in care pozițiile libere au valoarea 0, iar piesele sunt marcate prin valoarea 1.Pe prima linie pe coloana js se afla un pion. Sa se determine drumul pe care poate ajunge pionul pe ultima linie luând un număr maxim de piese.Poziția inițiala a pionului se considera libera.Pionul aflat in poziția i,j se poate deplasa astfel:- in poziția i+1,j daca e libera- in poziția i+1, j-1 daca e piesa in aceasta poziție- in poziția i+1, j+1 daca e piesa in aceasta pozițieExemplu:5 30 0 0 0 00 1 0 1 0

31

Page 32: Raport_Exemplu (1)

0 1 1 1 10 0 0 1 10 1 0 1 1Drumul optim este:1 32 23 34 45 5Pe acest drum pionul ia 4 piese.

Varianta C++#include<fstream.h>ifstream fin("sah.txt");ofstream fout("sah.out");int n,i,j, a[50][50], c[50][50],b[50][50],is,js;

void citire(){int i,j;fin>>n>>js;for(i=1;i<=n;i++)for(j=1;j<=n;j++) fin>>a[i][j];}

void pd(){int i,j;b[is][js]=1;for(i=2;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]==0){if(b[i-1][j]>0){c[i][j]=c[i-1][j]; b[i][j]=1; }}else if(c[i-1][j-1]>c[i-1][j+1]){if(b[i-1][j-1]>0) {c[i][j]=c[i-1][j-1]+1;b[i][j]=1; }else if(b[i-1][j+1]>0) {c[i][j]=c[i-1][j+1]+1;b[i][j]=1; }}

Varianta PascalCod program

32

Page 33: Raport_Exemplu (1)

else {if(b[i-1][j+1]>0) {c[i][j]=c[i-1][j+1]+1;b[i][j]=1; }else if(b[i-1][j-1]>0) {c[i][j]=c[i-1][j-1]+1;b[i][j]=1; }}}}}

void drum(int i, int j){if(i==1) fout<<i<<" "<<j<<endl;else { if(a[i][j]==0) drum(i-1,j);else if(c[i-1][j-1]+1==c[i][j])drum(i-1,j-1);else drum(i-1,j+1);fout<<i<<" "<<j<<endl;}}

void afis(){int max=0,jm;for(j=1;j<=n;j++) if(c[n][j]>max) { max=c[n][j]; jm=j; }fout<<max<<endl;drum(n,jm);}

main(){citire();pd();afis();fin.close();fout.close();return 0;}

Rezultat Rezultat

33

Page 34: Raport_Exemplu (1)

Problema 9: Subșir crescător maximal.Se citește un număr n si apoi un sir de n numere întregi. Găsiți cel mai lung subșir al șirului citit care are proprietatea ca elementele sunt in ordine crescătoare.Daca exista mai multe subșiruri de lungime maxima se va afișa unul dintre ele.Exemplu:date.in94 2 3 0 5 2 6 9 8date.out2 3 5 6 9

Varianta C++#include <fstream.h>ifstream fin("date.txt");ofstream fout("date.out");int n, A[10000], L[10000], maxt, pm;void afis(int k, int m){if(m>0){int i=k-1;while(L[i]!=m-1) i--;afis(i,m-1);fout<<A[k]<<" ";}}

int main(){int i,j,maxx;fin>>n;for(i=1;i<=n;i++) fin>>A[i];L[1]=1;

Varianta PascalCod program

34

Page 35: Raport_Exemplu (1)

for(i=2;i<=n;i++){maxx=0;for(j=1;j<i;j++)if(A[j]<=A[i] && L[j]>maxx) maxx=L[j];L[i]=maxx+1;if(L[i]>maxt){maxt=L[i];pm=i;}}afis(pm,maxt);}Rezultat Rezultat

35

Page 36: Raport_Exemplu (1)

Lucrare practică Nr.3 Elemente de programare orientată pe obiecte în baza limbajului C++

Problema 1: Creaţi obiectul paralelipiped_dreptunghic date: lungimile bazelor şi înălţimea; metode: citire, afişare, iniţializare, determinare a suprafeţei laterale, suprafeţei totale, şi a volumului. Se vor introduce datele despre două paralelipipede dreptunghice şi se vor afişa datele despre paralelipipedul cu volumul maxim şi paralelipipedul cu suprafaţa totală minimă.

Varianta C++#include<iostream.h>#include<conio.h>class paralelipiped{float l,L,h;public:double volum();double arielat();double arietot();void citire();void afisare();};void paralelipiped::citire(){cout<<"Dati lungimile bazelor :"; cin>>L>>l;cout<<"Dati inaltimea paralelipipedului :"; cin>>h;}

double paralelipiped::volum(){float v;v=L*l*h;return v;}

double paralelipiped::arielat(){float al;al=2*(L*h+l*h);return al;}

double paralelipiped::arietot(){float at;at=2*(L*h+l*h+L*l);return at;}

void paralelipiped::afisare(){cout<<"Lungimea bazei mari: "<<L<<endl;cout<<"Lungimea bazei mici: "<<l<<endl;

36

Page 37: Raport_Exemplu (1)

cout<<"Inaltimea paralelipipedului: "<<h<<endl;cout<<"Aria totala: "<<arietot()<<endl;cout<<"Aria laterala: "<<arielat()<<endl;cout<<"Volumul: "<<volum()<<endl;}

main(){paralelipiped p1,p2;cout<<"Dati date despre I paralelipiped dreptunghic"<<endl;p1.citire();cout<<"Dati date despre II paralelipiped dreptunghic"<<endl;p2.citire();cout<<"Paralelipipedul cu volumul maxim"<<endl;if(p1.volum()>p2.volum()) p1.afisare();else p2.afisare();cout<<"Paralelipipedul cu aria totala maxima"<<endl;if(p1.arietot()>p2.arietot()) p1.afisare();else p2.afisare();getch();}Rezultat

Problema 5: Cîmpul n1 - un număr întreg, Cîmpul n2 – număr real nenul. Creaţi metoda power() – va returna numărul n2 la puterea n1.

Varianta C++#include<iostream.h>#include<conio.h>class putere{

37

Page 38: Raport_Exemplu (1)

float n2;int n1;public:void citire();double rid();void afis();};void putere::citire(){cout<<"dati un numar "; cin>>n2;cout<<"dati puterea la care vreti sa ridicati numarul "; cin>>n1;}double putere::rid(){double p=1;int i;for(i=0;i<n1;i++)p=p*n2;return p;}void putere::afis(){cout<<"n^x= "<<rid();}main(){putere a;a.citire();a.afis();getch();}Rezultat

38

Page 39: Raport_Exemplu (1)

Problema 9: Creaţi clasa triunghi, derivata clasei triad. Pentru clasa triunghi vor fi implementate metode pentru determinare a suprafeţei, a perimetrului şi o metodă prin intermediul căreia se va verifica dacă datele introduse pot fi lungimile laturilor unui triunghi. De la tastatură se citesc datele despre n triunghiuri. Elaboraţi un program prin intermediul căruia, la ecran se vor afişa datele despre toate triunghiurile, triunghiul cu suprafaţă maximă şi triunghiul cu perimetru maxim.

Varianta C++#include<iostream.h>#include<conio.h>#include<math.h>class triad{public:int l1,l2,l3,h;void citire();void afisare();};void triad::citire(){cout<<"dati laturile triunghiului"<<endl;cout<<"l1= "; cin>>l1;cout<<"l2= "; cin>>l2;cout<<"l3= "; cin>>l3;cout<<"Inaltimnea "; cin>>h;}void triad::afisare(){cout<<"l1= "<<l1<<endl;cout<<"l2= "<<l2<<endl;cout<<"l3= "<<l3<<endl;cout<<"Inaltimnea "<<h<<endl;}class triunghi : public triad {public:double arie();double perimetrul();void verificare();void afisare();};double triunghi::arie(){double a;a=(h*l1)/2;return a;}

39

Page 40: Raport_Exemplu (1)

double triunghi::perimetrul(){float g;g=l1+l2+l3;return g;}void triunghi::verificare(){if(l1+l2>l3 && l1+l3>l2 && l3+l2>l1) cout<<"Exista"<<endl;else cout<<"Nu exista!!!"<<endl;}void triunghi::afisare(){triad::afisare();cout<<"aria triunghiului "<<arie()<<endl;cout<<"perimetrul triunghiului "<<perimetrul()<<endl;verificare();}main(){triad a[100];int i,n;cout<<"dati numarul de triunghiuri "; cin>>n;for(i=1;i<=n;i++){cout<<"dati date dspre triunghiul "<<i<<endl;a[i].citire();}triunghi t[100];int sm,pm;for(i=1;i<=n;i++){t[i].afisare();}sm=t[1].arie();pm=t[1].perimetrul();for(i=1;i<=n;i++){if(t[i].arie()>sm) sm=i;if(t[i].perimetrul()>pm) pm=i;}cout<<"triunghiul cu suprafata maxima "<<endl;t[sm].afisare();cout<<"triunghiul cu perimetrul maxim "<<endl;t[pm].afisare();getch();}

40

Page 41: Raport_Exemplu (1)

Rezultat

Problema 17: Enunțul problemei

Varianta C++#include<iostream.h>#include<conio.h>#include<iomanip.h>class triunghi{public:float lat;triunghi(){};triunghi( int a){lat=a;}void citire();void afis();};class cerc{public:float raza;cerc(){};cerc(int a){raza=a;}void citire();void afis();};

class figura: public triunghi, public cerc{public:

41

Page 42: Raport_Exemplu (1)

void citire();void afis();};

class punct: public figura{public:struct coordonate{int a,b;};coordonate c;char* culoare;void citire();void afis();};

void triunghi::citire(){cout<<"Dati lungimea laturii triunghiului "; cin>>lat;}

void triunghi::afis(){cout<<"triunghi echilateral:"<<endl;cout<<"lungimea laturii triunghiului "<<lat<<endl;}

void cerc::citire(){cout<<"dati lungimea razei cercului "; cin>>raza;}

void cerc::afis(){cout<<"cerc "<<endl;cout<<"lungimea razei cercului "<<raza<<endl;}

void figura::citire(){int c;cout<<"Figura:"<<endl;cout<<"1-triunghi echilateral"<<endl;cout<<"2-cerc"<<endl;cin>>c;if(c==1) triunghi::citire();else cerc::citire();}

void figura::afis(){triunghi::afis();

42

Page 43: Raport_Exemplu (1)

cerc::afis();}

void punct::citire(){cout<<"dati coordonatele punctului: "; cin>>c.a>>c.b;cout<<"dati culoarea punctului: "; cin>>culoare;figura::citire(); }

void punct::afis(){figura::afis();cout<<"cordonatele centrului figurii: ("<<c.a<<","<<c.b<<endl;cout<<"culoarea punctului: "<<culoare<<endl;}main(){punct a[100];int n;cout<<"dati numarul de figur "; cin>>n;for(int i=0;i<n;i++)a[i].citire();for(int i=0;i<n;i++)a[i].afis();getch();}Rezultat

43

Page 44: Raport_Exemplu (1)

Problema 25: Elaboraţi un program prin intermediul căruia vor fi gestionate filmele de la un cinematograf. Despre un film se cunosc următoarele date: numele filmului, anul ediţiei, actorul principal, regizorul, bugetul filmului, ora de difuzare a filmului în cinematograf.

Varianta C++#include<iostream.h>#include<conio.h>#include<iomanip.h>

template <class T> class cinematograf{public:T elem;cinematograf *next;cinematograf(){next=NULL;}string nume, regizorul, actor;struct ora{int o, minute;};ora a;int buget, anul;void afisare();

44

Page 45: Raport_Exemplu (1)

void citire();};

template <class T> void cinematograf<T>::citire(){cout<<"Dati numele filmului: "; cin>>nume;cout<<"Dati anul editiei: "; cin>>anul;cout<<"Dati numele actorului principal: "; cin>>actor;cout<<"Dati numele regizorului: "; cin>>regizorul;cout<<"Dati bugetul filmului: "; cin>>buget;cout<<"Dati ora de difuzare si minutele: "; cin>>a.o>>a.minute;}

template <class T> void cinematograf<T>::afisare(){cout<<"Numele filmului: "<<nume<<endl;cout<<"Anul editiei: "<<anul<<endl;cout<<"Numele actorului principal: "<<actor<<endl;cout<<"Numele regizorului: "<<regizorul<<endl;cout<<"Numele bugetul filmului: "<<buget<<endl;cout<<"Ora de difuzare si minutele: "<<a.o<<":"<<a.minute<<endl<<endl;}

template <class T> class stiva{public:cinematograf<T> *curent;stiva(){curent=NULL;}void creare();void parcurge();void inserare();void exclude();~stiva();};

template <class T> stiva<T>::~stiva(){while(curent!=NULL) exclude();}template <class T> void stiva<T>::creare(){int c;cout<<"Introdu numarul de filme "<<endl; cin>>c;for(int i=0;i<c;i++){if(curent==NULL){curent=new cinematograf<T>;

45

Page 46: Raport_Exemplu (1)

curent->citire();}else inserare();}}

template <class T> void stiva<T>::parcurge(){cinematograf<T> *p;p=curent;while(p!=NULL){p->afisare();p=p->next;}cout<<endl;}

template <class T> void stiva<T>::inserare(){cinematograf<T> *q;q=new cinematograf<T>;q->citire(); q->next=curent;curent=q;}

template <class T> void stiva<T>::exclude(){cinematograf<T> *q;q=curent;curent=curent->next;delete q;}

template <class T> void meniu(stiva<T> a){char c;a.creare();clrscr();do{cout<<"Alegeti una din optiuni: "<<endl;cout<<"1-Parcurge"<<endl;cout<<"2-Inserare"<<endl;cout<<"3-Excludere"<<endl;cout<<"0-iesire"<<endl;c=getch(); clrscr();switch(c){case '1' : a.parcurge(); getch(); break;case '2' : a.inserare(); break;case '3' : a.exclude(); break;}clrscr();

46

Page 47: Raport_Exemplu (1)

}while(c!='0');}

int main(){clrscr();cout<<"Stiva de filme"<<endl;stiva<int> sn;meniu(sn);cout<<"stiva de caractere"<<endl;stiva<char> sc;meniu(sc);return 0;}Rezultat

Dupa citire execut 1

Dupa afisare execut 3

Execut 2

47

Page 48: Raport_Exemplu (1)

48

Page 49: Raport_Exemplu (1)

Problema 4: Sa se implementeze clasa mulțime care permite manipularea mulțimilor de numere. Clasa conține un constructor cu parametrii si metode pentru realizarea operațiilor de reuniune si intersecție a 2 mulțimi

Varianta C++#include<iostream.h>#include<conio.h>class multime{public:int v[100],n,u[100],w[200],s[100],m,p,i,j,ok,k,gasit;void citire();void afisare();void reuniune();void intersectie();};void multime::citire(){cout<<"dati nr. de elemente din 1 vector ";cin>>m;cout<<"dati de elementele din 1 vector ";for(i=0;i<m;i++) cin>>u[i];cout<<"dati nr. de elemente din 2 vector ";cin>>n;cout<<"dati elementele din 2 vector ";for(i=0;i<n;i++) cin>>v[i];}void multime::intersectie(){k=0;for(i=0;i<=n;i++){gasit=0;for(j=0;j<=m;j++) if(v[i]==u[j]) gasit=1;if(gasit==1){k++;s[k]=v[i];}}cout<<"intersectia:";for(i=1;i<=k;i++) cout<<s[i]<<" "; }

void multime::reuniune(){for(i=0;i<m;i++) w[i]=u[i];p=m;for(i=0;i<n;i++){ok=1;for(j=0;j<m;j++)

49

Page 50: Raport_Exemplu (1)

if(v[i]==u[j]) ok=0;if(ok) { w[p]=v[i]; p++;}}cout<<"reuniunea:"<<endl;for(i=0;i<p;i++)cout<<w[i]<<" ";cout<<endl;}main(){multime a;a.citire();a.reuniune();a.intersectie();getch();}Rezultat

Problema 14: Sa se implementeze clasa dreptunghi cu lungime, lățime, constructor implicit, constructor cu param. Definiți funcția friend pe calcul ari si perimetru

Varianta C++#include<iostream.h>#include<conio.h>#include<stdlib.h>#include<iomanip.h>class dreptunghi{public:double lung, lat;void arie();void perimetru();void citire();void afisare();friend void calcul(dreptunghi a);

50

Page 51: Raport_Exemplu (1)

dreptunghi(){lung=lat=0;}};

void dreptunghi::arie(){cout<<"aria dreptunghiului: "<<lung*lat<<endl;}

void dreptunghi::perimetru(){cout<<"Perimetrul dreptunghiului: "<<(2*lung)+(2*lat)<<endl;}

void dreptunghi::citire(){cout<<"Lungime= "; cin>>lung;cout<<"Latime= "; cin>>lat; }

void dreptunghi::afisare(){cout<<"Lungime= "<<lung<<endl;cout<<"Latime= "<<lat<<endl;}

void calcul(dreptunghi a){a.arie(); a.perimetru();}

main(){dreptunghi a;a.citire();a.afisare();calcul(a);getch();}Rezultat

51

Page 52: Raport_Exemplu (1)

Lucrare practică Nr.4 Formarea deprinderilor de lucru în echipe

Problema …: 5) Se citește o matrice pătratica de ordin n formata din numere naturale.Se calculează sume pornind de pe prima linie prin deplasări pe linia următoare in unul dintre cei 3 vecini de pe aceeași coloana sau de pe cele 2 alăturate. Găsiți suma maxima care se poate calcula astfel si care sunt valorile din care se obține suma maxima.Exemplu:n=48 1 5 83 5 6 16 3 4 85 6 1 4suma maxima este 26si se obține din valorile 8 6 8 4

Varianta C++#include <fstream.h>ifstream fin ("date.txt");ofstream fout ("date.out");

void citire(int &n, int a[100][100]){int i,j;fin>>n;for(i=1;i<=n;i++)for(j=1;j<=n;j++)fin>>a[i][j];}

void drum(int n, int a[100][100], int s[100][100], int i, int j){if(i>0){if(s[i][j]-s[i-1][j+1]==a[i][j]) drum (n,a,s,i-1,j+1);else if(s[i][j]-s[i-1][j-1]==a[i][j]) drum (n,a,s,i-1,j-1);else drum (n,a,s,i-1,j);fout<<a[i][j]<<" ";}}

int main(){int i,j,a[100][100]={0},n,s[100][100]={0},maxx;

52

Page 53: Raport_Exemplu (1)

citire(n,a);for(j=1;j<=n;j++) s[1][j]=a[1][j];for(i=2;i<=n;i++)for(j=1;j<=n;j++)if(s[i-1][j]<=s[i-1][j-1] && s[i-1][j+1]<=s[i-1][j-1]) s[i][j]=a[i][j]+s[i-1][j-1];else if(s[i-1][j]>=s[i-1][j-1] && s[i-1][j]>=s[i-1][j+1]) s[i][j]=a[i][j]+s[i-1][j];else s[i][j]=a[i][j]+s[i-1][j+1];maxx=0;int mj;for(j=1;j<=n;j++) if(s[n][j]>maxx) { maxx=s[n][j]; mj=j;}fout<<maxx<<endl;drum(n,a,s,n,mj);fin.close();fout.close();}Rezultat

Problema 9: Implementați o clasa care calculează suma elementelor de pe fiecare coloana si le introduce într-un vector

Varianta C++#include<iostream.h>#include<conio.h>class matrice{public:void suma(int n, int a[100][100]);};

void matrice::suma(int n, int a[100][100]){

53

Page 54: Raport_Exemplu (1)

int i,j,s,b[100];for(i=0;i<n;i++){s=0;cout<<endl;for(j=0;j<n;j++)s=s+a[i][j];b[i]=s;cout<<b[i];}}

main(){int i,j,n, a[100][100];matrice c;cout<<"N= "; cin>>n;for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>a[i][j];

cout<<"Matricea:"<<endl;for(i=0;i<n;i++){cout<<endl;for(j=0;j<n;j++)cout<<a[i][j];}c.suma(n,a);getch();}Rezultat

54

Page 55: Raport_Exemplu (1)

Concluzie

Anul acesta la practica eu am aflat mai bine cum funcționează un program si care este structura programului cu obiecte.

De asemenea eu am înțeles mai bine noțiunea de POO, obiecte si clase.

Am înțeles cum sa fac programul ca el sa fie mai scurt si mai eficient si mai econom.

Practica a fost o perioada foarte importanta din cauza ca in timpul ei noi ne-am aprofundat mai mult in rezolvarea problemelor si deoarece am putut pune la încercare cunoștințele acumulate timp de 2 ani de învățămînt in domeniul.

In cadrul lecțiilor era posibila doar examinarea principiilor generale de elaborare a programelor, iar la practica am avut posibilitatea sa evoluționez ca viitor programator.

55