👤

Va rog mult toate problemele cu matrice de mai sus !
dau 100 pct + coroana
PS : Informatica - matrici​


Va Rog Mult Toate Problemele Cu Matrice De Mai Sus Dau 100 Pct Coroana PS Informatica Matrici class=

Răspuns :

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;

   }

}