+ All Categories
Home > Documents > Problema nr

Problema nr

Date post: 03-Jan-2017
Category:
Upload: vunhi
View: 290 times
Download: 1 times
Share this document with a friend
12
Laborator – programarea calculatoarelor (2013) Limbajul C++ Adrian Runceanu 1 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++) {
Transcript
Page 1: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

1

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

Page 2: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

2

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

Page 3: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

3

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;

Page 4: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

4

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

Page 5: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

5

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

Page 6: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

6

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

Page 7: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

7

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

Page 8: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

8

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

Page 9: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

9

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

Page 10: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

10

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<<" are "<<max<<" elemente nenule"<<endl; } }

Page 11: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

11

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) nn yxyxyxe 2

2

2

21

2

1

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.

Page 12: Problema nr

Laborator – programarea calculatoarelor (2013)

Limbajul C++

Adrian Runceanu

12

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.

Exemplu: Pentru n = 3 si m = 4 si

6789

5121110

4321

A

se va afisa suma 1 + 2 + 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.


Recommended