0191 - Max Mat

De la Universitas MediaWiki

Sursă: [1]

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 elementele matricei.

Date de ieșire

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

  • 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

Exemplu 1

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

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)

Explicații

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.