Probleme Rezolvate

Descărcați ca docx, pdf sau txt
Descărcați ca docx, pdf sau txt
Sunteți pe pagina 1din 64

1

Sa se scrie un program pentru determinarea mediei aritmetice a trei numere neintregi.


#include <iostream>
using namespace std;
void main(void)
{
float a,b,c,media_aritmetica;
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
cout<<"c=";
cin>>c;
media_aritmetica=(a+b+c)/3;
cout<<"Media aritmetica este "<<media_aritmetica<<"\n";
}
Sa se scrie un program pentru pentru determinarea mediei geometrice a doua numere intregi.
#include <iostream>
#include <math.h>
using namespace std;
void main (void)
{
float media_geometrica;
int a,b;
cout <<"a=";
cin >>a;
cout <<"b=";
cin>>b;
media_geometrica=sqrt(a*b);
cout <<"Media geometrica este "<<media_geometrica<<"\n";}
Sa se scrie un program C/C++ care defineste o variabila intreaga care va fi initializata cu valori constante. Afisati rezultatul cu ajutorul
supraincarcarii operatorului << si a lui cout.
#include <iostream>
using namespace std;
void main(void)
{
int x=2;
cout<<"\n Numarul citit este: "<<x;}
Definiti un sir de caractere care va fi afisat cu cout. Definiti alte siruri de caractere folosind secvente escape.
Verificati utilizarea spatiilor albe.
#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;}
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
2

4 zecimale si aliniere la stanga.


#include <stdio.h>
float serie_c(float,float);
float paralel_c(float,float);
void main(void)
{
float C1,C2;
printf("\n Introduceti C1= ");
scanf("%f",&C1);
printf("\n Introduceti C2= ");
scanf("%f",&C2);
float capacitate_s;
capacitate_s=serie_c(C1,C2); //Calculeaza capacitatile C1 si C2 ce sunt in serie.
printf("\n Condensator serie este=%-8.4f \n",capacitate_s);
float capacitate_p;
capacitate_p=paralel_c(C1,C2); //Calculeaza capacitatile C1 si C2 ce sunt in paralel.
printf("\n Condensator paralel este=%-8.4f \n",capacitate_p);}
float serie_c(float C1,float C2)
{
float n;
n=(C1*C2)/(C1+C2); //Operatia prin care se calculeaza capacitatile conectate in serie.
return n;}
float paralel_c(float C1, float C2)
{
float m;
m=C1+C2; //Operatia prin care se calculeaza capacitatile conectate in paralel.
return m;}
Cititi de la tastatura doua valori intregi care reprezinta capetele unui triunghi dreptunghic. Determinati ipotenuza si perimetrul
triunghiului. Afisati rezultatul pe linii diferite.
#include <stdio.h>
#include <math.h>
float ipotenuza(int,int);
float perimetru(int,int,float);
void main(void)
{
float c1,c2;
printf("\n Introduceti cateta c1= ");
scanf("%f",&c1);
printf("\n Introduceti cateta c2= ");
scanf("%f",&c2);
float i;
i=ipotenuza(c1,c2);
printf("\n Ipotenuza este =%f\n",i);
float p;
p=perimetru(c1,c2,i);
printf("\n Perimetrul este =%f\n",p);}
float ipotenuza(int c1, int c2)
{
float i;
i=sqrt((float)(c1*c1+c2*c2)); //Operatia pentru calculul ipotenuzei.
return i;}
float perimetru(int c1, int c2, float i)
{
float p;
p=c1+c2+i; //Operatia pentru calculul perimetrului.
return p;}
Cititi de la tastatura doua valori intregi a si b (a!=0), unde a si b sunt coeficientii ecuatiei ax+b=0. Rezolvati ecuatia si afisati rezultatul.
3

#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
void main(void)
{
int a,b;
float s;
printf("\ Coeficientul a= ");
scanf("%d",&a);
printf("\ Coeficientul b= ");
scanf("%d",&b);
s=-b/a;
printf("\n Solutia ecuatiei este:%f",s);}
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 serie1(float,float);
float paralel1(float,float);
float serie2(float,float);
float paralel2(float,float);
void main(void) {
float r1,r2,serie_r,paralel_r, c1, c2, serie_c, paralel_c;
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);
serie_r=serie1(r1,r2);
paralel_r=paralel1(r1,r2);
printf("\n Rezistenta serie este:\n%5.3f \n",serie_r);
printf("\n Rezistenta paralel este:\n%5.3f \n",paralel_r);
serie_c=serie2(c1,c2);
paralel_c=paralel2(c1,c2);
printf("\n Capacitate serie este:\n%-8.4f \n",serie_c);
printf("\n Capacitate paralel este:\n%-8.4f \n",paralel_c);
}
float serie1(float a,float b)
{return a+b;}
float paralel1(float a, float b)
{return a*b/(a+b);}
float paralel2(float a,float b)
{return a+b;}
float serie2(float a, float b)
{return a*b/(a+b); }
/*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;
4

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;}
/*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;}
/*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;
}
}
Sa se scrie un program care monitorizeaza un canal de 16/32/64 biti. Pentru aceasta cititi de la
tastatura 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 functie
numita getsets() care primeste trei valori ca parametri:
- x: valoarea citita de la tastatura
5

- 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, unde
p>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;
}
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);}
/*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);}
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>
6

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 este egala cu cel de al treilea numar introdus ("<<c<<")";
else
cout<<"Diagonala dreptunghiului nu este egala cu cel de al treilea numar introdus ("<<c<<")";
cout<<endl<<endl;}
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;}
Sa se scrie un program care calculeaza a la n, unde n este citit de la consola.
#include <iostream>
using namespace std;
void main(void)
{
float a,exponential=1;
unsigned int n; //Se considera n numar natural
cout<<"Introduceti un numar real: ";
cin>>a;
cout<<endl<<"Introduceti exponentul un numar natural: ";
cin>>n;
for(int i=0;i<n;i++)
exponential *= a;
cout<<a<<" la puterea "<<n<<" este egal cu: "<<exponential<<endl;}
Sa se scrie un program care citeste de la tastatura o valoare intreaga si calculeaza n !.
#include <iostream>
using namespace std;
void main(void)
{
int n; //Se considera n numar natural
int p=1;
cout<<"Introduceti o valoare intreaga: ";
7

cin>>n;
for(int i=1;i<=n;i++)
p=p*i;
cout<<"Valoarea lui "<<n<<"! este: "<<p<<endl;}
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)
{
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;
}
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;
else
b-=a;
cout<<endl<<endl<<"Cel mai mare divizor comun al numerelor date este: "<<a<<endl;}
Sa se scrie un program care determina toti divizorii unui numar.
8

#include <iostream>
using namespace std;
void main(void)
{
unsigned int x;
cout<<"Introduceti un numar natural: ";
cin>>x;
cout<<"Divizorii numarului "<<x<<" sunt:\n\t 1";
for(int d=2;d<=x;d++)
if(x%d==0)
cout<<" "<<d;
cout<<endl;}
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;}
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,semn_X=1,semn_Y=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;
semn_X = -1;
}
if(y<0)
{
y*=-1;
semn_Y = -1;
9

}
while(x>=y)
{
x-=y;
catul++;
}
catul*=semn_X*semn_Y;
cout<<"Catul impartirii celor doua numere este: "<<catul<<endl;}
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;}
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 100
void 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++)
if(v[i]%2)
cout<<v[i]<<" ";
cout<<endl;}
Scrieti un program pentru determinarea valorii medii a elementelor pozitive/negative dintr-un vector.
#include <iostream>
using namespace std;
#define MAX 100
unsigned citire(int x[]);
float valMedieNegative(int x[],unsigned n);
float valMediePozitive(int x[],unsigned n);
void main(void)
{
10

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: "; //se introduc elementele sirului respectand dimensiunea data anterior.
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]; //se calculeaza suma numerelor negative din vector.
count++;
}
if(!count) //daca numarul cifrelor negative (count) este diferit de 0,se efectueaza impartirea sum/count.
return 0;
return sum/count; //se calculeaza valoarea medie a nr negative din vector.
}
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]; //se calculeaza suma numerelor pozitive din vector.
count++;
}
if(!count) //daca numarul cifrelor pozitive (count) este diferit de 0,se efectueaza impartirea sum/count.
return 0;
return sum/count; //se calculeaza valoarea medie a nr pozitive din vector.}
Determinarea celui mai mic element pozitiv dintr-un vector.
#include <iostream>
using namespace std;
#define MAX 100
unsigned citire(int x[]);
unsigned minElemPozitiv(int x[],unsigned n);
void main(void)
{
int x[MAX];
unsigned n,min;
n = citire(x);
11

min = minElemPozitiv(x,n);
if(min==-1)
cout<<"Nu exista numere pozitive in sirul dat\n"; //daca in sir nu sunt elemente pozitive se va afisa acest mesaj.
else
cout<<"Cel mai mic element pozitiv din sirul dat este: "<<min<<endl; //altfel,minimul din sir va fi reprezentat de variabila min.
}
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)) //conditiile de afisare a celui mai mic element pozitiv din sir.
min = x[i];
return min;
}
Scrieti o aplicatie C/C++ care citeste de la tastatura un sir de 10 valori intregi. Definiti o functie 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++)
{
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--) //parcurgem valorile de la ultimul element catre primul element.
if(x[j]<x[j-1])
{
aux = x[j];
x[j] = x[j-1];
x[j-1] = aux;
} //cu ajutorul variabile aux,interschimbam x[j] cu x[j-1] in caz ca se indeplineste conditia x[j]<x[j-1]
cout<<"\nSirul dat ordonat crescator este: "<<endl;
for(int i=0;i<10;i++)
cout<<x[i]<<" ";}
12

Scrieti o aplicatie C/C++ care defineste o parola (in format sir de caractere). Programul citeste in mod repetat sirurile de caractere
introduse de la tastatura, pana cand utilizatorul scrie parola corecta.
Sa se afiseze numarul de incercari pana la introducerea parolei corecte.
#include <stdio.h>
char parola[]= "petronela"; //parola propriu-zisa.
int parola_gresita();
void main()
{int count=parola_gresita(); //variabila count retine numarul de incercari cand parola a fost introdusa gresit.
printf("Numarul de incercari: %d\n",count);
}
int parola_gresita()
{int c=0,p=0,bun=1;
do{
c++;
printf("Introduceti parola: ");
char s[100];
scanf("%s",s);
p=0;
bun=1;
while(s[p]!='\0' && parola[p]!='\0')
{
if(s[p]!=parola[p]) {bun=0; break;}
p++;
}
if((s[p]=='\0'&&parola[p]!='\0')||(s[p]!='\0'&&parola[p]=='\0')) bun=0;
}while(!bun);
return c;
}
Scrieti o aplicatie C/C++ care citeste de la tastatura 2 siruri de caractere reprezentand numele si prenumele unei persoane. Afisati-le
cu majuscula, separate prin 2 spatii de tabulare.

//Program care citeste de la tastatura 2 siruri de caractere reprezentand numele si prenumele unei persoane. Afisati-le cu majuscula,
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;
}
Scrieti o aplicatie C/C++ care defineste 2 matrice de valori intregi. Dimensiunea si elementele matricilor sunt citite de la tastatura.
Scrieti functiile care:
a) afiseaza pozitiile elementelor pare din fiecare matrice;
b) afiseaza suma elementelor impare din ambele matrice;
c) afiseaza suma matricelor;
#include <iostream>
using namespace std;
#define MAX 10
void read(int v[MAX][MAX],int n,int m); //functia pt citirea matricelor.
13

void pozitiile_Pare(int v[MAX][MAX],int n,int m); //functia pt determinarea pozitiilor elementelor pare din fiecare matrice;
void suma_Impare(int v1[MAX][MAX],int v2[MAX][MAX],int n,int m); //functia pt determinarea sumei elementelor impare din ambele
matrice;
void suma_Matricelor(int v1[MAX][MAX],int v2[MAX][MAX],int n, int m); //functia pt determinarea sumei matricelor.
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: ";
pozitiile_Pare(v1,n,m);
cout<<"\nPozitiile elementelore pare din matricea 2: ";
pozitiile_Pare(v2,n,m);
suma_Impare(v1,v2,n,m);
cout<<"\nSuma matricelor este: \n";
suma_Matricelor(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];
}
}

void pozitiile_Pare(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) //daca elementul este par se va afisa pozitia lui atat petrun matricea v1 cat si pt matricea v2.
cout<<endl<<i+1<<" "<<j+1;
}
void suma_Impare(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; //se verifica daca numerele sunt impare si daca conditia
este indeplinita se face suma lor,matricele v1 si v2.
}
void suma_Matricelor(int v1[MAX][MAX],int v2[MAX][MAX],int n,int m)
{
for(int i=0;i<n;i++)
{
14

cout<<endl;
for(int j=0;j<m;j++)
cout<<" "<<v1[i][j]+v2[i][j];
} //se afiseaza suma elementelor matricelor v1 si v2.
}
Cititi de la tastatura elementele unei matrice de elemente de tip float, cu dimensiunea 3x3. Rearanjati coloanele matricei astfel incat
suma elementelor de pe o anumita coloana sa fie mai mica decat suma elementelor de pe coloana urmatoare.
#include <stdio.h>
int m[3][3];
void matrice(int a[3][3]);
void sortare_matrice(int a[3][3]); //functia ce sorteaza coloanele.
int suma(int a[3][3],int); //functia ce realizeaza suma elementelor de pe coloane.
void rearanjare_matrice(int a[3][3],int); //funtia ce reaaranjeaza matricea.
void main()
{
printf("\nDati elementele matricei:\n");
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
scanf("%d",&m[i][j]);
matrice(m);
printf("\n");
sortare_matrice(m);
matrice(m);
}

void matrice(int a[3][3])


{ for(int i=0;i<3;i++)
{for(int j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}

void sortare_matrice(int a[3][3])


{ int s;
do{ s=0;
for(int i=0; i<2;i++)
if(suma(a,i)>suma(a,i+1)) //sortarea coloanelor dupa suma elementelor.
{
rearanjare_matrice(m,i);
s=1;
}
} while(s==1);
}

int suma(int a[3][3],int i)


{int s=0;
for(int j=0;j<3;j++)
s+=a[j][i];
return s;
}

void rearanjare_matrice(int a[3][3],int i)


{
for(int j=0;j<3;j++)
{a[j][i]=a[j][i]+a[j][i+1];
a[j][i+1]=a[j][i]-a[j][i+1];
15

a[j][i]=a[j][i]-a[j][i+1];
} //interschimbarea coloanelor,astfel incat suma elementelor de pe o anumita coloana sa fie mai mica decat suma elementelor de
pe coloana urmatoare.
}
Sa se scrie un program care citeste de la tastatura un sir de caractere folosind pointeri si sa se afiseze sirul obtinut prin eliminarea
caracterelor care se repeta in sir.
#include<stdio.h>
#include<string.h>
void main(void)
{
char v[30],*p,i,j,k; //variabile sir de caractere
p=&v[0];
printf("Introduceti sirul de caractere: "); //introducem sirul de caractere fara spatii intre caractere
scanf("%s",p);
printf("%s\n",p);
for( i=0;i<strlen(p);i++) //parcurgem sirul folosind doua variabile i de la 0 si j de la i+1 cu functia for()
for( j=i+1;j<=strlen(p);j++)
while (*(p+i)==*(p+j)) //cat timp doua caractere sunt identice se executa functia for()
{
for( k=j;k<strlen(p);k++) //sirul parcurs cu variabila k imi returneaza noul sir cu *(p+i)!=*(p+j)
*(p+k)=*(p+k+1); //caracterul identic este ignorat si se trece la urmatoarea valoare.
}
for(i=0;i<strlen(p);i++)
printf("%c \n",*(p+i)); //se afiseaza caracterele ce apar o singura data in sir.
}
Sa se scrie un program care citeste de la tastatura 2 siruri de caractere si sa se afiseze numarul de
caractere prin care difera cele doua siruri (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). Folositi pointeri pentru accesul la elementele
tablourilor.
#include <stdio.h>
#include <string.h>
void main()
{
char a[30], b[30];
char *p, *q;
p = &a[0];
q = &b[0];
printf("primul cuvant:");
scanf("%s",p);
printf("al 2-lea cuvant:");
scanf("%s",q);
int i, j, c, x = 0; //c = marcaj(marcam daca exista elementul cautat din primul sir in al doilea sir)
for (i = 0; i < strlen(p); i++)
{
c = 0; //marcaj=0(nu exista caracterul curent din a in sirul b)
for (j = 0; j < strlen(q); j++)
if (*(p+i) == *(q+j))
{
c = 1; //marcaj=1(exista caracterul curent din a in sirul b)
break; //intreruperea celui de-al doilea for()
}
if (!c) x++; //daca marcaj=0(nu exista caracterul curent din sirul a in b, incrementam x (numarul elementelor cu
care difera)
}
for (i = 0; i < strlen(q); i++)
{ //acelasi algoritm, dar cautand din sirul b in sirul a, cu incrementarea aceluiasi x.
c = 0;
16

for (j = 0; j < strlen(p); j++)


if (*(q+i) == *(p+j)){
c = 1;
break;
}
if (!c) x++;
}
printf("\n Sirurile difera prin %i element(e) \n",x); //afisarea lui x
}
//Sa se scrie un program C/C++ care citeste elementele a doi vectori de intregi si afiseaza produsul
scalar al acestora. Se va folosi o functie care citeste elementele de la tastatura si o functie care
calculeaza produsul scalar, ambele vor utiliza pointeri. Citirea numarului de elemente ale tabloului si
afisarea rezultatului se va face in functia main().

#include<stdio.h>
void cit(int *a,int n);
int scalar(int *a,int *b,int n);
void main()
{
int a[100],b[100];
int n,ok;
printf("Dimensiunea vectorilor a si b=");
scanf("%i",&n);
if(n<100)
{
ok=1; //confirma ca dimensiunea data de la tastatura este corespunzatoare,in secventa de instrunctiuni se introduc elementele
vectorilor a si b;
printf("Primul vector:\n");
cit(a,n);
printf("Al 2-lea vector:\n");
cit(b,n);
int p=scalar(a,b,n); //valoarea produsului este atribuita prin functia scalar variabilei p;
printf("Produsul scalar este: %i \n",p); //afisarea produsului scalar
}
else printf("Dimensiunea este prea mare! n trebuie sa fie mai mic de 100"); //altfel afiseaza mesajul corespunzator.
}

void cit(int*a,int n) //apelul functiei citire


{
int i;
for(i=0;i<n;i++){
printf("a[%i]=",i);
scanf("%i",&a[i]);
}
}

int scalar(int *a,int *b,int n) //apelul functiei scalar


{
int p=0,i;
for(i=0;i<n;i++) //parcurgem ambii vectori de dimensiuni egale
p=p+(*(a+i)*(*(b+i))); //formula de calcul a produsului scalar
return p;
}
//Program ce determina valoarea medie a elementelor pozitive/negetive dintr-un vector,folosind pointeri.

#include <stdio.h>
int v[100],*p=v,n,sum_neg,sum_poz,nr_poz,nr_neg; //declararea variabilelor.
17

void main()
{
printf("Dati numarul de elemente: ");
scanf("%d",&n);
printf("Dati %d elementele separate prin spatii: ",n);
for(int i=0;i<n;i++) //intr-un ciclu for() calculam suma elementelor pozitive/negative si numaram cate elemente negative/pozitive
avem in vector.
{
scanf("%d",p+i);
if(v[i]<0) //daca in vector avem elemente negative efectuam suma elementelor respective.
{
sum_neg+=*(p+i);
nr_neg++; //numara cate numere negative sunt in vector.
}
else //altfel daca in vector avem elemente pozitive efectuam suma elementelor respective.
{
sum_poz+=*(p+i);
nr_poz++; //numara cate numere pozitive sunt in vector.
}
}
if(nr_neg)
printf("Valoarea medie a elementelor negative din vector este %f\n",(float)sum_neg/nr_neg); //calculam valoarea medie a elentelor
negative.
else
printf("Nu exista numere negative in vector\n");
if(nr_poz)
printf("Valoarea medie a elementelor pozitive din vector este %f\n",(float)sum_poz/nr_poz); //calculam valoarea medie a elentelor
pozitive.
else
printf("Nu exista numere pozitive in vector!\n");
}
//Program pentru determinarea celui mai mic element pozitiv dintr-un vector,folosind pointeri.

#include <stdio.h>
void main()
{
int v[100],*p=v,n,min=-1; //declararea variabilelor;min se initializeaza cu -1 deoarece trecuie sa porneasa de la cea mai mica
valoare,diferita de 0.
printf("Dati numarul de elemente ale vectorului: ");
scanf("%d",&n);
printf("Dati %d elementele separate prin spatii: ",n);
for(int i=0;i<n;i++) //parcurgem vectorul intr-un ciclu for().
scanf("%d",p+i);
for(int i=0;i<n;i++)
if(*(p+i)>=0 && (*(p+i)<min||min<0)) //impunem conditiile necesare gasirii minimului; elementele vectorului sa fie pozitive si se
compara fiecare element *(p+i) cu min sau min cu 0,pentru a fi diferit de valoari negative,cea initializata la inceput (min=-1).
min=*(p+i); //daca conditiile sunt indeplinite si *(p+i) este mai mic decat min,lui min i se atribuie valoarea respectiva.
if(min>=0) //verifica daca ultima valoare minima gasita in vector este pozitiva si daca se respecta conditia atunci se va afisa acel
numar.
printf("Cel mai mic numar pozitiv din vector este %d\n",min);
else
printf("Nu exista numere pozitive in vector!"); //altfel va afisa un mesaj corespunzator.
}

//Program care citeste de la tastatura un sir de 10 valori intregi. Definiti o functie care
primeste sirul ca parametru si apoi il afiseaza ordonat crescator,folosind pointeri.
#include <stdio.h>
18

void sortare_vector(int*); //functia ce sorteaza vectorul,punandu-le in ordine crescatoare.


void main()
{int v[10],*p=v; //declararea vectorului v de dimensiune 10 si pointerul p.
printf("Dati elementele vectorului: \n");
for(int i=0;i<10;i++)
scanf("%d",(p+i));
sortare_vector(p); //apelul functiei sortare_vector()
printf("Vectorul ordonat crescator este: \n");
for(int i=0;i<10;i++)
printf("%d ",*(p+i));
printf("\n");
}
void sortare_vector(int *p) //functia ce ordoneaza vectorul
{ int ok; //variabila ce verifica indeplinirea conditiilor si a operatiilor.
do //folosim ciclul do-while()
{
ok=0; //initial este 0.
for(int i=0; i<9;i++) //pentru ca stim numarul de pasi folosim for() pentru a parcurge vectorul.
if(*(p+i)>*(p+i+1)) //daca *(p+i+1) este mai mic decat precedentul se vor executa urmatoarele operatii:
{
*(p+i)=*(p+i)+*(p+i+1);
*(p+i+1)=*(p+i)-*(p+i+1);
*(p+i)=*(p+i)-*(p+i+1);
//se face interschim intre valorile lui *(p+i) si *(p+i+1) prin adunari si scaderi

ok=1;
}
} while(ok==1);
}
//Program care defineste parola,in format sir de caractere,citeste in mod repetat sirurile de caractere introduse de la tastatura, pana
cand utilizatorul scrie parola corecta.Se afiseaza si numarul de incercari pana la introducerea parolei corecte,folosind pointeri
#include <stdio.h>
int acces_parola(char*);
void main()
{
char parola[]= "ana"; //parola propriu-zisa.
int count=acces_parola(parola); //i se atribuie numarul de incercari, atunci cand s-a introdus parola gresita.
printf("Numarul de incercari: %d\n",count);
}
int acces_parola(char *parola)
{int c=0,i=0,bun=1;
char s[100],*p=s; //declararea unui sir de caractere si pointerul aferent lui.
do //intr-un ciclu do-while() se realizeaza introducerea parolei de la tastatura pana la introducerea parolei propriu-zise
declarata la inceputul programului.
{
c++;
printf("Introduceti parola: ");
scanf("%s",p);
i=0;
bun=1;
while(*(p+i)!='\0' && *(parola+i)!='\0')
{
if(*(p+i)!=*(parola+i))
{
bun=0;
break;
}
19

i++;
}
if((*(p+i)=='\0'&&*(parola+i)!='\0')||(*(p+i)!='\0'&&*(parola+i)=='\0')) //verifica caracter cu caracter daca sirul de caractere
introdus se potriveste cu parola propriu-zisa declarata initial.
bun=0;
}while(!bun);
return c;
}
//Program care citeste de la tastatura 2 siruri de caractere reprezentand numele si prenumele unei persoane. Afisati-le cu majuscula,
separate prin 2 spatii de tabulare,folosind pointeri.
#include <stdio.h>
#include <stdlib.h>
void upper(char *s);
void main()
{
char nume[30],*n=nume,prenume[30],*p=prenume;
printf("Introduceti numele si prenumele: ");
scanf("%s",n);
scanf("%s",p);
upper(n);
upper(p);
printf("%s\t%s\n",n,p);
}
void upper(char *s)
{ int i=0;
while(*(s+i))
{if(*(s+i)>=97)
*(s+i)-=32;
i++;
}
}
//Program care defineste doua matrice de valori intregi,dimensiunea si elementele fiind date de la tastatura.Determina functiile
pentru:
a) afisarea pozitiile elementelor pare din fiecare matrice;
b) afisarea suma elementelor impare din ambele matrice;
c) afisarea suma matricelor;
Folositi pointeri.
#include <stdio.h>
void suma_impara(int *mt,int dim); //functia pt determinarea sumei elementelor impare din ambele matrice;
void pozitie_para(int *mt,int dim); //functia pt determinarea pozitiilor elementelor pare din fiecare matrice;
void suma(int *mt,int dim); //functia pt determinarea sumei matricelor.
void main()
{int matrice[2][100][100],*m=&matrice[0][0][0];
int n,sum_i=0;
printf("Dati dimensiunea matricii: "); //Dam dimensiunea matricelor de la tastatura;
scanf("%d",&n);
for(int k=0;k<2;k++)
{printf("Dati elemenentele matricii %d:\n",k+1); //Elementele celor doua matrici;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",(m+k*n*n+i*n+j));
}
pozitie_para(m,n); //apelul functiilor;
suma_impara(m,n);
suma(m,n);
}
void suma(int *m,int dim) //realizeaza suma matricelor;
20

{
printf("Suma matricelor este: \n");
for(int i=0;i<dim;i++)
{for(int j=0;j<dim;j++)
printf("%d ",*(m+dim*i+j)+*(m+dim*dim+dim*i+j));
printf("\n");
}
}
void pozitie_para(int *m,int dim) //afiseaza pozitia elementelor pare din cele doua matrici;
{
for(int k=0;k<2;k++)
{
printf("Pozitia elementelor pare din vector %d sunt: \n",k+1);
for(int i=0;i<dim;i++)
for(int j=0;j<dim;j++)
if(*(m+k*dim*dim+dim*i+j)%2==0)
printf("(%d,%d) ",i,j);
printf("\n\n");
}

}
void suma_impara(int *m,int dim) //realizeaza suma elementelor impare din ambele matrici;
{
int sum_i=0;
for(int k=0;k<2;k++)
{
for(int i=0;i<dim;i++)
for(int j=0;j<dim;j++)
if(!(*(m+k*dim*dim+dim*i+j)%2))
sum_i+=*(m+k*dim*dim+dim*i+j);
}
printf("Suma elementelor impare este %d",sum_i);
printf("\n\n");
}
//Program care citeste de la tastatura o matrice cu trei linii si trei coloane.Programul rearanjeaza coloanele matricei astfel incat suma
elementelor de pe o anumita coloana sa fie mai mica decat suma elementelor de pe coloana urmatoare.
#include <stdio.h>
void matrice(int *);
void sortare_matrice(int *); //functia ce sorteaza coloanele.
int suma(int *,int); // //functia ce realizeaza suma elementelor de pe coloane.
void rearanjare_matrice(int *,int); //funtia ce reaaranjeaza matricea.
void main()
{int m[3][3],*p=&m[0][0];
printf("Dati elementele matricei: \n");
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
scanf("%d",(p+i*3+j));
printf("Matricea sortata este:\n");
sortare_matrice(p);
matrice(p);
}
void matrice(int *a)
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
printf("%d ",*(a+i*3+j));
21

printf("\n");
}
}
void sortare_matrice(int *a)
{
int s;
do{ s=0;
for(int i=0; i<2;i++)
if(suma(a,i)>suma(a,i+1)) //sortarea coloanelor dupa suma elementelor.
{
rearanjare_matrice(a,i);
s=1;
}
}while(s==1);
}

int suma(int *a,int i)


{
int s=0;
for(int j=0;j<3;j++)
s+=*(a+j*3+i);
return s;
}
void rearanjare_matrice(int *a,int i)
{
for(int j=0;j<3;j++)
{
*(a+3*j+i)= *(a+3*j+i)+*(a+3*j+i+1);
*(a+3*j+i+1)=*(a+3*j+i)-*(a+3*j+i+1);
*(a+3*j+i)= *(a+3*j+i)-*(a+3*j+i+1);
} //interschimbarea coloanelor,astfel incat suma elementelor de pe o anumita coloana sa fie mai mica decat suma elementelor de pe
coloana urmatoare.
}
Se considera doi parametri intregi si alii doi flotanti de la linia de comanda.Sa se afiseze suma si produsul lor.
#include <iostream>
using namespace std;
void main(int argc, char *argv[])
{
if (argc<5)
{
cout<<"Introduceti doi parametri intregi si doi parametri flotanti de la linia de comanda\n\n";
return;
}
cout<<"Suma elementelor intregi este: "<<atoi(argv[1])+atoi(argv[2])<<endl;
cout<<"Produsul elementelor intregi este: "<<atoi(argv[1])*atoi(argv[2])<<endl;
cout<<"Suma elementelor reale este: "<<atof(argv[1])+atof(argv[2])<<endl;
cout<<"Produsul elementelor reale este: "<<atof(argv[1])*atof(argv[2])<<endl;
cout<<endl;
}
Scrieti o aplicatie care citeste de la tastatura un sir de caractere cu lungimea mai mare
decat 7. Folositi un pointer pentru a accesa si afisati caracterele de pe pozitiile 1, 3, 5 si 7.
#include<stdio.h>
#include<string.h>
void main(void)
{
char v[30],*p,i;
p=&v[0];
22

printf("Introduceti sirul:");
scanf("%s",p);
printf("%s\n",p);
for (i=0;i<=7;i+=2)
printf("%c ",*(p+i));
}
Cititi de la tastatura elemetele a 2 matrici de valori intregi. Scrieti o functie care
primeste ca parametri pointerii la cele 2 matrici si returneaza un pointer la matricea suma. Rezultatul insumãrii matricelor va fi afisat
in functia main. Afisati elementele de pe diagoanala secundara a matricii suma, folosind acelasi pointer.
#include <iostream>
using namespace std;
#define MAX 10
void citeste(int*,int);
int* suma_matrici(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; //declararea
matricelor patratice,matricea suma (m12) si pointerii aferenti matricelor m1 si m2;
cout<<"Introduceti dimensiunile matricilor patratice: "; //Dimensiunea matricelor patratice;
cin>>n;
cout<<"Introduceti elementele matricii unu: \n"; //Introducem de la tastatura element cu element componentele matricei m1;
citeste(p1,n);
cout<<"Introduceti elementele matricii doi: \n"; //Introducem de la tastatura element cu element componentele matricei m2;
citeste(p2,n);
p12 = suma_matrici(p1,p2,p12,n); //apelul functiei ce realizeaza suma matricelor;
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)<<" "; //se identifica elementele de pe diagonala secundara;
}
cout<<"\n\n Elementele de pe diagonala secundara: \n\t"<<endl;
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<<"\t Elementul "<<i+1<<" "<<j+1<<": ";
cin>>*(p+i*MAX+j);
}
}
int* suma_matrici(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;
}
Definiti un sir de pointeri de tip caracter. Fiecare locatie a sirului contine unul din
urmatoarele siruri de caractere:
- "valoare prea mica"
23

- "valoare prea mare"


- "valoare corecta"
Aplicatia genereaza un numar aleator intre 1 si 100 si apoi citeste in mod repetat
intrarea de la tastatura pana cand utilizatorul introduce valoarea corecta. Folositi
mesajele definite pentru a informa utilizatorul, la fiecare pas, despre relatia existenta
intre numarul generat si ultima valoare citita.

#include <iostream>
using namespace std;
#include <math.h>
#include <string.h>
void main(void)
{
char mic[]="Valoarea este prea mica!";
char mare[]="Valoarea este prea mare!";
char egal[]="Valoarea este 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];
}
Scrieti un program in care sa definiti un tablou de pointeri spre siruri de caractere, pe
care sa-l initializati cu diferite mesaje. Afisati mesajele.
#include <iostream>
using namespace std;
void main(void)
{
char *p[] = {"Buna ziua!","Acesta este un mesaj!","Ne apropiem de Sfintele Sarbatori!","Vine vacanta!!","Sarbatori fericite si
odihna placuta!"};
cout<<"Mesajele definite sunt urmatoarele: "<<endl;
for(int i=0;i<5;i++)
cout<<"\n\t"<<p[i];
cout<<endl;
}
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';
24

for(int i=1;i<argc;i++)
{
strcat(sir,*(argv+i));
}
cout<<"Sirurile concantenate sunt: "<<sir<<endl;
}
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;
}
Scrieti un 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 care determina numarul studentilor cu media >= 8. Afisati rezultatul in main. (pointeri, fara variabile
globale).
#include<iostream>
using namespace std;
#define DIM 255
void citire(float *,int n);
void afisare(float *,int n);
int nr_stud(float *,int n);
void main(void)
{
int n;
float a[DIM];
cout<<"\n Introduceti numarul 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;
25

cout<<endl;
}

cout<<"\n Exista "<<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;
}
Scrieti un program C/C++ in care se citesc de la tastatura elementele de tip intreg ale unui vector a, utilizand o functie. Scrieti o functie
care completeaza un alt vector b, fiecare element al acestuia fiind obtinut prin scaderea mediei aritmetice a elementelor
din a din elementul corespunzãtor din a. Scrieti o functie care permite afisarea unui vector si afisati vectorii a si b. (pointeri, fara
variabile globale).

#include<iostream>
using namespace std;
#define DIM 255
void 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;
cout<<"\n Sirul b este:";
afisare(b,n);
cout<<endl;
}
26

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;
}
Scrieti un program in care se citesc de la tastatura elementele de tip intreg ale unei matrici patratice, utilizand o functie. Scrieti o
functie care determina numarul de elemente negative de deasupra diagonalei secundare. Afisati rezultatul in main (fara
variabile globale).

#include <stdio.h>
void citeste(int *,int);
int negativ(int *,int);

void main()
{
int n,a[100][100],*p=&a[0][0];
printf("Dati dimensiunea matricei: ");
scanf("%d",&n);
printf("Dati elementele matricei: ");
read(p,n);
printf("Numarul de elemente negative de deasupra diagonalei secundare este %d\n",negativ(p,n));
}

void citeste(int *x,int d)


{
for(int i=0;i<d;i++)
for(int j=0;j<d;j++)
scanf("%d",(x+i*d+j));
}

int negativ(int *x,int d)


{
int c=0;
for(int i=0;i<d;i++)
for(int j=0;j<d-i;i++)
if(*(x+i*d+j)<0) //verifica daca deasupra diagonalei secundare exista valori negative.
c++;
return c;
}
27

Scrieti un program in care se citesc de la tastatura elementele de tip intreg ale unei
matrici patratice, utilizand o functie. Scrieti o functie care interschimba doua linii ale
matricii. Afisati cu o functie matricea initialt si cea obtinuta. Dimensiunea matricii si
numerele ce identifica liniile care vor fi interschimbate se citesc de la tastatura, in
functia main. (fara variabile globale).

#include <stdio.h>

void citeste(int *,int);


void matrice(int *,int);
void interschimb(int *,int,int,int);

void main()
{
int n,a[100][100],*p=&a[0][0],x,y;
printf("Dati dimensiunea matricei: ");
scanf("%d",&n);
printf("Dati numarul de linii ce trebuie interschimbate: ");
scanf("%d%d",&x,&y);
if(x>n||y>n||x<1||y<1)
printf("Verifica valorile introduse!");
else
{
printf("Dati elementele: ");
citeste(p,n);
printf("Matricea initiala este: \n");
matrice(p,n);
printf("Matricea finala este: \n");
interschimb(p,x,y,n);
matrice(p,n);
}
}

void citeste(int *x,int d)


{ for(int i=0;i<d;i++)
for(int j=0;j<d;j++)
scanf("%d",(x+i*d+j));
}

void matrice(int *x,int d)


{
for(int i=0;i<d;i++)
{
for(int j=0;j<d;j++)
printf("%d ",*(x+i*d+j));
printf("\n");
}
printf("\n");
}

void interschimb(int *a,int i,int j,int d)


{
i--;
j--;
for(int k=0;k<d;k++)
{
*(a+i*d+k)=*(a+i*d+k)+*(a+j*d+k);
28

*(a+j*d+k)=*(a+i*d+k)-*(a+j*d+k);
*(a+i*d+k)=*(a+i*d+k)-*(a+j*d+k);
}
}
Sa se scrie un program C/C++, care folosind o structura de tip student sa determine
numarul 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 se
citesc de la intrarea standard, pana la intalnirea numelui AAA.

//Aplicatie care determina numarul 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 se citesc de la intrarea standard, pana la intalnirea numelui AAA.

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
#define end "AAA" //definim valoarea ce termina ciclul din structura;
struct student {
char nume[100];
char prenume[100];
char tara[100];
int grupa;
int an;
}; //declaratia campurilor;
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[100],tara[100];
int grupa;
start = aloc_list();
p = start;
cout<<"Introduceti datele studentilor:\n";
cout<<"\t Numele: ";
cin>>nume;
while(strcmp(nume,end)!=0) //compara varibila nume cu 0, intr-un ciclu repetitiv while(); cat timp nume este diferit de 0 se executa
urmatoarele instructiuni;
{
p->p = aloc_student();
strcpy(p->p->nume,nume); //copiaza elememtele;
cout<<"\t Prenumele: ";
cin>>p->p->prenume;
cout<<"\t Tara de provenienta: ";
cin>>p->p->tara;
cout<<"\t Grupa: ";
cin>>p->p->grupa;
cout<<"\t Anul nasterii: ";
cin>>p->p->an;
p->next = aloc_list();
29

p = p->next;
cout<<"\n\t Numele: ";
cin>>nume;
}
cout<<"\n Sfarsit lista studenti!\n"; //s-a introdus "AAA";
p->next = NULL;
cout<<"Introduceti numarul grupei: "; //imi selecteaza studentii staini in functie de datele de mai jos;
cin>>grupa;
cout<<"Introduceti tara de referinta: ";
cin>>tara;
p = start;
cout<<"\n\n Studentii 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\n Eroare la alocare!\n";
exit(1);
}
return p;
}
student* aloc_student(void)
{
struct student *p;
if(!(p = new struct student))
{
cout<<"\n\n Eroare la alocare!\n";
exit(1);
}
return p;
}
void dealocare(struct list *p) //eliberam memoria alocata;
{
if(p->next)
dealocare(p->next);
delete p->p;
delete p->next;
}
Sa se scrie un program C/C++, in care folosind cate o functie se transfera ca parametru o variabila de tip structura de date, ca valoare
si, respectiv, prin adresa folosind pointeri. In functia main initializati campurile structurii cu date citite de la
tastatura. In ambele functii afisati datele din structura folosind un mesaj adecvat.

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

};
void afisFaraPointer(struct student p); //functia ce afiseaza cu parametru o variabila de tip structura;
void afisPointer(struct student *p); //functie ce afiseaza cu pointer o variabila de tip structura;
void main(void)
{
struct student p,*pp;
pp = &p;
cout<<"Introduceti date pentru structura student completand campurile nume si prenume: \n";
cout<<"\t Nume: ";
cin>>p.nume;
cout<<"\t Prenume: ";
cin>>p.prenume;
cout<<"\n Afisare prin functie cu parametru o variabila de tip structura: ";
afisFaraPointer(p);
cout<<"\n Afisare prin functie cu parametru pointer la o variabila de tip structura: ";
afisPointer(pp);
}
void afisFaraPointer(struct student p)
{
cout<<"\n Nume: "<<p.nume<<"\t\tPrenume: "<<p.prenume; //afisare cu parametru;
}
void afisPointer(struct student *p)
{
cout<<"\n Nume: "<<p->nume<<"\t\tPrenume: "<<p->prenume; //afisare cu pointer;
}
Sa se scrie un program C/C++, in care o functie returneaza o structura de date
adecvata. In acest fel vor fi returnate mai multe valori. Afisati rezultatul, valorile
initiale transferate functiei (puteti realiza orice operatie in cadrul acelei functii), cu
mesaje 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 separate prin spatii: ";
cin>>p.sir1>>p.sir2;
p = operatie(p);
if(p.xerox)
cout<<"\n Sirurile sunt identice!";
else
cout<<"\n Cele doua siruri sunt diferite!";
cout<<"\n Sirul rezultat prin concantenarea celor doua siruri este: "<<p.sir3<<endl;
}
siruri operatie(struct siruri p)
{
if(strcmp(p.sir1,p.sir2)==0) //compararea celor doua siruri;
p.xerox = 1;
else
p.xerox = 0;
31

strcpy(p.sir3,p.sir1); //concatenarea sirurilor;


strcat(p.sir3,p.sir2);
return p;
}
Sa se scrie o aplicatie C/C++, care utilizand o structura de tip angajat sa afiseze toate
datele persoanelor cu ocupatia inginer, dintr-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;
}; //declaratia campurilor;
struct angajat {
char nume[100];
char prenume[100];
char ocupatie[100];
struct data *d;
char sectie[100];
};
data* citesteDate(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<<"\n Eroare la alocare!\n";
return;
}
for(int i=0;i<n;i++)
{
cout<<"\n\n\t Nume: ";
cin>>(p+i)->nume;
cout<<"\t Prenume: ";
cin>>(p+i)->prenume;
cout<<"\t Ocupatie: ";
cin>>(p+i)->ocupatie;
cout<<"\t Data nastere: ";
(p+i)->d = citesteDate((p+i)->d);
cout<<"\t Sectia: ";
cin>>(p+i)->sectie;
}
cout<<"\n Urmatorii angajati sunt de proferie ingineri: \n";
for(int i=0;i<n;i++)
{
if(strcmp((p+i)->ocupatie,"inginer")==0) //compara datele introduse si ii selecteaza pe aceia ce au la campul "ocupatie" cuvantul
"inginer";
{
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; //afiseaza din nou datele complete, pentru cei cu ocupatia de inginer;
}
32

}
for(int i=0;i<n;i++)
delete (p+i)->d;
delete []p;
}
data* citesteDate(struct data *d)
{
if(!(d = new struct data))
{
cout<<"\n Eroare la alocare!\n";
exit(1);
}
cout<<"\n\t\t Zi: ";
cin>>d->zi;
cout<<"\t\t Luna: ";
cin>>d->luna;
cout<<"\t\t An: ";
cin>>d->an;
return d;
}
Sa se scrie un program care citeste datele personale pentru n persoane (nume, prenume, data nasterii, codul numeric personal, data
angajarii) si apoi le afiseaza in ordinea datei angajarii.

#include <iostream>
#include <stdlib.h>
using namespace std;
struct data {
int zi;
int luna;
int an;
};
struct persoana{
char nume[100];
char prenume[100];
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* citesteDate(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])) //alocarea tablourilor de pointeri;
{
cout<<"\n\n Eroare la alocare!\n";
exit(1);
}
if(!(v = new int[n])) //alocarea tablourilor de pointeri;
{
cout<<"\n\n Eroare la alocare!\n";
33

exit(1);
}
cout<<"Introduceti datele celor "<<n<<" persoane: \n";
for(int i=0;i<n;i++)
{
cout<<"\n\t Nume: ";
cin>>(p+i)->nume;
cout<<"\t Prenume: ";
cin>>(p+i)->prenume;
cout<<"\t Data nasterii: ";
(p+i)->dn = citesteDate();
cout<<"\t Codul Numeric Personal: ";
cin>>(p+i)->codnumeric;
cout<<"\t Data angajarii: ";
(p+i)->da = citesteDate();
}
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); //determina sortarea angajatilor dupa data angajarii;
if(res>0)
{
aux = *(v+i);
*(v+i) = *(v+j);
*(v+j) = aux;
}
}
}
}
void afis(struct persoana *p,int *v,int n) //afisarea angajatilor in urma sortarii;
{
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\t CNP: "<<(p+*(v+i))->codnumeric
<<"\n\t\t Data nasterii: "<<(p+*(v+i))->dn->zi<<"."<<(p+*(v+i))->dn->luna<<"."<<(p+*(v+i))->dn->an
<<"\n\t\t Data angajarii : "<<(p+*(v+i))->da->zi<<"."<<(p+*(v+i))->da->luna<<"."<<(p+*(v+i))->da->an;
}
}
data* citesteDate(void)
{
struct data *p;
if(!(p = new struct data))
{
cout<<"\n\n Eroare la alocare!\n";
exit(1);
34

}
cout<<"\n\t\t Zi: ";
cin>>p->zi;
cout<<"\t\t Luna: ";
cin>>p->luna;
cout<<"\t\t An: ";
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; //se elibereaza memoria intregului tablou p;
delete []v; //se elibereaza memoria intregului tablou v;
}
Sa se scrie un program care afiseaza numele, prenumele si media studentului cu cele
mai bune rezultate din grupa in urma sesiunii de iarna. Folositi pentru aceasta o
structura student, alocarea dinamica, si o functie de care returneaza inregistrareastudent care are media cea mai mare.

//Aplicatie care afiseaza numele, prenumele si media studentului cu cele mai bune rezultate din grupa in urma sesiunii de iarna.

#include <iostream>
using namespace std;
struct student { //declararea campurilor;
char nume[100];
char prenume[100];
float medie;
};
void afis(struct student *p,int n); //functia pentru afisare;
void main(void)
{
int n;
struct student *p;
cout<<"Introduceti numarul de studenti din grupa: ";
cin>>n;
35

if(!(p = new struct student[n])) //alocarea tablourilor de pointeri;


{
cout<<"\n\n Eroare la alocare!\n";
return;
}
cout<<"\n Introduceti datele studentilor:";
for(int i=0;i<n;i++)
{
cout<<"\n\t Nume: ";
cin>>(p+i)->nume;
cout<<"\t Prenume: ";
cin>>(p+i)->prenume;
cout<<"\t Media: ";
cin>>(p+i)->medie;
}
cout<<"Studentul cu media cea mai mare este: ";
afis(p,n); //apelul functiei;
delete []p; //eliberarea memoriei pentru intreg tabloul;
}
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) //compararea mediilor cu max,pentru a gasi cea mai mare medie;
{
loc = i;
max = (p+i)->medie;
}
}
cout<<"\n\t"<<(p+loc)->nume<<" "<<(p+loc)->prenume<<"\t cu media: "<<(p+loc)->medie<<endl;
} //afisarea studentului cu cea mai mare medie;
Sa se scrie o aplicatie C/C++, care aloca dinamic memorie pentru memorarea datelor
a n studenti, si dupa ce citeste datele pentru fiecare din acestia, afiseaza numarul
studentelor. In final se va elibera memoria alocata.

//Aplicatie care aloca dinamic memorie pentru memorarea datelor a n studenti, si dupa ce citeste datele pentru fiecare din acestia,
afiseazã numarul studentelor. In final se elibereaza memoria alocata.

#include <iostream>
using namespace std;
struct student { //declararea campurilor;
char nume[100];
char prenume[100];
char sex;
};
void main(void)
{
int n,nr_fete=0;
struct student *p;
cout<<"Introduceti numarul de studenti din grupa 9: ";
cin>>n;
if(!(p = new struct student[n])) //alocarea tablourilor de pointeri;
{
cout<<"\n\n Eroare la alocare!\n";
exit(1);
36

}
cout<<"Introduceti datele studentilor: ";
for(int i=0;i<n;i++)
{
cout<<"\n\t Nume: ";
cin>>(p+i)->nume;
cout<<"\t Prenume: ";
cin>>(p+i)->prenume;
cout<<"\t Sex(m/f): ";
cin>>(p+i)->sex;
}
for(int i=0;i<n;i++)
{
if((p+i)->sex == 'f') //daca este indeplinita conditia variabila nr_fete retine cate fete sunt in grupa;
nr_fete++;
}
if(nr_fete>0)
cout<<"\n In grupa 9 exista "<<nr_fete<<" studenta(e)!\n"; //daca si a doua conditie este verificata rezulta ca exista nr_fete in grupa;
else //altfel se afiseaza urmatorul mesaj;
cout<<"Nu exista nicio studenta in grupa 9!\n\n";
delete []p; //se elibereaza memoria intregului tablou p;
}
Declarati o structura de date de tip struct, o_struct, care sa contina o variabila de tip intreg, una de tip caracter si un sir de 256 de
caractere. In programul principal definiti o variabila statica de tip o_struct, careia sa-i initializati variabilele cu date citite de la
intrarea standard. Declarati apoi un pointer de tip o_struct, po_struct, pe care sa-l definiti folosind alocarea dinamica cu o zona de
memorie care sa contina un articol de tip o_struct. Initializati campurile structurii de date folosind pointerul, 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)) //alocarea tablourilor de pointeri;
{
cout<<"\n\n Eroare la alocare!\n";
exit(1);
}
po_struct->nr = str.nr;
po_struct->caracter = str.caracter;
strcpy(po_struct->sir,str.sir);
delete po_struct; //eliberarea memoriei alocate;
}
/* 1. Sa se scrie un program care citeste n numere reale, pe care le stocheaza intr-un tablou alocat dinamic, afiseaza suma elementelor
negative citite, iar la sfarsit elibereaza zona de memorie alocata.*/
37

#include <malloc.h>
#include <stdio.h>
#include <iostream>
using namespace std;
void main()
{
int n,suma=0;
float *p;
printf("\nNumarul n este: ");
scanf("%d",&n);
p=(float*)malloc(n*sizeof(float));
if (p==NULL)
{
printf("\n error!");
return;
}
printf("\n Dati Elementele: ");
for(int i=0;i<n;i++)
scanf("%f",p+i);
for (int i=0;i<n;i++)
if (p[i]<0)
suma=suma+p[i];
printf("\n Suma este %f",suma);
if (p!=NULL)
free (p);

}
/* 2. Program de gestiune chiosc */

#include <stdio.h>
#include <malloc.h>
float **citire();
void calcul(float **a);
void eliberare(float **a);
void main() {
int i,j;
float **a;
a=citire();
calcul(a);
eliberare(a);
}
float** citire()
{
int i,j;
float **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]);
}
}
return a;
}
38

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));
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*/
39

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

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

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);
}
else
cin>>*(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;
}
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 10000
42

void 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++)
{
cout<<"\n y["<<k<<"]= "<<y[k]<<endl;
}
}
else
{
cout<<"\n alocare nereusita!";
delete[]p;
}
43

}
Sa se scrie un program, care folosind o structura de tip student sa determin
numarul 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 se
citesc 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();
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: ";
44

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;
}
Sa se scrie un program, in care folosind cate o functie se transfera ca
parametru o variabila de tip structura de date, ca valoare si, respectiv, prin adresa
folosind pointeri. In functia main initializati campurile structurii cu date citit de la
tastatura. 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";
45

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;
}
Sa se scrie un program, in care o functie returneaza o structura de date
adecvata. In acest fel vor fi returnate mai multe valori. Afisati rezultatul, valorile
initiale transferate functie (puteti realiza orice operatie in cadrul acelei functii), cu
mesaje 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";
else
cout<<"\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;
else
p.xerox = 0;
strcpy(p.sir3,p.sir1);
strcat(p.sir3,p.sir2);
return p;
}
Sa se scrie un program care utilizand o structura de tip angajat sa afiseze toate
datele persoanelor cu ocupatia inginer, intr-o intreprindere (nume, prenume, ocupatia,
data nasterii, sectia in care lucreaza)*/
46

#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++)
delete (p+i)->d;
delete []p;
}
data* readDate(struct data *d)
{
if(!(d = new struct data))
47

{
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;
}
Sa se scrie un program care citeste datele personale pentru n persoane (nume,
prenume, data nasterii codul numeric personal, data angajarii) si apoi le afiseaza
in 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);
}
cout<<"Introduceti datele celor "<<n<<" persoane:\n";
for(int i=0;i<n;i++)
{
cout<<"\n\tNume: ";
cin>>(p+i)->nume;
48

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: ";
cin>>p->luna;
cout<<"\t\tAn: ";
cin>>p->an;
49

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;
}
Sa se scrie un program care afiseaza numele, prenumele si media studentului cu cele
mai bune rezultate din grupa in urma sesiunii de iarna. Folositi pentru aceasta o
structura student, alocarea dinamica, si o functie de care returneaza inregistrarea
student 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:";
for(int i=0;i<n;i++)
{
50

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;
}
Sa se scrie o plicatie care aloca dinamic memorie pentru memorarea datelor
a nstudenti, si dupa ce citeste datele pentru fiecare din acestia, afiseaza numarul
studentelelor. 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;
}
51

for(int i=0;i<n;i++)
{
if((p+i)->sex == 'f')
cate++;
}
if(cate>0)
cout<<"\n"<<cate<<" dintre studenti sunt studente\n";
else
cout<<"Nu exista nici o studenta, ce trist :(\n\n";
delete []p;
}
Declarati o structura de date de tip struct, o_struct, care sa contina o variabila de tip
intreg, una de tip caracter si un sir de 256 caractere. In programul principal definiti o
variabila statica de tip o_struct, careia sa-i initializati variabilele cu date citite de la
intrarea standard. Declarati apoi un pointer de tip o_struct, po_struct, pe care sa-l
definiti folosind alocarea dinamica cu o zona de memorie care sa contina un articol de
tip 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;
}
Folosind structura de date union denumita grup compusa din diferite campuri cum ar fi: int, long, double, char etc., scrieti o aplicatie
C/C++ care va initializa un element de tipul grup de la tastatura. Este posibil sa afisam in acelasi timp toate campurile folosind pointeri
sau nume calificate? Afisati ceea ce este posibil si dimensiunea elementului union. Realizati aceeasi operatie considerand o simpla
structura struct.

#include <iostream>
using namespace std;
void main(void)
{
union grup { //declaram campurile structurii de date union;
int nr_int;
52

float nr_float;
}g;
cout<<"Operatia aplicata unei uniuni este urmatoarea: \n";
cout<<"Introduceti un numar real: ";
cin>>g.nr_float;
cout<<"Introduceti un numar intreg: ";
cin>>g.nr_int;
cout<<"\n Valoare numarul real a fost pierduta. Se va afisa valoarea numarul intreg este: "<<g.nr_int<<"\n Dimensiunea uniunii
este: "<<sizeof(g);

struct str{ //declaram campurile structurii struct;


int nr_int;
float nr_float;
}s;
cout<<"\n\n Operatia aplicata unei structuri este urmatoarea :\n";
cout<<"Introduceti un numar real: ";
cin>>s.nr_float;
cout<<"Introduceti un numar intreg: ";
cin>>s.nr_int;
cout<<"\n Ambele valori vor fi afisate! \n"<<"\n Valoarea numarului real este: "<<s.nr_float<<". Valoarea numarul intreg este:
"<<s.nr_int<<". Dimensiunea structurii este: \n"<<sizeof(s);
}
Definiti o data utilizator de tip enumerare enum Lumina_Alba care va avea in componenþa culorile de baza (Rosu, Portocaliu, Galben,
Verde, Albastru, Indigo si Violet). Initializati cateva variabile de tip Lumina_Alba. Urmariti sa generati culori secundare cu ajutorul
operatiilor enum prin combinatii ale culorilor de baza. Traduceti printr-un mecanism folosind enumerarile numele culorilor in limba
Franceza, Engleza sau Germana si afisati numele initial, noul nume si valoarea asociata.

#include <stdio.h>

enum Lumina_Alba{Rosu=1,Portocaliu=2,Galben=3,Verde=4,Albastru=5,Indigo=6,Violet=7};

char *tradu(Lumina_Alba); //pointer spre functie;


void main(void)
{
int p,ve,vi; //declaram variabilele pentru a realiza combinatia dintre culori;
p=Rosu+Galben; //operatia prin care se obtine culoarea portocaliu;
printf("Portocaliu este %d.Combinatie intre rosu si galben\n",p);
ve=Albastru+Galben; //operatia prin care se obtine culoarea verde;
printf("Verde este %d.Combinatie intre albastru si galben.\n",ve);
vi=Rosu+Albastru; //operatia prin care se obtine culoarea violet;
printf("Violet este %d.Combinatie intre rosu si albastru.\n",vi);
printf("\n Culorile si Numele lor in Engleza");
printf("\n Rosu \t\t%s\t\t\t",tradu (Rosu));
printf("\n Portocaliu \t%s\t",tradu (Portocaliu));
printf("\n Galben\t\t%s\t\t",tradu (Galben));
printf("\n Verde\t\t%s\t\t\t",tradu (Verde));
printf("\n Albastru\t%s\t",tradu (Albastru));
printf("\n Indigo\t\t%s\t\t\t",tradu (Indigo));
printf("\n Violet\t\t%s\t\t\t",tradu (Violet));
printf("\n");
printf("\n Valoare asociata culorilor din structura de date:");
printf("\n Rosu \t\t\t%d\t\t",Rosu);
printf("\n Portocaliu \t\t%d\t\t",Portocaliu);
printf("\n Galben \t\t%d\t\t",Galben);
printf("\n Verde \t\t\t%d\t\t",Verde);
printf("\n Albastru \t\t%d\t\t",Albastru);
53

printf("\n Indigo \t\t%d\t\t",Indigo);


printf("\n Violet \t\t%d\t\t",Violet);
printf("\n");
}

char *tradu (Lumina_Alba culori) //functia ce imi traduce numele culorilor in engleza;
{
switch (culori)
{
case Rosu:
return "Red";
break;

case Portocaliu:
return "Orange";
break;

case Galben:
return "Yellow";
break;

case Verde:
return "Green";
break;

case Albastru:
return "Blue";
break;

case Indigo:
return "Indigo";
break;

case Violet:
return "Violet";
break;
}
}
Sa se scrie un program care citeste si apoi afiseaza date intregi preluate dintr-un fisier text al carui nume este citit de la consola. Creati
in prealabil fisierul prin program.

#include <iostream>
#include <stdio.h>
using namespace std;
void main(void)
{
int optiuni,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>>optiuni;
if(optiuni>2 || optiuni<1)
cout<<"Optiune invalida, reincercati: ";
else break;
} while(true);
54

if(optiuni == 1)
{
cout<<"\nIntroduceti numele fisierului pe care doriti sa il creati: ";
cin>>fileName;

f = fopen(fileName,"w"); //deschide fisierul pentru scriere;


if(f == NULL)
{
cout<<"\n\nEroare la crearea fisierului!\n";
return;
}

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); //functia pentru scriere in fisier;
}
fclose(f); //inchiderea fisierului;
cout<<"\n Operatiile s-au realizat cu succes!";
}
else //altfel optiuni==2;
{
cout<<"\n Introduceti numele fisierului pentru citire: ";
cin>>fileName;
f=fopen(fileName,"r"); //deschiderea fisierului pentru citire;
if(f==NULL)
{
cout<<"\n\n Eroare in deschiderea fisierului pentru citire!\n";
return;
}
cout<<"\n Numerele din fisier sunt: \n";
while(feof(f)==0) //functie ce gaseste sfarsitul fisierului si returneaza valoarea 0,altfel returneaza o alta valoare
pozitiva;
{
fscanf(f,"%d",&aux); //functia pentru citirea din fisier;
cout<<" "<<aux;
}
fclose(f); //inchiderea fisierelor;
}
}
Sa se scrie un program care citeste dintr-un fisier text 10 numere intregi (generat in prealabil 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 rezultele obtinute.

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
void bubble(int *); //functie ce aranjeaza crescator/descrescator sirul;
int count(int *); //functie ce numara cate elemente sunt pare;
void main()
{char *fn;
55

int *ar;

if(!(fn=(char *)calloc(25, sizeof(char)))) //calloc() returneaza un pointer gereric in caz de succes sau mesajul urmator in caz de esec;
{printf("Eroare in alocarea memoriei!\n"); exit(0);}

FILE *f;
printf("Introduceti numele fisierului:");
scanf("%s",fn);
if(!(f=fopen(fn,"r"))) //daca nu se poate deschide fisierul pentru citire se va afisa mesajul:
{printf("Eroare in deschiderea fisierului,pentru citire!\n"); exit(0);}

if(!(ar=(int *)calloc(10,sizeof(int)))) //returneaza un pointer gereric in caz de succes sau mesajul urmator in caz de esec;
{printf("Eroare in alocarea memoriei!\n"); exit(0);}

for(int i=0;i<10;i++)
fscanf(f,"%d",(ar+i)); //functia pentru citirea din fisier;

fclose(f); //inchiderea fisierului;

bubble(ar); //apelul functiei;

int even=count(ar);

if(!(f=fopen(fn,"w"))) //daca nu se poate deschide fisierul pentru scriere se va afisa mesajul:


{printf("Eroare in deschiderea fisierului pentru scriere!\n"); exit(0);}
for(int i=0;i<10;i++)
fprintf(f,"%d ",*(ar+i));
fprintf(f,"\n%d",even);
fclose(f); //inchiderea fisierului;

free(fn); //eliberarea memoriei alocate;


}

void bubble(int *b) //functie ce aranjeaza crescator/descrescator sirul;


{int s;
do{s=1;
for(int i=0;i<9;i++)
if(*(b+i)>*(b+i+1)) //daca *(b+i) este mai mai mare decat *(b+i+1) se va realiza interschimbul lor:
{*(b+i)=*(b+i)+*(b+i+1);
*(b+i+1)=*(b+i)-*(b+i+1);
*(b+i)=*(b+i)-*(b+i+1);
s=0;
}} while(!s);
}

int count(int *b) //functie ce numara cate elemente sunt pare;


{ int c=0;
for(int i=0;i<10;i++)
if(!((*(b+i))%2)) //daca valoarea corespunzatoare *(b+i) modulo 2==0,atunci numarul e par,iar in variabila locala c se tine evidenta
acestor numere pare;
c++;
return c;
}
Scrieti un program care citeste de la consola n numere intregi pe care le scrie intr-un fisier text cu numele citit de la tastatura. Cititi
apoi numerele din fisier, determinati apoi media lor aritmetica pe care o adaugati la sfarsitul fisierului si o afisati si pe ecran.
56

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

void main()
{char *fn;
int *ar,n,aux;
float ma=0;

printf("Dati numarul de elemente din fiser: ");


scanf("%d",&n);

if(!(ar=(int *)calloc(n,sizeof(int)))) //calloc() returneaza un pointer gereric in caz de succes sau mesajul urmator in caz de esec;
{printf("Eroare in alocarea memoriei!\n"); exit(0);}

printf("Introduceti %d valori intregi: ",n);


for(int i=0;i<n;i++)
scanf("%d",(ar+i));

if(!(fn=(char *)calloc(25, sizeof(char))))


{printf("Eroare in alocarea memoriei!\n"); exit(0);}

FILE *f;
printf("Introduceti numele fisirului: ");
scanf("%s",fn);

if(!(f=fopen(fn,"w"))) //daca nu se poate deschide fisierul pentru scriere se va afisa mesajul:


{printf("Eroare in deschiderea fisierului pentru scriere!\n"); exit(0);}

for(int i=0;i<n;i++)
{
fprintf(f,"%d",*(ar+i));
if(i<n-1)
fprintf(f," ");
}
fclose(f);

if(!(f=fopen(fn,"r"))) //daca nu se poate deschide fisierul pentru citire se va afisa mesajul:


{printf(" Eroare in deschiderea fisierului pentru citire!\n"); exit(0);}

int count=1;
while(!feof(f)) //cat timp functia feof(f) nu a gasit sfarsitul fisierului se executa urmatoarele operatii:
{
fscanf(f,"%d",&aux);
ma+=aux; //se realizeaza suma elementelor din fisier;
count++; //incrementeaza,tine evidenta cate numere se aduna;
}
fclose(f); //inchiderea fisierului;

if(!(f=fopen(fn,"a")))
{printf("Eroare in deschiderea fisierului!\n"); exit(0);}
ma=ma/count; //se realizeaza media aritmetica a numerelor adunate anterior;
printf("Media aritmetica este %f.\n",ma);
fprintf(f,"\n%f",ma);
57

fclose(f); //inchiderea fisierului;

free(fn); //eliberarea memoriei alocate;


}
Scrieti un program C/C++ care citeste de la tastatura un caracter, apoi scrieti acest caracter intr-un fisier text pe n linii, cate n caractere
pe fiecare linie, n citit de la consola.

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

void main()
{
char *fn,c;
int n;

printf("Introduceti numarul intreg n: ");


scanf("%d",&n);
printf("Introduceti caracterele: ");
fflush(stdin); //goleste stream-ul asociat fisierului;
scanf("%c",&c);

if(!(fn=(char *)calloc(25, sizeof(char)))) //calloc() returneaza un pointer gereric in caz de succes sau mesajul urmator in caz de esec;
{printf("Eroare in alocarea memoriei!\n"); exit(0);}

FILE *f;
printf("Introduceti numele fiserului: ");
scanf("%s",fn);

if(!(f=fopen(fn,"w"))) //daca nu se poate deschide fisierul pentru scriere se va afisa mesajul:


{printf("Eroare in deschiderea fisierului pentru scriere!\n"); exit(0);}

for(int i=0;i<n;i++) //parcurgem sirul de caractere;


{
for(int j=0;j<n;j++)
fprintf(f,"%c",c); //afiseaza fiecare caracter pe cate un rand;
fprintf(f,"\n");
}
fclose(f); //inchidem fisierul;

free(fn); //eliberam memoria alocata;


}
Sa se scrie o aplicatie C/C++ care citeste un fisier text linie cu linie si il afiseaza pe ecran. Se va folosi un fisier existent din sistem sau se
va genera in prealabil unul prin program.

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

void main()
{char *fn;

if(!(fn=(char *)calloc(25, sizeof(char)))) //calloc() returneaza un pointer gereric in caz de succes sau mesajul urmator in caz de esec;
{printf("Eroare in alocarea memoriei!\n"); exit(0);}
58

FILE *f;
printf("Introduceti numele fisierului:");
scanf("%s",fn);

if(!(f=fopen(fn,"r"))) //daca nu se poate deschide fisierul pentru citire se va afisa mesajul:


{printf("Eroare in deschiderea fisierului pentru citire!\n"); exit(0);}

while(!feof(f)) //cat timp functia feof(f) nu a gasit sfarsitul fisierului se executa urmatoarele operatii:
{
char c;
fscanf(f,"%c",&c); //citeste sirul de caractere;
printf("%c",c); //afiseaza sirul de caractere citit;
}
fclose(f); //inchiderea fiserului;

free(fn); //eliberarea memoriei alocate;


}
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 <stdio.h>
#include <malloc.h> //fisier antet din biblioteca standard,pentru alocari dinamice;

void elemente (int *p, int n);

void main (void)


{
int n, *v, i, a;
char t[27];
FILE *f; //declararea pointerului fisierului;

printf("Introduceti un numar intreg: ");


scanf("%d", &n);

if(!(v= (int *) malloc(n*sizeof(int)))) //alocarea dinamica, verificam daca alocarea a fost realizata,in caz afirmativ functia
returneaza un pointer generic,altfel afiseaza mesajul urmator:
{
printf("Alocare nereusita!");
return;
}

elemente(v, n); //apelam functia elemente();

printf("Introduceti numele fisierului : ");


scanf("%s", t);

if((f=fopen(t, "wb"))==NULL) //fisierul returneaza un pointer la structura FILE daca deschidera fisierului pt scriere este
posibila,altfel returneaza mesajul urmator:
{ //"wb" deschiderea fisierului binar pentru scriere;
printf("Deschiderea fisierul nereusita!");
59

return;
}

for(i=0; i<n; i++)


{
fwrite((v+i), sizeof(int), 1, f); //returneaza numarul de articole scrise,in cazul nostru un articol;
}

fclose(f); //inchiderea fisierului;

printf("Numerele din trei in trei pozitii sunt: \n");


if ((f=fopen(t, "rb"))==NULL) //fisierul returneaza un pointer la structura FILE daca deschidera fisierului pt citire este
posibila,altfel returneaza mesajul urmator:
{ //"rb" deschiderea fisierului binar pentru citire;
printf("Deschidere fisier nereusita!");
return;
}
while(fread(&a, sizeof(int), 1, f)==1) //cat timp: numarul de articole citite este egal cu 1;
{
printf("%d ", a);
fseek(f, 2*sizeof(int), SEEK_CUR); //pozitia de referinta origine,SEEK_CUR,adica pozitia curenta;
}

void elemente (int *p, int n) //definirea functiei pentru a introduce elementele;
{
int i;

for (i=0; i<n; i++)


{
printf("Numarul %d: ", i+1); //elementele vectorului
scanf("%d", (p+i));
}
}
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 de la consola studentii ce au media mai mare decat o medie citita de la consola.

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

struct student //definim componentele structurii student;


{
char nume[20];
char prenume[20];
int grupa;
float media;
};

void date (struct student *p); //functia ce-mi permite introducerea datelor studentilor;
void afisare (struct student *p); //functia ce afiseaza studentii cu media mai mare decat un numar introdus de la tastatura;

void main(void)
60

{
int n, i;
struct student *ps, *np; //declararea pointerilor ps si np catre stuctura student;
FILE *f; //declararea pointerului fisierului;
char t[27];
float nr;

printf("Cati studenti sunt in grupa: ");


scanf("%d", &n);

if (!(ps = (struct student*) malloc(n* sizeof(struct student)))) //alocarea dinamica,verificam daca alocarea a fost realizata,in caz
afirmativ functia returneaza un pointer generic,altfel afiseaza mesajul urmator:
{
printf("Alocare nereusita!");
return;
}

for (i=0; i<n; i++)


{
printf("Introduceti datele studentului %d!\n", i+1);
date(ps+i); //apelarea functiei date();
}

printf("Introduceti numele fisierului: ");


scanf("%s", t);

if((f=fopen(t, "wb"))==NULL) //fisierul returneaza un pointer la structura FILE daca deschidera fisierului pt scriere este
posibila,altfel returneaza mesajul urmator:
{ //"wb" deschiderea fisierului binar pentru scriere;
printf("Fisierul nu poate fi deschis pt scriere!");
exit(1);
}

for (i=0; i<n; i++)


{
fwrite((ps+i), sizeof(struct student), 1, f); //returneaza numarul de articole scrise,in cazul nostru un articol;
}
fclose(f); //inchiderea fisierului;

printf("Introduceti o medie limita: ");


scanf("%f", &nr);

if((f=fopen(t, "rb"))==NULL) //fisierul returneaza un pointer la structura FILE daca deschidera fisierului pt citire este
posibila,altfel returneaza mesajul urmator:
{ //"rb" deschiderea fisierului binar pentru citire;
printf("Fisierul nu poate fi deschis pt citire!");
exit(1);
}
//vom citi din fisier cate o structura si o vom salva in pointerul np;
if (!(np = (struct student*) malloc(n* sizeof(struct student)))) //alocarea dinamica,verificam daca alocarea a fost realizata,in caz
afirmativ functia returneaza un pointer generic,altfel afiseaza mesajul urmator:
{
printf("Alocare nereusita!");
return;
}
61

printf("Studentii cu media mai mare decat %.2f sunt: \n", nr);


for (i=0; i<n; i++)
{
fread((np+i), sizeof(struct student), 1, f); //numarul de articole citite este 1;
if((np+i)->media>nr)
afisare(np+i);
}
}

void date (struct student *p) //definirea functiei date(),ce ne permite introducerea datelor studentilor;
{
printf("Nume: ");
scanf("%s", p->nume);
printf("Prenume: ");
scanf("%s", p->prenume);
printf("Grupa: ");
scanf("%d", &p->grupa);
printf("Media: ");
scanf("%f", &p->media);
}

void afisare (struct student *p) //definirea functiei afisare(),ce ne permite afisarea studentilor cu media mai mare decat nr,numarul
introdus de la tastatura;
{
printf("Nume si Prenume: %s %s\n", p->nume, p->prenume);
printf("Grupa: %d\n", p->grupa);
printf("Media: %.2f\n", p->media);
}
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 <stdio.h>
#include <malloc.h>

void vector (int *p, int n);

void main (void)


{
int n, i, *v, a;
char t[27];
FILE *f; //declararea pointerului fisierului;

printf("Introduceti un numar intreg: ");


scanf("%d", &n);

if(!(v= (int *) malloc(n*sizeof(int)))) //alocarea dinamica, verificam daca alocarea a fost realizata,in caz afirmativ functia
returneaza un pointer generic,altfel afiseaza mesajul urmator:
{
printf("Alocare nereusita!");
return;
}

vector(v, n); //apelarea functiei;


62

printf("Introduceti numele fisierului : ");


scanf("%s", t);

if ((f=fopen(t, "wb"))==NULL) //fisierul returneaza un pointer la structura FILE daca deschidera fisierului pt scriere este
posibila,altfel returneaza mesajul urmator:
{
printf("Deschiderea fisierului pt scriere nereusita!");
return;
}

for (i=0; i<n; i++)


{
fwrite((v+i), sizeof(int), 1, f); //returneaza numarul de articole scrise,in cazul nostru un articol;
}

fclose(f); //inchiderea fisierului;

printf("Pozitiile numerelor pare sunt: \n");


if ((f=fopen(t, "rb"))==NULL) //fisierul returneaza un pointer la structura FILE daca deschidera fisierului pt citire este
posibila,altfel returneaza mesajul urmator:
{
printf("Deschiderea fisierului pt citire nereusita!");
return;
}
int k=0; //va memora pozitia numarului;
while(fread(&a, sizeof(int), 1, f)==1) //returneaza numarul de articole citite;
{
k++;
if (a%2==0)
printf("%d ", k);
}
free(v); //eliberarea zonei de memorie alocate;
fclose(f); //inchiderea fisierului;

void vector (int *p, int n) //definirea functiei vector(),unde sunt introduse elementele vectorului;
{
int i;
for (i=0; i<n; i++)
{
printf("Numarul %d: ", i+1);
scanf("%d", (p+i));
}
}
Sa se scrie un program care primeste in linia de comanda doua nume de fisiere. Prin program 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 numerelor mai 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 a caror medie a fost calculata si respectiv valoarea mediei cu o precizie de 2 digiti.

#include <stdio.h>
#include <malloc.h>

void main (int argc, char *argv[]) //argc=numarul de argumente; argv=tablou de pointeri catre siruri de caractere;
{
int *p, i, *af, k=0;
63

float S=0;
FILE *f1, *f2; //declararea pointerilor f1 si f2 fisierelor;

if (argc!=3)
{
printf("Introduceti de la linia de comanda doua nume de fisiere!\n");
return;
}
if(!(p=(int*) malloc(8*sizeof(int)))) //alocarea dinamica, verificam daca alocarea a fost realizata,in caz afirmativ functia
returneaza un pointer generic,altfel afiseaza mesajul urmator:
{
printf("Alocare nereusita!");
return;
}

for (i=0; i<8; i++)


{
printf("Numarul %d: ", i+1); //introducerea elementelor;
scanf("%d", (p+i));
}

if( (f1=fopen(*(argv+1), "wb"))==NULL) //fisierul returneaza un pointer la structura FILE daca scrierea in fisier este posibila,altfel
returneaza mesajul urmator:
{
printf("Fisierul %s nu poate fi deschis pt scrire!", *(argv+1));
return;
}

for (i=0; i<8; i++)


{
fwrite( (p+i), sizeof(int), 1, f1); //returneaza numarul de articole citite,adica 1;
}
fclose(f1); //inchiderea primului fisier;

if( (f1=fopen(*(argv+1), "rb"))==NULL) //fisierul returneaza un pointer la structura FILE daca deschidera fisierului este
posibila,altfel returneaza mesajul urmator:
{
printf("Fisierul %s nu poate fi citit!", *(argv+1));
return;
}
//in af o sa fie cele 8 numere citite din f1;
if(!(af=(int*) malloc(8*sizeof(int))))
{
printf("Alocare nereusita!");
return;
}
for (i=0; i<8; i++)
{
fread((af+i), sizeof(int), 1, f1); //returneaza numarul de articole citite,adica 1;
if (*(af+i)>4) //se verifica cate numere din vector sunt mai mari decat 4;
{
S+=(float)*(af+i); //se face media aritmetica a acestor numere;
k++;
}
}
fclose(f1); //inchiderea primului fisier;
if( (f2=fopen(*(argv+2), "w"))==NULL) //fisierul returneaza un pointer la structura FILE deschide fisierul pt scriere,altfel
64

returneaza mesajul urmator:


{
printf("Fisierul %s nu poate fi scris!", *(argv+2));
return;
}
fprintf(f2,"Media aritmetica a numerelor: "); //pointerul f2,indica fisierul unde se vor scrie datele;
for (i=0; i<8; i++)
if (*(af+i)>4)
fprintf(f2,"%d ", *(af+i));
fprintf(f2, " este : %.2f ", S/k);
printf("Media numerelor mai mare decat 4 a fost scrisa in fisierul %s.\n", *(argv+2));
free(p); //se elibereaza memoria alocata;
free(af);
fclose (f2); //inchiderea celui de-al doilea fisier;
}

S-ar putea să vă placă și