contents · pdf fileprobleme propuse : tablouri ... si coloane şi se copiază pe rând...

21
1 Contents Tablouri bidimensionale (matrici) ....................................................................................................................................1 Probleme propuse : TABLOURI BIDIMENSIONALE. ........................................................................................................4 Probleme rezolvate cu matrici ...................................................................................................................................... 12 Tablouri bidimensionale (matrici) Definiţie : Numim tablou o colecţie ( grup, mulţime ordonată ) de date , de acelaşi tip , situate într-o zona de memorie continuă ( elementele tabloului se află la adrese succesive). Iata o matrice careia i-am atribuit cateva numere in mod aleator: Iata cum facem atribuirea in C++: for (i=0; i<n; i++) for (j=0; j<m; j++) cin>>x[i][j]; In aceasta mica aplicatie, vom citi de la tastatura o matrice, si o vom afisa pe ecran. Iata cum facem: #include <iostream.h> void main () { int x[10][10], n, m, i, j;//m=matricea, n, m= nr actual de linii/coloane, i, j=linia, respectiv coloana cout<<”Dati numarul de linii: “; cin>>n; //citim nr de linii cout<<”Dati numarul de coloane: “; cin>>m; //citim nr. de coloane cout<<”Introduceti elementele matricei: “<<endl; for (i=0; i<n; i++) for (j=0; j<m; j++) { cout<<”x["<<i<<"]["<<j<<"]=”; cin>>x[i][j]; //citim elementele matricei } cout<<”Afisam matricea: “<<endl; for (i=0; i<n; i++) for (j=0; j<m; j++)

Upload: phungdung

Post on 18-Feb-2018

218 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

1

Contents Tablouri bidimensionale (matrici) ....................................................................................................................................1

Probleme propuse : TABLOURI BIDIMENSIONALE. ........................................................................................................4

Probleme rezolvate cu matrici ...................................................................................................................................... 12

Tablouri bidimensionale (matrici)

Definiţie : Numim tablou o colecţie ( grup, mulţime ordonată ) de date , de acelaşi tip , situate într-o zona de memorie continuă ( elementele tabloului se află la adrese succesive). Iata o matrice careia i-am atribuit cateva numere in mod aleator:

Iata cum facem atribuirea in C++: for (i=0; i<n; i++) for (j=0; j<m; j++) cin>>x[i][j]; In aceasta mica aplicatie, vom citi de la tastatura o matrice, si o vom afisa pe ecran. Iata cum facem: #include <iostream.h> void main () { int x[10][10], n, m, i, j;//m=matricea, n, m= nr actual de linii/coloane, i, j=linia, respectiv coloana cout<<”Dati numarul de linii: “; cin>>n; //citim nr de linii cout<<”Dati numarul de coloane: “; cin>>m; //citim nr. de coloane cout<<”Introduceti elementele matricei: “<<endl; for (i=0; i<n; i++) for (j=0; j<m; j++) { cout<<”x["<<i<<"]["<<j<<"]=”; cin>>x[i][j]; //citim elementele matricei } cout<<”Afisam matricea: “<<endl; for (i=0; i<n; i++) for (j=0; j<m; j++)

Page 2: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

2

{cout<<x[i][j]<<” “; //si afisam fiecare linie, respectiv coloana, dar cu un mic spatiu intre elemente cout<<endl; //dupa fiecare linie terminata, trebuie sa trecem la alt rand } } Declararea matricei Sintaxa generala: tip nume [marime1][marime2], ( în C++ matricea fiind de fapt un vector de vectori ) , unde: - tip – tipul de bază al componentelor matricei; - nume – numele matricei; - marime 1 – numărul de linii al matricei; - marime 2 – numărul de coloane al matricei; Exemplu: int a[3][4]; //am declarat o matrice care are 7 linii si 8 coloane , MATRICEA PĂTRATICĂ Este un caz particular de matrice pentru care numărul de linii este egal cu numărul de coloane. Diagonala principală Diagonala principală este formată din elementele care îndeplinesc relația i=j numărul liniei este egal cu numărul coloanei pe care se află. Diagonala secundară Diagonala secundară conţine elementele a1n, a2 n-1 , a3 n-2,...,an1 caracterizate de relaţia i+j=n+1. Zona de deasupra diagonalei principale Elementele de deasupra diagonalei principale sunt a12, a13, a14,...,a1n, a23, a24, a25,...,a2n, ...., an-1 n-1, an-1 n. Relaţia dintre coordonate comună tuturor elementelor din această zonă este i<j. Zona de sub diagonala principală Elementele a21, a31, a32,...,a41, a42, a43, .....,an1, an2, an n-1 se află sub diagonala principală şi au între coordonate relaţia i>j. Elemente de baza: diagonala principala si diagonala secundara. Exemplu: Diagonala principala intr-o matrice patratica: 1 0 0 3 5 6 2 0 1 Diagonala secundara intr-o matrice patratica: 1 0 0 3 5 6 2 0 1

Page 3: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

3

** Citirea si afisarea unei matrici bidimensionale se citesc numarul de linii si de coloane ale matricei (m si n). #include<iostream.h> int main() { int m,n,i,j,a [50] [50]; cout<<"numarul de lini si coloane"; cin>>n; for (i=1;i<=n;i++) for(j=1;j<=n;j++) { cout <<"a["<<i<<','<<j<<"]="; cin>>a[i] [j]; cout<<endl; } cout<<”elementele matricei sunt:” <<endl; for (i=1;i<=n;i++) { for (j=1;j<=n;j++) cout<<a[i] [j]<<' '; cout<<endl; } } Se citeste o matrice patratica. Sa se afiseze elementele de pe diagonala secundara,elementele de pe diagonala principala,elementele de sub/desupra diagonalei secundare/principala. #include<iostream.h> #include<stdio.h> int main() { int i,j,n,a[20][20]; cout<<"\n numarul de linii si coloane= "; cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { cout<<"\n a["<<i<<","<<j<<"]="; cin>>a[i][j]; } cout<<"\n afisarea matricei:" <<endl; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<"diagonala principala"<<endl; for(i=1;i<=n;i++) for(j=1;j<=n;j++)

Page 4: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

4

if(i==j) cout<<a[i][j]<<" "; cout <<"\n diagonala secundara"<<endl; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(i+j==n+1) cout<<a[i][j]<<" "; cout<<endl; } cout <<"\n elementele de deasupra diagonalei principale"<<endl; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(i<j) cout<<a[i][j]<<" "; cout<<endl; } cout <<"\n elementele de sub diagonala principala"<<endl; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(i>j) cout<<a[i][j]<<" "; cout<<endl; } Copierea unei matrici.Pentru a copia elementele unei matrici a într-o matrice b, se parcurge matricea a pe linii si coloane şi se copiază pe rând fiecare element în matricea b. #include<iostream > int main() { int a[10][10],b[10][10],i,j,m,n; cout<<"nr de linii ="; cin>>m; cout<<"nr de coloane="; cin>>n; cout<<"matricea a ="; for(i=1;i<=m;i++) for(j=1;j<=n;j++) cin>>a[i][j]; for(i=1;i<=m;i++) for(j=1;j<=n;j++) b[i][j]=a[i][j]; cout<<"matricea obtinuta "<<endl; for(i=1;i<=m;i++) { for(j=1;j<=n;j++) cout<<b[i][j]<<" "; cout<<endl; } } Probleme propuse : TABLOURI BIDIMENSIONALE.

1. Se consideră o matrice nepătratică (nxm) care conţine elemente de tip real. Să se determine cel mai mare, respectiv cel mai mic element al său. Să se afişeze aceste elemente şi indicii lor.

2. Să se înlocuiască elementul maxim de pe fiecare coloană a unei matrice cu suma elementelor de pe coloana respectivă.

Page 5: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

5

3. Fie A o matrice cu elemente numere reale. Să se formeze un şir X definit în felul următor: x1 este maximul

elementelor de pe coloanele 1 şi 2, x2 este maximul elementelor de pe coloanele 3 şi 4, etc. Dacă matricea are un număr impar de coloane, atunci ultimul element al şirului este maximul elementelor de pe ultima coloană a matricei.

4. Se dă o matrice A. Să se introducă indicii elementelor subunitare pozitive în liniile unei matrice B cu două coloane.

5. Se dă o matrice pătratică A. Să se înlocuiască elementele sale situate pe diagonala principală şi pe diagonala secundară cu valoarea 0 (zero).

6. Se dă o matrice pătratică A de dimensiune nxn. Să se formeze o matrice pătratică simetrică B de aceeaşi dimensiune, ale cărei elemente sunt definite prin relaţia: b[i, j] = (a[i, j] + a[j, i] ) / 2

7. Se dă un tablou bidimensional A cu n linii şi m coloane, de componente întregi. Se cere să se elimine din tablou linia p (1 ≤ p ≤ n).

8. Se dă un tablou bidimensional B cu n linii şi m coloane de componente întregi. Să se determine minimul fiecărei coloane şi minimul lui B.

9. Se consideră o matrice pătratică cu n linii care conţine date de tip integer. Să se alcătuiască un program C++care afişează pe ecran, pe o singură linie, suma elementelor pare de pe fiecare coloană.

10. Se consideră un tablou bidimensional (nxm) cu elemente întregi. Să se creeze un program care ordonează crescător elementele situate pe liniile cu număr de ordine par (linia a doua, linia a patra, ş.a.m.d.). La afişare, elementele tabloului vor fi scrise sub forma unui tabel de n linii şi m coloane.

11. Se consideră un tablou bidimensional (nxm) cu elemente întregi. Să se creeze un program care ordonează descrescător elementele situate pe liniile cu număr de ordine impar (prima linie, linia a treia, ş.a.m.d.). La afişare, elementele tabloului vor fi scrise sub forma unui tabel de n linii şi m coloane.

12. Se consideră o matrice pătratică (nxn) ce conţine numere întregi. Realizaţi un program care inversează liniile şi coloanele matricei pentru ca elementele diagonalei principale să fie ordonate crescător.

13. Să se construiască un tablou pătratic de dimensiune n2 (1 ≤ n ≤ 50) cu primele n numere pare începând cu 2. Exemplu: Pentru n=4 se va afişa: 2 4 6 8 10 12 14 16

18 20 22 24 26 28 30 32

**1 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze elementul minim; b) Să se scrie un subprogram care să returneze şirul ordonat crescător.

Exemplu: Date de intrare: 17 23 45 67 12 34 5 90 8 9 Date de ieşire: a) Elementul minim este: 5 b) Şirul ordonat crescător este: 5 8 9 12 17 23 34 45 67 90 **2 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

Page 6: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

6

a) Să se scrie un subprogram care să returneze elementul maxim; b) Să se scrie un subprogram care să determine numărul elementelor prime.

Exemplu: Date de intrare: 7 23 4 17 12 34 5 90 8 9 Date de ieşire: b) Elementul maxim este: 90 c) Sunt 4 numere prime **3 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze suma cifrelor elementelor pare; b) Să se scrie un subprogram care să returneze şirul ordonat descrescător.

Exemplu: Date de intrare : 37 23 4 77 12 34 5 90 18 19 Date de ieşire : a) Suma cifrelor elementelor pare este: 32 b) Şirul ordonat descrescător este: 90 77 37 34 23 19 18 12 5 4 **4 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să determine suma elementelor impare; b) Să se scrie un subprogram care să returneze şirul ordonat descrescător.

Exemplu: Date de intrare: 37 23 4 77 12 34 5 90 18 19 Date de ieşire: a) Suma elementelor impare este:161 b) Şirul ordonat descrescător este: 90 77 37 34 23 19 18 12 5 4

**5 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze suma elementelor pare de pe pozitiile impare; b) Să se scrie un subprogram care să determine numărul elementelor prime din şir.

Exemplu: Date de intrare : 7 23 4 17 12 34 5 90 8 9 Date de ieşire: a) Suma elementelor pare de pe pozitiile impare este: 24 b) În şir sunt 4 numere prime **6 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să determine suma elementelor impare aflate pe poziţiile pare; b) Să se scrie un subprogram care să returneze un mesaj prin care să se comunice dacă un element x citit de la

tastatură există sau nu în şir. Exemplu: Date de intrare:

Page 7: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

7

17 23 45 67 12 34 5 90 8 9 Date de ieşire : b) Suma elementelor impare aflate pe poziţiile pare este: 99 c) Pentru x = 99 se va afişa: „elementul nu este în şir” **7 Se citeşte de la tastatură un şir de 16 numere întregi mai mici decât 100 care reprezintă elementele unei matrice 4x4, separate prin spaţii.

a) Să se afişeze matricea; b) Să se scrie un subprogram care să returneze elementul maxim de pe diagonala principală.

Exemplu: Date de intrare: 13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17 Date de ieşire : a) Matricea este: 13 2 3 66

55 4 3 22 2 3 4 5 1 2 1 17

b) Elementul maxim de pe diagonala principală a matricei este:17 **8 Se citeşte de la tastatură un şir de 16 numere întregi mai mici decât 100 care reprezintă elementele unei matrice 4x4, separate prin spaţii.

a) Să se afişeze matricea; a)Să se scrie un subprogram care să returneze elementele de pe linia a doua din matricea de mai sus, ordonate

crescător. Exemplu: Date de intrare: 13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17 Date de ieşire : a) Matricea este: 13 2 3 66

55 4 3 22 2 3 4 5 1 2 1 17

b) Linia a doua ordonată crescător este: 3 4 22 55

**9 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze suma cifrelor elementului maxim din şir; b) Să se scrie un subprogram care să determine numărul elementelor prime conţinute de şir.

Exemplu: Date de intrare : 37 23 4 77 12 34 5 90 18 19 Date de ieşire: a) Suma cifrelor elementului maxim din fişierul date.in este: 9 b) Numărul elementelor prime conţinute de şir: 4 **10 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze numărul de elemente din şir care au ultima cifră egală cu 3; b) Să se scrie un subprogram care să returneze şirul ordonat descrescător.

Exemplu: Date de intrare :

Page 8: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

8

17 23 45 67 12 34 3 90 8 9 Date de ieşire: a) Numărul de elemente din şir care au ultima cifră egală cu 3 este: 2 b) Şirul ordonat descrescător este: 90 67 45 34 23 17 12 9 8 3 **11 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să determine numărul elementelor prime de două cifre conţinute de şir; b) Să se scrie un subprogram care să returneze şirul ordonat crescător.

Exemplu: Date de intrare : 7 23 4 17 12 34 5 90 8 9 Date de ieşire : a) În fişier sunt 2 numere prime de două cifre b) Şirul ordonat crescător este: 4 5 7 8 9 12 17 23 34 90 **12 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze elementele din şir care aparţin intervalului [a,b] unde a şi b sunt numere întregi mai mici decât 100 citite de la tastatură;

b) Să se scrie un subprogram care să returneze şirul ordonat descrescător. Exemplu: Date de intrare : 37 23 4 77 12 34 5 90 18 19 Date de ieşire : b) Pentru intervalul [36, 80] elementele din şir care aparţin intervalului sunt: 37 77 d) Şirul ordonat descrescător este: 90 77 37 34 23 19 18 12 5 4 **13 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze suma cifrelor impare ale numerelor din şir; b) Să se scrie un subprogram care să returneze şirul ordonat crescător.

Exemplu: Date de intrare: 7 23 4 17 12 33 5 99 8 9 Date de ieşire: a) Suma cifrelor impare ale numerelor din şir este: 57 b) Şirul ordonat crescător este: 4 5 7 8 9 12 17 33 34 99 **14 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze suma elementelor pare de pe poziţiile impare; b) Să se scrie un subprogram care să determine cel mai mare număr prim din şir.

Exemplu: Date de intrare : 37 23 4 77 12 34 5 90 18 19 Date de ieşire: a) Suma elementelor pare de pe poziţiile impare din şir este: 34 b) Cel mai mare număr prim din şir este: 37 **15

Page 9: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

9

Se citeşte de la tastatură un şir de 16 numere întregi mai mici decât 100 care reprezintă elementele unei matrice 4x4, separate prin spaţii.

a) Să se afişeze matricea; b) Să se scrie un subprogram care să determine cel mai mare divizor comun al elementelor situate în colţul stânga

sus şi colţul dreapta jos; Exemplu: Date de intrare: 9 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2 Date de ieşire : a) Matricea este: 9 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2 b) Cel mai mare divizor comun al elementelor situate în colţul stânga sus şi colţul dreapta jos este: 1 **16 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze câte dintre elementele din şir au trei divizori; b) Să se scrie un subprogram care să determine cel mai mare număr neprim din şir.

Exemplu: Date de intrare: 7 23 4 17 12 49 5 81 8 91 Date de ieşire : a) Două elemente din şir au trei divizori b) Cel mai mare număr neprim este: 81 **17 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze elementele din şir care sunt divizibile cu o valoare x citită de la tastatură;

b) Să se scrie un subprogram care să insereze între ultimul şi penultimul element al tabloului media lor aritmetică şi să se afişeze şirul nou creat.

Exemplu: Date de intrare : 7 23 4 17 12 49 5 81 8 9 Date de ieşire: a) Pentru x=4 elementele din şir divizibile cu x citit de la tastatură sunt: 4 12 8 b) Noul şir este: 7 23 4 17 12 49 5 81 8 8.5 9 #include <iostream> using namespace std; int n, i,a[20],x; float m; void creare() { cout<<"Cate elemente din vector citesti?: " ;cin>>n; for (int i=1;i<=n;i++) { cout<<"Elementul "<<i<<endl; cin>>a[i]; } } void scrie() {

Page 10: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

10

for( i=1;i<=n;i++)cout<<a[i]<<" "; } void divizibil() { cout<<"Dati o valoare pentru divizor ";cin>>x; cout<<"\n Numerele din vector divizibile cu o valoare. "<<endl; for( i=1;i<=n;i++) if (a[i]%x==0) { cout<<a[i]<<" ";} } float medie(int a,int b) {m=(a+b)/2;return m;} void inserare() {for( i=1;i<=n-1;i++) cout<<a[i]<<" "; cout<<medie(a[n-1],a[n])<<" "; cout<<a[n]; } int main() { cout<<"citim un vector :"; creare(); cout<<"\n vectorul citit este: "; scrie(); divizibil(); cout<<"\n media intre penultimul si ultimul element:"<<endl; inserare(); return 0; } **18 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze cel mai mare divizor comun al elementelor din şir; b) Să se scrie un subprogram care să insereze între ultimul şi penultimul element al tabloului o valoare x citită de la

tastatură şi să se afişeze şirul nou creat. Exemplu: Date de intrare: 7 23 4 17 12 33 5 99 8 9 Date de ieşire: a) Cel mai mare divizor comun al elementelor din şir este 1 b) Pentru x=41 şirul devine: 7 23 4 17 12 33 5 99 8 41 9 **19 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze câte dintre elementele din şir sunt prime cu o valoare x citită de la tastatură;

b) Să se scrie un subprogram care să calculeze media aritmetică a numerelor din şir pe care să o insereze la jumătatea şirului şi să se afişeze şirul nou creat.

Exemplu: Date de intrare : 7 23 4 17 12 49 5 81 8 91 Date de ieşire: a) Pentru x=3 opt elemente din şir sunt prime cu 3 b) Şirul după inserare: 7 23 4 17 12 29.7 49 5 81 8 91

Page 11: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

11

**20 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să determine elementul minim din şir şi poziţia pe care o ocupă în şirul numerelor date;

b) Să se scrie un subprogram care să determine câte dintre elementele şirului cuprinse într-un interval citit de la tastatură sunt numere pare.

Exemplu: Date de intrare : 7 24 4 17 12 33 5 99 8 9 Date de ieşire: a) Elementul minim: 4 şi ocupă poziţia 3; b) Pentru intervalul [10, 40] două numere sunt pare **21 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.

a) Să se scrie un subprogram care să returneze cel mai mare divizor comun al elementelor din şir; b) Să se scrie un subprogram care să determine elementul maxim din şir şi poziţia pe care o ocupă în şirul

numerelor date. Exemplu: Date de intrare : 6 3 24 27 12 9 15 81 18 21 Date de ieşire: a) Cel mai mare divizor comun al elementelor din şir este 3 b) Elementul maxim: 81 şi ocupă poziţia 8 **22 Se citeşte de la tastatură un şir de 16 numere întregi mai mici decât 100 care reprezintă elementele unei matrice 4x4, separate prin spaţii.

a) Să se afişeze matricea; b) Să se scrie un subprogram care să returneze elementul minim al matricei şi numărul lui de apariţii.

Exemplu: Date de intrare : 1 2 33 6 5 4 3 2 22 3 44 5 1 2 1 2

Date de ieşire: a) Matricea este: 1 2 33 6 5 4 3 2 22 3 44 5 1 2 1 2 b) Elementul minim al matricei este 1 şi numărul lui de apariţii este 3 **23 Se citeşte de la tastatură un şir de 16 numere întregi mai mici decât 100 care reprezintă elementele unei matrice 4x4, separate prin spaţii.

a) Să se afişeze matricea; b) Să se scrie un subprogram care să determine câte dintre elementele matricei sunt numere perfecte (un număr

este perfect dacă este egal cu suma divizorilor săi fara el însuşi).

Exemplu: Date de intrare: 1 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2

Page 12: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

12

Date de ieşire: a) Matricea: 1 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2 b) Există un singur număr perfect (6=1+2+3) **24 Se citeşte de la tastatură un şir de 16 numere întregi mai mici decât 100 care reprezintă elementele unei matrice 4x4, separate prin spaţii.

a) Să se afişeze matricea; b) Să se scrie un subprogram care să determine numărul elementelor matricei egale cu o valoare x dată de la

tastatură. Exemplu: Date de intrare:

1 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2

Date de ieşire: a) Matricea: 1 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2 b) Pentru x=5 se va afişa: 2 **25 Se citeşte de la tastatură un şir de 16 numere întregi mai mici decât 100 care reprezintă elementele unei matrice 4x4, separate prin spaţii.

a) Să se afişeze matricea; b) Să se scrie un subprogram care să returneze suma elementelor de pe diagonala principală a matricei.

Exemplu: Date de intrare:

1 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2

Date de ieşire: a) Matricea: 1 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2 b) Suma elementelor de pe diagonala principală a matricei este: 10 Probleme rezolvate cu matrici Se introduce de la tastatură o matrice pătratica de ordin n. Se cere să se calculeze şi să se afişeze: a) suma tuturor elementelor ; b) suma elementelor de pe diagonala principală. #include<iostream> int x[30][30],n,m; void citire() {int i,j; cout<<"n=";cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {cout<<"x["<<i<<"]["<<j<<"]="; cin>>x[i][j];

Page 13: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

13

} } void afisare() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<<x[i][j]<<" "; cout<<"\n"; } } void suma() { int s=0; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) s=s+x[i][j]; cout<<"suma elementelor din matrice="<<s<<endl; } void suma_diagonala_principala() { int s=0; for(int i=1;i<=n;i++) s=s+x[i][i]; cout<<"suma de pe diagonala principala="<<s<<endl; } int main() { citire(); cout<<"matricea este\n"; afisare(); suma(); suma_diagonala_principala(); } Se introduce de la tastatură o matrice pătrată de ordin n cu elemente numere întregi. Se cere să se calculeze şi afişeze: a) suma elementelor de deasupra diagonalei principale ; b) suma elementelor de sub diagonala secundară. #include <iostream> using namespace std; int x[30][30],n,m; void citire() {int i,j; cout<<"n=";cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {cout<<"x["<<i<<"]["<<j<<"]="; cin>>x[i][j]; } } void afisare() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<<x[i][j]<<" "; cout<<"\n"; } } void deasupra_dp()

Page 14: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

14

{ int s=0; for(int i=1;i<=n-1;i++) {for(int j=i+1;j<=n;j++) {cout<<x[i][j]<<" ";s=s+x[i][j];} cout<<endl; } cout<<"suma elementelor de deasupra diagonalei principale="<<s<<endl; } void sub_ds() {int s=0; for(int i=2;i<=n;i++) {for(int j=n-i+2;j<=n;j++ ) {cout<<x[i][j]<<" ";s=s+x[i][j];} cout<<endl; } cout<<"suma elementelor de sub diagonala secundara="<<s<<endl; } int main() { citire(); cout<<"matricea este\n"; afisare(); cout<<"Elementele de deasupra diagonalei principale sunt:\n"; deasupra_dp(); cout<<"Elementele de sub diagonala secundara sunt :\n"; sub_ds(); } ** Se introduce de la tastatură o matrice cu m linii şi n coloane cu elemente numere întregi . Se cere să se calculeze şi să se afişeze minimul pe o linie l a matricei (l număr natural citit de la tastatură l<=m). #include<iostream> using namespace std; int x[30][30],n,m; void citire() {int i,j; cout<<"Cate linii? ";cin>>n; cout<<"Cate coloane? ";cin>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) {cout<<"x["<<i<<"]["<<j<<"]="; cin>>x[i][j]; } } void afisare() { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cout<<x[i][j]<<" "; cout<<"\n"; } } void minim_l() { int l,min; cout<<"Ce linie cauti? ";cin>>l; if(l<1||l>n){cout<<"eroare";} min=x[l][1]; for(int i=1;i<=m;i++)

Page 15: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

15

if(x[l][i]<min)min=x[l][i]; cout<<"Valoarea minima este : "<<min; } int main() { citire(); cout<<"matricea este\n"; afisare(); minim_l(); } ** Se dă o matrice x, cu n linii şi n coloane, cu elemente întregi. Să se determine numărul elementelor din matrice care sunt < 24 şi se găsesc deasupra diagonalei principale pe linii pare. #include<iostream> int a[30][30],n,m; void citire() {int i,j; cout<<"n=";cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {cout<<"a["<<i<<"]["<<j<<"]"; cin>>a[i][j]; } } void afisare() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<<a[i][j]<<" "; cout<<"\n"; } } void afis_deasupra_diagonala_principala() { for(int i=1;i<=n-1;i++) { for(int j=i+1;j<=n;j++) cout<<a[i][j]<<" "; cout<<"\n"; } } void contor() {int c=0; for(int i=1;i<=n-1;i++) { if(i%2==0) for(int j=i+1;j<=n;j++) if(a[i][j]<24)c++; else cout <<”s-au citit valori mai mici de 24 pentru linii pare” } cout<<"Numarul elementelor <24 de pe liniile pare sunt :"<<c<<endl;} int main() { citire(); cout<<"matricea este\n"; afisare(); cout<<"elementele de deasupra diagonalei principale\n"; afis_deasupra_diagonala_principala();

Page 16: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

16

contor(); } ** Se citeşte o matrice cu n linii şi m coloane şi elemente numere întregi. Se cere: a) Să se determine elementele minime de pe fiecare linie; b) Să se numere elementele pare de pe perimetrul matricei. using namespace std; #include<iostream> int a[30][30],n,m; void citire() {int i,j; cout<<"n=";cin>>n; cout<<"m=";cin>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) {cout<<"a["<<i<<"]["<<j<<"]"; cin>>a[i][j]; } } void minim_linie() {int min; for(int i=1;i<=n;i++) {min=a[i][1]; for(int j=1;j<=m;j++) if(min>a[i][j])min=a[i][j]; cout<<"min pe linia "<<i<<":"<<min<<endl; } } void perimetru() { int nr=0; cout<<"numerele pare din perimetrul matricei sunt : " for(int j=1;j<=m;j++) if(a[1][j]%2==0){cout<<a[1][j]<<" ";nr++;} for(int i=2;i<=n;i++) if(a[i][m]%2==0){cout<<a[i][m]<<" ";nr++;} for(int j=1;j<=m-1;j++) if(a[n][j]%2==0){cout<<a[n][j]<<" ";nr++;} for(int i=2;i<=n-1;i++) if(a[i][1]%2==0){cout<<a[i][1]<<" ";nr++;} cout<<"Total nr pare :"<<nr; } void afisare() { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cout<<a[i][j]<<" "; cout<<"\n"; }} int main() { citire(); afisare(); minim_linie(); perimetru(); }

Page 17: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

17

** Se citeşte o matrice pătrată de dimensiune nxn şi elemente numere întregi. Se cere: a) Să se afişeze numerele prime de pe diagonala principală; b) Să se formeze un vector cu elementele matricei parcurse în ordine pe coloane. using namespace std; #include<iostream> int a[30][30],n,m; void citire() {int i,j; cout<<"n=";cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {cout<<"a["<<i<<"]["<<j<<"]"; cin>>a[i][j]; } } void afisare() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<<a[i][j]<<" "; cout<<"\n"; } } int prim(int n) { if(n<=1) return 0; int i=2; while(i<=n/2) if(n%i==0) return 0; else i++; return 1; } void diagonala() { cout<<"elementele prime de pe diagonala principala\n"; for(int i=1;i<=n;i++) if(prim(a[i][i]))cout<<a[i][i]<<" "; else cout<<"nu s-au citit valori prime pe diagonala principala;" cout<<endl; } void vector() {int b[900],i,j; cout<<"parcurgerea matricii pe coloane\n"; int nr=0; for(j=1;j<=n;j++) for (i=1;i<=n;i++) b[++nr]=a[i][j]; for(i=1;i<=nr;i++) cout<<b[i]<<" "; cout<<"\n";} int main() { citire(); afisare(); diagonala();

Page 18: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

18

vector(); } 5. Se citeşte o matrice cu n linii şi m coloane. Se cere: a) Să se formeze un vector în care se vor reţine elementele maxime de pe fiecare coloană a matricei; b) Să se ordoneze vectorul format la punctul a. using namespace std; #include<iostream> int a[30][30],n,m,b[30]; void citire() {int i,j; cout<<"n=";cin>>n; cout<<"m=";cin>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) {cout<<"a["<<i<<"]["<<j<<"]"; cin>>a[i][j]; } } void maxim_linie() {int max; for(int j=1;j<=m;j++) {max=a[1][j]; for(int i=1;i<=m;i++) if(max<a[i][j])max=a[i][j]; b[j]=max; cout<<"max pe coloana "<<j<<" este :"<<max<<endl; } } void sortare() {int aux; cout<<"elementele maxime sortate:\n"; for(int i=1;i<=m-1;i++) for(int j=i+1;j<=m;j++) if(b[i]>b[j]) {aux=b[i];b[i]=b[j];b[j]=aux;} for(int i=1;i<=m;i++)cout<<b[i]<<" "; cout<<endl; } void afisare() { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cout<<a[i][j]<<" "; cout<<"\n"; }} int main() { citire(); afisare(); maxim_linie(); sortare(); } ** Se dă o matrice x, cu n linii şi n coloane. Să se determine maximul elementelor pare de pe coloana p. #include<iostream> int x[30][30],n,m; void citire()

Page 19: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

19

{int i,j; cout<<"n=";cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) {cout<<"x["<<i<<"]["<<j<<"]"; cin>>x[i][j]; } } void afisare() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<<x[i][j]<<" "; cout<<"\n"; } } void maxim_coloana_p() { int p; cout<<"nr coloanei pentru a afisa valoarea maxima: "; cin>>p; int max=-1; for(int i=1;i<=n;i++) if(x[i][p]%2==0) if(x[i][p]>max) max=x[i][p]; if(max>-1)cout<<"max="<<max<<endl; else cout<<"nu exista nr pare pe coloana p\n"; } int main() { citire(); cout<<"matricea este\n"; afisare(); maxim_coloana_p(); } 7. Se consideră o matrice cu m linii şi n coloane, elementele matricei sunt numere întregi. Să se determine elementul minim de pe o coloană c, dată de la tastatură. #include<iostream> int x[30][30],n,m; void citire() {int i,j; cout<<"m=";cin>>m; cout<<"n=";cin>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) {cout<<"x["<<i<<"]["<<j<<"]"; cin>>x[i][j]; } } void afisare() { for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) cout<<x[i][j]<<" "; cout<<"\n"; } } void minim_coloana_p() {

Page 20: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

20

int c; cout<<"nr coloanei c="; cin>>c; int min=x[1][c]; for(int i=1;i<=m;i++) if(x[i][c]%2==0) if(x[i][c]<min) min=x[i][c]; cout<<"min="<<min<<endl; } int main() { citire(); cout<<"matricea este\n"; afisare(); minim_coloana_p(); } 8. e citeşte un număr natural n. Să se creeze o matrice care conţine: - cifrele numărului pe diagonala principală; - valoarea elementelor rămase în matrice, să conţină valoarea 0. using namespace std; #include<iostream> int a[30][30],n,lin; int nr_cifre(int n) { int nr=0; while(n!=0) {nr++;n=n/10;} return nr; } void matrice_cu_0() {lin=nr_cifre(n); for(int i=1;i<=lin;i++) for(int j=1;j<=lin;j++) a[i][j]=0; } void diagonala(int n) {int nr=0; while(n!=0) {nr++; a[nr][nr]=n%10; n=n/10; } } void afisare() { for (int i=1;i<=lin;i++) {for(int j=1;j<=lin;j++) cout<<a[i][j]<<" "; cout<<"\n"; } } int main() {cout<<"Dati un numar format din min 3 cifre:";cin>>n; matrice_cu_0(); diagonala(n); afisare(); } 9. Se citeşte o matrice cu m linii şi n coloane, cu elemente numere întregi. Să se interschimbe două linii l1 si l2 (date), între ele, folosind un subprogram.

Page 21: Contents · PDF fileProbleme propuse : TABLOURI ... si coloane şi se copiază pe rând fiecare element în matricea b. ... 5 8 9 12 17 23 34 45 67 90 **2

21

#include<iostream> int x[30][30],n,m; void citire() {int i,j; cout<<"m=";cin>>m; cout<<"n=";cin>>n; for(i=1;i<=m;i++) for(j=1;j<=n;j++) {cout<<"x["<<i<<"]["<<j<<"]"; cin>>x[i][j]; } } void afisare() { for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) cout<<x[i][j]<<" "; cout<<"\n"; } } void interschimbare_linii() { int l1,l2,aux; cout<<"linia l1=";cin>>l1; cout<<"linia l2=";cin>>l2; for(int i=1;i<=n;i++) { aux=x[l1][i]; x[l1][i]=x[l2][i]; x[l2][i]=aux;} } int main() { citire(); cout<<"matricea este\n"; afisare(); interschimbare_linii(); afisare(); }