III.2 testul 2 (antrenament) 2021

Subiectul al III-lea – Exerciţiul 2

     Scrieți un program C/C++ care citește de la tastatură un număr natural, n (n∈[2,20]), și construiește în memorie un tablou bidimensional cu n linii și n coloane, astfel încât fiecare linie a sa are proprietățile:
·            Elementul situat pe diagonala secundară are valoarea n;
·            Începând de la diagonala secundară, spre stânga, elementele formează             un șir strict descrescător de numere consecutive, iar începând de la   diagonala secundară spre dreapta, elementele formează tot un șir strict      descrescător de numere consecutive.
Programul afișează pe ecran tabloul construit, fiecare linie a tabloului pe câte o linie a ecranului, cu elementele aflate pe aceeași linie separate prin câte un spațiu.
Exemplu: dacă n = 5 se afișează pe ecran tabloul alăturat.

  

  • variabilă de tip tablou bidimensional, declarată conform cerinței

int a[21][21];

  • se parcurge matricea și se verifică poziționarea elementelor în funcție de diagonala secundară

for(i=1;i<=n;i++)

        for(j=1;j<=n;j++)

  • dacă elementul se află deasupra diagonalei secundare(i+j<n+1), acesta devine i+j-1

  if(i+j<n+1)

       a[i][j]=i+j-1;

  • dacă elementul se află pe diagonala secundară(i+j=n+1), acesta devine n

else if(i+j==n+1)

        a[i][j]=n;

  • dacă elementul se află sub diagonala secundară, acesta devine valoarea elementului aflat în stânga lui – 1

else a[i][j]=a[i][j-1]-1;

  • se afișează matricea

for(i=1;i<=n;i++){

        for(j=1;j<=n;j++)

            cout<<a[i][j]<<” „;

        cout<<endl;

    }

#include <iostream>

using namespace std;

int main()
{
    int a[21][21],i,j,n;
    cin>>n;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(i+j<n+1)
            a[i][j]=i+j-1;
            else if(i+j==n+1)
                a[i][j]=n;
                else a[i][j]=a[i][j-1]-1;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}