vreau sa afisez paralelele la o diagonala secundara a unei matrici patratice daca se poare o metoda cat mai simplista si bine explicata de oarece sunt la inceput :)))
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using namespace std;
int main()
{
int n, i, j, a, b, v[30][30];
cin >> n;
for (i=1; i<=n; ++i)
for (j=1; j<=n; ++j)
cin >> v[i][j];
for (i=1; i<=n; ++i)
{
a=i; b=1;
while (a>=1)
{
cout << v[a][b] << " ";
--a; ++b;
}
cout << endl;
}
for (j=2; j<=n; ++j)
{
a=n; b=j;
while (b<=n)
{
cout << v[a][b] << " ";
--a; ++b;
}
cout << endl;
}
return 0;
}
Explicație:
Fie n=4 şi matricea v, la general:
v11 v12 v13 v14
v21 v22 v23 v24
v31 v32 v33 v34
v41 v42 v43 v44
Diagonala secundară este v41 v32 v23 v14,
Vom afişa paralele la ea în direcţia NordEst, adică de jos în sus.
Observăm că la o paralelă, de exemplu v31 v22 v13 indicii elementelor descresc pentru linie şi cresc pentru coloană.
Cu primul for vom afişa paralele (inclusiv şi diagonala secundară) pentru care i porneşte de la 1 la n. Începuturile paralelelor sunt de pe prima coloană, deaceea a ia valoarea lui i, care se va schimba, iar b porneşte cu valoarea 1. Cu un while vom afişa elementele unei diagonale folosind ca indici a şi b, unde a ia valoarea lui i, iar b de la 1 şi afişem elementul, şi pentru deplasare paralel cu diagonala secundară, descreştem a, indicele liniei şi creştem b, indicele coloanei. Condiţia de oprire a ciclului while este ca indicele linie (ridicându-se în sus) să fie mai mare egal cu 1 ( ca să nu iasă din limitele matricei).
Cu al doilea for vom afişa paralelele de sub diagonala secundară. Începuturile paralelelor sunt de pe ultima linie şi raţionamentele sun la fel...
Sper că am fost explicit... Dacă apar întrebări, neclarităţi, adresează-te. Succese !