Rezolvare Laboratoare Pe Tot Anu

78
TEMA LABORATOR 2 1. Convertiti: - în baza 8 numarul 347; - în baza 16 numarul 2755; - în baza 2 numarul 20. 347(10)=533(8) 2755(10)=AC3(16) 20(10)=10100 2.Convertiti în baza 10 numerele: 10001012, 3578, C7A16 1000101(2)=69(10) 357(8)=239(10) C7A(16)=3194(10) 3. Efectuati urmatoarele operatii: a) FA16+2316= b) 1101 00102 + 1110 11012= c) 11768-7238= a) FA(16)+23(16) = 250(10)+35(10) = 285(10) = 11D(16) b) 11010010(2)+11101101(2) = 210(10)+237(10) = 447(10) = 110111111(2) c) 1176(8)-723(8) = 638(10)-467(10) = 171(10) = 253(8) 4.Convertiti numerele din baza 2 în baza 8 si apoi 16: a) 10101010,110010 b) 1100010,11101 a) 10101010,110010 (b2) = 252,62 (b8) = AA,C8 (b16) b) 1100010,11101 (b2) = 142,72 (b8) = 62,E8 (b16) 5.Convertiti numarul 0,63298510 în baza 16. 0.632985 (b10) = 0,A20B4E11DB (b16) 7.Considerând doua numere întregi determinati cmmdc folosind algorimul lui Euclid. Algoritmul lui Euclid: { Input n1, n2 If n1 > n2 Then deimp = n1 imp = n2 Else deimp = n2 imp = n1 EndIf rest=imp While rest != 0 Do 1

description

Rezolvare

Transcript of Rezolvare Laboratoare Pe Tot Anu

Page 1: Rezolvare Laboratoare Pe Tot Anu

TEMA LABORATOR 21. Convertiti:- în baza 8 numarul 347;- în baza 16 numarul 2755;- în baza 2 numarul 20.

347(10)=533(8)2755(10)=AC3(16)20(10)=10100

2.Convertiti în baza 10 numerele: 10001012, 3578, C7A161000101(2)=69(10)357(8)=239(10)C7A(16)=3194(10)

3. Efectuati urmatoarele operatii:a) FA16+2316=b) 1101 00102 + 1110 11012=c) 11768-7238=

a) FA(16)+23(16) = 250(10)+35(10) = 285(10) = 11D(16)b) 11010010(2)+11101101(2) = 210(10)+237(10) = 447(10) = 110111111(2)c) 1176(8)-723(8) = 638(10)-467(10) = 171(10) = 253(8)

4.Convertiti numerele din baza 2 în baza 8 si apoi 16:a) 10101010,110010b) 1100010,11101

a) 10101010,110010 (b2) = 252,62 (b8) = AA,C8 (b16)b) 1100010,11101 (b2) = 142,72 (b8) = 62,E8 (b16)

5.Convertiti numarul 0,63298510 în baza 16. 0.632985 (b10) = 0,A20B4E11DB (b16)

7.Considerând doua numere întregi determinati cmmdc folosind algorimul lui Euclid.

Algoritmul lui Euclid:{Input n1, n2If n1 > n2 Then deimp = n1 imp = n2Else deimp = n2 imp = n1EndIfrest=impWhile rest != 0 Do rest = deimp modulo imp deimp = imp imp = restEndWhileOutput deimp}

8.Descrieti algoritmii pentru descompunerea unui numar în factori primi, determinareatuturor numerelor prime pâna la un n citit etc.

1

Page 2: Rezolvare Laboratoare Pe Tot Anu

Algoritm de descompunere a unui numar n in factori primi:{Input ni=2;While i<n do c=0 if n modulo i=0 then While n modulo i=0 do c=c+1 n=n/i EndWhile output i,'^',c,' ' EndIf i=i+1EndWhile} Algoritm de determinare a tuturor numerelor prime mai mici decat un n citit:{Input n For i=2 to n do prim=1 For j=2 to i/2 do If i modulo j=0 then prim=0 EndIf EndFor If prim=1 then output i,' ' EndIfEndFor

Laborator 2

1/*determinarea mediei aritmetice a trei numere neintregi */#include<iostream>using namespace std;void main(void){/*declararea celor 3 numere si a variabilei media*/float a,b,c,med;/*citirea de la tastatura a celor 3 numere*/cout<<"a=";cin>>a;cout<<"b=";cin>>b;cout<<"c=";cin>>c;/*calcularea mediei*/med=(a+b+c)/3;/* afisarea medie*/cout<<"med este"<<"\n"<<med;}

2/*determinarea mediei geometrice a doua numere intregi*/# include <iostream>#include <math.h>using namespace std;

2

Page 3: Rezolvare Laboratoare Pe Tot Anu

void main (void)/*declararea celor doua numere si a variabilei media geometrica*/{float a,b,mg;cout <<"a=";cin >>a;cout <<"b=";cin>>b;/*calcularea mediei geometrice*/mg= sqrt(a*b);/*afisarea mediei geometrice*/cout <<"mg este"<<"\n"<<mg;}

3/*definirea unei variabile intregi care va initializa cu valori constante*/#include<iostream>using namespace std;

void main(void)/*declararea variabilei intregi*/{int x=2;/*afisarea rezultatului cu ajutorul supraincarcarii operatorului << si a lui cout*/cout<<"\n Numarul citit este:"<<x;}

4/*definirea unui sir de caractere ce va fi afisat cu cout si definirea altor siruri de caractere folosind escape*/#include<iostream>using namespace std;

void main(void){ char a[255],b[255],c[255]; cout<<"\n dati sirul de caractere:"; cin>>a; cout<<a<<endl; cout<<"\n dati sirul de caractere:"; cin>>b; cout<<"Sirul de caractere este afisat pe rand nou: "; cout<<"\n"<<b<<endl; cout<<"\n dati sirul de caractere:"; cin>>c; cout<<"Sirul de caractere este aliniat la dreapta: "; cout<<"\t"<<c<<endl;}

Labrator 3

1.Realizati o aplicatie care citeste de la intrarea standard doua valori pentru variabilele R1 si R2, reprezentand valoarea rezistentelor R1 si R2, iar apoi apeleaza functii ce calculeaza rezistenta echivalenta gruparii serie, respectiv gruparii paralel, dupa care afiseaza valorile returnate cu 3 zecimale si aliniate la dreapta.

#include <iostream> #include <stdio.h> using namespace std; float serie(float,float); float paralel (float,float); void main(void){ float r1,r2,s,p;

3

Page 4: Rezolvare Laboratoare Pe Tot Anu

printf("\n rezistenta 1="); scanf("%f",&r1); printf("\ rezistenta 2="); scanf("%f",&r2); s=serie(r1,r2); p=paralel(r1,r2); printf("\n rezistenta serie este:\n%5.3f",s); printf("\n rezistenta paralel este:\n%5.3f",p); } float serie(float a,float b) {return a+b;} float paralel(float a, float b) {return a*b/(a+b); }

2.Scrieti o aplicatie care citeste de la intrarea standard doua valori pentru variabilele C1 si C2, reprezentand valori de capacitati, iar apoi apeleaza functii ce calculeaza capacitatea echivalenta gruparii serie, respectiv gruparii paralel, dupa care afiseaza valorile returnate cu 4 zecimale si aliniere la stanga. #include <stdio.h> #include <iostream> using namespace std; float serie(float,float); float paralel (float,float); void main(void); float c1,c2,s,p; printf("\n capacitate 1="); scanf("%f",&c1); printf("\ capacitate 2="); scanf("%f",&c2); s=serie(c1,c2); p=paralel(c1,c2); printf("\n capacitate serie este:\n%-6.4f",s); printf("\n capacitate paralel este:\n%-6.4f",p); float paralel(float a,float b); return a+b; float serie(float a, float b); {return a*b/(a+b) }

3.Cititi de la tastatura doua valori intregi care reprezinta catetele unui triunghi dreptunghi. Determinati ipotenuza cand se cunosc catetele si perimetrul triunghiului. Afisati rezultatul pe linii diferite

#include <stdio.h> #include <iostream> #include <math.h> using namespace std; float perimetru(float, float, float); float ipotenuza(float, float); void main(void) float a,b,i,p; printf("\n cateta 1 este:"); scanf("%f",&a); printf("\n cateta 2 este:"); scanf("%f",&b); i=ipotenuza(a,b); p=perimetru(a,b,i); printf("\nipotenuza este:%f",i);

4

Page 5: Rezolvare Laboratoare Pe Tot Anu

printf("\nprimetru este:%f",p); float perimetru(float x, float y, float z); return x+y+z; float ipotenuza(float c, float d);{ return sqrt(c*c+d*d);}

4.Cititi de la tastatura Cadoua valori intregi a si b(a!=0), unde a si b sunt coeficientii ecuatiei ax+b=0. Rezolvati ecuatia si afisati rezultatul

#include <stdio.h> #include <iostream> #include <math.h> using namespace std; void main(void) int a,b; float s; printf("\na="); scanf("%d",&a); printf("\nb="); scanf("%d",&b); s=-b/a; printf("\n solutia ecuatiei este:%f",s);

5.Considerand ca in problema 1 valorile intregi sunt capacitati, calculati valorile corespunzatoare gruparii serie si paralel. Includeti si situatia cu rezistentele si cea cu capacitatile intr-un acelasi program

#include <iostream> #include <stdio.h> using namespace std; float serie(float,float); float paralel (float,float); float serie2(float,float); float paralel2(float,float); void main(void) float r1,r2,s,p, c1, c2, ss, pp; printf("\n rezistenta 1="); scanf("%f",&r1); printf("\ rezistenta 2="); scanf("%f",&r2); printf("\n capacitate 1="); scanf("%f",&c1); printf("\ capacitate 2="); scanf("%f",&c2); s=serie(r1,r2); p=paralel(r1,r2); printf("\n rezistenta serie este:\n%5.3f",s); printf("\n rezistenta paralel este:\n%5.3f",p); ss=serie2(c1,c2); pp=paralel2(c1,c2); printf("\n capacitate serie este:\n%-6.4f",s); printf("\n capacitate paralel este:\n%-6.4f",p); float serie(float a,float b) return a+b; float paralel(float a, float b) return a*b/(a+b); float paralel2(float a,float b)r return a+b; float serie2(float a, float b) return a*b/(a+b);

6.

5

Page 6: Rezolvare Laboratoare Pe Tot Anu

//Se citesc de la tastatura numele a 2 studen?i ?i nota fiecaruia la programare. Sa se afi?eze pe linii separate numele fiecarui student într-un câmp de afi?are cu dimensiunea 20, aliniat la dreapta, respectiv la stânga ?i media notelor lor, cu o precizie de 2 zecimale.#include<stdio.h>float medie(float n1,float n2);int main(){

char nume1[255];char nume2[255];float n1,n2;float m;printf("Dati prinul nume\n");scanf("%s", nume1);printf("\nDati al doilea nume\n");scanf("%s", nume2);printf("\nDati nota primului elev\n");scanf("%f", &n1);printf("\nDati nota pt al doilea elev\n");scanf("%f", &n2);printf("\nElevul1:%+20.20s", nume1);printf("\nElevul2:%+20.20s", nume2);//m=(n1+n2)/2;m=medie(n1,n2);printf("\n media:%-.2f", medie(n1,n2));

}float medie(float n1,float n2){

float med;med=(n1+n2)/2;return med;

}7./*Se cite.te de la tastatura un numar întreg, ce reprezinta raza unui cerc. Sa se afi.eze lungimea .i aria cercului de raza data, cu o precizie de 3 zecimale, într-un câmp de afi.are cu dimensiunea 10. Pentru valoarea lui PI defini.i o constanta simbolica.*/#include<stdio.h>#define Pi 3.14159float aria(float R);float lungime(float R);int main(){

float R,A,L;printf("Dati valori razei ");scanf("%f", &R);printf("\nAria cercului:%10.3f", aria(R));printf("\nLungimea cercului:%10.3f", lungime(R));

}float aria(float R){

float A;A=Pi*R*R;return A;

}float lungime(float R){

float L;L=2*Pi*R;return L;

}

8. //Durata calatoriei#include<iostream>using namespace std;int main(){

int o1,o2,m1,m2;cout<<"Trenul din Cluj pleaca la ora: ";cin>>o1;cout<<" si la minutul: ";cin>>m1;cout<<endl;cout<<"Trenul ajunge in Brasov la ora: ";cin>>o2;cout<<" si minutul: ";cin>>m2;cout<<"Durata calatoriei a fost:";if(m1>m2){

6

Page 7: Rezolvare Laboratoare Pe Tot Anu

o2=o2-1;m2=m2+60;

cout<<(o2-o1)<<"ore, "<<(m2-m1)<<"minute";}else cout<<(o2-o1)<<"ore, "<<(m2-m1)<<"minute";

return 0;}9./*Douã maºini se deplaseazã una spre cealaltã cu vitezele v1 ºi v2, plecând din douã oraºe situate la distanþa d=100km. Vitezele celor douã ma.ini se citesc de la tastaturã. Afisa.i timpul dupã care se întâlnesc, exprimat în minute.*/#include<iostream>using namespace std;int main(){

float v1,v2,d;float t;cout<<"Viteza masinii unu(km/h)=";cin>>v1; cout<<"Viteza masinii doi(km/h)=";cin>>v2;cout<<"Distanta dintre cele doua masini(km)=";cin>>d;t=d/(v1+v2);cout<<"Timpul pana cand cele doua masini se intalnesc este=";t=t*60;cout<<t<<" minute";

}

Laborator nr 5

1. /*afisarea valorii polinomului de gradul 3 pentru o anumita valoare a variabilei reale x*/#include<iostream>using namespace std;void main(void){/*declararea numerelor si a variabilei x*/ int a,b,c,d,x,val; cout<<"\n Dati coeficientul a:"; cin>>a; cout<<"\n Dati coeficientul b:"; cin>>b; cout<<"\n Dati coeficientul c:"; cin>>c; cout<<"\n Dati coeficientul d:"; cin>>d; cout<<"\n Dati valoarea lui x:"; cin>>x;

/*afisarea polinomului de gradul 3 pentru o anumita valoare a lui x*/ cout<<"\n Polinomul este: "<<a<<"*"<<x<<"^3+"<<b<<"*"<<x<<"^2+"<<c<<"*"<<x<<"+"<<d<<endl; val=a*x*x*x+b*x*x+c*x+d;/*afisarea valorii polinomului*/ cout<<"\n Valoarea polinomului este "<<val<<endl;} 2./*citirea lungimilor laturilor unui triunghi folosind variabile intregi si afisarea ariei triunghiului ca valoare reala*/#include<iostream>using namespace std;#include<math.h>void main(void){/*declararea variabilelor*/ int a,b,c;

7

Page 8: Rezolvare Laboratoare Pe Tot Anu

float arie,sp; cout<<"\n Dati latura a:"; cin>>a; cout<<"\n Dati latura b:"; cin>>b; cout<<"\n Dati latura c:"; cin>>c;/*declararea ariei triunghiului ca valoare reala*/ sp=(a+b+c)/2; arie=sqrt((float)(sp*(sp-a)*(sp-b)*(sp-c)));/*afisarea ariei triunghiului ca valoare reala*/ cout<<"\n Aria triunghiului este: "<<arie<<endl;}

3./*afisarea valorii bitilor unei variabile de tip unsigned char aplicand succesiv operatorul de deplasare dreapta si operatorul % */#include <iostream>using namespace std;void main(void) {/*declararea bitilor si a variabilei de tip unsigned char*/ unsigned char a; int i; cout<<"Introduceti un caracter: "; cin>>a; for(i=1;i<=sizeof(a)*8;i++) {/*afisarea variabilei de tip unsigned char aplicand succesiv operatorul de deplasare dreapta si operatorul % */ cout<<"\n Bitul de pe pozitia "<<i<<" este "<<a%2; a=a>>1; }}

4Sa se scrie un program care monitorizeaza un canal de 16/32/64 biti. Pentru aceasta cititi de latastatura o valoare întrega fara semn a care va fi afisata în zecimal, binar, octal si hexazecimal.Folositi o functie pentru conversia numerelor din baza 10 în baza 2. Implementati o alta functienumita getsets() care primeste trei valori ca parametri:- x: valoarea citita de la tastatura- p: pozitia unui bit din cei 16/32 sau 64 de biti (numarând de la dreapta)- n: numarul de biti care vor fi extrasi din tabel.Functia returneaza, aranjati spre dreapta, acei n biti ai valorii x, pornind de la pozitia p, undep>8*sizeof(x) si p>n. Afisati rezultatul în binar, octal si hexazecimal.

#include <iostream>using namespace std;#include<stdio.h>unsigned short int v[32];unsigned convert(unsigned int a) { unsigned short int aux[32],poz=-1; while (a>0) { aux[++poz] = a%2; a/=2; } for(int i=0;i<=poz;i++) { v[poz-i]=aux[i]; } return poz;}

8

Page 9: Rezolvare Laboratoare Pe Tot Anu

void main(void) { unsigned int a,dim; cout<<"Introduceti o voloare intreaga fara semn: "; cin>>a; printf("Numarul introdus este: %d (baza 10), ",a); dim = convert(a); for(int i=0;i<=dim;i++) { cout<<v[i]; } cout<<" (baza 2), "; printf("%o (baza 8), %x (baza 16)",a,a);}

5./*citirea de la intrarea standard a unui numar intreg si afisarea numarului de zerouri din reprezentarea sa binara*/

#include <iostream>using namespace std;#include<stdio.h>void main(void) {/*declararea numarului intreg si zero*/ int a,nr=0; cout<<"Introduceti un numar intreg: "; cin>>a; while (a>0) { if(!(a%2)) nr++; a=a>>1; }/*afisarea numarului de zerouri din reprezentarea binara a numarului introdus*/ printf("Numarul de zerouri din reprezentarea binara a numarului introdus este: %d",nr);}

LABORATORUL NR.6

1. Se citesc trei numere de la tastatura (a,b si c). Sa se determine aria dreptunghiului a carui laturi sunt a si b si verificati daca diagonala dreptunghiului este egala cu c.

#include <iostream>#include <math.h>using namespace std;void main(void){float a,b,c,aria,diag;cout<<"Introduceti trei numere reale de la tastatura\n";cout<<"Primul numar: ";cin>>a;cout<<"Al doilea numar: ";cin>>b;cout<<"Al treilea numar: ";cin>>c;aria = a*b;cout<<"Aria dreptunghiului determinat de laturile de lungime "<<a<<" si "<<b<<" este: "<<aria<<endl<<endl;diag = sqrt(a*a+b*b);if(c==diag)cout<<"Diagonala dreptunghiului discutat este egala cu cel de al treilea numar introdus ("<<c<<")";

9

Page 10: Rezolvare Laboratoare Pe Tot Anu

elsecout<<"Diagonala dreptunghiului discutat nu este egala cu cel de al treilea numar introdus ("<<c<<")";cout<<endl<<endl;}

2. Sa se scrie un program care verifica daca un numar este patrat perfect

#include <iostream>using namespace std;void main(void){float nr;int i;cout<<"Introduceti un numar: ";cin>>nr;for(i=1;i<nr/2;i++)if(i*i == nr){cout<<endl<<endl<<"Numarul introdus este patratul perfect al numarului "<<i<<endl;return;}cout<<endl<<endl<<"Numarul introdus nu este patrat perfect"<<endl;}

3. Sa se scrie un program care calculeaza a^n, unde n este citit de la consola.

#include <iostream>using namespace std;void main(void){float a,result=1;unsigned int n; //se considera n numar naturalcout<<"Introduceti un numar real: ";cin>>a;cout<<endl<<"Introduceti un numar natural: ";cin>>n;for(int i=0;i<n;i++)result *= a;cout<<a<<" la puterea "<<n<<" este egal cu: "<<result<<endl;}

4. Sa se scrie de la tastatura un program care citeste de la tastatura o valoare intreaga si calculeaza n!.

#include <iostream>using namespace std;void main(void){float a,result=1;unsigned int n; //se considera n numar naturalcout<<"Introduceti un numar real: ";cin>>a;cout<<endl<<"Introduceti un numar natural: ";cin>>n;for(int i=0;i<n;i++)result *= a;cout<<a<<" la puterea "<<n<<" este egal cu: "<<result<<endl;}

5. Sa se scrie un program care:

10

Page 11: Rezolvare Laboratoare Pe Tot Anu

- determina cel mai mare numar prim mai mic decat numarul dat- determina toate numerele prime mai mici decat numarul dat

#include <iostream>#include <math.h>using namespace std;void main(void){unsigned int x,last,prim;cout<<"Introduceti un numar natural: ";cin>>x;if(x>2){cout<<endl<<endl<<"Numere prime mai mici decat "<<x<<":\n\t";cout<<2;last = 2;} else {cout<<"Nu exista numere prime mai mici decat "<<x<<endl<<endl;return;}for(unsigned int d=3;d<x;d+=2){prim = 1;for(unsigned int i=3;i<=(unsigned int)sqrt((float)d);i+=2){if(d%i==0){prim = 0;break;}}if(prim){cout<<" "<<d;last = d;}}cout<<endl<<endl<<"Cel mai mare numar prim mai mic decat "<<x<<" este: "<<last<<endl<<endl;}

6. Sa se scrie un program care determina cel mai mare divizor comun a doi intregi.

#include <iostream>using namespace std;void main(void){int a,b;cout<<"Introduceti doua numere intregi: ";cout<<endl<<"\tPrimul numar: ";cin>>a;cout<<endl<<"\tAl doilea numar: ";cin>>b;while(a!=b)if(a>b)a-=b;elseb-=a;cout<<endl<<endl<<"Cel mai mare divizor comun a numerelor date este: "<<a<<endl;}

11

Page 12: Rezolvare Laboratoare Pe Tot Anu

7. Sa se scrie un program care determina toti divizorii unui numar.

#include <iostream>using namespace std;void main(void){unsigned int x;cout<<"Introduceti un numar natural: ";cin>>x;

cout<<"Divizorii numarului "<<x<<" sunt:\n\t1 ";for(int d=2;d<=x;d++)if(!(x%d))cout<<" "<<d;cout<<endl;}

8. Calculati produsul a doua numere intregi folosind numarul corespunzator de adunari.

#include <iostream>using namespace std;void main(void){int x,y,produs=0,semn = 1;cout<<"Introduceti doua numere intregi: ";cout<<endl<<"\tPrimul numar: ";cin>>x;cout<<endl<<"\tAl doilea numar: ";cin>>y;if(y<0){y*=-1;semn = -1;}for(int i=0;i<y;i++)produs += x;produs *= semn;cout<<endl<<"Produsul celor doua numere este: "<<produs<<endl;}

9. Sa se scrie un program care determina catul impartirii a doi intregi folosind scaderi succesive.

#include <iostream>using namespace std;void main(void){int x,y,catul=0,semnX=1,semnY=1;cout<<"Introduceti doua numere intregi: ";cout<<"\n\tDeimparititul: ";cin>>x;cout<<"\n\tImpartitorul: ";cin>>y;if(y==0){cout<<"\nImpartitorul nu poate fi 0\n";return;}if(x<0)

12

Page 13: Rezolvare Laboratoare Pe Tot Anu

{x*=-1;semnX = -1;}if(y<0){y*=-1;semnY = -1;}while(x>=y){x-=y;catul++;}catul*=semnX*semnY;cout<<"Catul impartirii celor doua numere este: "<<catul<<endl;}

10. Sa se scrie un program care determina numarul de cifre care compun un numar intreg citit de la tastatura.

#include <iostream>using namespace std;void main(void){int x,cifre=0;cout<<"Introduceti un numar intreg: ";cin>>x;while(x>0){cifre++;x/=10;}cout<<"\nNumarul dat are "<<cifre<<" cifre."<<endl;}

11. Sa se scrie un program care citeste de la tastatura n numere intregi. Afisati toate numerele impare din sir.

#include <iostream>using namespace std;#define MAX 100void main(void){int v[MAX];unsigned n;cout<<"Introduceti dimensiunea sirului: ";cin>>n;if(n>MAX){cout<<"\nDimensiune invalida\n";return;}cout<<"\nIntroduceti numerele sirului: ";for(unsigned i=0;i<n;i++){cout<<"\n\tNumarul "<<i+1<<": ";cin>>v[i];}cout<<"\nNumerele impare din sirul dat sunt: ";for(unsigned i=0;i<n;i++)

13

Page 14: Rezolvare Laboratoare Pe Tot Anu

if(v[i]%2)cout<<v[i]<<" ";cout<<endl;

LABORATOR NR.7

1.//* determinarea valorii medii a elementelor pozitive/negative dintr-un vector

#include <iostream>using namespace std;#define MAX 100unsigned citire(int x[]);float valMedieNegative(int x[],unsigned n);float valMediePozitive(int x[],unsigned n);void main(void){int x[MAX];unsigned n; n = citire(x); cout<<"Valorea medie a numerelor negative din sirul dat este: "<<valMedieNegative(x,n)<<endl; cout<<"Valorea medie a numerelor pozitive din sirul dat este: "<<valMediePozitive(x,n)<<endl;}unsigned citire(int x[]){ unsigned n; cout<<"Introduceti dimensiunea vectorului: "; cin>>n; cout<<"Introduceti elementele vectorului"; for(unsigned i=0;i<n;i++) { cout<<"\n\tElementul "<<i+1<<": "; cin>>x[i]; } return n;}float valMedieNegative(int x[],unsigned n){ float sum = 0; unsigned count = 0; for(unsigned i=0;i<n;i++) if(x[i]<0) { sum+=x[i]; count++; } if(!count) return 0; return sum/count;}float valMediePozitive(int x[],unsigned n){ float sum=0; unsigned count = 0; for(unsigned i=0;i<n;i++) if(x[i]>=0) { sum+=x[i];

14

Page 15: Rezolvare Laboratoare Pe Tot Anu

count++; } if(!count) return 0; return sum/count;}

2.//* determinarea celui mai mic element pozitiv dintr-un vector

#include <iostream>using namespace std;#define MAX 100unsigned citire(int x[]);unsigned minElemPozitiv(int x[],unsigned n);void main(void){int x[MAX];unsigned n,min; n = citire(x); min = minElemPozitiv(x,n); if(min==-1) cout<<"Nu exista numere pozitive in sirul dat\n"; else cout<<"Cel mai mic element pozitiv din sirul dat este: "<<min<<endl;}unsigned citire(int x[]){ unsigned n; cout<<"\nIntroduceti dimensiunea vectorului: "; cin>>n; cout<<"Introduceti elementele vectorului"; for(unsigned i=0;i<n;i++) { cout<<"\n\tElementul "<<i+1<<": "; cin>>x[i]; } return n;}unsigned minElemPozitiv(int x[],unsigned n){ int min=-1; for(unsigned i=0;i<n;i++) if(x[i]>0 && (min==-1 || x[i]<min)) min = x[i]; return min;}

3.//* citirea de la tastatura a unui sir de 10 valori intregi//* definirea unei functii care primeste sirul ca parametru si apoi il afiseaza ordonat crescator

#include <iostream>using namespace std;void ord(int x[]);void main(void){int x[10]; cout<<"Introduceti zece elemente intregi"; for(int i=0;i<10;i++) {

15

Page 16: Rezolvare Laboratoare Pe Tot Anu

cout<<"\n\tElementul "<<i+1<<": "; cin>>x[i]; } ord(x);}void ord(int x[]){ int aux; for(int i=0;i<10;i++) for(int j=9;j>i;j--) if(x[j]<x[j-1]) { aux = x[j]; x[j] = x[j-1]; x[j-1] = aux; } cout<<"\nSirul dat ordonat crescator este: "; for(int i=0;i<10;i++) cout<<x[i]<<" ";}

4.//* definirea unei parole(in format sir de caractere)//* citirea in mod repetat sirurile de caractere introduse de la tastatura pana cand utilizatorul scrie parola corecta//* afisarea numarului de incarcari pana la introducereaparolei carecte

#include <iostream>using namespace std;int compare(char sir[],char parola[]);void main(void){char sir[255],parola[] = "parola";int result,count = 0; cout<<"Introduceti parola: "; do { cin>>sir; result = compare(sir,parola); if(result) { cout<<"Parola a fost introdusa corect dupa "<<count<<" incercari esuate."; break; } else { cout<<"Parola incorecta, va rugam reincercati: "; } count++; } while(true);}int compare(char sir[],char parola[]){ int i=0; while(sir[i]!=0 && parola[i]!=0) { if(sir[i]!=parola[i]) return 0; i++; } if(sir[i]!=0 || parola[i]!=0) return 0;

16

Page 17: Rezolvare Laboratoare Pe Tot Anu

return 1;}

5.//* citirea de la tastatura a doua siruri de caractere reprezentand numele si prenumele unei persoane//* afisarea sirurilor cu majuscule separate prin 2 spatii de tabulare

#include <iostream>using namespace std;void main(void){char nume[255],prenume[255]; cout<<"Introduceti numele: "; cin>>nume; cout<<"Introduceti prenumele: "; cin>>prenume; if(nume[0]>=97) nume[0]-=32; if(prenume[0]>=97) prenume[0]-=32; cout<<endl<<nume<<"\t\t"<<prenume<<endl;}

6.//* definirea a doua matrice de valoriintregi unde dimensiunile si elementele matricelor sunt citite de la tastatura//* afisarea pozitiilor elementelor pare din fiecare matrice;//* afisarea sumei elementelor impare din ambele matrice;//* afisarea sumei matricelor;

#include <iostream>using namespace std;#define MAX 10void read(int v[MAX][MAX],int n,int m);void pozPare(int v[MAX][MAX],int n,int m);void sumaImpare(int v1[MAX][MAX],int v2[MAX][MAX],int n,int m);void sumaMatricelor(int v1[MAX][MAX],int v2[MAX][MAX],int n, int m);void main(void){ int v1[MAX][MAX],v2[MAX][MAX],n,m; cout<<"Introduceti dimensiunile matricelor: "; cin>>n>>m; cout<<"\nIntroduceti prima matrice"; read(v1,n,m); cout<<"\nIntroduceti matricea a doua"; read(v2,n,m); cout<<"\nPozitiile elementelor pare din matricea 1: "; pozPare(v1,n,m); cout<<"\nPozitiile elementelore pare din matricea 2: "; pozPare(v2,n,m); sumaImpare(v1,v2,n,m); cout<<"\nSuma matricelor este: \n"; sumaMatricelor(v1,v2,n,m); cout<<endl<<endl;}void read(int v[MAX][MAX],int n,int m){ for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cout<<"\tElementul "<<i+1<<" "<<j+1<<": "; cin>>v[i][j];

17

Page 18: Rezolvare Laboratoare Pe Tot Anu

}}

void pozPare(int v[MAX][MAX],int n,int m){ for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(v[i][j]%2==0) cout<<endl<<i+1<<" "<<j+1;}void sumaImpare(int v1[MAX][MAX],int v2[MAX][MAX],int n,int m){ int sum = 0; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(v1[i][j]%2) sum+=v1[i][j]; if(v2[i][j]%2) sum+=v2[i][j]; } cout<<"\n\nSuma elemtelor impare din cele doua matrici este: "<<sum;}void sumaMatricelor(int v1[MAX][MAX],int v2[MAX][MAX],int n,int m){ for(int i=0;i<n;i++) { cout<<endl; for(int j=0;j<m;j++) cout<<" "<<v1[i][j]+v2[i][j]; }}

7. //* citirea de la tastatura a elementelor unei matrice de elementele de tip float cu dimensiunea 3x3//* rearanjarea coloanelor matricei astfel incat suma elementelor de pe o anumita coloana sa fie mai mica decat suma elementelor de pe coloana urmatoare

#include <iostream>using namespace std;void swap(float v[3][3],int c1,int c2);void main(void){ float v[3][3],sum,s[3]; cout<<"Introduceti elemtele matricii 3x3\n"; for(int i=0;i<3;i++) for(int j=0;j<3;j++) { cout<<"\tElementul "<<i+1<<" "<<j+1<<": "; cin>>v[i][j]; } for(int j=0;j<3;j++) { sum = 0; for(int i=0;i<3;i++) sum += v[i][j]; s[j] = sum; } cout<<endl; if(s[0]>s[1])

18

Page 19: Rezolvare Laboratoare Pe Tot Anu

{ if(s[0]>s[2]) { swap(v,0,2); if(s[1]<s[2]) swap(v,0,1); } else { swap(v,0,1); } } else { if(s[1]>s[2]) swap(v,1,2); } for(int i=0;i<3;i++) { cout<<endl; for(int j=0;j<3;j++) cout<<v[i][j]<<" ";

}}void swap(float v[3][3],int c1,int c2){ float aux; for(int i=0;i<3;i++) { aux = v[i][c1]; v[i][c1]=v[i][c2]; v[i][c2]=aux; }}

TEMA LABORATOR NR. 8

1.//*scrierea unui program care citeste de la tastatura un sir de caractere folosind pointeri si sa se afiseze sirul obtinut prin eliminarea caracterelorcare se repeta din sir

#include <stdio.h>void main(void){ char sir[225],*c=sir,sirClean[255],*cC=sirClean; int asci[255],i,k=0; printf("Introduceti un sir de caractere: "); scanf("%s",c); for(i=0;i<255;i++) asci[i] = 0; i=0; while(*(c+i)!=0) { if(!asci[*(c+i)]) { asci[*(c+i)] = 1; *(cC+(k++))=*(c+i); } i++; } *(cC+k) = 0; printf("%s",sirClean);}

19

Page 20: Rezolvare Laboratoare Pe Tot Anu

2. //*scrierea unui program care citeste de la tastatura 2 siruri de caractere si sa se afiseze numarul de caractere prin care difera cele doua siruri prin pointeri (numarul de caractere care exista in primul si nu exista in al doilea+numarul de caractere care exista in al doilea si nu exista in primul)

#include <stdio.h>void main(void){ char sir1[255],sir2[255],*c1=sir1,*c2=sir2; int asci1[255],asci2[255],i,s=0; printf("Introduceti doua siruri de caractere\n\tPrimul sir: "); scanf("%s",c1); printf("\n\tAl doilea sir: "); scanf("%s",c2); for(i=0;i<255;i++) { asci1[i]=0; asci2[i]=0; } i=0; while(*(c1+i)) { asci1[*(c1+(i++))] = 1; } i=0; while(*(c2+i)) asci2[*(c2+(i++))] = 1; for(i=0;i<255;i++) if(asci1[i] && asci2[i]) { asci1[i] = 0; asci2[i] = 0; } for(i=0;i<255;i++) { if(asci1[i]) s++; if(asci2[i]) s++; } printf("Numarul de caractere care difera in cele doua siruri este: %d\n",s);}

3.//*scrierea unui program C/C++ care citeste elementele a doi vectori intregi si afiseaza produsul scalar al acestora, folosind o functie care citeste de la tastatura si o functie care calculeaza produsul scalar,ambele sa utilizeze pointeri.Citirea numarului de elemente ale tabloului si afisarea rezultatului se va face cu functia main()

#include <iostream>using namespace std;#define MAX 100void citire(int *v,int n);int prodScalar(int *v1,int*v2,int n);void main(void){ int n,v1[MAX],v2[MAX]; cout<<"Introduceti dimensiunea vectorilor: "; cin>>n; if(n>=MAX) {

20

Page 21: Rezolvare Laboratoare Pe Tot Anu

cout<<"Dimensiune invalida\n"; return; } cout<<"Introduceti elementele primului vector\n"; citire(v1,n); cout<<"Introduceti elementele vectorului doi\n"; citire(v2,n); cout<<"\n\nProdusul scalar al celor doi vectori este: "<<prodScalar(v1,v2,n)<<endl;}void citire(int *v,int n){ int i; for(i=0;i<n;i++) { cout<<"\tElementul "<<i+1<<": "; cin>>*(v+i); }}

int prodScalar(int *v1,int *v2,int n){ int i,s=0; for(i=0;i<n;i++) s+= *(v1+i) * *(v2+i); return s;}

TEMA LABORATOR NR.9 1. Rezolvati problemele din laboratorul de aplicatii cu tablouri (laboratorul 7,problemele 2-8) folosind pointeri.

Lab7 prob1//*scrierea unui program pentru determinarea valorii medii a elementelor pozitive/negative dintr-un vector

#include<iostream>using namespace std;#define DIM 255void main(void){ int n,i,x=0,y=0; float b,c,a[DIM],s1=0,s2=0; cout<<"\n Introduceti dimensiunea vectorului:"; cin>>n; if(n>DIM) { cout<<"\n Dimensiune invalida!"<<endl; return; } else { for(i=0;i<n;i++) { cout<<"\n\t Introduceti elementul a["<<i+1<<"]: "; cin>>*(a+i); } for(i=0;i<n;i++) { if(*(a+i)>0)

21

Page 22: Rezolvare Laboratoare Pe Tot Anu

{ s1+=*(a+i); x++; } else if(*(a+i)<0) { s2+=*(a+i); y++; } } b=s1/x; c=s2/y; if(x==0) cout<<"\n Nu sunt elemente pozitive in sir!"<<endl; else cout<<"\n Media elementelor pozitive din sir este "<<b<<endl; if(y==0) cout<<"\n Nu sunt elemente negative in sir!"<<endl; else cout<<"\n Media elementelor negative din sir este "<<c<<endl; }}

Lab7 prob2//*scrierea unui program pentru determinarea celui mai mic element pozitiv dintr-un vector

#include<iostream>using namespace std;#define DIM 255void main(void){ int a[DIM],n,i,min; cout<<"\n Introduceti lungimea vectorului:"; cin>>n; for(i=0;i<n;i++) { cout<<"\n introduceti elementul "<<i+1<<": "; cin>>*(a+i); } min=*a; if(min<0) { for(i=1;i<n;i++) if(*(a+i)>=0) { min=*(a+i); break; for(i=0;i<n;i++) if(*(a+i)<min) min=*(a+i); } } else { for(i=1;i<n;i++) if(*(a+i)>0) if(*(a+i)<min) min=*(a+i);

22

Page 23: Rezolvare Laboratoare Pe Tot Anu

} cout<<"\n cel mai mic element pozitiv din sir este:"<<min<<endl;}

lab7 prob3//*citirea de la tastatura a unui sir de 10 valori intregi//*definirea unei functii care primeste sirul ca parametru si apoi il afiseaza ordonat crescator

#include<iostream>using namespace std;void sortare(int *a);void main(void){ int a[10],i; for(i=0;i<10;i++) { cout<<"\n introduceti elementul a["<<i<<"] = "; cin>>*(a+i); } cout<<"\n Sirul sortat este:"; sortare(a);}void sortare(int *a){ int aux,j,sortat; do { sortat=0; for(j=0;j<9;j++) if(*(a+j)>*(a+j+1)) { aux=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=aux; sortat=1; } }while(sortat!=0);for(j=0;j<=9;j++) cout<<*(a+j)<<" "; cout<<endl;}

lab7 prob4//*definirea unei parole (in format sir de caractere).//*citirea in mod repetat sirurile de caractere introduse de la tastatura, pana cand utilizatorul scrie parola corecta//*afisarea numarului de incercari pana la introducerea parolei corecte

#include<iostream>using namespace std;#include<string.h>void main(void){ char s[255],a[]="parola"; int i,j=0; cout<<"\n Introduceti parola:"; cin>>s;

23

Page 24: Rezolvare Laboratoare Pe Tot Anu

i=strcmp(s,a); if(i!=0) { cout<<"\n Ati introdus o parola gresita! Incercati din nou!"<<endl; j=1; while(i!=0) { cout<<"\n Introduceti din nou parola:"; cin>>s; i=strcmp(s,a); if(i!=0) { cout<<"\n Ati introdus o parola gresita! Incercati din nou!"<<endl; j++; } else cout<<"Parola corecta!"<<endl; } } else cout<<"\n Parola corecta!"<<endl;

cout<<"\n Ati introdus de "<<j<<" parola gresit!";}

lab7 prob5//*citirea de la tastatura a doua siruri de caractere reprezentand numele si prenumele unei persoane//*afisarea sirurilor cu majuscule separate prin 2 spatii de tabulare

#include<iostream>using namespace std;#include<string.h>void main(void){ char a[255],b[255]; cout<<"\n Introduceti numele:"; cin>>a; cout<<"\n Introduceti prenumele:"; cin>>b; cout<<"Numele si prenumele:"<<endl; cout<<strupr(a)<<"\t\t"<<strupr(b)<<endl;}

lab7 prob6//* definirea a doua matrice de valoriintregi unde dimensiunile si elementele matricelor sunt citite de la tastatura//* afisarea pozitiilor elementelor pare din fiecare matrice;//* afisarea sumei elementelor impare din ambele matrice;//* afisarea sumei matricelor;

#include<iostream>using namespace std;#define DIM 255void citire(int *s,int n,int m);void pozpare(int *a,int *b,int n,int m);void suma_elem_impare(int *a,int *b,int n,int m);void suma_matrice(int *a,int *b,int *s,int n,int m);void main(void){

24

Page 25: Rezolvare Laboratoare Pe Tot Anu

int a[DIM][DIM],b[DIM][DIM],s[DIM][DIM],n,m,*pa=&a[0][0],*pb=&a[0][0],*ps=&s[0][0]; cout<<"\n Introduceti dimensiunea matricei:"; cin>>n>>m; if(n>DIM || m>DIM) { cout<<"\n Dimensiunile introduse sunt incorecte!"; return; } else { cout<<"\n Introduceti elementele primei matrici:"; citire(pa,n,m); cout<<"\n Introduceti elementele celei de-a doua matrici:"; citire(pb,n,m); pozpare(pa,pb,n,m); suma_elem_impare(pa,pb,n,m); suma_matrice(pa,pb,ps,n,m); }}void citire(int *s,int n,int m){ for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cout<<"\n\t s["<<i<<"]["<<j<<"]= "; cin>>*(s+i*n+j); }} void pozpare(int *a,int *b,int n,int m){ cout<<"\n Pozitiile pare din prima matrice:"; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(*(a+i*n+j)%2==0) cout<<"\n\tElementul par "<<*(a+i*n+j)<<" se afla pe pozitia "<<i<<" "<<j; } cout<<endl; cout<<"\n Pozitiile pare din a doua matrice:"; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(*(b+i*n+j)%2==0) cout<<"\n\tElementul par "<<*(b+i*n+j)<<" se afla pe pozitia "<<i<<" "<<j; } cout<<endl;}void suma_elem_impare(int *a,int *b,int n,int m){ int s=0; for(int i=0;i<n;i++) for(int j=0;j<m;j++)nu { if(*(a+i*n+j)%2!=0) s+=*(a+i*n+j); } for(int i=0;i<n;i++) for(int j=0;j<m;j++) {

25

Page 26: Rezolvare Laboratoare Pe Tot Anu

if(*(b+i*n+j)%2!=0) s+=*(b+i*n+j); } cout<<"\n\n\n Suma elementelor impare din cele 2 matrici este "<<s<<endl; cout<<endl;}void suma_matrice(int *a,int *b,int *s,int n,int m){ for(int i=0;i<n;i++) for(int j=0;j<m;j++) *(s+i*n+j)=0;for(int i=0;i<n;i++) for(int j=0;j<m;j++) *(s+i*n+j)=*(a+i*n+j)+*(b+i*n+j); cout<<"\n Suma celor matrici este:"<<endl; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) cout<<*(s+i*n+j)<<" "; cout<<endl; }}

lab7 prob7//* citirea de la tastatura a elementelor unei matrice de elementele de tip float cu dimensiunea 3x3//* rearanjarea coloanelor matricei astfel incat suma elementelor de pe o anumita coloana sa fie mai mica decat suma elementelor de pe coloana urmatoare

#include <iostream>using namespace std;void citire(float *p);float suma(float *p,int k);void swapCol(float *p,int col1,int col2,float *ps);void afis(float *p);void main(void){ float x[3][3],*p=&x[0][0],sum[3],*ps=sum; citire(p); for(int i=0;i<3;i++) *(ps+i) = suma(p,i); if(*(ps)>*(ps+1)) if(*(ps)>*(ps+2)) { swapCol(p,0,2,ps); if(*(ps)>*(ps+1)) swapCol(p,0,1,ps); } else swapCol(p,0,1,ps); else if(*ps>*(ps+2)) swapCol(p,0,2,ps); cout<<"Matricea prelucrata:"; afis(p);}void citire(float *p){ cout<<"Introduceti elementele unei matrici 3x3\n"; for(int i=0;i<3;i++)

26

Page 27: Rezolvare Laboratoare Pe Tot Anu

for(int j=0;j<3;j++) { cout<<"\tElementul "<<i+1<<" "<<j+1<<": "; cin>>*(p+i*3+j); }}float suma(float *p,int k){ float s=0; for(int i=0;i<3;i++) s+= (*(p+i*3+k)); return s;}void swapCol(float *p,int col1,int col2,float *ps){ float aux; for(int i=0;i<3;i++) { aux = *(p+i*3+col1); *(p+i*3+col1) = *(p+i*3+col2); *(p+i*3+col2) = aux; } aux = *(ps); *(ps+col1) = *(ps+col2); *(ps+col2) = aux;}void afis(float *p){ for(int i=0;i<3;i++) { cout<<endl; for(int j=0;j<3;j++) cout<<*(p+i*3+j)<<" "; }}

2. //*generarea unui tablou de pointeri spre siruri de caractere folosind functia de biblioteca strdup() sau o functie proprie//*afisarea intrarilor pare ale acestui tablou.

#include<iostream>using namespace std;#include<string.h>void intr_pare(char *);void main(void){ int i; char s[255]; intr_pare(s);}void intr_pare(char *s){ cout<<"\n Introduceti sirul de caractere:"; cin>>s; for(int i=0;i<strlen(s);i+=2) cout<<*(s+i)<<" "; cout<<endl;}

27

Page 28: Rezolvare Laboratoare Pe Tot Anu

3. //*ordonarea unui sir de numere întregi cu ajutorul functiei qsort() din biblioteca stdlib.h, folosind acelasi algoritm pentru numere float.

#include <iostream>using namespace std;#include <stdlib.h>#define DIM 100int compare(const void *a,const void *b);int compareFloat(const void *a,const void *b);void main(void){ int n,v[DIM],*pv=v; float f[DIM],*pf=f; cout<<"Introduceti dimensiunea vectorului: "; cin>>n; cout<<"\n Introduceti elementele :"; for(int i=0;i<n;i++) { cout<<"\tElementul "<<i+1<<": "; cin>>*(pv+i); } qsort((void*)pv,(size_t)n,sizeof(int),compare); cout<<"\nVectorul ordonat este: \n\t"; for(int i=0;i<n;i++) cout<<*(pv+i)<<" "; cout<<"\n\nIntroduceti dimensiunea vectorului(de numere reale): "; cin>>n; cout<<"\n Introduceti elementele reale: "; for(int i=0;i<n;i++) { cout<<"\tElementul "<<i+1<<": "; cin>>*(pf+i); } qsort((void*)pf,(size_t)n,sizeof(float),compareFloat); cout<<"\nVectorul ordonat este: \n\t"; for(int i=0;i<n;i++) cout<<*(pf+i)<<" ";}

int compare(const void *a,const void *b){ return (*(int*)a)-(*(int*)b);}int compareFloat(const void *a,const void *b){ float r=(*(float*)a)-(*(float*)b); if(r<0) return -1; else if(r==0) return 0; else return 1;}

4.//*se considera doi parametri întregi si alti doi flotanti de la linia de comanda si sa se afiseze suma si produsul lor.

#include <iostream>using namespace std;

28

Page 29: Rezolvare Laboratoare Pe Tot Anu

void main(int argc,char *argv[]){ if(argc<5) { cout<<"Introduceti doi parametri intregi si doi parametri floatanti de la linia de comanda\n\n"; return; } cout<<"Suma elementelor intregi este: "<<atoi(argv[1])+atoi(argv[2]) <<"\nProdusul elementelor intregi este: "<<atoi(argv[1])*atoi(argv[2]) <<"\n\nSuma elementelor reale este: "<<atof(argv[3])+atof(argv[4]) <<"\nProdusul elementelor reale este: "<<atof(argv[3])*atof(argv[4])<<endl;}

5. //*citirea de la tastatura a unui sir de caractere cu lungimea mai mare decat 7, folosind un pointer pentru a accesa si afisa caracterele de pe pozitiile 1, 3, 5 si 7.

#include<iostream>using namespace std;#include<string.h>void main(void){ int i; char s[255]; cout<<"\n Introduceti sirul de caractere :"; cin>>s; if(strlen(s)<7) { cout<<"\n Dimensiunea sirului de caractere este mai mica decat 7!"; return; } for(i=1;i<strlen(s);i++) while(i<=7) { cout<<*(s+i)<<" "; i=i+2; } cout<<endl;}

6. //*realizarea unui algoritm care sorteaza numere introduse de la tastatura într-un vector pe masura ce acestea sunt citite.Sa se foloseasca pointeri pentru accesarea elementelor vectorului.Sa se dezvolte o aplicatie C/C++ în care o functie are ca parametrii formali pointeri la vectorul de elemente float si dimensiunea acestuia (void dir_sort(float *,int n);).

#include<iostream>using namespace std;#define DIM 255void dir_sort(float *,int n);void main(void){ int n; float a[DIM]; cout<<"\n Introduceti dimensiunea sirului:"; cin>>n; if(n>DIM) cout<<"\n Dimensiune invalida!"; else dir_sort(a,n);}void dir_sort(float *a,int n)

29

Page 30: Rezolvare Laboratoare Pe Tot Anu

{ int j,sortat,i,k; float aux; cout<<"\n Introduceti primul element:"; cin>>*a; cout<<"\n Sirul este :"<<*a<<endl; i=1; while(i<n) { cout<<"\n Introduceti un nou element:"; cin>>*(a+i); cout<<endl; for(k=0;k<=i;k++) { do { sortat=0; for(j=0;j<i;j++) if(*(a+j)>*(a+j+1)) { aux=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=aux; sortat=1; } } while(sortat!=0); cout<<*(a+k)<<" "; } i++; }}

7. //*Dezvoltarea unui algoritm care interclaseaza doi vectori cu elemente valori numerice întregi,folosind pointeri.

#include<iostream>using namespace std;#define DIM 255void citire(int *,int);void main(void){ int a[DIM],b[DIM],c[DIM],n,i=0,j=0,k=0; cout<<"\n Introduceti dimensiunea vectorilor:"; cin>>n; if(n>DIM) { cout<<"\n Dimensiune nevalabila!"; return; cout<<endl; } cout<<"\n Introduceti elementele primului sir:"; citire(a,n); cout<<endl; cout<<"\n Introduceti elementele celui de-al doilea sir:"; citire(b,n); cout<<endl; while(i<n && j<n && k<n+n) {

30

Page 31: Rezolvare Laboratoare Pe Tot Anu

*(c+k)=*(a+i); i++; k++; *(c+k)=*(b+j); j++; k++; } cout<<"\n Sirul este:"; for(i=0;i<n+n;i++) cout<<*(c+i)<<" "; cout<<endl;}void citire(int *a,int n){ for(int i=0;i<n;i++) { cout<<"\n\t Introduceti elementul "<<i+1<<" : "; cin>>*(a+i); }}

8. //*Citirea de la tastatura a elemetelor a 2 matrici de valori întregi. Scrierea unei functii care primeste ca parametri pointerii la cele 2 matrici si returneaza un pointer la matricea suma. Rezultatul însumarii matricelor va fi afisat în functia main. Afisati elementele de pe diagoanala secundara a matricii suma, folosind acelasi pointer.

#include <iostream>using namespace std;#define MAX 10void citeste(int*,int);int* sumaMatrici(int*,int*,int*,int);void main(void){ int m1[MAX][MAX],m2[MAX][MAX],*p1=&m1[0][0],*p2=&m2[0][0],m12[MAX][MAX],*p12=&m12[0][0],n; cout<<"Introduceti dimensiunile matricilor patratice: "; cin>>n; cout<<"Introduceti elementele matricii unu: \n"; citeste(p1,n); cout<<"Introduceti elementele matricii doi: \n"; citeste(p2,n); p12 = sumaMatrici(p1,p2,p12,n); cout<<"Suma matriciilor este: \n"; for(int i=0;i<n;i++) { cout<<endl; for(int j=0;j<n;j++) cout<<*(p12+i*MAX+j)<<" "; } cout<<"\n\nElementele de pe diagonala secundara: \n\t"; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(i == n-j-1) cout<<*(p12+i*MAX+j)<<" ";}void citeste(int *p,int n){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) { cout<<"\tElementul "<<i+1<<" "<<j+1<<": ";

31

Page 32: Rezolvare Laboratoare Pe Tot Anu

cin>>*(p+i*MAX+j); }}int* sumaMatrici(int *p1,int *p2,int *p12,int n){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) *(p12+i*MAX+j) = *(p1+i*MAX+j) + *(p2+i*MAX+j); return p12;}

9. //* Definiti un sir de pointeri de tip caracter. Fiecare locatie a sirului contine unul dinurmatoarele siruri de caractere:- "valoare prea mica"- "valoare prea mare"- "valoare corecta"Aplicatia genereaza un numar aleator între 1 si 100 si apoi citeste în mod repetatintrarea de la tastatura pâna când utilizatorul introduce valoarea corecta. Folositimesajele definite pentru a informa utilizatorul, la fiecare pas, despre relatia existentaîntre numarul generat si ultima valoare citita.

#include <iostream>using namespace std;#include <math.h>#include <string.h>void main(void){ char mic[]="Valoare prea mica"; char mare[]="Valoare prea mare"; char egal[]="Valoare corecta"; char *p[3]; int x,r; p[0] = strdup(mic); p[1] = strdup(mare); p[2] = strdup(egal); r = rand()%100+1; cout<<"Introduceti un numar intre 1 si 100: "; cin>>x; while(x!=r) { if(x<r) cout<<p[0]; else cout<<p[1]; cout<<"\n\t"; cin>>x; } cout<<p[2];}

10. //*scrierea un program în care sa definiti un tablou de pointeri spre siruri de caractere, pecare sa-l initializati cu diferite mesaje. Afisati mesajele.

#include <iostream>using namespace std;void main(void){ char *p[] = {"Acesta este un mesaj","acesta este al doilea mesaj","Vreau acasa","Vine vacanta","Sarbatori fericite"}; cout<<"Mesajele definite sunt:";

32

Page 33: Rezolvare Laboratoare Pe Tot Anu

for(int i=0;i<5;i++) cout<<"\n\t"<<p[i]; cout<<endl;}

11.//*Sa se scrie un program care preia din linia de comanda siruri de caractere si afiseaza sirul rezultat din concatenarea acestora.

#include <iostream>using namespace std;#include <string.h>void main(int argc,char **argv){ char sir[255]; sir[0] = '\0'; for(int i=1;i<argc;i++) { strcat(sir,*(argv+i)); } cout<<"Sirurile concantenate: "<<sir<<endl;}

12. //*Sa se scrie un program care inverseaza sirul de caractere citit din linia de comanda.

#include <iostream>using namespace std;#include <string.h>void main(int argc,char **argv){ char sir[255]; int len; if(argc!=2) { cout<<"Numar gresit de parametri\n"; return; } len = (int)strlen(*(argv+1)); for(int i=len-1;i>=0;i--) { sir[len-i-1] = *(*(argv+1)+i); } sir[len]='\0'; cout<<sir<<endl;}

13. //*Scrierea unui program care citeste de la tastatura elementele de tip float ale unui vector,elemente ce reprezinta mediile unei grupe de studenti. Sa se scrie o functie caredetermina numarul studentilor cu media >= 8. Afisati rezultatul în main. (pointeri,fara variabile globale).

#include<iostream>using namespace std;#define DIM 255void citire(float *,int n);void afisare(float *,int n);int nr_stud(float *,int n);void main(void){ int n; float a[DIM];

33

Page 34: Rezolvare Laboratoare Pe Tot Anu

cout<<"\n Introduceti nr de studenti:"; cin>>n; if(n>DIM) cout<<"\n Valoare incorecta!"; else { citire(a,n); cout<<endl;

cout<<"\n Mediile studentilor sunt:"; afisare(a,n); cout<<endl; for(int i=0;i<n;i++) if(*(a+i)>10 || *(a+i)<1) { cout<<"\n Ati introdus cel putin o medie peste nota 10 sau mai mica decat 1!"; return; cout<<endl; } cout<<"\n Sunt "<<nr_stud(a,n)<<" studenti cu media peste nota 8"; cout<<endl; }}void citire(float *a,int n){ for(int i=0;i<n;i++) { cout<<"\n\t Introduceti media studentului "<<i+1<<": "; cin>>*(a+i); }}

void afisare(float *a,int n){ for(int i=0;i<n;i++) cout<<*(a+i)<<" ";}

int nr_stud(float *a,int n){ int s=0; for(int i=0;i<n;i++) if(*(a+i)>=8) s++; return s;}

14. //*Scrierea unui program C/C++ în care se citesc de la tastatura elementele de tip întreg aleunui vector a, utilizând o functie. Scrieti o functie care completeaza un alt vector b,fiecare element al acestuia fiind obtinut prin scaderea mediei aritmetice a elementelordin a din elementul corespunzator din a. Scrieti o functie care permite afisarea unuivector si afisati vectorii a si b. (pointeri, fara variabile globale).

#include<iostream>using namespace std;#define DIM 255void citire(float *,int n);void afisare(float *,int n);

34

Page 35: Rezolvare Laboratoare Pe Tot Anu

void completare_b(float *,float *,int n);void main(void){ int n; float b[DIM],a[DIM]; cout<<"\n Introduceti dimensiunea sirului a:"; cin>>n; citire(a,n); cout<<endl; completare_b(a,b,n); cout<<"\n Sirul a este:"; afisare(a,n); cout<<endl; cout<<"\n Sirul b este:"; afisare(b,n); cout<<endl;}void citire(float *a,int n){ for(int i=0;i<n;i++) { cout<<"\n\t Introduceti elementul "<<i+1<<": "; cin>>*(a+i); }}void afisare(float *a,int n){ for(int i=0;i<n;i++) cout<<*(a+i)<<" ";}void completare_b(float *a,float *b,int n){ float s=0; float ma; for(int i=0;i<n;i++) s+=*(a+i); ma=s/n; for(int i=0;i<n;i++) *(b+i)=*(a+i)-ma;}

15. //*Scrierea unui program în care se citesc de la tastatura elementele de tip întreg ale uneimatrici patratice, utilizând o functie. Scrieti o functie care determina numarul deelemente negative de deasupra diagonalei secundare. Afisati rezultatul în main (faravariabile globale).

#include<iostream>using namespace std;#define DIM 255void citire(int *,int n);int elem_neg(int *,int n);void main(void){ int a[DIM][DIM],n,i,s,*pa=&a[0][0]; cout<<"\n Introduceti dimensiunea matricii:"; cin>>n; citire(pa,n); cout<<"\n Deasupra diagonalei secundare sunt "<<elem_neg(pa,n)<<" elemente negative."; cout<<endl;

35

Page 36: Rezolvare Laboratoare Pe Tot Anu

}void citire(int *a,int n){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) { cout<<"\n Introduceti elementul "<<i+1<<","<<j+1<<": "; cin>>*(a+i*n+j); }}int elem_neg(int *a,int n){ int s=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(i+j<n) if(*(a+i*n+j)<0) s++; return s;}

16. //*Scrierea unui program în care se citesc de la tastatura elementele de tip întreg ale uneimatrici patratice, utilizând o functie. Scrieti o functie care interschimba doua linii alematricii. Afisati cu o functie matricea initiala si cea obtinuta. Dimensiunea matricii sinumerele ce identifica liniile care vor fi interschimbate se citesc de la tastatura, înfunctia main. (fara variabile globale).

#include <iostream>using namespace std;#define MAX 10void read(int *p,int n);void interschimba(int *p1,int *p2,int n,int j,int k);void afis(int *p,int n);void main(void){ int v1[MAX][MAX],v2[MAX][MAX],*pv1=&v1[0][0],*pv2=&v2[0][0],n,k,j; cout<<"Introduceti dimensiunea matricei: "; cin>>n; cout<<"Introduceti elementele matricii\n"; read(pv1,n); cout<<"\nIntroduceti liniile pentru interschimbare: "; cin>>j>>k; interschimba(pv1,pv2,n,j,k); cout<<"\nMatricea initiala: "; afis(pv1,n); cout<<"\nMatricea dupa interschimbare: "; afis(pv2,n);}void read(int *p,int n){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) { cout<<"Elementul "<<i+1<<" "<<j+1<<": "; cin>>*(p+i*MAX+j); }}void interschimba(int *p1,int *p2,int n,int j,int k){

36

Page 37: Rezolvare Laboratoare Pe Tot Anu

int aux; j--; k--; for(int i=0;i<n;i++) for(int j=0;j<n;j++) *(p2+i*MAX+j) = *(p1+i*MAX+j); for(int i=0;i<n;i++) { aux = *(p2+j*MAX+i); *(p2+j*MAX+i) = *(p2+k*MAX+i); *(p2+k*MAX+i) = aux; }}void afis(int *p,int n){ for(int i=0;i<n;i++) { cout<<endl; for(int j=0;j<n;j++) cout<<*(p+i*MAX+j)<<" "; }

TEMA LABORATORUL 10

1./*Sa se scrie un program care citeste n numere reale, pe care le stocheaza într-un tablou alocat dinamic, afiseaza suma elementelor negative citite, iar la sfârsit elibereaza zona de memorie alocata */

#include <stdio.h>#include <malloc.h>void main() {int i,n,*a,neg;printf(" Dati lungimea vectorului ");scanf("%d",&n);a=(int *)malloc(n*sizeof(int));neg=0;for(i=0;i<n;i++) {printf("a[%d]=",i);scanf("%d",a+i);if((*(a+i))<0) neg=neg+*(a+i);}printf(" %d",neg);}

2. /*Fie o aplicatie de gestiune distribuita care considera ca trateaza activitatea din 5 orase diferite în fiecare oras fiind 3 birouri de vânzare pe teritoriul respectiv. Sa se creeze în cadrul unei functii un tablou de 5 pointeri catre date de tip flotant, fiecare pointer din acest tablou referind o zona în heap alocata dinamic de 3 date flotante ce reprezinta situatia vânzarilor la sfarsitul unei zile. Se cere prelucrarea datelor din fiecare oras, respectiv din fiecare birou de vânzare, prelucrare ce va include:- functie care permite introducerea datelor pentru cele 5 orase si respectiv pentru fiecare oras pentru cele 3 magazine din oras;- functie ce permite determinarea totalului de vânzari pe fiecare oras în parte, valoare pe care o va returna astfel ca în programul principal se va calcula si afisa media vânzarilor din toate cele 5 orase;- functie care va permite eliberarea spatiului de memorie alocat dinamic astfel încât daca aceiasi firma are alte 3 magazine în cele 5 orase de profil diferit sa poata sa realoce un spatiu echivalent pentru noile prelucrari pe care le va efectua. */

#include <stdio.h>#include <malloc.h>void citire(float **a);void calcul(float **a);void eliberare(float **a);void main() {int i,j;

37

Page 38: Rezolvare Laboratoare Pe Tot Anu

float **a;citire(a);calcul(a);eliberare(a);}void citire(float **a){int i,j;a=(float **)malloc(5*sizeof(float));for (i=0;i<5;i++){a[i]=(float*)malloc(3*sizeof(float));for(j=0;j<3;j++){printf("orasul %d , chioscul %d:",i,j);scanf("%f",&a[i][j]);}}}void calcul(float **a){float sum;int i,j;for(i=0;i<5;i++){sum=0;for(j=0;j<3;j++){ sum+=a[i][j]; }printf("pentru orasul %d media vanzarilor este:%f",i,sum/3.0);}}void eliberare(float **a){int i;for(i=0;i<5;i++)free(a[i]);free(a);}

3. /*Sa se scrie o aplicatie C/C++, care aloca dinamic memorie pentru stocarea elementelor a doua matrici de "m" linii si "n" coloane. Sa se scrie o functie care calculeaza suma celor doua matrici si o functie pentru afisarea unei matrici. Sa se afiseze matricile initiale si matricea obtinuta*/

#include <stdio.h>#include <conio.h>#include <malloc.h>void afisare(int *a,int m,int n){for(i=0;i<m;i++){for(j=0;j<n;j++)printf("%d",*(a+m*i+j);printf("\n");}}void citire(int *a,int m,int n){for(i=0;i<m;i++){for(j=0;j<n;j++){printf("a[%d][%d]:",i,j);scanf("%d",*(a+m*i+j);}}}void main(){int *a,*b,*c,i,j,m,n;a=(int*)malloc(m*n*sizeof(int));b=(int*)malloc(m*n*sizeof(int));c=(int*)malloc(m*n*sizeof(int));

38

Page 39: Rezolvare Laboratoare Pe Tot Anu

citire(a);citire(b);for(i=0;i<m*n;i++)*(c+i)=*(a+i)+(*(b+i));afisare(a,m,n);afisare(b,m,n);afisare(c,m,n);}

4. /*Sa se scrie o aplicatie C/C++ care aloca dinamic memorie pentru "n" siruri de caractere, care se vor citi de la tastatura*/

#include<iostream>using namespace std;#include<malloc.h>void main(){int n,m,i,j;char *a;cout<<"\n introduceti numarul de siruri:";cin>>n;cout<<"\n introduceti dimensiunea sirului de caractere!";cin>>m;if(n<0){cout<<"\n reintroduceti numarul de siruri!";}else{for(i=0;i<n;i++){a=(char*)malloc(n*sizeof(char));if(a==NULL){cout<<"\n eroare de calcul!";return;}cout<<"\n introduceti cele m caractere!";for(j=0;j<m;j++){ cout<<"\n a["<<j<<"]= ";cin>>*(a+j);}if(a)free(a);}}}

5. /*Declarati un pointer global de tip float. În functia main cititi o valoare întreaga N care reprezinta dimensiunea tabloului de numere reale. Alocati memoria necesara pentru stocarea tabloului si cititi elementele de la tastatura. Determinati valoarea medie a celor N elemente si calculati Mn=(sum(pow((xi-xmed),n))/N, unde n=1,2,3. Afisati rezultatele si apoi eliberati memoria. Folositi functiile malloc si free. Generati numerele din tablou folosind functia de biblioteca care genereaza numere aleatoare si determinati pentru acestea media valorilor si Mn. Realizati aceeasi aplicatie folosind operatorii new si delete */#include<iostream>using namespace std;#include<math.h>float medie(int N1);long int*v;

39

Page 40: Rezolvare Laboratoare Pe Tot Anu

void main(){int N,i,n;long float ma,sumas=0,v1,v2,v3;cout<<"\n introduceti dimensiunea tabloului:";cin>>N;if(N<=0){cout<<"\n dimensiune invalida!";return;}v=(long int*)malloc(N*sizeof(long int));if(v==NULL){cout<<"\n alocare esuata!";return;}else{for(i=0;i<N;i++){v[i]=rand();}cout<<"\n vectorul este:";for(i=0;i<N;i++){cout<<"\n v["<<i<<"]= "<<*(v+i);}ma=medie(N);

for(i=0;i<N;i++){long int q=*(v+i);v1=pow((q-ma),1);v2=pow((q-ma),2);v3=pow((q-ma),3);sumas+=v1+v2+v3;}long float Mn=(long float)sumas/N;cout<<"\n rezultatul este: ";cout<<"\n "<<Mn<<endl;}if(v)free(v);}float medie(int N1){int i;long float med;int sum=0;for(i=0;i<N1;i++){sum+=v[i];}med=(long float)sum/N1;return(med);}

40

Page 41: Rezolvare Laboratoare Pe Tot Anu

6. /*Folositi alocarea dinamica pentru o matrice n x m cu valori intregi (n,m<7).Initializati elementele matricii. Daca matricea este patratica, folositi metoda lui Sarrus pentru a obtine valoarea determinantului.Afisati rezultatul si eliberati memoria*/

#include <iostream>using namespace std;void main(void){int m,n,*p,s=0,ps;cout<<"Introduceti dimensiunile matricii: ";cin>>m>>n;if(m==n){p = new int[m*(2*m-1)];memset(p,0,sizeof(int)*m*(2*m-1));} else {p = new int[m*n];}cout<<"Introduceti elemetele matricii\n";for(int i=0;i<m;i++){cout<<"\tLinia "<<i+1<<endl;for(int j=0;j<n;j++){cout<<"\t\tColoana "<<j+1<<": ";if(m==n){cin>>*(p+i*(2*m-1)+j);}elsecin>>*(p+i*m+j);}}if(m==n){for(int i=0;i<m;i++)for(int j=0;j<m-1;j++)*(p+i*(2*m-1)+j+m) = *(p+i*(2*m-1)+j);for(int j=0;j<m;j++){ps=1;for(int i=0;i<m;i++)ps *= *(p+i*(2*m-1)+j+i);s+=ps;}for(int j=2*m-2;j>m-2;j--){ps = 1;for(int i=0;i<m;i++)ps *= *(p+i*(2*m-1)+j-i);s-=ps;}cout<<"\n\nDeterminantul matricii este "<<s<<endl;} else {cout<<"\nMatricea nu este patratica";}delete []p;}

41

Page 42: Rezolvare Laboratoare Pe Tot Anu

7. /*Sa se scrie o aplicatie C/C++ care aloca dinamic memorie necesara pentru stocarea a 10.000 de numere întregi. Programul initializeaza numerele cu valori aleatoare între 1 si 100 (folositi functiile randomize si random in BC++ sau rand in VC++ XE). Scrieti o functie care afiseaza cele mai frecvente 10 numere si numarul lor de aparitii în vectorul initial */

#include<iostream>using namespace std;#include<math.h>#include<stdlib.h>#include<malloc.h>#define n 10000void main(){int i,k,aux,j;int*p;int x[10000],y[10000];p=new int[n];if(p!=NULL){srand(2);int RANGE_MIN = 0;int RANGE_MAX = 100;for(i=0;i<n;i++){int v = (((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);*(p+i)=v;}for(i=0;i<101;i++){x[i]=0;}for(j=0;j<101;j++){y[j]=j;}for(i=0;i<n;i++){int v1=*(p+i);for(k=0;k<101;k++){if(v1==k)x[k]=x[k]+1;}}for(k=0;k<100;k++){for(i=k+1;i<101;i++){if(x[k]<x[i]){aux=y[k];y[k]=y[i];y[i]=aux;}}}cout<<"\n numerele care apare cel mai frecvent sunt:";for(k=0;k<10;k++){

42

Page 43: Rezolvare Laboratoare Pe Tot Anu

cout<<"\n y["<<k<<"]= "<<y[k]<<endl;}}else{cout<<"\n alocare nereusita!";delete[]p;}}

TEMA LARORATOR 11

1. //*Sa se scrie un program, care folosind o structura de tip student sa determinnumarul de studenti straini dintr-o grupa si sa afiseze toate datele acestora (nume,prenume, tara de origine, grupa, anul nasterii). Datele pentru studentii din grupa secitesc de la intrarea standard, pana la intalnirea numelui AAA*//

#include <iostream>#include <stdlib.h>#include <string.h>using namespace std;#define end "AAA"struct student {char nume[50];char prenume[50];char tara[50];int grupa;int an;};struct list {struct student *p;struct list *next;};list* aloc_list(void);student* aloc_student(void);void dealocare(struct list *p);void main(void){struct list *start,*p;char nume[50],tara[50];int grupa;start = aloc_list();p = start;cout<<"Introduceti datele studentilor:\n";cout<<"\tNume: ";cin>>nume;while(strcmp(nume,end)!=0){p->p = aloc_student();strcpy(p->p->nume,nume);cout<<"\tPrenume: ";cin>>p->p->prenume;cout<<"\tTara: ";cin>>p->p->tara;cout<<"\tGrupa: ";cin>>p->p->grupa;cout<<"\tAnul nasterii: ";cin>>p->p->an;p->next = aloc_list();

43

Page 44: Rezolvare Laboratoare Pe Tot Anu

p = p->next;cout<<"\n\tNume: ";cin>>nume;}cout<<"\nSfarsit lista student\n";p->next = NULL;cout<<"Introduceti numarul grupei: ";cin>>grupa;cout<<"Introduceti tara de referinta: ";cin>>tara;p = start;cout<<"\n\nStudentii din grupa "<<grupa<<" care nu sunt din tara "<<tara<<": \n";while(p->next){if(p->p->grupa == grupa)if(strcmp(p->p->tara,tara)==0)cout<<"\t"<<p->p->nume<<" "<<p->p->prenume<<"\tan:"<<p->p->an<<endl;p = p->next;}dealocare(start);}struct list* aloc_list(void){struct list *p;if(!(p = new struct list)){cout<<"\n\nEroare la alocare!\n";exit(1);}return p;}student* aloc_student(void){struct student *p;if(!(p = new struct student)){cout<<"\n\nEroare la alocare!\n";exit(1);}return p;}void dealocare(struct list *p){if(p->next)dealocare(p->next);delete p->p;delete p->next;}

2. //*Sa se scrie un program, in care folosind cate o functie se transfera caparametru o variabila de tip structura de date, ca valoare si, respectiv, prin adresafolosind pointeri. In functia main initializati campurile structurii cu date citit de latastatura. In ambele functii afisati datele din structura folosind un mesaj adecvat*//

#include <iostream>using namespace std;struct student {char nume[50];char prenume[50];

44

Page 45: Rezolvare Laboratoare Pe Tot Anu

};void afisNuPointer(struct student p);void afisPointer(struct student *p);void main(void){struct student p,*pp;pp = &p;cout<<"Introduceti date pentru structura student cu campurile nume si prenume: \n";cout<<"\tNume: ";cin>>p.nume;cout<<"\tPrenume: ";cin>>p.prenume;cout<<"\nAfisare prin functie cu parametru o variabila de tip structura: ";afisNuPointer(p);cout<<"\nAfisare prin functie cu parametru pointer la o variabila de tip structura: ";afisPointer(pp);}void afisNuPointer(struct student p){cout<<"\nNume: "<<p.nume<<"\t\tPrenume: "<<p.prenume;}void afisPointer(struct student *p){cout<<"\nNume: "<<p->nume<<"\t\tPrenume: "<<p->prenume;}

3. //*Sa se scrie un program, in care o functie returneaza o structura de dateadecvata. In acest fel vor fi returnate mai multe valori. Afisati rezultatul, valorileinitiale transferate functie (puteti realiza orice operatie in cadrul acelei functii), cumesaje adecvate*//

#include <iostream>#include <string.h>using namespace std;struct siruri {char sir1[50];char sir2[50];char sir3[100];int xerox;};siruri operatie(struct siruri p);void main(void){struct siruri p;cout<<"Introduceti doua siruri de caractere: ";cin>>p.sir1>>p.sir2;p = operatie(p);if(p.xerox)cout<<"\nSirurile sunt identice";elsecout<<"\nCele doua siruri sunt diferite";cout<<"\nSirul rezultat prin concantenarea celor doua siruri: "<<p.sir3<<endl;}siruri operatie(struct siruri p){if(strcmp(p.sir1,p.sir2)==0)p.xerox = 1;elsep.xerox = 0;

45

Page 46: Rezolvare Laboratoare Pe Tot Anu

strcpy(p.sir3,p.sir1);strcat(p.sir3,p.sir2);return p;}

4. //*Sa se scrie un program care utilizand o structura de tip angajat sa afiseze toatedatele persoanelor cu ocupatia inginer, intr-o intreprindere (nume, prenume, ocupatia,data nasterii, sectia in care lucreaza)*//

#include <iostream>#include <stdlib.h>using namespace std;struct data{int zi;int luna;int an;};struct angajat {char nume[50];char prenume[50];char ocupatie[50];struct data *d;char sectie[50];};data* readDate(struct data *d);void main(void){int n;struct angajat *p;cout<<"Introduceti numarul de angajati: ";cin>>n;if(!(p = new struct angajat[n])){cout<<"\nEroare la alocare!\n";return;}for(int i=0;i<n;i++){cout<<"\n\n\tNume: ";cin>>(p+i)->nume;cout<<"\tPrenume: ";cin>>(p+i)->prenume;cout<<"\tOcupatie: ";cin>>(p+i)->ocupatie;cout<<"\tData nastere: ";(p+i)->d = readDate((p+i)->d);cout<<"\tSectia: ";cin>>(p+i)->sectie;}cout<<"\nAngajatii care sunt de profesie ingineri: \n";for(int i=0;i<n;i++){if(strcmp((p+i)->ocupatie,"inginer")==0){cout<<"\t"<<(p+i)->nume<<" "<<(p+i)->prenume<<"\t\t"<<(p+i)->d->zi<<"."<<(p+i)->d->luna<<"."<<(p+i)->d->an<<"\t"<<(p+i)->sectie<<endl;}}for(int i=0;i<n;i++)

46

Page 47: Rezolvare Laboratoare Pe Tot Anu

delete (p+i)->d;delete []p;}data* readDate(struct data *d){if(!(d = new struct data)){cout<<"\nEroare la alocare!\n";exit(1);}cout<<"\n\t\tZi: ";cin>>d->zi;cout<<"\t\tLuna: ";cin>>d->luna;cout<<"\t\tAn: ";cin>>d->an;return d;}

5. //*Sa se scrie un program care citeste datele personale pentru n persoane (nume,prenume, data nasterii codul numeric personal, data angajarii) si apoi le afiseazain ordinea datei angajariii*//

#include <iostream>#include <stdlib.h>using namespace std;struct data {int zi;int luna;int an;};struct persoana{char nume[50];char prenume[50];struct data *dn;char codnumeric[13];struct data *da;};void sort(struct persoana *p,int *v,int n);void afis(struct persoana *p,int *v,int n);data* readDate(void);int compareDate(struct data *p1,struct data *p2);void dealocare(struct persoana *p,int *v,int n);void main(void){int n,*v;struct persoana *p;cout<<"Introduceti numarul de persoane: ";cin>>n;if(!(p = new struct persoana[n])){cout<<"\n\nEroare la alocare!\n";exit(1);}if(!(v = new int[n])){cout<<"\n\nEroare la alocare!\n";exit(1);}

47

Page 48: Rezolvare Laboratoare Pe Tot Anu

cout<<"Introduceti datele celor "<<n<<" persoane:\n";for(int i=0;i<n;i++){cout<<"\n\tNume: ";cin>>(p+i)->nume;cout<<"\tPrenume: ";cin>>(p+i)->prenume;cout<<"\tData nasterii: ";(p+i)->dn = readDate();cout<<"\tCNP: ";cin>>(p+i)->codnumeric;cout<<"\tData angajarii: ";(p+i)->da = readDate();}for(int i=0;i<n;i++)*(v+i) = i;sort(p,v,n);afis(p,v,n);dealocare(p,v,n);cout<<endl<<endl;}void sort(struct persoana *p,int *v,int n){int res,aux;for(int i=0;i<n-1;i++){for(int j=i+1;j<n;j++){res = compareDate((p+*(v+i))->da,(p+*(v+j))->da);if(res>0){aux = *(v+i);*(v+i) = *(v+j);*(v+j) = aux;}}}}void afis(struct persoana *p,int *v,int n){cout<<"Personalul aranjat dupa data angajarii:";for(int i=0;i<n;i++){cout<<"\n\t"<<(p+*(v+i))->nume<<" "<<*(p+*(v+i))->prenume<<"\n\t\tcnp:"<<(p+*(v+i))->codnumeric<<"\n\t\t d.nas: "<<(p+*(v+i))->dn->zi<<"."<<(p+*(v+i))->dn->luna<<"."<<(p+*(v+i))->dn->an<<"\n\t\t d.angj: "<<(p+*(v+i))->da->zi<<"."<<(p+*(v+i))->da->luna<<"."<<(p+*(v+i))->da->an;}}data* readDate(void){struct data *p;if(!(p = new struct data)){cout<<"\n\nEroare la alocare!\n";exit(1);}cout<<"\n\t\tZi: ";cin>>p->zi;cout<<"\t\tLuna: ";

48

Page 49: Rezolvare Laboratoare Pe Tot Anu

cin>>p->luna;cout<<"\t\tAn: ";cin>>p->an;return p;}int compareDate(struct data *p1,struct data *p2){if(p1->an < p2->an)return -1;if(p1->an == p2->an){if(p1->luna < p2->luna)return -1;if(p1->luna == p2->luna){if(p1->zi < p2->zi)return -1;if(p1->zi == p2->zi)return 0;}}return 1;}void dealocare(struct persoana *p,int *v,int n){for(int i=0;i<n;i++){delete (p+i)->da;delete (p+i)->dn;}delete []p;delete []v;}

6. //*Sa se scrie un program care afiseaza numele, prenumele si media studentului cu celemai bune rezultate din grupa in urma sesiunii de iarna. Folositi pentru aceasta ostructura student, alocarea dinamica, si o functie de care returneaza inregistrareastudent care are media cea mai mare*//

#include <iostream>using namespace std;struct student {char nume[50];char prenume[50];float medie;};void afis(struct student *p,int n);void main(void){int n;struct student *p;cout<<"Introduceti numarul de studenti din grupa: ";cin>>n;if(!(p = new struct student[n])){cout<<"\n\nEroare la alocare\n";return;}cout<<"\nIntroduceti datele studentilor:";

49

Page 50: Rezolvare Laboratoare Pe Tot Anu

for(int i=0;i<n;i++){cout<<"\n\tNume: ";cin>>(p+i)->nume;cout<<"\tPrenume: ";cin>>(p+i)->prenume;cout<<"\tMedia: ";cin>>(p+i)->medie;}cout<<"Studentul cu media cea mai mare este: ";afis(p,n);delete []p;}void afis(struct student *p,int n){float max = p->medie;int loc = 0;for(int i=1;i<n;i++){if((p+i)->medie > max){loc = i;max = (p+i)->medie;}}cout<<"\n\t"<<(p+loc)->nume<<" "<<(p+loc)->prenume<<"\tmedie: "<<(p+loc)->medie<<endl;}

7. //*Sa se scrie o plicatie care aloca dinamic memorie pentru memorarea datelora nstudenti, si dupa ce citeste datele pentru fiecare din acestia, afiseaza numarulstudentelelor. In final se va elibera memoria alocata*//

#include <iostream>using namespace std;struct student {char nume[50];char prenume[50];char sex;};void main(void){int n,cate=0;struct student *p;cout<<"Introduceti numarul de studenti: ";cin>>n;if(!(p = new struct student[n])){cout<<"\n\nEroare la alocare!\n";exit(1);}cout<<"Introduceti datele studentilor: ";for(int i=0;i<n;i++){cout<<"\n\tNume: ";cin>>(p+i)->nume;cout<<"\tPrenume: ";cin>>(p+i)->prenume;cout<<"\tSex(m/f): ";cin>>(p+i)->sex;

50

Page 51: Rezolvare Laboratoare Pe Tot Anu

}for(int i=0;i<n;i++){if((p+i)->sex == 'f')cate++;}if(cate>0)cout<<"\n"<<cate<<" dintre studenti sunt studente\n";elsecout<<"Nu exista nici o studenta, ce trist :(\n\n";delete []p;}

8. //*Declarati o structura de date de tip struct, o_struct, care sa contina o variabila de tipintreg, una de tip caracter si un sir de 256 caractere. In programul principal definiti ovariabila statica de tip o_struct, careia sa-i initializati variabilele cu date citite de laintrarea standard. Declarati apoi un pointer de tip o_struct, po_struct, pe care sa-ldefiniti folosind alocarea dinamica cu o zona de memorie care sa contina un articol detip o_struct. Initializati campurile structurii de date folosind pointer, po_struct.Eliberati in final zona de memorie alocata*//

#include <iostream>#include <string.h>using namespace std;struct o_struct {int nr;char caracter;char sir[255];};void main(void){struct o_struct str,*po_struct;cout<<"Introduceti un numar intreg: ";cin>>str.nr;cout<<"Introduceti un caracter: ";cin>>str.caracter;cout<<"Introduceti un sir de caractere: ";cin>>str.sir;if(!(po_struct = new struct o_struct)){cout<<"\n\nEroare la alocare!\n";exit(1);}po_struct->nr = str.nr;po_struct->caracter = str.caracter;strcpy(po_struct->sir,str.sir);delete po_struct;}

TEMA LABORATOR 121. //*Folosind structura de date union denumita grupa compusa din diferite campuri cum arfi: int, long, double, char etc.,scrieti o aplicatie care va initializa un elementde tipul grupa de la tastatura. Este posibil sa afisam in acelasi timp toate campurilefolosind pointeri sau nume calificate? Afisati ceea ce este posibil si dimensiuneaelementului union. Realizati aceeasi operatie considerand o simpla structura struct*//

#include <iostream>using namespace std;void main(void)

51

Page 52: Rezolvare Laboratoare Pe Tot Anu

{union grup {

int nrint;float nrfloat;

}g;cout<<"Operatia aplicata unei uniuni\n";cout<<"Introduceti un numar real: ";cin>>g.nrfloat;cout<<"Introduceti un numar intreg: ";cin>>g.nrint;cout<<"\nValoare numarul real a fost pierduta. Valoarea numarul intreg este: "<<g.nrint

<<"\nDimensiunea uniunii este: "<<sizeof(g);

struct str{int nrint;float nrfloat;

}s;cout<<"\n\nOperatia aplicata unei structuri\n";cout<<"Introduceti un numar real: ";cin>>s.nrfloat;cout<<"Introduceti un numar intreg: ";cin>>s.nrint;cout<<"\nValoarea numarului real este: "<<s.nrfloat

<<". Valoarea numarul intreg este: "<<s.nrint<<". Dimensiunea structurii este: "<<sizeof(s);

}

3. //*Sa se scrie un program care citeste si apoi afiseaza date intregi preluate dintru-un fisiertext al carui nume este citit de la consola. Creati in prealabil fisirul prin program*//

#include <iostream>#include <stdio.h>using namespace std;void main(void){

int opt,n,aux;char fileName[50];FILE *f;cout<<"Introduceti 1 pentru a crea un fisier sau 2 pentru a afisa datele dintr-un fisier: ";do{

cin>>opt;if(opt>2 || opt<1)

cout<<"Optiune invalida, reincercati: ";else break;

} while(true);if(opt == 1){

cout<<"\nIntroduceti numele fisierului pe care doriti sa il creati: ";cin>>fileName;

f = fopen(fileName,"w");if(f == NULL){

cout<<"\n\nEroare la crearea fisierului!\n";return;

}

52

Page 53: Rezolvare Laboratoare Pe Tot Anu

cout<<"\nIntroduceti cate numere intregi vreti sa scrieti in fisier: ";cin>>n;cout<<"\nIntroduceti numerele: ";for(int i=0;i<n;i++){

cin>>aux;fprintf(f," %d",aux);

}fclose(f);cout<<"\nNumerele au fost scrise cu succes";

}else{

cout<<"\nIntroduceti numele fisierului pentru citire: ";cin>>fileName;f=fopen(fileName,"r");if(f==NULL){

cout<<"\n\nEroare la deschiderea fisierului!\n";return;

}cout<<"\nNumerele din fisier sunt: \n";while(feof(f)==0){

fscanf(f,"%d",&aux);cout<<" "<<aux;

}fclose(f);

}}

4. //*Sa se scrie un program care citeste dintr-un fisier text 10 numere intrei (generat inprealabil prin program sau extern). Sa se scrie functiile care: a. aranjeaza crescator/descrescator sirul si afiseaza rezultatul;b. numara cate elemente sunt pare si afiseaza rezultatul.Scrieti in fisier noile rezultate obtinute.*//

#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;void createFile(char fileName[]);void sort(int *p);int catePare(int *p);void main(void){

int *p,op,cate;char fileName[255],s[255],opt;FILE *f;cout<<"Introduceti: \n\t1 pentru prelucrarea informatiilor din fisier\n\t2 pentru crearea unui fisier nou \n\t3 pentru

vizualizarea rezultatului dintr-un fisier\n\n\tOptiune:";do{

cin>>op;if(op==1||op==2||op==3)

break;else

cout<<"Optiune invalida, reincercati: ";} while(true);

53

Page 54: Rezolvare Laboratoare Pe Tot Anu

if(op == 1){

cout<<"Introduceti numele fisierului: ";cin>>fileName;f = fopen(fileName,"r");if(f==NULL){

cout<<"Fisierul nu exista, doriti sa il creati(y/n)?";do{

cin>>opt;if(opt == 'y' || opt == 'n')

break;else

cout<<"Optiune invalida, reincercati(y/n): ";} while(true);

if(opt == 'y'){

createFile(fileName);return;

} else {cout<<"\nO zi buna!";return;

}}if(!(p = new int[10])){

cout<<"\nEroare la alocarea dinamica!\n";return;

}

for(int i=0;i<10;i++){

if(feof(f)){

cout<<"Fisierul nu contine date valide";return;

}fscanf(f,"%d",p+i);

}

sort(p);cate = catePare(p);fclose(f);f = fopen(fileName,"w");if(f==NULL){

cout<<"\nEroare la deschidere!\n";return;

}fprintf(f,"Numerele ordonate crescator:\n\t");for(int i=0;i<10;i++){

fprintf(f," %d",*(p+i));}fprintf(f,"\n\nDin care %d sunt pare.\n",cate);fclose(f);

} else {

54

Page 55: Rezolvare Laboratoare Pe Tot Anu

if(op == 2){

cout<<"\nIntroduceti numele fisierului: ";cin>>fileName;createFile(fileName);

} else {cout<<"\nIntroduceti numele fisierului: ";cin>>fileName;f = fopen(fileName,"r");if(f==NULL){

cout<<"Eroare la deschidere";return;

}

while(feof(f)==0){

cout<<fgets(s,255,f);}

}}

}

void createFile(char fileName[]){

int aux;FILE *f;f = fopen(fileName,"w");if(f == NULL){

cout<<"\nEroare la crearea fisierului!\n";exit(1);

}

cout<<"Introduceti 10 numere intregi: ";for(int i=0;i<10;i++){

cin>>aux;fprintf(f," %d",aux);

}fclose(f);cout<<"\nNumerele au fost scrise cu succes\n";

}

void sort(int *p){

int aux;for(int i=0;i<9;i++){

for(int j=i+1;j<10;j++){

if(*(p+i)>*(p+j)){

aux = *(p+i);*(p+i) = *(p+j);*(p+j) = aux;

}}

}

55

Page 56: Rezolvare Laboratoare Pe Tot Anu

cout<<"\nVectorul ordonat: \n\t";for(int i=0;i<10;i++){

cout<<" "<<*(p+i);}

}

int catePare(int *p){

int cate = 0;for(int i=0;i<10;i++){

if(*(p+i) % 2 == 0){

cate ++;}

}cout<<"\n"<<cate<<" numere sunt pare\n";return cate;

}

5.

//*Scrieti un program care citeste de la consola n numere intregi pe care le scrie intr-unfisier text cu numele citit de la tastatura. Cititi apoi numerele din fisier, determinatiapoi media lor aritmetica pe care o adaugati la sfarsitul fisierului si o afisati si pe ecran*//

#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;void createFile(char fileName[]);void sort(int *p);int catePare(int *p);void main(void){

int *p,op,cate;char fileName[255],s[255],opt;FILE *f;cout<<"Introduceti: \n\t1 pentru prelucrarea informatiilor din fisier\n\t2 pentru crearea unui fisier nou \n\t3 pentru

vizualizarea rezultatului dintr-un fisier\n\n\tOptiune:";do{

cin>>op;if(op==1||op==2||op==3)

break;else

cout<<"Optiune invalida, reincercati: ";} while(true);if(op == 1){

cout<<"Introduceti numele fisierului: ";cin>>fileName;f = fopen(fileName,"r");if(f==NULL){

cout<<"Fisierul nu exista, doriti sa il creati(y/n)?";

56

Page 57: Rezolvare Laboratoare Pe Tot Anu

do{

cin>>opt;if(opt == 'y' || opt == 'n')

break;else

cout<<"Optiune invalida, reincercati(y/n): ";} while(true);if(opt == 'y'){

createFile(fileName);return;

} else {cout<<"\nO zi buna!";return;

}}if(!(p = new int[10])){

cout<<"\nEroare la alocarea dinamica!\n";return;

}

for(int i=0;i<10;i++){

if(feof(f)){

cout<<"Fisierul nu contine date valide";return;

}fscanf(f,"%d",p+i);

}sort(p);cate = catePare(p);fclose(f);f = fopen(fileName,"w");if(f==NULL){

cout<<"\nEroare la deschidere!\n";return;

}fprintf(f,"Numerele ordonate crescator:\n\t");for(int i=0;i<10;i++){

fprintf(f," %d",*(p+i));}fprintf(f,"\n\nDin care %d sunt pare.\n",cate);fclose(f);

} else {if(op == 2){

cout<<"\nIntroduceti numele fisierului: ";cin>>fileName;createFile(fileName);

} else {cout<<"\nIntroduceti numele fisierului: ";cin>>fileName;f = fopen(fileName,"r");if(f==NULL)

57

Page 58: Rezolvare Laboratoare Pe Tot Anu

{cout<<"Eroare la deschidere";return;

}while(feof(f)==0){

cout<<fgets(s,255,f);}

}}

}void createFile(char fileName[]){

int aux;FILE *f;f = fopen(fileName,"w");if(f == NULL){

cout<<"\nEroare la crearea fisierului!\n";exit(1);

}cout<<"Introduceti 10 numere intregi: ";for(int i=0;i<10;i++){

cin>>aux;fprintf(f," %d",aux);

}fclose(f);cout<<"\nNumerele au fost scrise cu succes\n";

}void sort(int *p){

int aux;for(int i=0;i<9;i++){

for(int j=i+1;j<10;j++){

if(*(p+i)>*(p+j)){

aux = *(p+i);*(p+i) = *(p+j);*(p+j) = aux;

}}

}cout<<"\nVectorul ordonat: \n\t";for(int i=0;i<10;i++){

cout<<" "<<*(p+i);}

}int catePare(int *p){

int cate = 0;for(int i=0;i<10;i++){

if(*(p+i) % 2 == 0){

cate ++;

58

Page 59: Rezolvare Laboratoare Pe Tot Anu

}}cout<<"\n"<<cate<<" numere sunt pare\n";return cate;

}

6. //*Scrieti un program care citeste de la tastatura un caracter apoi scrie acest caracter intr-unfisier text pe n linii, cate n caractere pe fiecare linie, n citit de la consola*//

#include <iostream>#include <stdlib.h>using namespace std;void main(void){

FILE *f;char c,fileName[255];int n;cout<<"Introduceti caracterul: ";cin>>c;cout<<"Introduceti numarul de multiplicitate: ";cin>>n;cout<<"Introduceti numele fisierului: ";cin>>fileName;f = fopen(fileName,"w");if(f == NULL){

cout<<"\nEroare la deschidere!\n";return;

}for(int i=0;i<n;i++){

fprintf(f,"\n");for(int j=0;j<n;j++){

fprintf(f,"%c",c);}

}cout<<"\nFisierul a fost scris cu succes";fclose(f);

}

7. //*Sa se scrie o aplicatie care citeste un fisier text linie cu linie si il afiseaza peecran. se va folosi un fisier existent din sistem sau se va genera in prealabil unul prinprogram*//

#include <iostream>using namespace std;void main(void){

int opt;char fileName[255],s[255];FILE *f;cout<<"Introduceti:\n\t1 pentru a citi un fisier\n\t2 pentru a crea un fisier\n\n\tOptiune:";do{

cin>>opt;if(opt==1 || opt == 2)

break;else

59

Page 60: Rezolvare Laboratoare Pe Tot Anu

cout<<"\tOptiune invalida, reincercati: ";} while(true);if(opt ==1 ){

cout<<"\nIntroduceti numele fisierului: ";cin>>fileName;f=fopen(fileName,"r");if(f==NULL){

cout<<"\nEroare la deschidere!\n";return;

}

while(feof(f)==0){

fgets(s,255,f);cout<<s;

}fclose(f);return;

}cout<<"Introduceti numele fisierului: ";cin>>fileName;f=fopen(fileName,"w");if(f==NULL){

cout<<"\nEroare la deschidere!\n";return;

}cout<<"\nIntroduceti textul de scris in fisier, pentru a incheia introduceti * pe o linie noua:\n";fflush(stdin);do{

gets(s);if(s[0]=='*' && s[1] == '\0')

break;fprintf(f,"%s\n",s);

} while(true);fclose(f);cout<<"\n\nFisierul a fost scris cu succes!";

}

TEMA LABORATOR NR.131. //*Sa se scrie o aplicatie care: - citeste de la consola un numar intreg n; - citeste de la consola, cu o functie, n numere reale, intr-un vector dinamic; - scrie apoi valorile din tablou intr-un fisier binar al carui nume este citit de la consola; - citeste apoi continutul fisierului si afiseaza numerele din 3 in 3 pozitii, folosind accesul aleator la fisiere*//

#include #include using namespace std;void read(int *p,int n);void main(void){ int n,*p,a; char fileName[255]; FILE *f;

60

Page 61: Rezolvare Laboratoare Pe Tot Anu

cout<<"Introduceti dimensiunea vectorului: "; cin>>n; if(!(p = new int[n])) { cout<<"Eroare la la alocarea dinamica!"; return; } read(p,n); cout<<"Introduceti numele fisierului: "; cin>>fileName; if((f=fopen(fileName,"wb"))==NULL) { cout<<"Eroare la deschiderea fisierului"; return; } fwrite(p,sizeof(int),n,f); fclose(f); if((f=fopen(fileName,"rb"))==NULL) { cout<<"Eroare la deschiderea fisierului"; return; } while(true) { fread(&a,sizeof(int),1,f); if(feof(f)!=0) break; else { cout<< fseek(f,2*(long)sizeof(int),SEEK_CUR); } } fclose(f);}void read(int *p, int n){ cout<<"Introduceti elementele vectorului\n"; for(int i=0;i { cout<<"\tElementul "<<<": "; cin>>*(p+i); }}

2. //*Sa se scrie o aplicatie care: - defineste o structura Student (nume,prenume,grupa,medie); - citeste de la consola un numar intreg n; - pentru fiecare student, citeste cu o functie datele aferente si le scrie intr-un fisier cu numele preluat de la consola; - citeste continutul fisierului si afiseaza la consola studentii ce au media mai mare decat o medie citita de la consola*//

#include using namespace std;#include struct student{ char nume[50]; char prenume[50];

61

Page 62: Rezolvare Laboratoare Pe Tot Anu

int grupa; float medie;};void read(struct student *p);void main(void){ struct student *p; int n; FILE *f; char fileName[255]; float med; cout<<"Introduceti numarul de studenti: "; cin>>n; if(!(p = new struct student[n])) { cout<<"Eroare la alocarea dinamica!"; return; } cout<<"Introduceti datele studentilor\n"; for(int i=0;i { read(p+i); } cout<<"\nIntroduceti numele fisierului: "; cin>>fileName; if((f = fopen(fileName,"wb"))==NULL) { cout<<"Eroare la deschiderea fisierului"; return; } for(int i=0;i { fwrite((p+i),sizeof(student),1,f); } fclose(f); cout<<"\nIntroduceti media limita: "; cin>>med; if((f=fopen(fileName,"rb"))==NULL) { cout<<"Eroare la deschiderea fisierului"; return; } cout<<"Studentii cu medie mai mare decat "<<<":\n"; for(int i=0;i { fread((p+i),sizeof(student),1,f); if((p+i)->medie>med) { cout<<"\n\t"<<(p+i)->nume<<"\t"<<(p+i)->prenume<<"\n\t\tgr: "<<(p+i)->grupa<<"\tmed: "<<(p+i)->medie; } } fclose(f);}void read(struct student *p){ cout<<"\n\tNume: "; cin>>p->nume; cout<<"\tPrenume: "; cin>>p->prenume;

62

Page 63: Rezolvare Laboratoare Pe Tot Anu

cout<<"\tGrupa: "; cin>>p->grupa; cout<<"\tMedia: "; cin>>p->medie;}

3. //*Sa se scrie o aplicatie care: - citeste de la consola un numar intreg n; - citeste de la consola, cu o functie, n numere intregi, intr-un vector dinamic; - scrie apoi valorile din tablou intr-un fisier binar al carui nume este citit de la consola; - citeste apoi continutul fisierului si afiseaza pozitiile pe care s-au gasit numere pare*//

#include using namespace std;#include void read(int *p,int n);void main(void){ int n,*p; char fileName[255]; FILE *f; cout<<"Introduceti dimensiunea vectorului: "; cin>>n; if(!(p= new int[n])) { cout<<"Eroare la alocarea dinamica"; return; } cout<<"Introduceti numerele: \n"; read(p,n); cout<<"Introduceti numele fisierului: "; cin>>fileName; if((f=fopen(fileName,"wb"))==NULL) { cout<<"Eroare la deschiderea fisierului"; return; } fwrite(p,sizeof(int),n,f); fclose(f); if((f=fopen(fileName,"rb"))==NULL) { cout<<"Eroare la deschiderea fisierului"; return; } fread(p,sizeof(int),n,f); fclose(f); cout<<"Elementele pare sunt pe pozitiile: \n\t"; for(int i=0;i { if(*(p+i)%2==0) { cout<<" "< } } delete []p;}void read(int *p,int n){ for(int i=0;i

63

Page 64: Rezolvare Laboratoare Pe Tot Anu

{ cout<<"\tElementul "<<<": "; cin>>*(p+i); }}

4. //*Sa se scrie un program care primeste in linia de comanda doua nume de fisiere. Prinprogram se citesc 8 numere intregi, care apoi vor fi scrise, in mod binar, in primul fisier. Cititi apoi valorile din acest fisier si efectuati media aritmetica a numerelormai mari decat 4. Rezultatul va fi scris in al doilea fisier, sub forma: Media aritmetica a numerelor ..., este .... Unde in locul punctelor de suspensie vor fi scrise valorile acaror pedie a fost calculata si respectiv valoarea mediei cu o precizie de 2 digiti*//

#include using namespace std;#include void main(void){ char fileNameIn[255],fileNameOut[255]; int *p,cate=0; float med=0; FILE *f; cout<<"Introduceti numele fisierului intrare: "; cin>>fileNameIn; cout<<"Introduceti numele fisierului iesire: "; cin>>fileNameOut; if(!(p=new int[8])) { cout<<"Eroare la alocarea dinamica"; return; } cout<<"Introduceti 8 numere intregi: \n"; for(int i=0;i<8;i++) { cout<<"\tElementul "<<<": "; cin>>*(p+i); } if((f=fopen(fileNameIn,"wb"))==NULL) { cout<<"Eroare la deschiderea fisierului"; return; } fwrite(p,sizeof(int),8,f); fclose(f); if((f=fopen(fileNameIn,"rb"))==NULL) { cout<<"Eroare la deschiderea fisierului"; return; } fread(p,sizeof(int),8,f); fclose(f); if((f=fopen(fileNameOut,"w"))==NULL) { cout<<"Eroare la deschiderea fisierului"; return; } fprintf(f,"Media aritmetica a numerelor "); for(int i=0;i<8;i++) {

64

Page 65: Rezolvare Laboratoare Pe Tot Anu

if(*(p+i)>4) { fprintf(f," %d",*(p+i)); med+=*(p+i); cate++; } } med/=cate; fprintf(f,", este %.2f.",med); fclose(f); cout<<"\nRezultatul a fost scris in fisierul "<}

65