Consturirea unor matrice



Problema 1

Scrieti un program care citeste de la tastatura doua numere naturale nenule n si m si care construieste in memorie si apoi afiseaza o matrice A cu n linii (numerotate de la 1 la n) si m coloane (numerotate de la 1 la m) cu proprietatea ca fiecare element Aij memoreaza cea mai mica valoare dintre valorile indicilor i şi j ( 1≤i≤n, 1≤j≤m ).


#include <iostream>

using namespace std;

int main()
{
   int mat[21][21], n, m;
   cin>>n>>m;
   for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
         if(i<j)
            mat[i][j]=i;
         else //j este mai mic sau egal
            mat[i][j]=j;
   for(int i=1;i<=n;i++)
   {
      for(int j=1;j<=m;j++)
         cout<<mat[i][j]<<' ';
      cout<<endl;
   }
}



Problema 2

Scrieti un program care citeste de la tastatura un numar natural n si construieste in memorie o matrice cu n linii si n coloane ale carei elemente vor primi valori dupa cum urmeaza:
- elementele aflate pe diagonala principala a matricei vor primi valoarea 0;
- elementele de pe prima coloana, cu exceptia celui aflat pe diagonala principala vor primi valoarea n;
- elementele de pe a doua coloana, cu exceptia celui aflat pe diagonala principala vor primi valoarea n-1;

- elementele de pe ultima coloana, cu exceptia celui aflat pe diagonala principala vor primi valoarea 1;


#include <iostream>

using namespace std;

int main()
{
    int n, i, j, mat[24][24];
    cin>>n;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
        if(i==j) 
            mat[i][j]=0; //daca este pe diagonala principala
        else // respectam regula
            mat[i][j]=n-j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            cout<<mat[i][j]<<' ';
        cout<<endl;
    }
}



Problema 3

Scrieti un program care citeste de la tastatura doua numere naturale nenule n şi m şi construieste in memorie o matrice cu n linii şi m coloane astfel incat, parcurgand tabloul linie cu linie de sus in jos si fiecare linie de la stanga la dreapta, sa se obtina sirul primelor n*m patrate perfecte impare , ordonat strict crescator.


#include <iostream>

using namespace std;

int main()
{
    int n, m, mat[24][24], patrat=1;
    // in variabila patrat ne vom pastra radacinile patrate impare
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
           mat[i][j]=patrat*patrat; //construim patratul
           patrat=patrat+2; //crestem cu 2 pentru a le lua doar pe cele impare
        }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            cout<<mat[i][j]<<' ';
        cout<<endl;
    }
}



Problema 4

Scrieti un program care citeste de la tastatura un numar natural nenul n cu cel mult 9 cifre si construieste un tablou bidimensional patratic cu dimensiunea egala cu numarul de cifre ale lui n, completata cu cifrele lui n. Elementele de pe prima coloana vor fi egale cu cifra unitatilor lui n, elementele de pe a doua coloana vor fi egale cu cifra zecilor, etc.


#include <iostream>

using namespace std;

int main()
{
    int n, a[9][9], i, j, c[9];
    cin>>n;
    int nrc=0; //a catea cifra este de la dreapta la stanga
    while(n)
    {
        c[nrc]=n%10; //memoram cifrele intr-un vector
        n/=10;
        nrc++;
    }
    for(j=0;j<nrc;j++)
        for(i=0;i<nrc;i++)
        a[i][j]=c[j]; //elementul de pe coloana j va corespunde cifrei a j-a, fiindca le-am memorat de la stang la dreapta
    for(i=0;i<nrc;i++)
    {
        for(j=0;j<nrc;j++)
            cout<<a[i][j]<<' ';
        cout<<endl;
    }
}
/*
   n=1359

   matricea este:
   9 5 3 1
   9 5 3 1
   9 5 3 1
   9 5 3 1
*/



Problema 5

Scrieti un program care citeste de la tastatura un numar natural n cu exact 5 cifre şi construieste in memorie o matrice cu 6 linii si 6 coloane ale carei elemente vor primi valori dupa cum urmeaza:
- elementele aflate pe diagonala principala sunt toate nule;
- elementele de pe linia 1, aflate deasupra diagonalei principale precum si elementele de pe coloana 1, aflate sub diagonala principala au toate valoarea egala cu cifra unitatilor lui n;
- elementele de pe linia 2, aflate deasupra diagonalei principale precum si elementele de pe coloana 2, aflate sub diagonala principala au toate valoarea egala cu cifra zecilor lui n;

- elementele de pe linia 6, aflate deasupra diagonalei principale precum si elementele de pe coloana 6, aflate sub diagonala principala au toate valoarea egala cu cifra zecilor de mii a lui n;


#include <iostream>

using namespace std;

int main()
{
    int n, a[7][7], i, j, c[6];
    cin>>n;
    int nrc=0; //a catea cifra este de la dreapta la stanga
    while(n!=0)
    {
        nrc++;
        c[nrc]=n%10; //memoram cifrele intr-un vector
        n/=10; 
    }
    for(i=1;i<=6;i++)
        for(j=1;j<=6;j++)
            if(i==j) //daca e pe diagonala
               a[i][j]=0;
            else 
               if(i<j) 
                  a[i][j]=c[i];
               else
                  a[i][j]=c[j];
    for(i=1;i<=6;i++)
    {
        for(j=1;j<=6;j++)
            cout<<a[i][j]<<' ';
        cout<<endl;
    }
}
/*
   n=28731
   0 1 1 1 1 1 
   1 0 3 3 3 3
   1 3 0 7 7 7
   1 3 7 0 8 8
   1 3 7 8 0 2
   1 3 7 8 2 0
*/