0191 - Max Mat

From Bitnami MediaWiki
Revision as of 12:45, 22 April 2023 by Andor Giulia (talk | contribs) (Pagină nouă: Sursă: [https://www.pbinfo.ro/probleme/191/maxmat] == Enunt == Se dă o matrice cu '''n''' linii și '''m''' coloane și elemente numere întregi. == Cerinţa == Să se determine, pentru fiecare linie a matricei, valoarea maximă și indicele coloanei pe care se află valoarea maximă. == Date de intrare == Fişierul de intrare '''maxmat.in''' conţine pe prima linie numerele '''n''' și '''m''', iar următoarele '''n''' linii câte '''m''' numere întregi, reprezentând ele...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursă: [1]

Enunt[edit | edit source]

Se dă o matrice cu n linii și m coloane și elemente numere întregi.

Cerinţa[edit | edit source]

Să se determine, pentru fiecare linie a matricei, valoarea maximă și indicele coloanei pe care se află valoarea maximă.

Date de intrare[edit | edit source]

Fişierul de intrare maxmat.in conţine pe prima linie numerele n și m, iar următoarele n linii câte m numere întregi, reprezentând elementele matricei.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.". Fişierul de ieşire maxmat.out va conţine n linii; pe fiecare linie se vor afla două numere, separate prin exact un spațiu, reprezentând valoarea maximă de pe linia curentă și indicele coloanei pe care se află aceasta . În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

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

  • 1 ≤ n,m ≤ 25
  • elementele matricei aparțin intervalului [-1000,1000]
  • dacă pe o linie a matricei, elementul maxim apare de mai multe ori, se va afișa indicele de coloană minim
  • liniile și coloanele matricei sunt numerotate de la 1

Exemple[edit | edit source]

Exemplu 1[edit | edit source]

maxmat.in
4 5
-2 -9 7 -7 -7
1 -7 -8 -1 4
8 2 5 -7 2
8 -9 -7 10 -9
maxmat.out
7 3
4 5
8 1
10 4

Rezolvare[edit | edit source]

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

   try:
       with open("maxmat.in", "r") as fin:
           n, m = map(int, fin.readline().split())
           if 1 <= n <= 25 and 1 <= m <= 25:
               print("Datele sunt corecte.")
           else:
               print("Datele nu sunt conform restrictiilor impuse.")
               exit()
           matrice = []
           for linie in range(n):
               linie_matrice = []
               valori = fin.readline().split()
               for coloana in range(m):
                   try:
                       valoare = int(valori[coloana])
                       if -1000 <= 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
   except FileNotFoundError:
       print("Fisierul maxmat.in nu exista.")
       exit()


def maxmat():

   n, m, a = citire_matrice()
   with open("maxmat.out", "w") as fout:
       for i in range(n):
           maxi = -1001
           for j in range(m):
               if a[i][j] > maxi:
                   maxi = a[i][j]
                   ind = j
           fout.write(str(maxi) + " " + str(ind + 1) + "\n")


if _name_ == "_main_":

   col_zero = maxmat()
   print("rezultatul este: ", col_zero)

</syntaxhighlight>

Explicații[edit | edit source]

Acest cod este format din doua functii:
citire_matrice() - aceasta functie deschide fisierul "maxmat.in", citeste dimensiunile matricei si verfica daca sunt in conformitate cu restrictiile impuse (1<=n,m<=25). Apoi, citeste matricea din fisier, verifica daca valorile matricei sunt in intervalul [-1000, 1000], si construieste matricea in memorie. Daca valorile nu sunt valide sau fisierul nu exista, se afiseaza un mesaj corespunzator si se iese din program. Se returneaza dimensiunile matricei si matricea construita in memorie.
maxmat() - aceasta functie apeleaza citire_matrice() pentru a obtine dimensiunile matricei si matricea in memorie. Apoi, deschide fisierul "maxmat.out" pentru a scrie rezultatele si parcurge matricea in linii, cautand cel mai mare element de pe fiecare linie. Daca gaseste un element mai mare, salveaza valoarea si pozitia acestuia. Dupa ce a terminat de parcurs fiecare linie, scrie in fisier valoarea maxima si pozitia acesteia pentru fiecare linie.
In final, codul verifica daca a fost obtinut un rezultat si afiseaza un mesaj corespunzator.