Sunteți pe pagina 1din 9

Visan Catalin-Laurentiu 411E

Codul in DevC++:
//Programul inmulteste doua matrici citite de la tastatura, afisaza matricea rezultat si determinantul matricii rezultat #include<stdlib.h> #include<stdio.h> #include<conio.h> int rez[100][100];

void afisare(int n, int p, int r[100][100]) {for(int i=0;i<n;i++) {printf("\n"); for(int j=0;j<p;j++) printf(" Rez%d%d: %d\t",i,j,r[i][j]);}}

int det33(int r[100][100]) {int a = r[0][0]*r[1][1]*r[2][2]+r[1][0]*r[2][1]*r[0][2]+r[2][0]*r[0][1]*r[1][2]; int b = r[0][2]*r[1][1]*r[2][0]+r[1][2]*r[2][1]*r[0][0]+r[2][2]*r[0][1]*r[1][0]; return (a-b);}

int main(){ int n,m,p,a[100][100],b[100][100];

printf("matricea 1 este de forma n linii si m coloane\nmatricea 2 este de forma m linii si p coloane"); printf("\nintroduceti n: "); scanf("%d", &n); printf("\nintroduceti m: "); scanf("%d", &m); printf("\nintroduceti p: "); scanf("%d", &p);

for(int i=0;i<n;i++) {printf("\n"); for(int j=0;j<m;j++) {printf(" A%d%d:",i,j); scanf("%d", &a[i][j]);}}

for(int i=0;i<m;i++) {printf("\n"); for(int j=0;j<p;j++) {printf(" B%d%d:",i,j); scanf("%d", &b[i][j]);}}

printf("\nApasa orice tasta pentru a afla produsul AxB"); getch();

for(int i=0;i<n;i++) {for(int j=0;j<p;j++) {for(int k=0;k<m;k++) rez[i][j] += a[i][k]*b[k][j];}}

afisare(n,p,rez);

printf("\nApasa orice tasta pentru a afla determinantul matricei rezultante"); getch();

int c=0; if(n==3&&p==3) {printf("\nDeterminantul este: %d", det33(rez)); c=1;}

if(n==2&&p==2) {printf("\nDeterminantul este: %d", rez[0][0]*rez[1][1] - rez[1][0]*rez[0][1]); c=1;}

if(n==1&&p==1) {printf("\nDeterminantul este: %d", rez[0][0]); c=1;}

if(c==0) printf("\nEroare in calcularea determinantului");

printf("\nApasa orice tasta pentru a iesi"); getch();}

Aplicatia:
-Cazul 1: Doua matrici nepatratice

-Cazul 2: Doua matrici patratice de ordin 1,2 sau 3

Descriere in limbaj natural: Scopul programului:


-Inmulteste doua matrici; -In cazul in care matricea rezultat este patratica de ordin 1,2 sau 3 calculeaza determinantul acesteia.

Programul propriuzis:
-Incepe cu un comentariu care anunta scopul. -Urmeaza includerea bibliotecilor necesare. -Am preferat sa declar global matricea rez*100+*100+ pentru ca orice element al ei sa aiba initial valoarea 0. -Am folosit un subprogram de afisare format din doua structuri for care parcurg matricea si doua printf-uri, unul pentru a schimba randul pe care se afiseaza elementele odata cu terminarea unei linii, iar celalalt pentru afisarea efectiva a elementelor. -Am folosit o functie pentru a calcula determinantul unei matrice de ordin 3, care functioneaza exact dupa formula matematica. -In main am inceput prin declararea a 2 matrici si 3 variabile prin care introduc nr. de linii si de coloane ale matricilor. -In continuare am scris codul necesar introducerii de la tastatura a matricilor si variabilelor, dar si cateva printf-uri care fac aplicatia mai usor de inteles. -Folosind un printf si un getch() cer utilizatorului sa apese o tasta oarecare pentru ca programul sa afiseze matricea rezultat. -Folosesc 3 structuri for pentru a parcurge matricile, a le inmulti si a trece rezultatul in matricea rez*100+*100+. -Apelez subprogramul afisare.

-Folosesc dinou un printf si un getch() pentru a cere utilizatorului sa apese o tasta oarecare inainte de afisarea determinantului. -Am ales sa folosesc o serie de 4 if-uri pentru a verifica daca matricea este patratica si pentru a determina ordinul acesteia. -In functie de ordin unul dintre if-uri va afisa determinantul. In cazul in care matricea nu este patratica, sau are un ordin mai mare de 3 se va afisa mesajulEroare in calcularea determinantului. -Programul se termina cu un tandem printf, getch() care cere apasarea unei taste oarecare pentru a iesi din program.

Schema logica: -Subprogramul de afisare:


Nu i=1
i=i+1

afisare(n,p,r)

i<n

Da

scrie: /n \

Nu j=1 j<p Da

j=j+1

scrie: Rez i j : r[i][j]

-Functia det33:

det33(r)

a= r[0][0]*r[1][1]*r[2][2]+r[1][0]*r[2][1]*r[0][2]+r[2][0]*r[0][1]*r[1][2]

b=r[0][2]*r[1][1]*r[2][0]+r[1][2]*r[2][1]*r[0][0]+r[2][2]*r[0][1]*r[1][0]

det33(r)=a-b

-Main-ul:

START

citeste n,m,p

i=0 i=i+1 i<n

Nu
j<m

Da

j=0

Nu

Da
citeste a[i][j]

j=j+1

i=0

i<n
Da Nu

i=i+1 j=j+1 j<p


Da Nu Da

rez[i][j] += a[i][k]*b[k][j]

Nu

j=0
afisare(n,p,r)

k<m

k=0

k=k+1

c=0
Nu

n==p==3

Da

Scrie: det33(rez)

c=1

n==p==2
Da

Scrie: rez[0][0]*rez[1][1] rez[1][0]*rez[0][1]

c=1

Nu

n==p==1
Da Nu

Scrie: rez[0][0]

c=1

c=0

Da

Scrie: Eroare

Nu

Stop