0234 - Med Poz: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Enunț == Se consideră un tablou bidimensional cu '''n''' linii şi '''n''' coloane ce conţine numere intregi din intervalul '''[-100,100]'''. == Cerinţa == Să se determine media aritmetică a elementelor strict pozitive din matrice, care sunt situate sub diagonala principală. == Date de intrare == Fişierul de intrare '''medpoz.in''' conţine pe prima linie numărul '''n''', iar pe următoarele '''n''' linii câte '''n''' numere naturale separate prin spaţii, reprez...
 
No edit summary
 
Line 6: Line 6:
Fişierul de intrare '''medpoz.in''' conţine pe prima linie numărul '''n''', iar pe următoarele '''n''' linii câte '''n''' numere naturale separate prin spaţii, reprezentând elementele tabloului.
Fişierul de intrare '''medpoz.in''' conţine pe prima linie numărul '''n''', iar pe următoarele '''n''' linii câte '''n''' numere naturale separate prin spaţii, reprezentând elementele tabloului.
== Date de ieşire ==
== Date de ieşire ==
Dacă datele sunt introduse corect,în fişierul de ieşire '''medpoz.out''' se va afișa :'''"Datele sunt introduse corect."''',apoi pe un rând va conţine un singur număr, reprezentând valoarea cerută.În cazul contrar,se va afișa pe ecran '''"Datele nu corespund restricțiilor impuse."'''.
Dacă datele sunt introduse corect,în fişierul de ieşire '''medpoz.out''' se va afișa :'''"Datele sunt introduse corect."''',apoi pe un rând nou va conţine un singur număr, reprezentând valoarea cerută.În cazul contrar,se va afișa pe ecran '''"Datele nu corespund restricțiilor impuse."'''.
== Restricții și precizări ==
== Restricții și precizări ==
* 2 ⩽ n ⩽ 20
* 2 ⩽ n ⩽ 20

Latest revision as of 13:01, 28 April 2023

Enunț[edit | edit source]

Se consideră un tablou bidimensional cu n linii şi n coloane ce conţine numere intregi din intervalul [-100,100].

Cerinţa[edit | edit source]

Să se determine media aritmetică a elementelor strict pozitive din matrice, care sunt situate sub diagonala principală.

Date de intrare[edit | edit source]

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

Date de ieşire[edit | edit source]

Dacă datele sunt introduse corect,în fişierul de ieşire medpoz.out se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou va conţine un singur număr, reprezentând valoarea cerută.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

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

  • 2 ⩽ n ⩽ 20
  • dacă în matrice nu există elemente strict pozitive, situate sub diagonala principală, se va afișa mesajul NU EXISTA;
  • media se va afişa cu exact trei zecimale, fără rotunjire;

Exemplu[edit | edit source]

medpoz.in
4
-1 2 4 5
0 6 3 1
2 4 2 0
3 -5 1 -3
medpoz.out
Datele sunt introduse corect.
2.500

Explicație[edit | edit source]

Valorile strict pozitive situate sub diagonala principală sunt 2, 4, 3 şi 1, iar media lor aritmetică este 2.5. Se va afişa cu trei zecimale, adică 2.500

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

def validare_date(n: int, a: list[list[int]]) -> bool:

   # Verificare dimensiunea matricei
   if not (2 <= n <= 20):
       return False
   # Verificare interval valori elemente
   for i in range(n):
       for j in range(n):
           if not (-100 <= a[i][j] <= 100):
               return False
   return True

def media_aritmetica_pozitive_sub_diagonala(n: int, a: list[list[int]]) -> float:

   suma_pozitive_sub_diagonala = 0
   numar_elemente_pozitive_sub_diagonala = 0
   # Parcurgere elemente sub diagonala principală
   for i in range(1, n):
       for j in range(i):
           # Dacă elementul este strict pozitiv, se adună la suma S
           if a[i][j] > 0:
               suma_pozitive_sub_diagonala += a[i][j]
               numar_elemente_pozitive_sub_diagonala += 1
   # Daca nu s-au găsit elemente pozitive sub diagonală, se returnează None
   if numar_elemente_pozitive_sub_diagonala == 0:
       return None
   # Altfel, se calculează și se returnează media aritmetică
   else:
       return suma_pozitive_sub_diagonala / numar_elemente_pozitive_sub_diagonala

if __name__ == '__main__':

   # Citire date de intrare
   with open('medpoz.in', 'r') as fin:
       n = int(fin.readline())
       a = []
       for i in range(n):
           linie = list(map(int, fin.readline().split()))
           a.append(linie)
   # Verificare date de intrare
   if not validare_date(n, a):
       with open('medpoz.out', 'w') as fout:
           fout.write("Datele nu corespund restricțiilor impuse.")
   else:
       # Calcul și afișare rezultat
       rezultat = media_aritmetica_pozitive_sub_diagonala(n, a)
       if rezultat is None:
           print("NU EXISTA")
       else:
           with open('medpoz.out', 'w') as fout:
               fout.write("Datele sunt introduse corect.\n")
               fout.write(f"{rezultat:.3f}")

</syntaxhighlight>