Sunteți pe pagina 1din 5

MATRICE (TABLOURI BIDIMENSIONALE)

Exemplu

a11 a12 a 13

( )
a= a21 a22 a 23 matrice patratica => nr linii=nr coloane
a31 a32 a 33

linii – se parcurg cu ajutorul variabilei contor i= 1..m

coloanele - se parcurg cu ajutorul variabilei contor j= 1..m

In C++ matricile se declara:

int a[100][100]; (s-a declarat matricea a de dimensiunea 100, 100 i.e. (adica) poate avea 99 linii si 99
coloane)

sau int b[][]; (s-a declarant matricea b,iar calculatorul v-a aloca automat spatial necesar liniilor, resp
coloanelor)

Citirea matricelor de la tastatura

- Parcurg toate liniile


for (i=0;i<m;i++)
- Parcurg toate coloanele
for (j=0;j<n;i++)
- Citim elementele matricei de la tastatura
cout<<”a[”<<i<<”][”<<j<<”]=”;
- Alocam o valoare de la tastatura
cin>>a[i][j];

Aplicatie: sa se citeasca si sa se afiseze o matrice cu 3 linii si 4 colane citita de la tastatura

Aplicatii matrice

1.Interschimbarea unei linii cu o coloană.

Fie matricea A pătratică, cu m linii si m coloane, m- citit de la tastatură.

Să se interschimbe în matricea A linia x cu linia y, unde x si y vor fi citite de la tastatură.

Exemplu Fie A matrice cu 3 linii si 3 coloane și x=2, y=3.

1 2 3 1 2 3
(
A= 4 5 6
7 8 9 ) in urma interschimbării obtinem A= 7
( 8 9
4 5 6 )
Tema

Se citeste o matrice patratica de la tastatura. Se cere sa se afiseze elementele matricei in ordinea


rezultata prin parcurgerea acesteia in spirala, incepand cu primul elem din linia 1.

1 2 3
A= 4
( 5 6
7 8 9 )
Sortarea fara comparatii

Exemplu

Fie numerele 5, 35, 21, 13, 50 si 20. Se cere să se sorteze numerele fără a le compara.

Procedeu

Se imparte sirul in clase (10) astfel:

1) Prima clasa contine numerele a caror ultima cifra este 0


2) A 2-a clasa contine numerele a caror ultima cifra este 1
……..

10) A n-a clasa contine numerele a caror ultima cifra este 9

Pentru memorarea numerelor din cele 10 clase se foloseste o matrice cu 10 coloane iar prima linie are
indicele 0.

0 1 2 3 4 5 6 7 8 9
50 21 13 5
20 35

Se rescrie sirul in ordinea in care au fost asezate in coloane: 50,20, 21,13, 5, 35

Impartim din nou sirul de data aceasta dupa cifra zecilor

0 1 2 3 4 5 6 7 8 9
13 20 35 50
5 21

Noul sir va fi: 5,13, 20, 21, 35, 50 => sirul sortat
Observatii

1. Daca p este numarul maxim de cifre a numerelor din sir atunci impartirea numerelor in 10 clase
se va relua de p ori
2. Acest algoritm nu este foarte eficient deoarece consuma foarte multa memorie

Programul C++

#include<iostream>
using namespace std;
int a[100][100],v[100], n,nrc, i,j,k,c,z;

/* z- determina nr de cicluri, verifica nr de cifre ale numerelor in vector, depinde de variabila nrc-
presupunem ca cel mai > nr din v are 4 cifre*/

int main()
{
cout<<"Cate numere sunt de sortat? ";
cout<<"n="; cin>>n;
for(i=1;i<=n;i++)
{
cout<<"v["<<i<<"]="; cin>>v[i];
}

///extragem numerele din vector in matrice


z=1;
for(nrc=1;nrc<=4;nrc++) ///nrc- nr maxim de cifre
{
if(nrc>1)
z=z*10; cout<<"z= "<<z;
for(i=1;i<=n;i++)
{
c=(v[i]/z)%10;
a[0][c]++;
a[a[0][c]][c]=v[i];
}

///reasezam numerele din matrice in vector


k=0;
for(i=0;i<=9;i++)
if(a[0][i])
for(j=1;j<=a[0][i];j++)
{
k=k+1;
v[k]=a[j][i];
}
for(i=0;i<=9;i++)
a[0][i]=0;
}

cout<<"Numerele sortate sunt: "<<endl;


for(i=1;i<=n;i++)
cout<<v[i]<<endl;
}

Aplicatii matrice

1. Se citesc de la tastatura elementele unei matrice, cu n-linii si m-coloane. Sa se afiseze


elementele șa (elementele minime pe linii și maxime pe coloane)

1 2 3
(
A= 7 8 9
4 5 6 )
Elemente șa:

1(linie) si 7 (coloana)

7 si 8

4 si 9

Calcul minim fiecare linie cu ajutorul lui k (k=1…n)

m=a[k][1]

parcurg prima linie j=1….m

daca i=1

daca a[1][j] <m

interschimb cu ajutorul aux => m=a[1][j]

dupa ce am gasit minimul de pe linia 1,se trece la linia urmatoare (k++)

Aplicatia ,,Fereastra”
Fiind data o matrice cu m linii si n coloane, se cere sa se afiseze toate submatricele cu 3 linii si 3 coloane
ale matricei initiale.

Un astfel de procedeu este utilizat atunci cand, de exemplu, o imagine este mult prea mare si ea este
afisata cu ajutorul unei ferestre.

1 2 3 4

( 5 6 7 8
9 10 11 12
13 14 15 16
) 1 2 3
se vor afisa matricele: 5 6
(
2 3 4 5 6 7
)(
7 , 6 7 8 , 9 10 11 si
9 10 11 10 11 12 13 14 15 )( )
6 7 8
( 10 11 12
14 15 16 )

S-ar putea să vă placă și