Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Matrice
Matrice
Tipul tablou
tip nume[dim1][dim2][dimk]
tip nume[dim]; =>vector
tip nume[dim1][dim2]; => matrice
Obs:
- toate elementele sunt de acelasi tip = numit tipul de baza (tip)
- spatiul de memorie ocupat = sizeof(tip)*dim1*dim2**dimk
- se aloca spatiu de memorie pentru componenta de pe pozitia 0 (zero)
Matrice= un vector in care fiecare componenta este un vector
Ex:
a[20][50], n, m;
a = matrice = vector cu maxim 20 de componente fiecare fiind un vector cu
maxim 50 de numere intregi
((..max 50 val..),(..maxim 50 val..),..(maxim 50 de valori..)) sunt max 20 de
vectori
accesul la o componenta: nume[indice1][indice2], 0<=indice1<dim1;
0<=indice2<dim2
n=dim1
m=dim2 valori reale
a[0][0]
a[1][0]
a[n-1][0]
a[0][1]
a[1][1]
a[n-1][1]
a[n-1][2]
a[0][2]
a[1][2]
a[0][m-1]
a[1][m-1]
a[n-1][m-1]
MATRICI PATRATICE
-
3. Deasupra DP
i=1 (linia 1) => j=2, 3, 4, 5, , n
i=2
j=2, 4, n
i=3
=> j=4, 5,n
linia i: a[i][1] a[i][2]. a[i][i-1] a[i][i] a[i][i+1]. a[i][n]
for(i=1; i<n; i++)
for(j=i+1; j<=n; j++)
a[i][j]
4. Sub DP
i=1
i=2 => j=1
i=3 => j=1, 2
a[i][n-i+2]..a[i][n]
if(n%2==0) k=n/2+1
else k=n/2
i=1, k
i=1 => j=2,n-1
i=2 => j=3,n-2
i => j=i+1,n-i
for(i=1; i<=k; i++)
for(j=i+1; j<=n-i; j++)
a[i][j]
7.2Zona Sud
j = coloana aceeasi
i=1 (nord)
i=2
i=3
i+linia = n+1 =>
linia
linia
linia
linia
n
n-1
n-2
= n-i+1
j=1 vest
i+coloana = n+1
a+linie = n+1
ai][j] = a[linie][coloana]
int simetricDS
{
int i, j;
for(i=1; i<n; i++)
for(j=1; j<n-i+1; j++)
if(a[i][j] != a[n-j+1][n-i+1]) return 0;
return 1;
}
-
int simetrieMO()
{
]int i, j;
for(i=1l i<=n/2; i++)
for(j=1; j<=n; j++)
if(a[i][j] != a[n-i+1][j]) return 0;
return 1;
}
8.4Simetrie fata de Mediana verticala
int simetrieMV()
{
]int i, j;
for(i=1l i<=n; i++)
for(j=1; j<=n/2; j++)
if(a[i][j] != a[i][n-j+1]) return 0;
return 1;
}
VECTORI DE DIRECTIE
Problema vecinilor lui a[i][j]
a[i-1][j-1]
a[i-1][j]
a[i-1][j+1]
a[i][j-1]
a[i][j]
a[i][j+1]
a[i+1][j-1]
a[i+1][j]
a[i+1][j+1]
1. Cazul 4 vecini
a[i][j-1]
***
a[i-1][j]
a[i][j]
a[i][j+1]
a[i+1][j]
int dx[4]={-1, 0, 1, 0}
int dy[4]={0, 1, 0, -1}
ATENTIE: vectorii de directie se initializeaza in pozitia 0
for(k=0; k<4; k++)
a[i+dx[k]][j+dy[k]]
for(k=0; k<=4; k++)
{
X=i+dx[k];
Y=j+dy[k];
a[X][Y];
}
dx[5]={0, -1, 0, 1, 0}; dy[5]={0, 0, 1, 0, -1}
for(k=0; k<=4; k++)
{
X=i+dx[k];
Y=j+dy[k];
a[X][Y];
}
2. Cazul 8 vecini
a[i-1][j-1]
a[i][j-1]
a[i+1][j-1]
***
a[i-1][j]
a[i][j]
a[i+1][j]
a[i-1][j+1]
a[i][j+1]
a[i+1][j+1]
a[i-2][j-1]
a[i-2]
[j+1]
a[i-1][j-2]
a[i-1]
[j+2]
a[i][j]
a[i+1][j2]
a[i+1]
[j+2]
a[i+2][j1]
a[i+2]
[j+1]
problema labirintului
codificare:
a[i][j] = 1 daca este perete
= 0 daca este liber