Documente Academic
Documente Profesional
Documente Cultură
Diagonala principala
elementele a[i][i], cu i=1,n
sau a[i][i], cu i=0,n-1
sau
Diagonala secundara
sau
int n, A[100][100];
...
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
if (i==j ) { // A[i][j] }
sau
int n, A[100][100];
...
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < n ; j ++)
if (i==j ) { // A[i][j] }
int n, A[100][100];
...
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
Lectia nr. 12 Tablou bidimensional pătratic Centrul de Excelenta Vaslui
Prof. Nicu Vlad-Laurențiu
if (i>j ) { // A[i][j] }
sau
int n, A[100][100];
...
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < n ; j ++)
if (i>j ) { // A[i][j] }
int n, A[100][100];
...
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
if (i<j ) { // A[i][j] }
sau
int n, A[100][100];
...
for(int j = 0 ; i < n ; j ++)
for(int i = 0 ; i < n ; i ++)
if (i<j ) { // A[i][j] }
II.
Pe diagonala secundară j+i=n+1 sau j+i=n-1
int n, A[100][100];
...
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
if (i+j==n+1 ) { // A[i][j] }
sau
int n, A[100][100];
Lectia nr. 12 Tablou bidimensional pătratic Centrul de Excelenta Vaslui
Prof. Nicu Vlad-Laurențiu
...
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < n ; j ++)
if (i+j==n-1 ) { // A[i][j] }
int n, A[100][100];
...
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
if (i+j > n+1 ) { // A[i][j] }
sau
int n, A[100][100];
...
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < n ; j ++)
if (i+j > n-1 ) { // A[i][j] }
int n, A[100][100];
...
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
if (i+j < n+1 ) { // A[i][j] }
sau
int n, A[100][100];
...
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < n ; j ++)
if (i+j < n-1 ) { // A[i][j] }
Lectia nr. 12 Tablou bidimensional pătratic Centrul de Excelenta Vaslui
Prof. Nicu Vlad-Laurențiu
Zonele:
N:
i<j si j+i<n+1
int n, A[100][100];
...
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
if (i<j si j+i<n+1) { // A[i][j] }
sau
i<j si j+i<n-1
int n, A[100][100];
...
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < n ; j ++)
if (i<j si j+i<n-1) { // A[i][j] }
E: i<j si j+i>n+1
int n, A[100][100];
...
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
if (i<j si j+i>n+1) { // A[i][j] }
sau
i<j si j+i>n-1
int n, A[100][100];
...
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < n ; j ++)
if (i<j si j+i>n-1) { // A[i][j] }
S: i>j si j+i>n-1
Lectia nr. 12 Tablou bidimensional pătratic Centrul de Excelenta Vaslui
Prof. Nicu Vlad-Laurențiu
int n, A[100][100];
...
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
if (i>j si j+i>n+1) { // A[i][j] }
sau
i>j si j+i>n-1
int n, A[100][100];
...
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < n ; j ++)
if (i<j si j+i<n-1) { // A[i][j] }
V: i>j si j+i<n+1
int n, A[100][100];
...
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
if (i>j si j+i<n+1) { // A[i][j] }
sau
i>j si j+i<n-1
int n, A[100][100];
...
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ; j < n ; j ++)
if (i>j si j+i<n-1) { // A[i][j] }
Lectia nr. 12 Tablou bidimensional pătratic Centrul de Excelenta Vaslui
Prof. Nicu Vlad-Laurențiu
V E
a[i][j-1] a[i][j] a[i][j+1]
SV S SE
a[i+1][j-1] a[i+1][j] a[i+1][j+1]
Un element din matrice, în funcție de poziția sa, are 3, 5 sau 8 vecini. Pentru a nu verifica
poziția elementului, se bordează matricea (cu o valoare dependentă de problema care se
rezolvă, se adaugă o linie sus, o linie jos, o coloană la stânga, o coloană la dreapta), astfel
toate elementele vor avea 8 vecini. Deplasarea se va face cu ajutorul a doi vectori care indică
poziția relativă a unui vecin față de elementul a[i][j].
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1, 1,1,0,-1,-1,-1};
int k; //afisam vecinii
for (k=0; k<8; k++)
cout<<a[i+dx[k]][y+dy[k]]<<’\n’;
Observație:
În unele probleme ne putem deplasa numai pe linie și pe coloană, vom avea in acest caz
numai 4 vecini (N, E, S, V).
N
a[i-1][j]
V E
a[i][j]
a[i][j-1] a[i][j+1]
S
a[i+1][j]
cout<<a[i+dx[k]][y+dy[k]]<<’\n’;
Aplicații :
# 779 VeciniPari
Se dă o matrice cu n linii şi m coloane şi elemente numere naturale. Să se determine câte
elemente din matrice au toți vecinii numere pare.
Solutie:
#include <iostream>
using namespace std;
int a[105][105],n,m,i,j,ct=0,p;
int main()
{
cin>>n>>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++)
if(a[i+1][j]%2==0&&a[i-1][j]%2==0&&a[i][j+1]%2==0&&a[i][j-1]%2==0)
ct++;
cout<<ct;
return 0;
}
# 635 Vecini1
Se dă o matrice cu n linii și m coloane și elemente numere naturale. Determinați pentru câte
dintre elementele matricei toți vecinii au valori diferite între ele.
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("vecini1.in");
ofstream fout("vecini1.out");
int n,m,A[105][105];
int main()
{
fin >> n >> m;
for(int i =1 ; i <= n ; ++i)
for(int j = 1 ; j <= m ; ++j)
fin >> A[i][j];
}
fout << cnt << endl;
return 0;
}
#313 Diagonale
Se dă o matrice cu n linii şi n coloane şi elemente numere naturale. Calculaţi diferenţa în
valoare absolută dintre sumele elementelor de pe cele două diagonale.
Solutie:
#include <iostream>
using namespace std;
int n, a[25][25];
int main(){
cin >> n;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
cin >> a[i][j];
int s1 = 0, s2 = 0;
for(int i=1;i<=n;++i)
s1+=a[i][i], s2+=a[i][n-i+1];
if(s1>s2)
cout << s1-s2;
else
cout << s2-s1;
return 0;
}
Lectia nr. 12 Tablou bidimensional pătratic Centrul de Excelenta Vaslui
Prof. Nicu Vlad-Laurențiu
#780 CmmdcSum
Se dă o matrice cu n linii şi n coloane şi elemente numere naturale. Calculaţi cel mai mare
divizor comun al sumei elementelor de deasupra diagonalei principale și al sumei elementelor
de sub diagonala principală.
Soluție:
#include <iostream>
using namespace std;
int n,a[102][102];
int main()
{
cin >> n;
for(int i = 1 ; i <= n ; ++i)
for(int j = 1 ; j <= n ; ++j)
cin >> a[i][j];
int s = 0, t = 0;
for(int i = 1 ; i <= n ; i ++ )
for(int j =1 ; j <= n ; j ++)
if(i > j)
s += a[i][j];
else
if(i < j)
t += a[i][j];
int r;
while(t !=0)
{
r = s % t;
s = t;
t = r;
}
cout << t;
return 0;
}
Lectia nr. 12 Tablou bidimensional pătratic Centrul de Excelenta Vaslui
Prof. Nicu Vlad-Laurențiu
#1749 Zona4
Considerăm o matrice pătratică cu N linii și N coloane. În această matrice sunt definite 4 zone:
Solutie:
#include <iostream>
#define N 201
using namespace std;
int main()
{
int a[N][N], n,z,i,j,S[5]={0};
cin>>n>>z;
for(i=1;i<=n;++i)
for(j=1;j<=n;++j) cin>>a[i][j];
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
{if(i<j && i+j<n+1) S[1]+=a[i][j];///ZN
if(i>j && i+j>n+1) S[3]+=a[i][j];///ZS
if(i<j && i+j>n+1) S[2]+=a[i][j];///ZE
if(i>j && i+j<n+1) S[4]+=a[i][j];///ZV
}
for(i=1;i<=4;++i)
if(z==i) cout<<S[i];
return 0;
}
#794 Serpuire
Se dă o matrice cu n linii şi n coloane şi elemente numere naturale. Să se afișeze elementele
prin parcurgerea șerpuită a matricei, începând din elementul de pe prima linie și prima
coloană, ca în exemplu.
Lectia nr. 12 Tablou bidimensional pătratic Centrul de Excelenta Vaslui
Prof. Nicu Vlad-Laurențiu
4
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16
Se va afisa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Solutie:
#include <iostream>
using namespace std;
int n,i,j,a[26][26],k;
int main(){
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=n;i++){
if(i%2){
for(k=i,j=1;j<=i;k--,j++)
cout<<a[j][k]<<" ";
}
else{
for(k=i,j=1;j<=i;k--,j++)
cout<<a[k][j]<<" ";
}
}
if(n%2==0)
for(i=2;i<=n;i++) {
if(i%2){
for(k=n,j=i;k>=i;k--,j++)
cout<<a[k][j]<<" ";
}
else{
for(k=n,j=i;k>=i;k--,j++)
cout<<a[j][k]<<" ";
}
}
else
for(i=2;i<=n;i++){
Lectia nr. 12 Tablou bidimensional pătratic Centrul de Excelenta Vaslui
Prof. Nicu Vlad-Laurențiu
if(i%2==0){
for(k=n,j=i;k>=i;k--,j++)
cout<<a[k][j]<<" ";
}
else{
for(k=n,j=i;k>=i;k--,j++)
cout<<a[j][k]<<" ";
}
}
}
#210 Chenar
Scrieţi un program care citeşte numărul natural n şi cele n*n elemente ale tabloului şi apoi
afişează elementele chenarului exterior al tabloului, separate prin câte un spaţiu. Chenarul
este parcurs în sensul acelor de ceasornic începând din colţul său stânga-sus. Chenarul este
format din prima şi ultima linie, prima şi ultima coloană a tabloului.
Solutie:
#include <fstream>
using namespace std;
ifstream fin("chenar.in");
ofstream fout("chenar.out");
int a[105][105],n;
int main(){
fin >> n;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
fin >> a[i][j];
for(int j=1;j<=n;++j)
fout << a[1][j] << " ";
for(int i=2;i<=n;++i)
fout << a[i][n] << " ";
for(int j=n-1;j>=1;--j)
fout << a[n][j] << " ";
for(int i=n-1;i>=2;--i)
fout << a[i][1] << " ";
return 0;
}
Lectia nr. 12 Tablou bidimensional pătratic Centrul de Excelenta Vaslui
Prof. Nicu Vlad-Laurențiu
#211 Spirala
Scrieţi un program care citeşte numărul natural n şi cele n*n elemente ale tabloului şi apoi
afişează pe ecran elementele tabloului, separate prin câte un spaţiu, obţinute prin parcurgerea
în spirală în sensul acelor de ceasornic.
Soluție:
#include <fstream>
using namespace std;
int a[100][100];
int i , n , j;
ifstream cin("spirala.in");
ofstream cout("spirala.out");
int main()
{
cin >> n;
for(i = 1 ; i <= n; i++)
for(j = 1; j <= n ; j++)
cin >> a[i][j];