c++ laboratoare

128
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)

Upload: cosmina-alexandra-dulamita

Post on 01-Dec-2015

876 views

Category:

Documents


10 download

TRANSCRIPT

Page 1: C++ Laboratoare

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.

Page 2: C++ Laboratoare

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

Page 3: C++ Laboratoare

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>

Page 4: C++ Laboratoare

using namespace std;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:";

Page 5: C++ Laboratoare

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; 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); }

Page 6: C++ Laboratoare

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;

Page 7: C++ Laboratoare

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

Page 8: C++ Laboratoare

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

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;

Page 9: C++ Laboratoare

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

Page 10: C++ Laboratoare

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) {

Page 11: C++ Laboratoare

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;}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)

Page 12: C++ Laboratoare

{ 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<<")";elsecout<<"Diagonala dreptunghiului discutat nu este egala cu cel de al treilea numar introdus ("<<c<<")";

Page 13: C++ Laboratoare

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

Page 14: C++ Laboratoare

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:- 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)

Page 15: C++ Laboratoare

{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;

Page 16: C++ Laboratoare

}

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;

Page 17: C++ Laboratoare

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){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;}

Page 18: C++ Laboratoare

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

Page 19: C++ Laboratoare

}cout<<"\nNumerele impare din sirul dat sunt: ";for(unsigned i=0;i<n;i++)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;

Page 20: C++ Laboratoare

}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]; 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];

Page 21: C++ Laboratoare

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){

Page 22: C++ Laboratoare

int x[10]; cout<<"Introduceti zece elemente intregi"; for(int i=0;i<10;i++) { 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 {

Page 23: C++ Laboratoare

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; 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: ";

Page 24: C++ Laboratoare

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)

Page 25: C++ Laboratoare

{ for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cout<<"\tElementul "<<i+1<<" "<<j+1<<": "; cin>>v[i][j]; }}

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]; }}

Page 26: C++ Laboratoare

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]) { 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);

Page 27: C++ Laboratoare

} 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)]) {

Page 28: C++ Laboratoare

asci[*(c+i)] = 1; *(cC+(k++))=*(c+i); } i++; } *(cC+k) = 0; printf("%s",sirClean);}

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;

Page 29: C++ Laboratoare

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) { 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;

Page 30: C++ Laboratoare

}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) {

Page 31: C++ Laboratoare

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) { 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

Page 32: C++ Laboratoare

//*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); } cout<<"\n cel mai mic element pozitiv din sir este:"<<min<<endl;}

Page 33: C++ Laboratoare

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;

Page 34: C++ Laboratoare

}

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

Page 35: C++ Laboratoare

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){

Page 36: C++ Laboratoare

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;

Page 37: C++ Laboratoare

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++) { 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++) {

Page 38: C++ Laboratoare

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);}

Page 39: C++ Laboratoare

void citire(float *p){ cout<<"Introduceti elementele unei matrici 3x3\n"; for(int i=0;i<3;i++) 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)<<" "; }}

Page 40: C++ Laboratoare

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

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++)

Page 41: C++ Laboratoare

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

Page 42: C++ Laboratoare

#include <iostream>using namespace std;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++)

Page 43: C++ Laboratoare

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){ 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:";

Page 44: C++ Laboratoare

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;

Page 45: C++ Laboratoare

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) { *(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 10

Page 46: C++ Laboratoare

void 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<<": "; 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);

Page 47: C++ Laboratoare

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

Page 48: C++ Laboratoare

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:"; 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;}

Page 49: C++ Laboratoare

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){

Page 50: C++ Laboratoare

int n; float a[DIM]; 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++)

Page 51: C++ Laboratoare

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

Page 52: C++ Laboratoare

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

Page 53: C++ Laboratoare

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;}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, în

Page 54: C++ Laboratoare

functia 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){ int aux; j--; k--; for(int i=0;i<n;i++) for(int j=0;j<n;j++)

Page 55: C++ Laboratoare

*(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

Page 56: C++ Laboratoare

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

Page 57: C++ Laboratoare

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

Page 58: C++ Laboratoare

b=(int*)malloc(m*n*sizeof(int));c=(int*)malloc(m*n*sizeof(int));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;}

Page 59: C++ Laboratoare

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;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){

Page 60: C++ Laboratoare

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];}

Page 61: C++ Laboratoare

med=(long float)sum/N1;return(med);}

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){

Page 62: C++ Laboratoare

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

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;

Page 63: C++ Laboratoare

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

Page 64: C++ Laboratoare

}}cout<<"\n numerele care apare cel mai frecvent sunt:";for(k=0;k<10;k++){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;

Page 65: C++ Laboratoare

};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();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";

Page 66: C++ Laboratoare

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 ca

Page 67: C++ Laboratoare

parametru 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];};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;}

Page 68: C++ Laboratoare

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;strcpy(p.sir3,p.sir1);strcat(p.sir3,p.sir2);return p;}

Page 69: C++ Laboratoare

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;

Page 70: C++ Laboratoare

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++)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,

Page 71: C++ Laboratoare

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);}

Page 72: C++ Laboratoare

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){

Page 73: C++ Laboratoare

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: ";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)

Page 74: C++ Laboratoare

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])){

Page 75: C++ Laboratoare

cout<<"\n\nEroare la alocare\n";return;}cout<<"\nIntroduceti datele studentilor:";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>

Page 76: C++ Laboratoare

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

Page 77: C++ Laboratoare

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;

Page 78: C++ Laboratoare

}

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){

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

Page 79: C++ Laboratoare

<<". 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;

}

Page 80: C++ Laboratoare

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>

Page 81: C++ Laboratoare

#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)?";do{

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

break;else

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

if(opt == 'y')

Page 82: C++ Laboratoare

{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);

Page 83: C++ Laboratoare

} 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){

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

Page 84: C++ Laboratoare

}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 ++;}

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

}

Page 85: C++ Laboratoare

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");

Page 86: C++ Laboratoare

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)

Page 87: C++ Laboratoare

{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){

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){

Page 88: C++ Laboratoare

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){

Page 89: C++ Laboratoare

cate ++;}

}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";

Page 90: C++ Laboratoare

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

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

Page 91: C++ Laboratoare

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

Page 92: C++ Laboratoare

using namespace std;void read(int *p,int n);void main(void){ int n,*p,a; char fileName[255]; FILE *f; 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); } }

Page 93: C++ Laboratoare

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]; 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: ";

Page 94: C++ Laboratoare

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

Page 95: C++ Laboratoare

fclose(f);}void read(struct student *p){ cout<<"\n\tNume: "; cin>>p->nume; cout<<"\tPrenume: "; cin>>p->prenume; 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";

Page 96: C++ Laboratoare

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 { 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

Page 97: C++ Laboratoare

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

Page 98: C++ Laboratoare

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++) { 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 "<}