Informatică, întrebare adresată de FlorentinGabriel1, 8 ani în urmă

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

Anexe:

boiustef: pascal?
FlorentinGabriel1: C ++ te rog
boiustef: ok
FlorentinGabriel1: Dacă știi să rezolvi iti dau coroana
boiustef: vor urma şi altele...
FlorentinGabriel1: Vreau si ex 2 și 3
FlorentinGabriel1: altfel raportez răspunsul
FlorentinGabriel1: Vreau toate răspunsurile

Răspunsuri la întrebare

Răspuns de boiustef
1

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;

   }

}


FlorentinGabriel1: Vreau si ex 2 și 3
boiustef: succese, o seară bună
Răspuns de andriesboss92
2

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;

   }

}


FlorentinGabriel1: mersi mult
andriesboss92: N-ai pentru ce. Spor!
FlorentinGabriel1: mersi
FlorentinGabriel1: Dacă mai postez o intrebare tot de info
FlorentinGabriel1: mai ma ajuți ?
andriesboss92: Am sa incerc, normal. Insa daca nu ma descurc sa o rezolv sunt si alte persoane care te pot ajuta.
FlorentinGabriel1: Dar iti voi da doar 20 pct ca sa o rezolvi
FlorentinGabriel1: E ok ?
andriesboss92: Pai tu pui intrebarea si punctele pe care le consideri necesare pentru ca cineva sa te ajute. Nu iti cere nimeni un anumit numar de puncte ca sa iti rezolve.
Alte întrebări interesante