Va rog mult toate problemele cu matrice de mai sus !
dau 100 pct + coroana
PS : Informatica - matrici
Răspunsuri la întrebare
Răspuns:
********** ex 1 ********************
#include <iostream>
using namespace std;
int n, i, j, a[24][24];
int main()
{
cout << "n= "; cin >> n;
for (i=0; i<n; ++i)
{
for (j=0; j<n; ++j)
if (i==j || i+j==n-1) a[i][j]=1;
else a[i][j]=2;
}
for (i=0; i<n; ++i)
{
for (j=0; j<n; ++j)
cout << a[i][j] << " ";
cout << endl;
}
return 0;
}
************************** ex2 *************
#include <iostream>
using namespace std;
int n, i, j, a[24][24];
int main()
{
cout << "n= "; cin >> n;
for (i=0; i<n; ++i)
{
for (j=0; j<n; ++j)
if (i==j || i+j==n-1) a[i][j]=0;
else
{
if ((i<j && i+j<n-1)||(i>j && i+j>n-1))
a[i][j]=1;
else a[i][j]=2;
}
}
for (i=0; i<n; ++i)
{
for (j=0; j<n; ++j)
cout << a[i][j] << " ";
cout << endl;
}
}
Explicație:
***************ex 3 ****************
#include <iostream>
using namespace std;
int n, i, j, a[24][24];
int main()
{
cout << "n= "; cin >> n;
for (i=0; i<n; ++i)
{
for (j=0; j<n; ++j)
if ((i<=j && i+j<=n-1)||(i>=j && i+j>=n-1))
a[i][j]=1;
else a[i][j]=2;
}
for (i=0; i<n; ++i)
{
for (j=0; j<n; ++j)
cout << a[i][j] << " ";
cout << endl;
}
}
Problema 1
Răspuns:
Rezolvare:
#include <iostream>
using namespace std;
int main()
{
unsigned int n;
cin>>n;
unsigned int a[n][n];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j) // diagonala principala
a[i][i]=1;
else
if(j==n-i+1) // diagonala secundara
a[i][j]=1;
else
a[i][j]=2; // restul matricei
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
Explicație:
Ai mai multe posibilitati de rezolvare:
1. Fie faci cum am facut eu mai sus si lucrezi doar cu diagonala principala si secundara astfel incat triunghiurile se vor crea de la sine prin instructiunea:
" else
a[i][j]=2; "
2. Fie lucrezi cu cele 4 zone speciale ale matricei
a. triunghiul de deasupra diagonalei principale si secundare ( zona Nord )
b. triunghiul de sub diagonala secundara si deasupra diagonalei principale ( zona Est )
c. triunghiul de sub diagonala secundara si sub diagonala principala ( zona Sud )
d. triunghiul de sub diagonala principala si deasupra diagonalei secundare ( zona Vest )
In interiorul a doua for-uri i si j, ca sa poti accesa aceste zone speciale, poti folosi urmatoarele conditii de verificare ( if (...) ) :
Pentru NORD: i+j<n+1 si i<j
Pentru SUD: i+j>n+1 si i>j
Pentru EST: i+j>n+1 si i<j
Pentru VEST: i+j<n+1 si i>j
P.S. Aceasta nu este singura metoda de rezolvare.
Problema 2
Aplicand explicatiile de la punctul anterior, codul pentru rezolvarea problemei este:
#include <iostream>
using namespace std;
int main()
{
unsigned int n;
cin>>n;
unsigned int a[n][n];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j) // diagonala principala
a[i][i]=0;
else
if(j==n-i+1) // diagonala secundara
a[i][j]=0;
else
if(i+j<n+1 && i<j) // zona N
a[i][j]=1;
else
if(i+j>n+1 && i>j) // zona S
a[i][j]=1;
else
if(i+j>n+1 && i<j) // zona E
a[i][j]=2;
else
if(i+j<n+1 && i>j) // zona V
a[i][j]=2;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
Problema 3
#include <iostream>
using namespace std;
int main()
{
unsigned int n;
cin>>n;
unsigned int a[n][n];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j) // diagonala principala
a[i][i]=1;
else
if(j==n-i+1) // diagonala secundara
a[i][j]=1;
else
if(i+j<n+1 && i<j) // zona N
a[i][j]=1;
else
if(i+j>n+1 && i>j) // zona S
a[i][j]=1;
else
if(i+j>n+1 && i<j) // zona E
a[i][j]=2;
else
if(i+j<n+1 && i>j) // zona V
a[i][j]=2;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}