0212 - Max Min Matrice

From Bitnami MediaWiki

Sursa: [1]

Enunt[edit | edit source]

Se consideră tabloul bidimensional cu m linii şi n coloane ce conţine numere naturale cu cel mult patru cifre fiecare.

Cerinţa[edit | edit source]

Să se determine cea mai mică valoare de pe fiecare linie, iar dintre acestea să se determine valoarea maximă.

Date de intrare[edit | edit source]

Fişierul de intrare maxminmatrice.in conţine pe prima linie numerele m şi n, iar pe următoarele m linii câte n numere naturale separate prin spaţii, reprezentând elementele tabloului.

Date de ieșire[edit | edit source]

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse.". Fişierul de ieşire maxminmatrice.out va conţine pe prima linie numărul cerut, cea mai mare valoare dintre minimele de pe linii. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, programul va afișa "Datele de intrare nu corespund restricțiilor impuse.".

Restricţii şi precizări[edit | edit source]

  • 2 ≤ m, n ≤ 23
  • elementele tabloului sunt mai mici decât 1000.

Exemple[edit | edit source]

Exemplu 1[edit | edit source]

maxminmatrice.in
3 5
3 2 7 13 5
10 9 12 6 9
7 4 5 6 3
maxminmatrice.out
6

Explicatie[edit | edit source]

Minimele de pe cele trei linii sunt: 2 6 3. Dintre acestea, cea mai mare valoare este 6.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def citire_matrice():

   try:
       n = int(input("Introduceti numarul de linii: "))
       m = int(input("Introduceti numarul de coloane: "))
       if m % 2 == 0:
           print("Numarul de coloane trebuie sa fie impar.")
           exit()
       if 2 <= n <= 23 and 2 <= m <= 23:
           print("Datele sunt corecte.")
       else:
           print("Datele nu sunt conform restrictiilor impuse.")
           exit()
   except ValueError:
       print("Trebuie introduse doar numere intregi.")
       exit()
   matrice = []
   for linie in range(n):
       linie_matrice = []
       for coloana in range(m):
           try:
               valoare = int(input(f"Introduceti un numar pentru linia {linie+1}, coloana {coloana+1}: "))
               if valoare <= 1000:
                   print("Datele sunt corecte.")
                   linie_matrice.append(valoare)
               else:
                   print("Datele nu sunt conform restrictiilor impuse.")
                   exit()
           except ValueError:
               print("Trebuie introduse doar numere intregi.")
               exit()
       matrice.append(linie_matrice)
   return n, m, matrice

def maxminmatrice():

   with open("maxminmatrice.in", "r") as fin:
       n, m = map(int, fin.readline().split())
       a = []
       for i in range(n):
           mini = 1001
           row = list(map(int, fin.readline().split()))
           for j in range(m):
               if row[j] < mini:
                   mini = row[j]
           a.append(row)
       fin.close()
   v = []
   for i in range(n):
       v.append(min(a[i]))
   v.sort()
   with open("maxminmatrice.out", "w") as fout:
       fout.write(str(v[-1]))
       fout.close()

if _name_ == "_main_":

   maxminmatrice()

</syntaxhighlight>

Explicații[edit | edit source]

Acest cod realizează două funcții: citire_matrice() și maxminmatrice(), și o verificare if _name_ == "_main_": pentru a rula maxminmatrice() atunci când fișierul este executat direct.
Funcția citire_matrice() citeste datele de intrare de la tastatură și construiește o matrice, aplicând anumite restricții impuse pentru a verifica validitatea datelor introduse. Funcția întoarce dimensiunile matricei și matricea propriu-zisă.
Funcția maxminmatrice() citeste datele de intrare din fișierul "maxminmatrice.in" și calculează cea mai mică valoare de pe fiecare linie, iar dintre acestea calculează valoarea maximă. Rezultatul este scris în fișierul "maxminmatrice.out".