Sunteți pe pagina 1din 32

Liceul Teoretic “Dunarea” Galati

Lucrare pentru atestarea competentelor


profesionale la informatica

-Tablouri Bidimensionale-

Operatii cu matrice
Cuprins

 Notiuni teoretice……………………………………………………………2
 Matricea patratica..............................................................5
 Operatii cu matrice………………………………………………………….7
 Aplicatii (tablouri bidimensionale)………………………………….11
 Aplicatie C# Inmultirea a doua matrice…………………………20
 Concluzii…………………………………………………………………………30
 Bibliografie……………………………………………………………………..31

1
Notiuni Teoretice

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).
Tablourile sunt variabile compuse (structurate) , deoarece grupează mai
multe elemente. Variabilele tablou au nume , iar tipul tabloului este dat de tipul
elementelor sale. Elementele tabloului pot fi referite prin numele tabloului şi
indicii ( numere intregi ) care reprezintă poziţia elementului în cadrul tabloului.
În funcţie de numărul indicilor utilizaţi pentru a referi elementele tabloului ,
putem întâlni tablouri unidimensionale (vectori) sau multidimensionale ( matricile
sau tablourile bidimensionale ).
Tabloul bidimensional reprezintă o succesiune de locaţii de memorie
recunoscute prin acelaşi identificator şi prin poziţia fiecăreia în cadrul şirului.
Poziţia este dată printr-o suita de două numere pozitive ( indecşi ) , care
reprezintă cele doua dimensiuni ( linie şi coloană ).
Valorile atribuite elementelor tabloului trebuie sa fie de acelaşi tip.

Din punct de vedere conceptual , elementele unui tablou bidimensional


sunt plasate în spaţiu pe doua direcţii . Matricea reprezintă o aplicaţie naturală a
tablourilor bidimensionale.

O matrice este un tabel cu elemente de acelaşi tip, dispuse pe linii şi


coloane . Poziţia unui element pe linie se numeşte şi indice de linie , iar poziţia
elementului pe coloană se mai numeşte şi indice de coloană.
Matricea are m x n elemente . Prin elementul înţelegem elementul care se află pe
linia I şi coloana j.

2
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[7][8];


Am declarat o matrice care are 7 linii si 8 coloane , numerotate de la 0 la 6 ,
respectiv de la 0 la 7 ( există posibilitatea , chiar indicată , de a se numerota de la
1 la 7 ,respectiv de la 1 la 8 ). Fiecare element al matricei este de tipul int. Ele se
adresează astfel : a[0][0],a[0][1] . . . a[6][7].

Limbajul C++ nu ne permite sa declarăm o variabilă tablou cu număr variabil


de componente , posibilitate oferită de alte limbaje. De multe ori nu se cunoaşte
numărul de componente necesar rulării programului. Este necesar să rezervăm un
număr maxim de componente , atât cât este necesar pentru rulare când n este
maxim. La fiecare rulare a programului se cere numărul de componente . De cele
mai multe ori , o parte din ele rămân neutilizate. În memorie , tablourile sunt
memorate pe linii. Asta inseamnă că la început este memorată prima linie , apoi a
doua şi aşa mai departe .

3
Citirea matricei

Citirea elementelor unui tablou nu este posibilă decât prin citirea fiecărui
element . De aceea , la fel ca şi în cazul vectorilor operaţia de citire a matricelor
impune folosirea a două secvenţe ciclice suprapuse. Acestea corespund indicelor
liniei ( i ) , respectiv coloanei ( j ).
Citirea matricei se face având urmatoarea sintaxă generală:
cout<< ‘ ‘ n= ‘ ‘;
cin>>n;
for ( i=1; i<=n; i++)
for ( j=1; j<=n; j++)
{ cout<< “mat [ “ <<i<< ’ , ‘<<j<< ”] = “ ;
cin>>mat[i][j]; }

Afişarea matricei

Afişarea matricei se face având urmatoarea sintaxă :


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

4
Matricea Patratica
O matrice cu proprietatea că numărul de linii este egal cu numărul de coloane se numeşte matrice
pătratică.
Fie matricea a cu n linii şi n coloane în care primul element are coordonatele (1,1) de mai jos:

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.

În practică prelucrarea elementelor se poate face exclusiv pe diagonale respectiv pe zonele identificate

5
mai sus(ex:ordonarea diagonalelor respectiv verificarea simetriei sau a triunghiularităţii) sau se poate
opta pentru o parcurgere a tuturor elementelor matricei şi prelucrarea diferenţiată a elementelor în
funcţie de relaţia dintre coordonate(ex: completarea elementelor cu anumite valori, calculul simultan al
mai multor rezultate obţinute pentru fiecare zonă în parte).

Modalităţi de prelucrare a elementelor în matrice pătratică de dimensiune n

Diagonala principala:
for (i=1;i<=n;i++)
<prelucrează a[i][i]>

Diagonala secundara:
for (i=1;i<=n;i++)
<prelucrează a[i][n-i+1]>

Deasupra diagonalei principale:


for (i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
<prelucrează a[i][j]>

Sub diagonala principala:


for (i=2;i<=n;i++)
for(j=1;j<=i-1;j++)
<prelucrează a[i][j]>

Prelucrarea intr-o singura parcurgere a tuturor zonelor:


for (i=1;i<=n;i++)
for(j=1;j<=n;j++)
if (i==j)
<prelucrează a[i,j] – diag. princ.>
else
if (i+j==n+1)
<prelucrează a[i,j] – diag. sec.>
else
if (i>j)
<prelucrează a[i,j] – deasupra diag. princ.>
else
<prelucrează a[i,j] – sub diag. princ.>

6
OPERAŢII CU MATRICE

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.
întreg i, j, m, n, a[20][20], b[20][20];

citeşte n,m; // citim dimensiunea matricii

pentru i=1 la n executa


pentru j=1 la m executa
citeşte a[i][j]; //citim elementele matricii
sfârşit_pentru;
pentru i=1 la n execută
pentru j=1 la m executa
b[i][j]=a[i][j]; //copiem elementele matricii a în matricea b
sfârşit_pentru;
sfârşit_pentru;
pentru i=1 la n execută
pentru j=1 la m executa
scrie b[i][j]; //afişăm elementele matricii b
sfârşit_pentru;
sfârşit.

#include <iostream>
int a[10][10],b[10][10],i,j,m,n;
using namespace std;

int main()
{
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++)

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

return 0;
}

Suma elementelor unei matrici

Pentru a calcula suma elementelor unei matricii parcurgem matricea şi într-o variabilă s adunăm pe rând
fiecare element

#include <iostream>
int a[100][100],i,j,n,m,s=0;
using namespace std;

int main()
{
cout<<"Dati numarul de linii !";
cin>>n;
cout<<"Dati numarul de coloane !";
cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];

for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
s=s+a[i][j];

cout<<"Suma elementelor matricei este : "<<s;

return 0;
}

Media aritmetică a elementelor unei matrici

Algoritmul se bazează pe algoritmul de calcul a sumei elementelor unei matrici, doar că la sfârşit vom
împărţi suma la numărul de elemente a matricii.

#include <iostream>
#include <conio.h>
int a[10][10],b[10][10],i,j,m,n,s=0,nr=0;

8
float med;
using namespace std;
int main()
{
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++)
{ s=s+a[i][j];
nr++; }
med=s/nr;
cout<<"media aritmetica= "<<(float)med;

return 0;
}

Căutarea unui element într-o matrice


Pasul 1.Se citeşte matricea
Pasul 2.Se citeşte elementul căutat
Pasul 3. Se parcurge matricea şi se compară elementul căutat cu toate elementele matricii, dacă a fost
găsit unei variabile „găsit” îi atribuim valoare de adevăr, şi afisăm „poz” poziţia elementului în vector.
Pasul 4. Dacă variabila găsit este falsă atunci afişăm un mesaj,"nu este în matrice ".

#include <iostream>
#include <conio.h>
int a[10][10], i,j,m,n,x,nr=0;
using namespace std;
int main(){
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];
cout<<"x= ";
cin>>x;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(x==a[i][j])

9
nr++;
if(nr==0)
cout<<"NU EXISTA ";
else
cout<<"EXISTA";

return 0;
}

10
APLICAŢII-Tablouri bidimensionale

1. Fie o matrice a cu m linii şi n coloane şi elemente numere întregi. Numim “matrice perfect oglindită”,
matricea obţinută din a prin aplicarea urmatoarelor operaţii:
-se inversează liniile între ele ( se scriu de sus în jos liniile citite de jos în sus);
-se inversează elementele fiecărei linii între ele (se scriu de la stânga la dreapta elementele liniei citite
de la dreapta la stânga);
-fiecărui element i se inversează cifrele (elementele sunt înlocuite cu oglinditele lor);

Numim “matrice perfect oglindită” o matrice a cărei “oglindă” este identică cu matricea. Realizaţi un
program care, pentru o matrice dată a ,verifică dacă este “perfect oglindită” , afişând un mesaj
corespunzător.

#include <iostream>
#include <conio.h>

using namespace std;


int oglindit (int x)
{int og=0;
while(x!=0)
{og=og*10+x%10;
x=x/10;
}
return og;}

int main()
{
int n,m,a[30][30],i,j,k,nr1=0,nr2=0,nr=0,ok=0;
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];
nr++;
}

for(i=1;i<=m;i++)
for(j=1;j<=n;j++)

11
if(oglindit(a[i][j])==a[i][j])
ok++;
k=1;
while(k<=m)
{ for(i=1;i<=n/2;i++)
for(j=n;j>=n/2+1;j--)
if(a[k][i]==a[k][j])
nr1++;
k++;}
k=1;
while(k<=m/2)
{ for(i=1;i<=n;i++)
if(a[k][i]==a[m+1-k][i])
nr2++;
k++;}
if(n%2!=0 && m%2!=0)
if((2*nr1==(n*m)-m) && (2*nr2==(n*m)-n) && ok==nr)
cout<<"matrice perfect oglindita";
else
cout<<"nu";

else
if(n%2==0 && m%2==0)
if((2*nr1==m*n ) && (2*nr2==n*m) && ok==nr)
cout<<"matrice perfect oglindita";
else
cout<<"nu";
if(n%2!=0 && m%2==0)
if((2*nr1==(n*m)-m)&&(2*nr2==n*m) && ok==nr)
cout<<"matrice perfect oglindita";
else
cout<<"nu";
if(n%2==0 && m%2!=0)
if((2*nr1==m*n ) && (2*nr2==(n*m)-n) && ok==nr)
cout<<" matrice perfect oglindita";
else
cout<<" matricea nu este oglindita ";

return 0;
}

2. Se citeşte de la tastatură un număr natural n (1≤ n ≤ 6) . Să se construiască un tablou pătratic cu n linii


şi n coloane având ca elemente primii n*n termini ai şirului lui Fibonacci .

#include <iostream>
#include <conio.h>

12
using namespace std;
int main()
{
int n, a[100][100],i,j,x,y,z;
cout<<"n=";
do
{ cin>>n;
}
while(!(n>=1&&n<=6));
x=y=1;
z=x+y;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{ a[i][j]=x;
x=y;
y=z;
z=x+y;
}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}

3.Pentru o matrice dată a cu m linii şi n coloane şi elemente întregi, să se elimine liniile şi coloanele la
intersecţia cărora se află valoarea 0, fără a folosi altă matrice . Programul va tipări matricea rezultată
după eliminări, specificând şi noile dimensiuni ale acesteia.

#include <iostream>
#include <conio.h>

using namespace std;


int main()
{
int n,m,a[10][10],i,j,k,l;
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];
cout<<"Matricea noastra : ";
for(i=1;i<=m;i++){
cout<<endl;
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
}

13
cout<<endl<<endl;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(a[i][j]==0)
{ for(k=1;k<=m;k++)
for(l=j+1;l<=n;l++)
a[k][l-1]=a[k][l];
n--;
for(k=i+1;k<=m;k++)
for(l=1;l<=n;l++)
a[k-1][l]=a[k][l];
m--;
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(a[i][j]==0)
{ for(k=1;k<=m;k++)
for(l=j+1;l<=n;l++)
a[k][l-1]=a[k][l];
n--;
for(k=i+1;k<=m;k++)
for(l=1;l<=n;l++)
a[k-1][l]=a[k][l];
m--;
}
cout<<"matrice obtinuta :";
cout<<endl;
if(n==0||m==0)
{cout<<"matrice nula"<<endl;
n=m=0;}
for(i=1;i<=m;i++)
{ for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<"dimensiunile matricei sunt : "<<m<<"*"<<n;
return 0;
}

4.Fiind dată o matrice a cu m linii si n coloane si elemente numere întregi , scrieţi un program care
construieşte transpusa acesteia . Programul va afişa matricea transpusă dar si dimensiunile ei.

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int a[10][10],b[10][10],i,j,m,n;

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

cout<<"Matricea noastra : ";


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

cout<<endl<<endl;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
b[j][i]=a[i][j];
cout<<"matricea transpusa este : ";
cout<<endl;

for(i=1;i<=n;i++)
{ for(j=1;j<=m;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
cout<<"cu dimensiunile : "<<n<<"*"<<m;
return 0;
}

5.Se citeşte de la tastatura un numar natural n, si apoi o matrice a cu n linii si n coloane si elmente
numere intregi. Scrieţi un program care realizeaza interschimbari de linii sau coloane necesare , astfel
încât elementele de pe diagonala principala , citite de sus in jos, să fie sortate crescător.

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int i,j,n,a[15][15],ok,aux;
cout<<"dimensiune matrice =";
cin>>n;
cout<<"matricea a=";
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
cout<<"Matricea noastra : ";

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

cout<<endl<<endl;

do
{ok=1;
for(i=1;i<n;i++)
if(a[i][i]>a[i+1][i+1])
{ for(j=1;j<=n;j++)
{ aux=a[i][j];
a[i][j]=a[i+1][j];
a[i+1][j]=aux;
}
for(j=1;j<=n;j++)
{ aux =a[j][i];
a[j][i]=a[j][i+1];
a[j][i+1]=aux;
}
ok=0;

} }
while(!ok);
cout<<"matricea obtinuta : ";
cout<<endl;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;}

return 0;
}

6.Se dă o matrice a cu m linii si n coloane ale carui elemente sunt cifre . Să se calculeze suma numerelor
corespunzătoare fiecarei linii.

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int a[10][10],i,j,m,n,x,s=0;
cout<<"nr de linii =";
cin>>m;
cout<<"nr de coloane =";
cin>>n;

16
cout<<"matricea a =";
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
cout<<"Matricea noastra : ";
for(i=1;i<=m;i++){
cout<<endl;
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";}

for(i=1;i<=m;i++)
{ x=0;
for(j=1;j<=n;j++)
x=x*10+a[i][j];
s=s+x;
}
cout<<endl;
cout<<"s= "<<s;

return 0;
}

7.Se citeste de la tastatura o matrice a cu m linii si n coloane si elemente numere întregi . Să se afişeze
numărul liniilor matricii , care au elementele în ordine strict crescătoare (citite de la stânga la dreapta ).

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int a[20][20],n,m,i,j,ok,nr=0;
cout<<"nr de linii =";
cin>>n;
cout<<"nr de coloane =";
cin>>m;
cout<<"matricea a este =";
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
cout<<"Matricea noastra : ";
for(i=1;i<=n;i++){
cout<<endl;
for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";}
cout<<endl;

for(i=1;i<=n;i++)
{ ok=1;
for(j=1;j<=m-1;j++)
if(a[i][j]>a[i][j+1])
ok=0;
if(ok==1)

17
nr++;
}
cout<<"nr de linii ordonate este "<<nr<<" ";

return 0;
}

8.Se consideră un tablou bidimensional (nxn) 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,
s.a.m.d.).

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int n,a[30][30],m,i,j,aux;
cout<<"nr de linii =";
cin>>n;
cout<<"nr de coloane =";
cin>>m;
cout<<"matricea a =";
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
cout<<"Matricea noastra : ";
for(i=1;i<=n;i++){
cout<<endl;
for(j=1;j<=m;j++)
cout<<a[i][j]<<" "; }
cout<<endl;
for(i=1;i<=n;i=i+2)
{ aux=0;
for(j=1;j<=m-1;j++)
if(a[i][j]<a[i][j+1])
{ aux=a[i][j];
a[i][j]=a[i][j+1];
a[i][j+1]=aux;
}
}
cout<<"matricea obtinuta :";
cout<<endl;
for(i=1;i<=n;i++)
{ for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}

return 0;

18
}

9.O matrice patratică cu n linii si m coloane se numeşte triunghiulară superior dacă toate elementele
aflate deasupra diagonalei principale sunt nule. Se citeşte de la tastatura o matrice A cu n linii si n
coloane . Realizaţi un program care verifică dacă matricea este triunghiulară superior, tipărind un mesaj.

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int n,i,j,a[20][20],nr1=0,nr2=0;
cout<<"nr de linii si de coloane =";
cin>>n;
cout<<"matricea a =";
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];

cout<<"Matricea noastra : ";

for(i=1;i<=n;i++){
cout<<endl;
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
}
cout<<endl;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i<j)
nr1++;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i<j && a[i][j]==0)
nr2++;
if(nr1==nr2)
cout<<"MATRICEA ESTE TRIUNGHIULARA SUPERIOR";
else
cout<<"MATRICEA NU ESTE TRIUNGHIULARA
SUPERIOR";

return 0;
}

19
Aplicatie C# Matrice

20
Form1(proprietati)

Text Inmultirea matricelor

Label1(proprietati)Text Imultirea matricelor

ForeColor red

Font...

Panel1

Label3(proprietati)

Text Matricea1

Label2(proprietati)

Text Numarul de linii

Label4(proprietati)

Text Numarul de coloane

TextBox1(proprietati)

TextBox1(metode)

privatevoid textBox1_TextChanged(object sender, EventArgs e)

21
textBox2.Focus();

TextBox2(proprietati)

TextBox2(metode)

privatevoid textBox2_TextChanged(object sender, EventArgs e)

if(textBox2.Text!=””)

m = Convert.ToInt32(textBox2.Text);

m = int.Parse(textBox1.Text);

string ceva = m.ToString();

textBox3.Text = ceva;

textBox3.Enabled = false;

textBox4.Focus();

Panel2

Label5(proprietati)

Text Matricea2

Label6(proprietati)

Text Numarul de linii

Label7(proprietati)

Text Numarul de coloane

TextBox3(proprietati)

TextBox4(proprietati)

Button1(proprietati)

22
Text citeste

Button2(metode)

privatevoid button1_Click(object sender, EventArgs e) //primul “Citeste”

panel3.Visible = true ;

panel4.Visible = true;

button2.Visible = true;

m = Convert.ToInt32(textBox2.Text);

m = int.Parse(textBox1.Text);

string ceva = m.ToString();

textBox3.Text = ceva;

n = Convert.ToInt32(textBox1.Text);

n = int.Parse(textBox1.Text);

p = Convert.ToInt32(textBox4.Text);

p = int.Parse(textBox4.Text);

label3.Visible = true;

//citirea matricelor

for (int i = 1; i <= n; i++)

for (int j = 1; j <= m; j++)

string name = "caseta1_" + i.ToString() + "_" + j.ToString();

23
//Console.WriteLine(name);

//Console.ReadLine();

txt1[i, j] = newTextBox();

txt1[i, j].Name = name;

txt1[i, j].Location = newPoint(j * 50, i*50);

txt1[i, j].Size = newSize(40, 40);

panel3.Controls.Add(txt1[i, j]);

for (int i = 1; i <= m; i++)

for (int j = 1; j <= p; j++)

string name = "caseta2_" + i.ToString() + "_" + j.ToString();

// Console.WriteLine(name);

//Console.ReadLine();

txt2[i, j] = newTextBox();

txt2[i, j].Name = name;

txt2[i, j].Location = newPoint(j * 50, i * 50);

txt2[i, j].Size = newSize(40, 40);

panel4.Controls.Add(txt2[i, j]);

24
}

Panel3(proprietati)

Visible=false

Label8(proprietati)

Text Matricea unu este

Panel4(proprietati)

Visible=false

Label9(proprietati)

Text Matricea doi este

Button2(proprietati)

Text citeste

Visible=false

Button2(metode)

privatevoid button2_Click(object sender, EventArgs e) //al doilea “Citeste”

int s;

for (int i = 1; i <= n; i++)

for (int j = 1; j <= m; j++)

25
{

a[i, j] = Convert.ToInt32(txt1[i, j].Text);

txt1[i, j].Dispose();

for (int i = 1; i <= m; i++)

for (int j = 1; j <= p; j++)

b[i, j] = Convert.ToInt32(txt2[i, j].Text);

txt2[i, j].Dispose();

for (int i = 1; i <= n; i++)

for (int j = 1; j <= p; j++)

s = 0;

for (int k = 1; k <= m; k++)

s = s + a[i, k] * b[k, j];

prod[i, j] = s;

//afisarea

26
panel3.Visible = false;

panel4.Visible = false;

button2.Visible = false;

panel5.Visible = true;

for (int i = 1; i <= n; i++)

for (int j = 1; j <= p; j++)

Console.Write(prod[i, j] + " ");

string name = "Caseta3_" + i.ToString() + "_" + j.ToString();

txt3[i, j] = newTextBox();

txt3[i, j].Name = name;

int c = prod[i, j];

string ceva = c.ToString();

txt3[i, j].Text = ceva;

txt3[i, j].Location = newPoint(j * 50, i * 50);

txt3[i, j].Size = newSize(40,40);

txt3[i, j].Enabled = false;

panel5.Controls.Add(txt3[i, j]);

Console.WriteLine();

27
}

Panel5(proprietati)

BackColor

Visible=false

Label10(proprietati)

Text Produsul celor doua matrice este

Button3(proprietati)

Text OK

Visible=false

Button3(metode)

privatevoid button3_Click(object sender, EventArgs e) //butonul “OK”

panel5.Visible = false;

textBox1.Text = "";

textBox2.Text = "";

textBox3.Text = "";

textBox4.Text = "";

textBox1.Focus();

for (int i = 1; i <= n; i++)

for (int j = 1; j <= p; j++)

txt3[i, j].Dispose();

28
Mai trebuiesc declarate variabilele globale

publicstaticint n, m, p;

int[,] a=newint[10,10];

int[,] b=newint[10,10];

int[,] prod = newint[10, 10];

TextBox[,] txt1 = newTextBox[10, 10];

TextBox[,] txt2 = newTextBox[10, 10];

TextBox[,] txt3 = newTextBox[10, 10];

29
Concluzii

Tablourile bidimensionale (sau matricele) sunt foarte utile in


rezolvarea unor probleme de matematica precum cele de sisteme de
ecuatii, cat si in probleme legate de teoria grafurilor, la informatica.
In matrice putem initializa si caractere/cuvinte/propozitii deci ne
ajuta si la problemele de informatica de tip sir de caractere.
Acestea fiind spuse, cunoasterea folosirii tablourilor bidimensionale
reprezinta o necesitate pentru rezolvarea multor probleme de
informatica si matematica.

Bibliografie

http://matrici.wikispaces.com/

30
http://matrici.wikispaces.com/+No%C5%A3iuni+teoretice

http://matrici.wikispaces.com/Matricea+p%C4%83tratic%C4%83

http://matrici.wikispaces.com/Opera%C5%A3ii+matrici

http://matrici.wikispaces.com/Aplica%C5%A3ii+-+Matrici

31