Sunteți pe pagina 1din 34

C: Matrice bidimensionale - aplicatii

rezolvate
1) Se va concepe o matrice bidimensional, avnd componente ntregi, prin iniializare n
momentul declarrii
2) Se va scrie o rutin care va citi o matrice bidimensional avnd componente ntregi, dup
care o va afia
3) Se va scrie o rutin care va citi o matrice bidimensional avnd componente ntregi, dup
care o va afia, iar apoi va calcula suma elementelor matricei
4) S se realizeze un program care ncarc numerele de la 1 la 12 ntr-o matrice
bidimensional i le afieaz rnd cu rnd, dup care realizeaz interschimbari ntre liniile
acesteia.
De asemenea se vor obine primul, respectiv ultimul element dintr-o matrice tablou.
5) Se va scrie un program pentru realizarea principalelor sumri ntre elementele unei matrice
bidimensionale
6) Se va scrie un program pentru realizarea principalelor sumri ntre elementele unei matrice
bidimensionale, astfel nct funciile vor transmite rezultatele, nu doar le vor afia n interiorul
corpului acestora
7) Se va scrie o rutin care va citi o matrice bidimensional avnd componente ntregi, dup
care o va afia, iar apoi se va face o functie proprie care va returna suma elementelor matricei
de pe diagonala secundara
8) Suma a doua matrice
9) Inmultirea a doua matrice patratice
10) Sa se scrie un program care determina elementele de maxim i minim din ntreaga matrice
ptratic

Rezolvari
1) Se va concepe o matrice bidimensional, avnd componente ntregi, prin iniializare n
momentul declarrii.
#include<stdio.h>
void main()
{
int a[][3]={

coloane

{2,-9,0},
{7,11,-8},
{2,2,-20},
{12,7,90}
};
//operatia de afisare a matricei declarata avand 4 linii si 3
for(int i=0; i<4; i++)
{
for(int j=0; j<3; j++)
printf("%5d", a[i][j]);
printf("\n");
}

getchar();
int k;
scanf("%d", k);

2) Se va scrie o rutin care va citi o matrice bidimensional avnd componente ntregi, dup
care o va afia.
#include<stdio.h>
void main()
{
int a[10][10]; /* matricea bidimensionala avand un nr. maximi
de 10 linii si 10 coloane ce vor putea fi memorate
*/
int m,n;
/* numarul real (la citire) de randuri, respectiv,
de
coloane, ale matricei */
int i,j;
//introducerea dimensiunilor matricei
printf("Introduceti nr de linii: ");
scanf("%d", &m);
printf("Introduceti nr de coloane: ");
scanf("%d", &n);
//introducerea elementelor matricii
printf("Introduceti elementele matricei: \n");
for(i=0; i<m; i++)
for(j=0; j<n; j++)
{
printf("\tElem [%d,%d]= ", i+1, j+1);
scanf("%d", &a[i][j]);
}
//afisarea elementelor matricei
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%5d", a[i][j]);
printf("\n");
}
getchar();
int k;
scanf("%d", k);
}

3) Se va scrie o rutin care va citi o matrice bidimensional avnd componente ntregi, dup
care o va afia, iar apoi va calcula suma elementelor matricei.

#include<stdio.h>
void main()
{
int a[10][10]; /* matricea bidimensionala avand un nr. maximi
de 10 linii si 10 coloane ce vor putea fi memorate
*/
int m,n;
/* numarul real (la citire) de randuri, respectiv,
de
coloane, ale matricei */
int i,j;
//introducerea dimensiunilor matricei
printf("Introduceti nr de linii: ");
scanf("%d", &m);
printf("Introduceti nr de coloane: ");
scanf("%d", &n);
//introducerea elementelor matricii
printf("Introduceti elementele matricei: \n");
for(i=0; i<m; i++)
for(j=0; j<n; j++)
{
printf("\tElem [%d,%d]= ", i+1, j+1);
scanf("%d", &a[i][j]);
}
//afisarea elementelor matricei
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%5d", a[i][j]);
printf("\n");
}
//calcularea sumei elementelor matricei
int s=0;
for(i=0; i<m; i++)
for(j=0; j<n; j++)
s=s+a[i][j];
printf("\nSuma elem. este: %d", s);
getchar();
int k;
scanf("%d", k);
}

4) S se realizeze un program care ncarc numerele de la 1 la 12 ntr-o matrice


bidimensional i le afieaz rnd cu rnd, dup care realizeaz interschimbari ntre liniile
acesteia. De asemenea se vor obine primul, respectiv ultimul element dintr-o matrice tablou.
//macrouri de tip constante pentru numarul de linii, respectiv de coloane
#define lin 3
#define col 4
#include<stdio.h>
//definirea unui tip matrice cu un numar specificat de linii si coloane
typedef int matrice[lin][col];
//o prima functie de atribuire a valorilor de la 1 la 12 intr-o matrice
bidimensionala
void atribuire1(matrice a)
{
int k=1,i,j;
for(i=0;i<lin;i++)

for(j=0;j<col;j++)
{
a[i][j]=k;
k++;
}
}
//o alta functie de atribuire a valorilor de la 1 la 12 intr-o matrice
bidimensionala
void atribuire2(matrice a)
{
int i,j;
for(i=0;i<lin;i++)
for(j=0;j<col;j++)
a[i][j]=(i*col)+j+1;
}
//afisarea primului, respectiv, al ultimului element dintr-o matrice
void afis_prm_ult(matrice a)
{
printf("\nPrimul element este: %d",a[0][0]);
printf("\nUltimul element este: %d\n",a[lin-1][col-1]);
}
//afisarea unei matrice bidimensionale sub forma unui tablou
void afisare(matrice a, char c)
{
int i,j;
printf("\n");
printf("\nMatricea %c este:\n",c);
for(i=0;i<lin;i++)
{
for(j=0;j<col;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
//interschimbarea a doua linii citire intr-o matrice
void interschimbare(matrice a)
{
int x,y,j,aux;
printf("\nDati linia care se doreste a se interschimba : ");
scanf("%d",&x);
printf("Dati linia cu care se doreste interschimbarea : ");
scanf("%d",&y);
/* Interschimbarea ntre continutul liniei x cu y se face element
cu

element prin parcurgerea intregii coloane. */


for(j=0;j<col;j++)
{
aux=a[x-1][j];
a[x-1][j]=a[y-1][j];
a[y-1][j]=aux;
}

}
//functia principala in rulare
void main()
{
matrice a,b;
atribuire1(a);
atribuire2(b);
afis_prm_ult(a);
afisare(a,'A');

afisare(b,'B');
interschimbare(a);
afisare(a,'A');

getchar();
int k;
scanf("%d", k);

5) Se va scrie un program pentru realizarea principalelor sumri ntre elementele unei matrice
bidimensionale.
#include<stdio.h>
//definirea unui tip matrice cu un numar specificat de linii si coloane
typedef int matrice[10][10];
void citire(matrice a, int *n, char c)
{
int i,j;
printf("Introduceti datele matricei %c:\n",c);
//introducerea dimensiunii matricei
printf("\tnumarul de linii (coloane): ");
scanf("%d",n);
//introducerea elementelor matricei
printf("\telementele matricei:\n");
for(i=0;i<*n;i++)
for(j=0;j<*n;j++)
{
printf("\t\t%c[%d][%d]= ",c,i+1,j+1);
scanf("%d",&a[i][j]);
}

}
void afisare(matrice a, int n, char c)
{
int i,j;
printf("Matricea %c este:\n",c);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
//suma tuturor elementelor matricei
void suma1(matrice a, int n)
{
int s=0,i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
s+=a[i][j];
printf("\nSuma tuturor elementelor este: %d", s);
}
//suma elementelor de pe diagonala principala
void suma2(matrice a, int n)
{
int s=0,i;
for(i=0;i<n;i++)
s+=a[i][i];

printf("\n\nSuma elementelor de pe diagonala principala este: %d",


s);
}
//suma elementelor de deasupra diagonalei principale
void suma3(matrice a,int n)
{
int s=0,i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
s+=a[i][j];
printf("\nSuma elementelor de deasupra diagonalei principale este:
%d", s);
}
//suma elementelor de sub diagonala principala
void suma4(matrice a,int n)
{
int s=0,i,j;
for(i=1;i<n;i++)
for(j=0;j<=i-1;j++)
s+=a[i][j];
printf("\nSuma elementelor de sub diagonala principala este: %d",
s);
}
//suma elementelor de pe diagonala secundara
void suma5(matrice a,int n)
{
int s=0,i;
for(i=n-1;i>=0;i--)
s+=a[i][n-i-1];
printf("\n\nSuma elementelor de pe diagonala secundara este: %d",
s);
}
//suma elementelor de deasupra diagonalei secundare
void suma6(matrice a,int n)
{
int s=0,i,j;
for(i=0;i<n-1;i++)
for(j=0;j<=n-2-i;j++)
s+=a[i][j];
printf("\nSuma elementelor de deasupra diagonalei secundare este:
%d",s);
}
//suma elemntelor de sub diagonala secundara
void suma7(matrice a,int n)
{
int s=0,i,j;
for(i=n-1;i>=1;i--)
for(j=n-i;j<n;j++)
s+=a[i][j];
printf("\nSuma elemntelor de sub diagonala secundara este: %d",s);
}
//suma elementelor de pe o anumita linie
void suma8(matrice a,int n,int l)
{
int s=0,j;
for(j=0;j<n;j++)
s+=a[l-1][j];
printf("Suma elementelor de pe o anumita linie este: %d",s);
}
void main()
{

matrice a,b,c;
int n,l;
citire(a,&n,'A');
afisare(a,n,'A');
suma1(a,n);
suma2(a,n);
suma3(a,n);
suma4(a,n);
suma5(a,n);
suma6(a,n);
suma7(a,n);
printf("\n\nDati linia dorita a se calcula suma: ");
scanf("%d",&l);
suma8(a,n,l);
getchar();
int k;
scanf("%d", k);
}

6) Se va scrie un program pentru realizarea principalelor sumri ntre elementele unei matrice
bidimensionale, astfel nct funciile vor transmite rezultatele, nu doar le vor afia n interiorul
corpului acestora.
#include<stdio.h>
//definirea unui tip matrice cu un numar specificat de linii si coloane
typedef int matrice[10][10];
void citire(matrice a, int *n, char c)
{
int i,j;
printf("Introduceti datele matricei %c:\n",c);
//introducerea dimensiunii matricei
printf("\tnumarul de linii (coloane): ");
scanf("%d",n);
//introducerea elementelor matricei
printf("\telementele matricei:\n");
for(i=0;i<*n;i++)
for(j=0;j<*n;j++)
{
printf("\t\t%c[%d][%d]= ",c,i+1,j+1);
scanf("%d",&a[i][j]);
}
}
void afisare(matrice a, int n, char c)
{
int i,j;
printf("Matricea %c este:\n",c);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
//suma tuturor elementelor matricei
int suma1(matrice a, int n)
{
int s=0,i,j;

for(i=0;i<n;i++)
for(j=0;j<n;j++)
s+=a[i][j];
return s;

}
//suma elementelor de pe diagonala principala
int suma2(matrice a, int n)
{
int s=0,i;
for(i=0;i<n;i++)
s+=a[i][i];
return s;
}
//suma elementelor de deasupra diagonalei principale
int suma3(matrice a,int n)
{
int s=0,i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
s+=a[i][j];
return s;
}
//suma elementelor de sub diagonala principala
int suma4(matrice a,int n)
{
int s=0,i,j;
for(i=1;i<n;i++)
for(j=0;j<=i-1;j++)
s+=a[i][j];
return s;
}
//suma elementelor de pe diagonala secundara
int suma5(matrice a,int n)
{
int s=0,i;
for(i=n-1;i>=0;i--)
s+=a[i][n-i-1];
return s;
}
//suma elementelor de deasupra diagonalei secundare
int suma6(matrice a,int n)
{
int s=0,i,j;
for(i=0;i<n-1;i++)
for(j=0;j<=n-2-i;j++)
s+=a[i][j];
return s;
}
//suma elemntelor de sub diagonala secundara
int suma7(matrice a,int n)
{
int s=0,i,j;
for(i=n-1;i>=1;i--)
for(j=n-i;j<n;j++)
s+=a[i][j];
return s;
}
//suma elementelor de pe o anumita linie
int suma8(matrice a,int n,int l)
{
int s=0,j;

for(j=0;j<n;j++)
s+=a[l-1][j];
return s;
}
void main()
{
matrice a,b,c;
int n,l;
citire(a,&n,'A');
afisare(a,n,'A');
printf("\nSuma tuturor elementelor este: %d", suma1(a,n));
printf("\nSuma elementelor de pe diagonala principala este: %d",
suma2(a,n));
printf("\nSuma elementelor de deasupra diagonalei principale e: %d",
suma3(a,n));
printf("\nSuma elementelor de sub diagonala principala este: %d",
suma4(a,n));
printf("\nSuma elementelor de pe diagonala secundara este: %d",
suma5(a,n));
printf("\nSuma elementelor de deasupra diagonalei secundare este: %d",
suma6(a,n));
printf("\nSuma elemntelor de sub diagonala secundara este: %d",
suma7(a,n));
printf("\n\nDati linia dorita a se calcula suma: ");
scanf("%d",&l);
printf("\nSuma elementelor de pe o anumita linie este: %d", suma8(a,n,l));
getchar();
int k;
scanf("%d", k);
}

7) Se va scrie o rutin care va citi o matrice bidimensional avnd componente ntregi, dup
care o va afia, iar apoi se va face o functie proprie care va returna suma elementelor matricei
de pe diagonala secundara.
#include<stdio.h>
//definirea unui tip matrice cu un numar specificat de linii si coloane
typedef int matrice[10][10];
//suma elementelor de pe diagonala secundara
int suma(matrice a, int n)
{
int s=0,i;
for(i=n-1;i>=0;i--)
s+=a[i][n-i-1];
return s;
}
void main()
{
matrice a;
/* matricea bidimensionala avand un nr. maximi de 10
linii
si 10 coloane ce vor putea fi
memorate */
int n;
/* numarul real (la citire) de randuri/coloane ale
matricei */
int i,j;
//introducerea dimensiunilor matricei
printf("Introduceti nr de linii: ");
scanf("%d", &n);

//introducerea elementelor matricii


printf("Introduceti elementele matricei: \n");
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
printf("\tElem [%d,%d]= ", i+1, j+1);
scanf("%d", &a[i][j]);
}
//afisarea elementelor matricei
printf("Matricea este: \n");
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%5d", a[i][j]);
printf("\n");
}
//afisarea sumei elementelor de pe diagonala secundara
printf("\nSuma elementelor de pe diagonala secundara este: %d",
suma(a,n));
getchar();
int k;
scanf("%d", &k);
}

8) Suma a doua matrice.

#include<stdio.h>
//definirea unui tip matrice cu un numar specificat de linii si coloane
typedef int matrice[10][10];
void citire(matrice x, int n) // n - nr. de linii/coloane
{
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
printf("\tElem [%d,%d]= ", i+1, j+1);
scanf("%d", &x[i][j]);
}
}
//afisarea unei matrice bidimesionala
void afisare(matrice x, int n, char* s)
{
printf("\nMatricea %s este:\n",s);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("\t%d",x[i][j]);
printf("\n");
}
}
//suma a doua matrice
void suma(matrice x, matrice y, matrice z, int n) /* in acest caz putem
returna matricea prin tipul rezultat,
pentru matricea este
un pointer (o adresa) */
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
z[i][j] = x[i][j] + y[i][j];

}
void main()

{
matrice A,B,C;
int n;
printf("Introduceti dimensiunile matricelor.\n");
printf("\tnr. de linii/coloane: ");
scanf("%d",&n);
printf("Introducem elementele matricei A.\n");
citire(A,n);
afisare(A,n,"A");
printf("Introducem elementele matricei B.\n");
citire(B,n);
afisare(B,n,"B");
suma(A,B,C,n);
afisare(C,n,"A+B");
getchar();
int k;
scanf("%d", &k);
}

9) Inmultirea a doua matrice patratice.


#include<stdio.h>
//definirea unui tip matrice cu un numar specificat de linii si coloane
typedef int matrice[10][10];
void citire(matrice x, int n) // n - nr. de linii/coloane
{
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
printf("\tElem [%d,%d]= ", i+1, j+1);
scanf("%d", &x[i][j]);
}
}
//afisarea unei matrice bidimesionala
void afisare(matrice x, int n, char* s)
{
printf("\nMatricea %s este:\n",s);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("\t%d",x[i][j]);
printf("\n");
}
}
//inmultirea a doua matrice
void inmultire(matrice x, matrice y, matrice z, int n) /* in acest caz
putem returna matricea
prin tipul rezultat, pentru matricea
este un pointer (o adresa) */
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{

z[i][j]=0;
for(int k=0;k<n;k++)
z[i][j]+=x[i][k]*y[k][j];
}
}
void main()
{
matrice A,B,C;
int n;
printf("Introduceti dimensiunile matricelor.\n");
printf("\tnr. de linii/coloane: ");
scanf("%d",&n);
printf("Introducem elementele matricei A.\n");
citire(A,n);
afisare(A,n,"A");
printf("Introducem elementele matricei B.\n");
citire(B,n);
afisare(B,n,"B");
inmultire(A,B,C,n);
afisare(C,n,"A*B");
getchar();
int k;
scanf("%d", &k);
}

10) Sa se scrie un program care determina elementele de maxim i minim din ntreaga matrice
ptratic.
#include<stdio.h>
void main()
{
int a[10][10]; /* matricea bidimensionala avand un nr. maximi de 10
linii
si 10 coloane ce vor putea fi
memorate */
int n; /* numarul real (la citire) de randuri/coloane, ale matricei
*/
int i,j;
//introducerea dimensiunilor matricei
printf("Introduceti nr de linii/col: ");
scanf("%d", &n);
//introducerea elementelor matricii
printf("Introduceti elementele matricei: \n");
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
printf("\tElem [%d,%d]= ", i+1, j+1);
scanf("%d", &a[i][j]);
}
//afisarea elementelor matricei

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


{
for(j=0; j<n; j++)
printf("%5d", a[i][j]);
printf("\n");
}
//Maximul si minimul din intreaga matrice
int max=a[0][0];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(a[i][j]>max)
max=a[i][j];
}
int min=a[0][0];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(a[i][j]<min)
min=a[i][j];
}
printf("Maximul si minuml din matrice: %d si %d",max,min);
getchar();
int k;
scanf("%d", k);
}

Structuri de date: matrici rare - aplicatii


rezolvate
1) Operatii elementare cu matrici rare.
#include<stdio.h>
#include<conio.h>
#include <iostream>
using namespace std;

template <class T>


class element
{
public:
int lin;
int col;
int val;
element()
{
lin=0;
col=0;
val=0;
}
element(int a, int b, int c)

lin=a;
col=b;
val=c;

};
//lista in care avem memorata o matrice rara
template <class T>
class matrice
{
int nr_lin;
int nr_col;
int nr_elem;
element<T> data[10];
public:
matrice();
void atribuire(matrice<T> ob);
matrice<T> creare();
//creare matrice rara
void print();
//afisarea unei matrici
rare
void adaugaElement(element<T> e);
//adauga un element
void stergere(element<T> e);
//sterge un element
void modificaElement(element<T> e); //modifica un element
void adunare(matrice<T> ob1, matrice<T> ob2); //adunarea a doua
matrici rare
//void inmultire(matrice<T> ob1, matrice<T> ob2); //inmultirea a
doua matrici rare
//void inmulConstanta(int cst);
//inmultirea unei
matrici rare cu o constanta
matrice<T> transpusa(matrice<T> a);
//calcul
transpusa
};

template <class T>


matrice<T>::matrice()
{
nr_col=0;
//nr de linii
nr_lin=0;
//nr de coloane
nr_elem=0; //nr de elemente nule
}
template <class T>
void matrice<T>::atribuire(matrice<T> ob)
{
nr_lin=ob.nr_lin;
nr_col=ob.nr_col;
nr_elem=ob.nr_elem;
for(int i=0; i<nr_elem; i++)
data[i]=ob.data[i];
}

template <class T>


matrice<T> matrice<T>::creare()
{
cout <<"Nr de linii matrice= ";
cin >>nr_lin;

cout <<"Nr de coloane matrice= ";


cin >>nr_col;
cout <<"Nr de elmente nenule in matrice= ";
cin >>nr_elem;

cout <<"Introduceti elementele: " <<endl;


for(int i=1; i<=nr_elem; i++)
{
cout <<"elementul " <<i+1 <<endl;
cout<<"linia= ";
cin >>data[i].lin;
cout<<"coloana= ";
cin >>data[i].col;
cout <<"valoare= ";
cin >>data[i].val;
}
return *this;

template <class T>


void matrice<T>::print()
{
for(int i=1; i<=nr_lin; i++)
{
for (int j=1; j<=nr_col; j++)
{
int ok=1;
for(int k=1; k<=nr_elem; k++)
if((data[k].lin==i) && (data[k].col==j))
{
cout<<data[k].val <<" ";
ok=0;
}
if(ok==1)
cout <<"0 ";
}
cout <<endl;
}

template <class T>


void matrice<T>::adaugaElement(element<T> e)
{
int ok=1;
for(int i=0; i<nr_elem; i++)
if((data[i].lin == e.lin) && (data[i].col == e.col))
{
data[i].val += e.val;
ok=0;
}
if(ok==1)
{
nr_elem++;
data[nr_elem-1].lin=e.lin;
data[nr_elem-1].col=e.col;
data[nr_elem-1].val=e.val;
}
}

template <class T>


void matrice<T>::stergere(element<T> e)
{
for(int i=1; i<nr_elem; i++)
{
if((data[i].lin == e.lin) && (data[i].col == e.col) &&
(data[i].val == e.val))
{
data[i].val -= e.val;
}
}
}
template <class T>
void matrice<T>::modificaElement(element<T> m)
{
for(int i=0; i<nr_elem; i++)
{
if((data[i].lin == m.lin) && (data[i].col == m.col))
{
data[i].val= m.val;
}
}
}
template <class T>
void matrice<T>::adunare(matrice<T> ob1, matrice<T> ob2)
{
atribuire(ob1);
for(int i=0; i<ob2.nr_elem; i++)
adaugaElement(ob2.data[i]);
}
//linile devin coloane
template <class T>
matrice<T> matrice<T>::transpusa(matrice<T> a)
{
nr_lin=a.nr_col;
nr_col=a.nr_lin;
nr_elem=a.nr_elem;
for(int i=0;i<=nr_elem;i++)
{data[i].val=a.data[i].val;
data[i].lin=a.data[i].col;
data[i].col=a.data[i].lin;
}
return *this;
}
void main()
{
matrice<int>ob1; matrice<int>ob2; matrice<int>ob3;
element<int>e; element<int>s; element<int>m;
cout <<"Creare matrice 1 " <<endl;
ob1.creare();
cout <<"Afisare matrice 1 " <<endl;
ob1.print();
cout<<"Matricea transpusa este: "<<endl;
ob2.transpusa(ob1);

ob2.print();
cout <<"Creare matrice 2 " <<endl;
ob2.creare();
cout <<"Afisare matrice 2 " <<endl;
ob2.print();
cout <<"ADUNAREA A 2 MATRICI"
ob3.adunare(ob1, ob2);
ob3.print();

<<endl;

cout <<"ADAUGARE ELEMENT IN MATRICE" <<endl;


cout <<"linia= ";
cin >>e.lin;
cout <<"coloana= ";
cin >>e.col;
cout <<"valoare= ";
cin >>e.val;
ob1.adaugaElement(e);
ob1.print();
cout <<"STERGE UN ELEMENT IN MATRICE" <<endl;
cout <<"linia= ";
cin >>s.lin;
cout <<"coloana= ";
cin >>s.col;
cout <<"valoare= ";
cin >>s.val;
ob1.stergere(s);
ob1.print();
cout <<"MODIFICA UN ELEMENT IN MATRICE" <<endl;
cout <<"linia= ";
cin >>m.lin;
cout <<"coloana= ";
cin >>m.col;
cout <<"Noua valoare= ";
cin >>m.val;
ob1.modificaElement(m);
ob1.print();

int g;
cin >>g;

C: Recursivitate - aplicatii rezolvate


1) S se calculeze n! in varianta iterativa
2) S se calculeze n! in varianta recursiva
3) S se calculeze recursiv suma elementelor unui sir
4) Scrieti o functie proprie care realizeaza calculul recursiv al sumei elementelor unui vector,
de n<=10, de nr reale. Scrieti functia main care citeste datele de la tastatura, calculeaza suma,

utilizand functia recursiva anterior definita si afiseaza valoarea obtinuta


5) S se scrie un program C, pentru rezolvarea cmmdc-ului dintre dou numere ntregi fr
semn (pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scderi). Varianta
iterativa
6) S se scrie un program C, pentru rezolvarea cmmdc-ului dintre dou numere ntregi fr
semn (pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scderi). Varianta
recursiva
7) S se scrie un program C, pentru rezolvarea cmmdc-ului a n numere ntregi fr semn
(pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scderi). Varianta
recursiva
8) Se considera urmatoarele declaratii i conventii:
typedef int vector[20]; x este un vector (sir de elemente) n este lungimea sa (n>=1)
Se cere sa se scrie functii recursive pentru a determina, pentru un vector x de lungime n,
urmatoarele:
a. citirea componentelor sirului
b. afisarea elementelor din sir
c. suma componentelor
d. produsul componentelor
e. numarul componentelor negative
f. produsul componentelor pozitive
g. media aritmetica a elementelor
9) Sa se scrie o functie recursiva pentru determinarea sumei cifrelor unui numar natural
10) Sa se scrie o functie recursiva pentru a transforma un numar natural n, din baza 10 n baza
k (1<k<=10)
11) Se citeste x din Z . Se cere subprogramul pentru calculul functiei Manna-Pnuelli:
x-1, x>=12

F(x)=

F(F(x+2)), x<12

12) Se considera sirul lui Fibonacci (Un) definit astfel:


Un=

0, n=0
1, n=1
Un-1+Un-2, altfel

Se citeste n, un numar natural. Sa se calculeze Un, in varianta iterativa


13) Se considera sirul lui Fibonacci (Un) definit astfel:
Un=

0, n=0
1, n=1
Un-1+Un-2, altfel

Se citeste n, un numar natural. Sa se calculeze Un, in varianta recursiva

Rezolvari
1) S se calculeze n! in varianta iterativa.

#include<stdio.h>
long int factorial (int n)
{
long int f=1;
for (int i=1; i<=n;i++)
f=f*i;
return f;
}
void main()
{
int n;
printf("Introduceti n= ");
scanf("%d", &n);
if(!n)
else

printf("0!=1\n");
printf("%d!=%ld\n",n,factorial(n));

getchar();
int var;
scanf("%d", var);

2) S se calculeze n! in varianta recursiva.

// factorial(3)=3*factorial(2)=3*2*factorial(1)=3*2*1
#include<stdio.h>
long int factorial (int n)
{
if (n==1) return 1;
else return n*factorial(n-1);
}
void main()
{
int n;
printf("Introduceti n= ");
scanf("%d", &n);
if(!n)
else

printf("0!=1\n");
printf("%d!=%ld\n",n,factorial(n));

getchar();
int var;
scanf("%d", var);
}

3) S se calculeze recursiv suma elementelor unui sir.


#include<stdio.h>
int suma(int n)
{
if (n==0) return 0;
else return (n + suma(n-1));
}
void main()
{

int n;
printf("Introduceti n: ");
scanf("%d", &n);
printf("Suma elementelor este %d\n",suma(n));
getchar();
int var;
scanf("%d", var);
}

4) Scrieti o functie proprie care realizeaza calculul recursiv al sumei elementelor unui vector,
de n<=10, de nr reale. Scrieti functia main care citeste datele de la tastatura, calculeaza suma,
utilizand functia recursiva anterior definita si afiseaza valoarea obtinuta.
#include <stdio.h>
#include <conio.h>
int a[10], n;
int Suma (int n, int a[10])
{
if(n==0) return 0;
else return(a[n]+Suma(n-1,a));
}
void main()
{
// Citire date de intrare
printf("Introduceti nr de elemente: ");
scanf("%d", &n);
for (int i=1; i<=n; i++)
{
printf("Elementul [%d] = ", i);
scanf("%d", &a[i]);
}
// Afisarea rezultatelor
printf("Suma = %d", Suma(n,a));
getch();
}

5) S se scrie un program C, pentru rezolvarea cmmdc-ului dintre dou numere ntregi fr


semn (pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scderi). Varianta
iterativa.
#include <stdio.h>
#include <conio.h>
unsigned int cmmdc(unsigned int a, unsigned int b)
{
while(a!=b)
{
if(a>b)
a=a-b;
else
b=b-a;
}
return a;
}
void main()
{

unsigned int x,y;


printf("Introduceti x: ");
scanf("%u",&x);
printf("Introduceti y: ");
scanf("%u",&y);
if(!x || !y)
//daca x=0 sau y=0
printf("cmmdc(%u,%u) = 1\n",x,y);
else
printf("cmmdc(%u,%u) = %u\n",x,y,cmmdc(x,y));

getch();

6) S se scrie un program C, pentru rezolvarea cmmdc-ului dintre dou numere ntregi fr


semn (pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scderi). Varianta
recursiva.
#include <stdio.h>
#include <conio.h>

unsigned int cmmdc(unsigned int a, unsigned int b)


{
if(a==b) return a;
else
if(a>b) return cmmdc(a-b,b);
else return cmmdc(a,b-a);
}
void main()
{
unsigned int x,y;
printf("Introduceti x: ");
scanf("%u",&x);
printf("Introduceti y: ");
scanf("%u",&y);
if(!x || !y)
//daca x=0 sau y=0
printf("cmmdc(%u,%u) = 1\n",x,y);
else
printf("cmmdc(%u,%u) = %u\n",x,y,cmmdc(x,y));

getch();

7) S se scrie un program C, pentru rezolvarea cmmdc-ului a n numere ntregi fr semn


(pentru determinarea cmmdc-ului vom folosi algritmul lui Euclid prin scderi). Varianta
recursiva.
#include <stdio.h>
#include <conio.h>

unsigned int cmmdc_2(unsigned int a, unsigned int b)


{
if(a==b) return a;
if(a>b) return cmmdc_2(a-b,b);
else
return cmmdc_2(a,b-a);
}
unsigned int cmmdc_n(unsigned int x[], int n)

{
if (n==2) return cmmdc_2(x[0],x[1]);
else
return cmmdc_2(cmmdc_n(x,n-1),x[n-1]);
}
void main()
{
unsigned int x[20];
int n;
printf("Introduceti n: ");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("elementul %d= ",i+1);
scanf("%u",&x[i]);
}
if (n==1)
printf("\nCmmdc-ul numerelor: %u",x[0]);
else
printf("\nCmmdc-ul numerelor: %u",cmmdc_n(x,n));

getch();

8) Se considera urmatoarele declaratii i conventii:


typedef int vector[20]; x este un vector (sir de elemente) n este lungimea sa (n>=1)
Se cere sa se scrie functii recursive pentru a determina, pentru un vector x de lungime n,
urmatoarele:
a. citirea componentelor sirului
b. afisarea elementelor din sir
c. suma componentelor
d. produsul componentelor
e. numarul componentelor negative
f. produsul componentelor pozitive
g. media aritmetica a elementelor

#include<stdio.h>
#include<conio.h>
/* un tip propriu definit pentru memorarea sirurilor de elemente intregi,
cu o
dimensiune maxima de 20 de componente */
typedef int vector[20];
//functia de citire
void citire(vector x,int n) //n este dimensiunea reala a sirului
{
//citim ultimul element din sir
printf("\telementul %d: ",n);
scanf("%d",&x[n-1]);
if(n>=2)
citire(x,n-1); //apelul recursiv al functiei
}
//functia de afisare
void afisare(vector x,int n) //n este dimensiunea reala (nr. de elem. din
sir)
{
//afisam ultimul element
printf("%d ",x[n-1]);
if(n>=2)
afisare(x,n-1); //apelul recursiv al functiei

}
//adunarea componentelor unui sir
int suma(vector x,int n) //n in acest caz il consideram fiind indice
element dinsir
{
if(n==-1) return 0; //situatia in care nu mai sunt elemente in sir, pozitia
n=-1 nefiind in sir
else return x[n]+suma(x,n-1);
}
//produsul componentelor
int produs(vector x,int n)
{
if(n==-1) return 1;
else return x[n]*produs(x,n-1);
}
//numarul de componente negative
int numar_negative(vector x,int n)
{
//ne pozitionam pe primul element din sir si verificam dc acesta
este negativ
if(n==0) return (x[n]<0); //expresia conditionata va returna 1 in caz de
adv. si 0 in caz de fals
else return (x[n]<0)+numar_negative(x,n-1);
}
//produsul componentelor pozitive
int produs_pozitive(vector x,int n)
{
if(n==0) return (x[n]>0?x[n]:1); /* am folosit operatorul de
conditionare,
care, daca expresia evaluata ca fi adv. se va lua in calcul x[n],
altfel,
valoarea 1 */
else return (x[n]>0?x[n]:1)*produs_pozitive(x,n-1);
}
//media aritmetica a componentelor sirului
float media(vector x, int m, int n) //cu m am notat indicele elementelor,
iar cu n dimensiunea reala a sirului
{
return (float)x[m]/n + ((m!=0)?media(x,m-1,n):0);
/* - am folosit expresia (float) pentru o conversie explicita a
rezultatului
spre un tip real
- prin x[m]/n intelegem un element (in prima faza, acesta fiind
ultimul
element din sir) impartit la numarul total de componente */
}
//functia principala in rulare
void main()
{
vector x; //sirul de elemente
int n; //dimensiunea sa (numarul de componente citite)
//realizarea operatiei de citire a sirului
printf("Dati numarul de elemente: ");
scanf("%d",&n);
printf("Introduceti elementele sirului:\n");
citire(x,n);
//realizarea operatiei de afisare a sirului
printf("Sirul de elemente este: ");
afisare(x,n);

//sumarea elementelor
printf("\nSuma elementelor: %d",suma(x,n-1)); /* am apelat cu n-1,
ptr ca am
spus mai sus ca acest
parametru reprezinta
indicele ultimului element
din sir */
//produsul elementelor
printf("\nProdusul elementelor: %d",produs(x,n-1));
//numarul elementelor negative din sir
printf("\nNumarul elementelor negative: %d",numar_negative(x,n-1));
//produsul componentelor pozitive
printf("\nProdusul elementelor pozitive: %d",produs_pozitive(x,n1));
//media componentelor din sir
printf("\nMedia componentelor din sir: %.2f",media(x,n-1,n)); /*
primul parametru - sirul,
al doilea parametru - indicele
ultimului element din sir, al treilea
parametru - dimensiunea reala a
sirului (numarul de elemente citite) */
getch();
}

9) Sa se scrie o functie recursiva pentru determinarea sumei cifrelor unui numar natural.
Indicatie: Se izoleaza ultima cifra, iar lui n i se atribuie ctul ntreg dintre vechea valoare i
10.
#include<stdio.h>
#include<conio.h>

int suma(int n)
{
if(!n) return 0;
else return n%10+suma(n/10);
}
void main()
{
int n;
printf("Introduceti numarul: ");
scanf("%d", &n);

//!n=daca nu exista n

printf("Suma cifrelor numarului este: %d", suma(n));


getch();
}

10) Sa se scrie o functie recursiva pentru a transforma un numar natural n, din baza 10 n baza
k (1<k<=10). Indicatie: Numarul se mparte la k, se retine restul, ctul se mparte la k, se
retine restul... pna cnd ctul este mai mic dect mpartitorul. Rezultatul se obtine prin
scrierea n ordine inversa a resturilor obtinute. Tiparirea restului se face dupa autoapel.
#include<stdio.h>
#include<conio.h>
void transform(int n,int b)
{
int rest=n%b;

if (n>=b) transform(n/b,b);
printf("%d",rest);

}
void main()
{
int n,b;
printf("n="); scanf("%d",&n);
printf("baza="); scanf("%d",&b);
transform(n,b);
getch();
}

11) Se citeste x din Z . Se cere subprogramul pentru calculul functiei Manna-Pnuelli:


x-1, x>=12

F(x)=

F(F(x+2)), x<12
#include<stdio.h>
#include<conio.h>
int F(int x)
{
if (x>=12) return x-1;
return F(F(x+2));
}
void main()
{
int x;
printf("x="); scanf("%d",&x);
printf("Valoarea functiei este: %d",F(x));
getch();
}

12) Se considera sirul lui Fibonacci (Un) definit astfel:


Un=

0, n=0
1, n=1
Un-1+Un-2, altfel

Se citeste n, un numar natural. Sa se calculeze Un, in varianta iterativa.


#include<stdio.h>
#include<conio.h>

void main()
{
int n,U0=0,U1=1,U2;
printf("n="); scanf("%d",&n);
if(!n) printf("%d",U0);
else
if (n==1) printf("%d",U1);
else
{
for (int i=2;i<=n;i++)
{
U2=U0+U1;
U0=U1;
U1=U2;
}
printf("%d",U2);
}

/*
ptr. n=3
i=2: U2=U0+U1
U0=U1
U1=U2
i=3: U2=U1+U2
*/
getch();
}

13) Se considera sirul lui Fibonacci (Un) definit astfel:


Un=

0, n=0
1, n=1
Un-1+Un-2, altfel

Se citeste n, un numar natural. Sa se calculeze Un, in varianta recursiva.


#include<stdio.h>
#include<conio.h>
int U (int n)
{
if (!n) return 0;
else
if (n==1) return 1;
else
return U(n-1)+U(n-2);
}
void main()
{
int n;
printf("Introduceti n=");
scanf("%d",&n);
printf("Valoarea sirului in n este: %d",U(n));
getch();
}

C: Structuri de date - aplicatii rezolvate


1) Declararea unei nregistrri i folosirea acesteia
2) Se va scrie un program C ce va evidenia diferenele ntre folosirea unei structuri i a unei
uniuni
a) se va folosi o structur de nregistrri
b) se va folosi o structur tip uniune
3) S se realizeze o aplicaie care realizeaz prelucrri cu numere complexe, adic citire,
afiare, modul, sum i produs ntre dou astfel de numere
4) S se realizeze o aplicaie pentru lucrul cu numere raionale (valori numerice ce pot fi
scrise sub form de fracie) i anume: citirea, afiarea, sumarea i produsul a dou numere

astfel de numere
5) S se scrie un program care sa administreze un parc de automobile. Informaiile relative la
un automobil sunt: numrul de locuri, puterea (n cai putere), marca, culoarea, anul fabricaiei
mainii
a) se vor citi informatiile relative la cele n automobile din parcul de autoturisme. Se vor afisa
doar acele automobilele care au 5 locuri;
b) sa se ordoneze crescator dupa putere automobilele se vor afisa datele ordonate;
c) sa se scrie o functie care afiseaza toate automobilele fabricate ntr-un anumit an dat ca
parametru.

Rezolvari
1) Declararea unei nregistrri i folosirea acesteia.

#include<stdio.h>
/* structurile declarate, in principiu vor fi declarate in afara
oricarei functii, pentru a putea fi utilizata in intreg programul */
struct angajat
{
int cod_angajat;
char* nume;
char* prenume;
struct
{
int an;
char luna;
char zi;
}data_angajarii;
float sal_incadrare;
};
void main()
{
angajat x;
x.cod_angajat=1021;
x.nume="Popescu";
x.prenume="Ioan";
x.data_angajarii.an=2002;
x.data_angajarii.luna=9;
x.data_angajarii.zi=10;
x.sal_incadrare=1250;
printf("angajat: %s %s\n",x.nume,x.prenume);
printf("data angajarii: %d/%d/%d\n",x.data_angajarii.zi,
x.data_angajarii.luna, x.data_angajarii.an);
printf("salariu incadrare: %.2f",x.sal_incadrare);
getchar();
int k;
scanf("%d", &k);
}

2) Se va scrie un program C ce va evidenia diferenele ntre folosirea unei structuri i a unei


uniuni.
a) se va folosi o structur de nregistrri:

#include<stdio.h>
struct exemplu
{
long int a;
char* b;
char* c;
};
void main()
{
exemplu x;
printf("Spatiul ocupat de o variabila la structura:
%d\n",sizeof(x));
x.a=10;
x.b="ABCD";
x.c="EFG";
printf("%ld\n",x.a);
printf("%s\n",x.b);
printf("%s\n",x.c);
getchar();
int k;
scanf("%d", &k);
}

b) se va folosi o structur tip uniune:


#include<stdio.h>
union exemplu
{
long int a;
char* b;
char* c;
};
void main()
{
exemplu x;
printf("Spatiul ocupat de o variabila la uniune: %d\n",sizeof(x));
x.a=10;
x.b="ABCD";
x.c="EFG";
printf("%ld\n",x.a);
printf("%s\n",x.b);
printf("%s\n",x.c);
getchar();
int k;
scanf("%d", &k);
}

3) S se realizeze o aplicaie care realizeaz prelucrri cu numere complexe, adic citire,


afiare, modul, sum i produs ntre dou astfel de numere.
#include<stdio.h>
#include<math.h>
typedef struct{
float a;
//partea reala
float b;
//partea imaginara
}complex;
//numele structurii

//citirea unui nr. complex


void citire(complex* z,char s[]) //s retine numele nr. complex
{
printf("Introducem nr. complex %s:\n",s);
printf("\tpartea reala: ");
scanf("%f",&(*z).a);
printf("\tpartea imaginara: ");
scanf("%f",&z->b); //alt mod de scriere
}
//afisarea unui nr. complex
void afisare(complex z,char s[])
{
printf("Nr. complex %s: ",s);
if(z.b>=0)
printf("%.2f+%.2fi\n",z.a,z.b);
else
printf("%.2f%.2fi\n",z.a,z.b);
}
//modulul unui nr. complex
float modul(complex z)
{
return sqrt(pow(z.a,2)+pow(z.b,2));
}
//conjugatul unui numar complex
complex conjugat(complex z)
{
complex t;
t.a=z.a;
t.b=-z.b;
return t;
}
//suma a doua nr. complexe (varianta cu transfer prin tipul rezultat)
complex suma1(complex x,complex y)
{
complex z;
z.a=x.a+y.a;
z.b=x.b+y.b;
return z;
}
//suma a doua nr. complexe (varianta cu transfer prin linia de parametri)
void suma2(complex x,complex y,complex* z)
{
z->a=x.a+y.a; //(*z).a=x.a+y.a;
z->b=x.b+y.b;
}
//produsul a doua nr. complexe
complex produs(complex x,complex y)
{
complex z;
z.a=x.a*y.a-x.b*y.b;
z.b=x.a*y.b+x.b*y.a;
return z;
}
//functia principala in rulare
void main()
{
complex z1,z2;
//citirea celor doua nr. complexe
citire(&z1,"z1");
citire(&z2,"z2");
printf("\n");

//afisarea celor doua nr. complexe


afisare(z1,"z1");
afisare(z2,"z2");
printf("\n");
//modulele celor doua nr. complexe
printf("Modulul lui z1: %.2f\n",modul(z1));
printf("Modulul lui z2: %.2f\n",modul(z2));
printf("\n");
//conjugatele celor doua numere complexe
afisare(conjugat(z1),"conjugat z1");
afisare(conjugat(z2),"conjugat z2");
//suma a doua nr. complexe - varianta 1
complex s1;
s1=suma1(z1,z2);
afisare(s1,"z1+z2");
//suma a doua nr. complexe - varianta 2
complex s2;
suma2(z1,z2,&s2);
afisare(s2,"z1+z2");
//produsul a doua nr. complexe
complex p;
p=produs(z1,z2);
afisare(p,"z1*z2");

getchar();
int k;
scanf("%d", &k);

4) S se realizeze o aplicaie pentru lucrul cu numere raionale (valori numerice ce pot fi


scrise sub form de fracie) i anume: citirea, afiarea, sumarea i produsul a dou numere
astfel de numere.
#include<stdio.h>
#include<math.h>
typedef struct
{
int a,b;
int cmmdc(int x,int y)
{
if(x==y) return x;
else
if(x>y) return cmmdc(x-y,y);
else
return cmmdc(x,y-x);
}
void ireductibil()
{
if(b<0)
{
a=-a;
b=-b;
}
if(!a)
b=1;
else
if(abs(a)!=1 && abs(b)!=1)
{
int d=cmmdc(abs(a),abs(b));
a=a/d;

b=b/d;
}

}
}rational;
void citire(rational* x, char c)
{
printf("Dati numarul rational %c:\n",c);
printf("\tnumaratorul: ");
scanf("%d",&x->a);
int n;
do
{
printf("\tnumitorul: ");
scanf("%d",&n);
}
while(n==0);
x->b=n;
x->ireductibil();
}
void afisare(rational x, char c[])
{
printf("Numarul rational %s: %d/%d\n",c,x.a,x.b);
}
rational adunare(rational x, rational y)
{
rational r;
r.a=x.a*y.b+x.b*y.a;
r.b=x.b*y.b;
r.ireductibil();
return r;
}
rational inmultire(rational x, rational y)
{
rational r;
r.a=x.a*y.a;
r.b=x.b*y.b;
r.ireductibil();
return r;
}
void main()
{
rational x,y;
citire(&x,'x');
citire(&y,'y');
afisare(x,"x");
afisare(y,"y");
rational s;
s=adunare(x,y);
afisare(s,"x+y");
rational p;
p=inmultire(x,y);
afisare(p,"x*y");
getchar();
int k;

scanf("%d", &k);
}

5) S se scrie un program care sa administreze un parc de automobile. Informaiile relative la


un automobil sunt: numrul de locuri, puterea (n cai putere), marca, culoarea, anul fabricaiei
mainii.
a) se vor citi informatiile relative la cele n automobile din parcul de autoturisme. Se vor afisa
doar acele automobilele care au 5 locuri;
b) sa se ordoneze crescator dupa putere automobilele se vor afisa datele ordonate;
c) sa se scrie o functie care afiseaza toate automobilele fabricate ntr-un anumit an dat ca
parametru.
#include<stdio.h>
#include<conio.h>
typedef struct
//declarare structura
{
char marca[20];
char model[20];
char cul[20];
int an;
struct
//definire structura
{
char nl;
int put;
}date;
//lista variabile la
structura
}automobil;
//nume structura
typedef automobil masini[20];
//tip de date propriu
void citire(masini a, int *n)
//introducere date
{
int i;
printf("Dati nr. de automobile: ");
scanf("%d",n);
for(i=0; i<*n; i++)
{
printf("Introduceti datele despre automobilul %d\n",i+1);
printf("\tmarca: ");
scanf("%s",a[i].marca);
printf("\tmodelul: ");
scanf("%s",a[i].model);
printf("\tculoarea: ");
scanf("%s",a[i].cul);
printf("\tanul: ");
scanf("%d",&a[i].an);
printf("\tnumarul de locuri: ");
scanf("%d",&a[i].date.nl);
printf("\tputerea in cai putere: ");
scanf("%d",&a[i].date.put);
}
}
void afisare(masini a,int n)
//afisare date
{
int i;
for (i=0;i<n;i++)
{
printf("Automobil [%d]:\n",i+1);
printf("\tmarca:
%s\n",a[i].marca);
printf("\tmodelul:
%s\n",a[i].model);

printf("\tculoarea:
printf("\tan fabr.:
printf("\tnr locuri:
printf("\tputerea:

%s\n",a[i].cul);
%d\n",a[i].an);
%d\n",a[i].date.nl);
%d\n\n",a[i].date.put);

}
}
void an(masini a,int n,int p)
{
int i;
for(i=0;i<n-1;i++)
{
if(a[i].an=p)
//atribuire valori membrilor
structurii
{
printf("Automobil [%d]:\n",i+1);
printf("\tmarca:
%s\n",a[i].marca);
printf("\tmodelul:
%s\n",a[i].model);
printf("\tculoarea: %s\n",a[i].cul);
printf("\tan fabr.: %d\n",a[i].an);
printf("\tnr locuri: %d\n",a[i].date.nl);
printf("\tputerea:
%d\n\n",a[i].date.put);
}
}
}
void main()
{
masini a;
int n,aux,i,j,p;
citire(a,&n);
afisare(a,n);
for(i=0;i<n;i++)
{
if(a[i].date.nl=5)
//atribuire valori membrilor
structurii
{
printf("Automobil [%d]:\n",i+1);
printf("\tmarca:
%s\n",a[i].marca);
printf("\tmodelul:
%s\n",a[i].model);
printf("\tculoarea: %s\n",a[i].cul);
printf("\tan fabr.: %d\n",a[i].an);
printf("\tnr locuri: %d\n",a[i].date.nl);
printf("\tputerea:
%d\n\n",a[i].date.put);
}
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(a[i].date.put>a[j].date.put)
{
aux=i;
i=j;
j=aux;
}
}
afisare(a,n);
printf("\n\tDati anul dupa care vor fi afisate masinile: ");
scanf("%d",&p);
an(a,n,p);
getchar();
int k;

scanf("%d", &k);
}