# PBinfo #4252 – Matrice11 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
Scrieți un program care citește de la tastatură două numere naturale din intervalul [2,50], n și m, și elementele unei matrici cu n linii și m coloane, numere naturale distincte din intervalul [0,104].

Programul interschimbă elementele de pe linia pe care se află valoarea minimă cu elementele de pe linia pe care se află valoarea maximă din matrice, apoi afișează pe ecran matricea modificată, câte o linie a matricii pe câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spațiu.

Se vor defini și apela următoarele subprograme:


citire, care citește de la tastatură valorile lui n și m și apoi elementele matricei
afisare, care afișează pe ecran elementele matricei conform cerinței
lin_min, care determină indicele liniei pe care se află elementul minim din matrice
lin_max, care determină indicele liniei pe care se află elementul maxim din matrice
interschimbare, care interschimbă în matricea dată elementele de pe două linii date

În programele C/C++ nu se vor folosi variabile globale.

Date de intrare
Programul citește de la tastatură numerele n m, iar apoi cele n • m elemente ale matricii.

Date de ieșire
Programul va afișa pe ecran elementele matricii rezultate.

Restricții și precizări

2 ≤ n,m ≤ 50
indexarea liniilor și a coloanelor se face începând de la 1
elementele tabloului aparțin intervalului [0,104]
dacă atât elementul minim cât și cel maxim se află pe aceeași linie, atunci matricea se va afișa nemodificată.

Exemplu:
Intrare

4 3
7 5 39
3 8 4
23 6 1
10 2 9
Ieșire

23 6 1 
3 8 4 
7 5 39 
10 2 9 
Explicație
Elementul minim (1) se află pe linia 3, iar elementul maxim (39) se află pe prima linie. Prin urmare, se interschimbă linia 1 cu linia 3.

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
void citire(int A[][101], int &n, int &m)
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++) cin>>A[i][j];
}
void afisare(int A[][101], int n, int m)
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++) cout<<A[i][j]<<" ";
        cout<<endl;
    }
}
int lin_min(int A[][101], int n, int m)
{///linia pe care se afla valoarea minima
    int min=10000,imin=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(A[i][j]<min) { min=A[i][j]; imin=i; }
    return imin;
}
int lin_max(int A[][101], int n, int m)
{///linia pe care se afla valoarea maxima
    int max=0,imax=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(A[i][j]>max) { max=A[i][j]; imax=i; }
    return imax;
}
void interschimbare(int A[][101], int m, int x, int y)
{///interschimba linia x cu linia y
    for(int j=1;j<=m;j++) swap(A[x][j],A[y][j]);
}
int main()
{
    int A[101][101],n,m,x,y;
    citire(A,n,m);
    x=lin_min(A,n,m);
    y=lin_max(A,n,m);
    interschimbare(A,m,x,y);
    afisare(A,n,m);
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4252)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4252/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4252/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
