Documente Academic
Documente Profesional
Documente Cultură
ASD_C07
diagonala principal (suma indicilor este constanta n+1) este S2 = de calculat sume.
Descrierea algoritmului n pseudocod: citete n,a11,,ann S1 0 *suma elem. de pe diag. principala, initial 0 S2 0 *suma elem. de pe diag. secundara, initial 0 pentru i=1,n repeta S1 S1 + aii S2 S2 + ai,n+1-i scrie S1, S2 Descrierea algoritmului n pseudocod C++:
#include <iostream.h> int n,i,j; float a[10][10], S1, S2; //sumele sunt initializate automat cu 0 void main() { cout<<endl<<"Dati dimeniunea matricei: "; cin>>n; /* for (i=1;i<=n;i++) for (j=1;j<=n;j++){ cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j]; } */ cout<<"Dati elementele matricei:"<<endl; for (i=1;i<=n;i++) for (j=1;j<=n;j++) cin>>a[i][j]; for (i=1;i<=n;i++) //parcurgem ambele diag. simultan { S1 += a[i][i]; S2 += a[i][n+1-i]; } cout<<"Suma elem de pe diag principala: "<<S1; cout<<endl<<"Suma elem de pe diag secundara: "<<S2; }
ASD_C07
Rulare: Dati dimeniunea Dati elementele 1 1 1 1 2 2 1 1 0 1 2 1 0 1 1 2 Suma elem de pe Suma elem de pe matricei: 4 <Enter> matricei:
R2. Enunul problemei: Verificai dac o matrice ptratic este superior triunghiular. Metoda de rezolvare: O matrice este superior triunghiular dac aij = 0, pentru j < i (adic toate elementele de sub diagonala principal sunt nule i elementele eseniale sunt pe i deasupra diagonalei principale). Un exemplu de matrice superior triunghiular este 1 2 3 4 A = 0 5 6 7 . 0 0 8 9 0 0 0 10
ASD_C07
n general, o matrice superior triunghiular are forma a11 a12 a13 ... a1i ... a1n 0 a 22 a23 ... a 2i ... a 2 n 0 0 a33 ... a3i ... a3n A = ... ... ... ... ... ... ... . ... 0 0 aii ... ain 0 ... ... ... ... ... ... ... ... ... ... 0 ... a nn 0 adic aij = 0, pentru orice i = 2...n i j=1,..., i-1. Descrierea algoritmului n pseudocod: citete n,a11,,ann OK adevarat *pp ca matricea este superior tiunghiulara pentru i = 2,n repeta *parcurgem sub diagonala principala pentru j = 1,i-1 repeta *ca sa vedem daca sunt doar zerouri daca aij 0 atunci OK fals *nu este matrice superior triunghiulara break daca OK = adevarat atunci *valoarea finala a var. OK scrie Este matrice superior triunghiulara altfel scrie Nu este matrice superior triunghiulara Descrierea algoritmului n pseudocod C++: #include <iostream.h> int n,i,j,OK; float a[10][10]; void main() { cout<<endl<<"Dati dimeniunea matricei: "; cin>>n; /* for (i=1;i<=n;i++) for (j=1;j<=n;j++){ cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j]; } */ // sau cout<<"Dati elementele matricei:"<<endl; for (i=1;i<=n;i++) for (j=1;j<=n;j++) cin>>a[i][j]; OK = 1; //pp. ca matricea este superior triunghiulara for (i=2;i<=n;i++) //parcurg elem de sub diag principala for (j=1;j<i;j++) if (a[i][j]) { OK = 0; //if (a[i][j]!=0) break; // iese din for-ul dupa j //si i = n+1; pt a se iesi si din for-ul dupa i } if (OK) //sau if (OK==1) cout<<"Matricea data este superior triunghiulara"; else cout<<"Matricea data nu este superior triunghiulara"; } sau folosind si poziiile 0 pe linii i coloane i funcii: 3
ASD_C07
#include <iostream.h> void Citire(float a[10][10], int &n) { cout<<endl<<"Dati dimeniunea matricei: "; cin>>n; cout<<"Dati elementele matricei:"<<endl; for (int i=0;i<n;i++) for (int j=0;j<n;j++) cin>>a[i][j]; } int EsteSuperiorTriunghiulara(float a[10][10], int n){ for (int i=1;i<n;i++) //parcurg elem de sub diag principala for (int j=0;j<i-1;j++) //indicii fiind decalati cu -1 if (a[i][j]) //fata de pseudocod return 0; return 1; } void main() { int n,i,j,OK; float a[10][10]; Citire(a,n); if (EsteSuperiorTriunghiulara(a,n)) cout<<"Matricea data este superior triunghiulara"; else cout<<"Matricea data nu este superior triunghiulara"; }
Rulare:
Dati dimeniunea matricei: 4 <Enter> Dati elementele matricei: 1 1 1 0 0 2 1 1 0 0 3 1 0 0 0 5 Matricea data este superior triunghiulara
sau
Dati dimeniunea matricei: 4 <Enter> Dati elementele matricei: 1 1 1 1 0 2 1 0 2 0 3 1 0 1 0 5 Matricea data nu este superior triunghiulara
R3. Enunul problemei: S se determine transpusa unei matrice dat. Metoda de rezolvare: Pentru matricea A = (aij)i=1,2,, m, j=1,2,, n, matricea transpus este B = At =(bij)i=1, 2,, n, j = 1, 2,, m, cu bji = aij, pentru i=1, 2,, m, j = 1, 2,, n. Aadar, se pot parcurge elementele matricei A (i =1, , m, j = 1, , n) i elementul aij se copiaz n B pe poziia ji. Altfel, pentru calculul fiecrui element din B, bij , i=1, 2,, n, j = 1, 2,, m, se calculeaz ca fiind aji. n continuare se merge pe prima variant. Descrierea algoritmului n pseudocod:
citete m,n,a11,,amn *citim intai dim. matricei, apoi elem pentru i = 1,m,1 repeta pentru j = 1,n,1 repeta *parcurgem elem matriei a bji aij *elem de pe lin i, col j din a vine pe linia j col i in b scrie (bij) pentru i=1,2,,n, j=1,2,,m
ASD_C07
ASD_C07
R4 (suplimentar). Enunul problemei: S se determine puterea p a matricei ptratice A. Metoda de rezolvare: Considerm matricea ptratic A =(aij)i=1,2,, n, j=1,2,, n. A2 = A A A3 = A2 A . Ap = Ap-1A (i este tot matrice ptratic nn). Atunci vom proveda astfel: BA k = 2,,p C BA BC Aadar la baz st nmulirea dintre dou matrice. n general, pentru o matrice A =(aij)i=1,2,, m,
j=1,2,, n
i B = (bij)i=1,2,, n,
j=1,2,, p,
aik bkj ,
k =1
ASD_C07
void RidicarePutere(float a[10][10],int n,int p, float b[10][10]) { //A^p float c[10][10]; int i,j,k; for (i=1;i<=n;i++) for (j=1;j<=n;j++) b[i][j] = a[i][j]; for (k=2;k<=p;k++) { Inmultire(b,a,n,c); for (i=1;i<=n;i++) for (j=1;j<=n;j++) b[i][j] = c[i][j]; } } void main() { Citire(a,n); cout<<"Dati puterea p: "; cin>>p; RidicarePutere(a,n,p,b); cout<<endl<<"Matricea initiala este: "<<endl; Afisare(a,n); cout<<endl<<"Puterea "<<p<<" a matricei initiale este:"<<endl; Afisare(b,n); }
Discutat la tabl: 1. Valoarea minim i maxim dintre valorile unei matrice. 2. Se consider m magazine i n produse i o matrice cu preul fiecrui produs la fiecare magazin. S se determine preul minim al fiecrui produs. De exemplu, se consider dou produse i 3 magazine i preurile date de matricea: 2 1 3 A= 3 4 5 Pentru a determina preul fiecrui produs, parcurgem matricea pe linii (i = 1, 2,, m) i pentru fiecare linie (produs) se determin valoarea minim de pe linia respectiv (ai1, ai2, , ain)). Tema 07 termen maxim 2 sptmni (se va transmite prin e-mail ntr-un fiier electronic sau personal pe foaie scris de mn sau listat cel trziu 7.12.2012): 1) Determinai numrul elementelor nule dintr-o matrice. 2) Determinai media aritmetic a elementelor pozitive dintr-o matrice. 3) Stabilii dac o matrice este simetric sau nu (aij = aji, pentru orice i j). Sugestie: se presupune c matricea este simetric, apoi parcurg elementele de sub diagonala principal i dac elementul curent este diferit de simetricul su atunci nu este simetric. Suplimentar: 4) persoan are de cumprat din m magazine n produse care au preuri diferite. S se descrie un algoritm (n pseudocod sau C/C++) pentru a indica pentru fiecare produs magazinul n care acesta are preul minim. Cunoscnd cantitile ce trebuie cumprate din fiecare produs, s se determine suma minim ce urmeaz a fi cheltuit.