4254 - Matrice 12

From Bitnami MediaWiki

Cerința[edit | edit source]

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,10000].

Programul interschimbă elementele de pe coloana pe care se află valoarea minimă cu elementele de pe coloana 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
  • col_min, care determină indicele coloanei pe care se află elementul minim din matrice
  • col_max, care determină indicele coloanei pe care se află elementul maxim din matrice
  • interschimbare, care interschimbă în matricea dată elementele de pe două coloane date

Date de intrare[edit | edit source]

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

Date de ieșire[edit | edit source]

Programul va afișa pe ecran elementele matricii rezultate.

Restricții și precizări[edit | edit source]

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

Exemplul 1[edit | edit source]

Input:

4 3

7 5 19

3 8 4

23 6 1

10 2 9

Output:

19 5 7

4 8 3

1 6 23

9 2 10

Explicație:

Elementul minim (1) se află pe coloana 3, iar elementul maxim (23) se află pe prima coloană. Prin urmare, se interschimbă coloana 1 cu coloana 3.

Exemplul 2[edit | edit source]

Input:

51 3

Output:

Numărul de linii și coloane trebuie să fie în intervalul [2, 50].

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def verifica_restrictii(n, m, matrice):

   if not (2 <= n <= 50) or not (2 <= m <= 50):
       print("Numărul de linii și coloane trebuie să fie în intervalul [2, 50].")
       return False
   for i in range(n):
       for j in range(m):
           if not (0 <= matrice[i][j] <= 10000):
               print("Elementele matricei trebuie să fie în intervalul [0, 10000].")
               return False
   return True

def citire():

   n = int(input("Introduceti numarul de linii (2 <= n <= 50): "))
   m = int(input("Introduceti numarul de coloane (2 <= m <= 50): "))
   
   matrice = []
   for i in range(n):
       linie = []
       for j in range(m):
           element = int(input(f"Introduceti elementul de pe pozitia [{i+1}, {j+1}]: "))
           linie.append(element)
       matrice.append(linie)
   return n, m, matrice

def afisare(matrice):

   for linie in matrice:
       for elem in linie:
           print(elem, end=" ")
       print()

def col_min(matrice):

   min_val = float('inf')
   col_index = 0
   for j in range(len(matrice[0])):
       coloana = [matrice[i][j] for i in range(len(matrice))]
       if min(coloana) < min_val:
           min_val = min(coloana)
           col_index = j
   return col_index

def col_max(matrice):

   max_val = float('-inf')
   col_index = 0
   for j in range(len(matrice[0])):
       coloana = [matrice[i][j] for i in range(len(matrice))]
       if max(coloana) > max_val:
           max_val = max(coloana)
           col_index = j
   return col_index

def interschimbare(matrice, col1, col2):

   for i in range(len(matrice)):
       matrice[i][col1], matrice[i][col2] = matrice[i][col2], matrice[i][col1]
  1. Citirea datelor de intrare

n, m, matrice = citire() if not verifica_restrictii(n, m, matrice):

   exit()
  1. Determinarea coloanelor pentru interschimbare

col_min_index = col_min(matrice) col_max_index = col_max(matrice)

  1. Verificare dacă trebuie să se facă interschimbare

if col_min_index != col_max_index:

   # Efectuarea interschimbarii
   interschimbare(matrice, col_min_index, col_max_index)
  1. Afisarea rezultatului

afisare(matrice)

</syntaxhighlight>