Sunteți pe pagina 1din 12

Laborator programarea calculatoarelor (2013)

Limbajul C++
Adrian Runceanu

Laborator nr. 6
Tablouri unidimensionale(vectori) si
bidimensionale(matrici)
1. Tablouri unidimensionale(vectori)
Problema 1:
Se considera un tablou unidimensional cu n numere reale si se cere sa
se afiseze cel mai mare si cel mai mic element din tablou.
Solutie:
#include<iostream.h>
int i, n;
float x[50], min, max;
int main(void)
{
cout<<"Dati numarul de elemente ale tabloului ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x[<<i<<]= ";
cin>>x[i];
}
min=x[1];
max=x[1];
for(i=1;i<=n;i++)
if(min>x[i]) min=x[i];
else if(max<x[i]) max=x[i];
cout<<endl<<"Minimul este "<<min;
cout<<endl<<"Maximul este "<<max;
}
Problema 2:
Fie tabloul unidimensional x cu n elemente numere reale si numerele
intregi a si b. Sa se calculeze media aritmetica a elementelor din tablou
cuprinse intre valorile a si b.
Solutie:
#include<iostream.h>
int a, b, i, n, suma=0;
float x[50], media;
int main(void)
{
cout<<"Dati numarul de elemente ale tabloului ";
cin>>n;
for(i=1;i<=n;i++)
{
1

Laborator programarea calculatoarelor (2013)


Limbajul C++
Adrian Runceanu

cout<<"x[<<i<<]= ";
cin>>x[i];

}
cout<<"Dati numarul a = ";cin>>a;
cout<<"Dati numarul b = ";cin>>b;
for(i=1;i<=n;i++)
if( (a<=x[i]) && (x[i]<=b) ) suma+=x[i];
media=suma/n;
cout<<"Media aritmetica a elementelor din tablou, aflate intre
<<a<< si <<b<< este <<media;
}
Problema 3:
Se citesc doua tablouri unidimensionale cu componente numere
naturale. Fiecare tablou are elementele sortate crescator. Se cere sa se
construiasca un al treilea tablou care contine elementele celor doua in ordine
crescatoare. (Problema interclasarii)
Solutie:
#include<iostream.h>
int i, j, n, m, k;
float x[50], y[50], z[50];
int main(void)
{
cout<<"Dati numarul de elemente ale tabloului x :";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x[<<i<<]= ";
cin>>x[i];
}
cout<<"Dati numarul de elemente ale tabloului y :";
cin>>m;
for(i=1;i<=m;i++)
{
cout<<"y[<<i<<]= ";
cin>>y[i];
}
i=1;j=1;k=0;
while( (i<=n) && (j<=m) )
if(x[i]<y[j]){k++;z[k]=x[i];i++;}
else {k++;z[k]=y[j];j++;}
if(i<=n) for(j=i;j<=n;j++) {k++;z[k]=x[j];}
else for(i=j;i<=m;i++) {k++;z[k]=y[i];}
cout<<endl<<"Vectorul Z cu elementele interclasate este ";
for(i=1;i<=k;i++) cout<<z[i]<< ;
}

Laborator programarea calculatoarelor (2013)


Limbajul C++
Adrian Runceanu

Problema 4:
Se da un tablou unidimensional cu n componente numere intregi si un
numar intreg A. Sa se numere cate elemente sunt mai mari decat A si sa se
construiasca un vector cu aceste elemente.
#include<iostream.h>
int i, n, j, a;
float x[50], y[50];
int main(void)
{
cout<<"Dati numarul de elemente ale tabloului ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x[<<i<<]= ";
cin>>x[i];
}
cout<<"Dati numarul a = ";cin>>a;
j=0;
for(i=1;i<=n;i++)
if (a<=x[i]) { j++;y[j]=x[i]; }
cout<<"Sunt <<j<< numere mai mari decat "<<a<<endl;
cout<<"Elementele sunt: "<<endl;
for(i=1;i<=m;i++) cout<<y[i]<< ;
}
Problema 5:
Se da un tablou unidimensional cu n (1n100) componente numere
naturale. Sa se calculeze suma componentelor divizibile cu a, pentru un
numar a citit de la tastatura.
#include<iostream.h>
int i, n, a, suma=0;
int x[50];
int main(void)
{
cout<<"Dati numarul de elemente ale tabloului ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x[<<i<<]= ";
cin>>x[i];
}
cout<<"Dati numarul a = ";cin>>a;

Laborator programarea calculatoarelor (2013)


Limbajul C++
Adrian Runceanu

for(i=1;i<=n;i++)
if ( x[i]%=a) suma=suma+x[i];
cout<<"Suma elementelor din vector care sunt divizibile cu
<<a<< este egala cu "<<suma<<endl;
}

Laborator programarea calculatoarelor (2013)


Limbajul C++
Adrian Runceanu

2. Tablouri bidimensionale(matrici)
Problema 1:
Sa se scrie un program care calculeaza produsul a doua matrici
(tablouri bidimensionale) An*m, Bm*p.
Solutie:
#include <iostream.h>
int n,m,p,i,j,k,a[10][10],b[10][10],c[10][10];
int main(void)
{
cout<<"Dati dimensiunile matricei A"<<endl;
cout<<"Dati numarul de linii n = ";cin>>n;
cout<<"Dati numarul de coloane m = ";cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cout<<"a["<<i<<","<<j<<"]= ";
cin>>a[i][j];
}
cout<<"Elementele matricei A sunt: "<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<"Dati dimensiunile matricei B"<<endl;
cout<<"Dati numarul de linii m = ";cin>>m;
cout<<"Dati numarul de coloane p = ";cin>>p;
for(i=1;i<=m;i++)
for(j=1;j<=p;j++)
{
cout<<"b["<<i<<","<<j<<"]= ";
cin>>b[i][j];
}
cout<<"Elementele matricei B sunt: "<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=p;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}

Laborator programarea calculatoarelor (2013)


Limbajul C++
Adrian Runceanu

for(i=1;i<=n;i++)
for(j=1;j<=p;j++)
for(k=1;k<=m;k++)
c[i][j]+=a[i][k]*b[k][j];

cout<<"Elementele matricei produs "<<endl;


for(i=1;i<=n;i++)
{
for(j=1;j<=p;j++)
cout<<c[i][j]<<" ";
cout<<endl;
}

Problema 2:
Sa se scrie un program care calculeaza minimul si maximul dintr-o matrice cu
n linii si m coloane (An*m) (1n,m30).
Solutie:
#include <iostream.h>
int n,m,min,i,j,max,a[30][30];
int main(void)
{
cout<<"Dati dimensiunile matricei "<<endl;
cout<<"Dati numarul de linii n = ";cin>>n;
cout<<"Dati numarul de coloane m = ";cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cout<<"a["<<i<<","<<j<<"]= ";
cin>>a[i][j];
}
cout<<"Elementele matricei A sunt: "<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
min=a[1][1];
max=a[1][1];
for(j=1;i<=m;i++)
{
if(a[1][j]<min) min=a[1][j];
6

Laborator programarea calculatoarelor (2013)


Limbajul C++
Adrian Runceanu

if(a[1][j]>max) max=a[1][j];
}
for(i=2;i<=n;i++)
for(j=1;j<=m;j++)
{
if(a[i][j]<min) min=a[i][j];
if(a[i][j]>max)
max=a[i][j];
}
cout<<"Elementul minim din matrice este "<<min<<endl;
cout<<"Elementul maxim din matrice este "<<max<<endl;
}

Problema 3:
Sa se scrie un program care calculeaza transpusa unei matrici A n*m
(1n,m30).
Solutie:
#include <iostream.h>
int n,m,i,j,a[30][30],b[30][30];
int main(void)
{
cout<<"Dati dimensiunile matricei "<<endl;
cout<<"Dati numarul de linii n = ";cin>>n;
cout<<"Dati numarul de coloane m = ";cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cout<<"a["<<i<<","<<j<<"]= ";
cin>>a[i][j];
}
cout<<"Elementele matricei A sunt: "<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
for(i=1;i<=n;i++)
for(j=1;i<=m;i++)
b[j][i]=a[i][j];
cout<<"Matricea transpusa este "<<endl;
for(i=1;i<=m;i++)
7

Laborator programarea calculatoarelor (2013)


Limbajul C++
Adrian Runceanu

{
for(j=1;j<=n;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
}

Problema 4:
Se considera o matrice An*n. Sa se calculeze:
- suma elementelor de pe diagonala principala
- produsul elmentelor de pe diagonala secundara
- minimele din elementele aflate deasupra, respectiv sub diagonala
principala
- maximele din elemenetle aflate deasupra, respectiv sub diagonala
secundara
Solutie:
#include <iostream.h>
int n,m,i,j,a[30][30],min1,min2,max1,max2,suma,produs;
int main(void)
{
cout<<"Dati dimensiunile matricei "<<endl;
cout<<"Dati numarul de linii si de coloane n = ";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cout<<"a["<<i<<","<<j<<"]= ";
cin>>a[i][j];
}
cout<<"Elementele matricei A sunt: "<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
// ===== suma elementelor de pe diagonala principala ======
suma=0;
for(i=1;i<=n;i++)
for(j=1;i<=n;i++)
8

Laborator programarea calculatoarelor (2013)


Limbajul C++
Adrian Runceanu

if(i==j) suma+=a[i][j];
cout<<"Suma elementelor de pe diagonala pricipala este
<<suma<<endl;
// ==== produsul elementelor de pe diagonala secundara =====
produs=1;
for(i=1;i<=n;i++)
for(j=1;i<=n;i++)
if(i+j==n+1) produs*=a[i][j];
cout<<"Produsul elementelor de pe diagonala secundara este
<<produs<<endl;
// ==== minimul elementelor de deasupra diagonalei principale =
min1=32768;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(i<j)
if(min1>a[i][j]) min1=a[i][j];
cout<<"Minimul de deasupra diag. pricipale este "<<min1;
// ===== minimul elementelor de sub diagonala principale ====
min2=32768;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(i>j)
if(min2>a[i][j]) min2=a[i][j];
cout<<"Minimul de sub diag. pricipala este "<<min2;
// == maximul elementelor de deasupra diagonalei principale ===
max1=-32768;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(max1<a[i][j]) max1=a[i][j];
cout<<"Maximul de deasupra diag. pricipale este "<<max1;
// ==== maximul elementelor de sub diagonala principale ====
max2=-32768;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(max2<a[i][j]) max2=a[i][j];
cout<<"Minimul de sub diag. principala este "<<max2;
}

Laborator programarea calculatoarelor (2013)


Limbajul C++
Adrian Runceanu

Problema 5:
Se considera o matrice An*m (1n,m30) cu elemente numere intregi. Sa se
determine linia (liniile) din matrice care contine cele mai multe elemente
nenule.
Solutie:
#include<iostream.h>
int a[30][30],n,m,i,j,max,nr;
int main(void)
{
cout<<"Dati numarul de linii n = ";cin>>n;
cout<<"Dati numarul de coloane m = ";cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cout<<"a["<<i<<","<<j<<"]= ";
cin>>a[i][j];
}
cout<<endl<<"Matricea A are elementele:"<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
max=0;
for(i=1;i<=n;i++)
{
nr=0;
for(j=1;j<=m;j++)
if(a[i][j]!=0) nr++;
if(max<nr) max=nr;
}
for(i=1;i<=n;i++)
{
nr=0;
for(j=1;j<=m;j++)
if(a[i][j]!=0) nr++;
if(max==nr)
cout<<"Linia "<<i<<"
nenule"<<endl;
}
}
10

are

"<<max<<"

elemente

Laborator programarea calculatoarelor (2013)


Limbajul C++
Adrian Runceanu

Probleme propuse spre rezolvare


1. Tablouri unidimensionale(vectori)
1. Se considera un vector x = { x1, x2, x3, , xn }. Sa se scrie un program
C++ care sa modifice vectorul astfel incat in final sa avem :
a) x = { x2, x3, , xn, x1 }
b) x = { xn, x1, x2, x3, , xn-1 }
c) x = { x2, x1, x4, x3,, xn, xn-1 }
2. Se considera doi vectori x si y cu cate n elemente numre intregi fiecare. Sa
se scrie un program C++ care sa calculeze urmatoarele valori :
a) e = (x1+y1) (x2+y2) (xn+yn)
b) e = x1y1 + x2y2 + + xnyn
c) e x12 y1 x22 y 2 xn2 y n
3. Se considera un vector x care are elemente numere reale. Sa se scrie un
program C++ care sa introduca media geometrica intre oricare doua elmente
vecine din vector. Vectorul se va afisa inainte si dupa modificare.
4. Sa se scrie un program C++ care sa realizeze inversarea unui vector :
a) in acelasi vector si fara a utiliza un vector suplimentar
b) intr-un alt vector.
5. Se considera un vector x cu n numere intregi. Sa se copieze intr-un alt
vector y elementele pozitive ale vectorului initial.
6. Se citeste un tablou unidimensional cu n (1n100) componente numere
naturale Se cere sa se construiasca si sa se afiseze un nou vector cu
componentele patrate perfecte ale vectorului initial.
7. Se da un tablou unidimensional cu n (1n100) componente numere
naturale. Sa se verifice daca componentele sunt in ordine crescatoare de la
stanga la dreapta.
8. Sa se rearanjeze elementele unui tablou unidimensional de numere intregi,
astfel incat numerele pare sa apara inaintea numerelor impare. In cadrul
subsecventei de numere pare, respectiv impare, elementele trebuie sa apara
in ordinea in care erau in vectorul initial.
9. Se considera un tablou unidimensional x cu n numere intregi. Se cere sa se
calculeze cle mai mare divizor comun al lor.
10. Se da un tablou unidimensional X cu n numere reale si se cere sa se
modifice astfel incat sa se intercaleze intre oricare doua elemente
consecutive, media lor aritmetica.

11

Laborator programarea calculatoarelor (2013)


Limbajul C++
Adrian Runceanu

2. Tablouri bidimensionale(matrici)
1. Se considera o matrice An*m (1n,m30) avand componente numere
intregi. Se cere sa se calculeze suma componentelor de pe marginea (rama)
matricei.
1 2 3 4

A 10 11 12 5
9 8 7 6

se va afisa suma 1 + 2
Exemplu: Pentru n = 3 si m = 4 si
+ 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 47.
2. Se considera o matrice An*m (1n,m30) avand componente numere
intregi. Sa se determine maximul fiecarei coloane si minimul fiecarei linii.
3. Sa se construiasca o matrice patratica (n=m) de dimensiune n2 (1n30)
cu primele numere pare incepand cu 2.
4. Se considera o matrice An*m (1n,m30) cu elemente numere reale. Sa se
scrie un program C++ care sa schimbe, in aceasta matrice, prima linie cu
ultima linie. Se va afisa apoi matricea modificata.
5. Se considera o matrice An*m (1n,m30) cu elemente numere reale. Sa se
scrie un program C++ care sa schimbe, in aceasta matrice, prima coloana cu
ultima coloana. Se va afisa apoi matricea modificata.
6. Se considera o matrice An*m (1n,m30) cu elemente numere reale. Sa se
scrie un program C++ care sa determine un vector care sa contina
elementele maxime de pe fiecare linie a matricei, iar apoi sa determine cea
mai mica valoare din vectorul construit anterior.
7. Se considera o matrice An*m (1n,m30) cu elemente numere reale. Sa se
scrie un program C++ care sa determine un vector care sa contina
elementele minime de pe fiecare coloana a matricei, iar apoi sa determine cea
mai mare valoare din vectorul construit anterior.

12

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