3416 - Gen Mat 22: Difference between revisions
No edit summary |
|||
Line 28: | Line 28: | ||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line="1"> | ||
# 3416 Gen Mat 22 | # 3416 Gen Mat 22 | ||
def validare(nr_linii): | def validare(nr_linii): # functia de validare a datelor de intrare | ||
if nr_linii < 1 or nr_linii > 20: | if nr_linii < 1 or nr_linii > 20: | ||
raise ValueError | raise ValueError # daca nu corespund, ridicam eroarea Value Error | ||
print("Datele de intrare corespund restrictiilor impuse") | print("Datele de intrare corespund restrictiilor impuse") | ||
Line 41: | Line 41: | ||
nr_linii *= 3 | nr_linii *= 3 | ||
nr_coloane = nr_linii | nr_coloane = nr_linii | ||
matrice = [[0 for _ in range(nr_coloane)] for _ in range(nr_linii)] | matrice = [[0 for _ in range(nr_coloane)] for _ in range(nr_linii)] # initializarea matricii conform cerintei | ||
index_linie = 0 | index_linie = 0 # folosindu-ne de indexi vom parcurge pe rand fiecare patrat de 3x3 | ||
index_coloana = 0 | index_coloana = 0 | ||
valoare = 1 | valoare = 1 # primul patrat are valoarea 1 | ||
while index_linie < nr_linii: | while index_linie < nr_linii: # cat timp nu iesim din matrice | ||
matrice[index_linie][index_coloana] = valoare | matrice[index_linie][index_coloana] = valoare # construirea patratului de 3x3 | ||
matrice[index_linie][index_coloana + 2] = valoare | matrice[index_linie][index_coloana + 2] = valoare | ||
matrice[index_linie + 1][index_coloana + 1] = valoare | matrice[index_linie + 1][index_coloana + 1] = valoare | ||
Line 55: | Line 55: | ||
matrice[index_linie + 2][index_coloana + 2] = valoare | matrice[index_linie + 2][index_coloana + 2] = valoare | ||
valoare += 1 | valoare += 1 # crestem valoarea | ||
index_coloana += 3 | index_coloana += 3 # trecem la urmatorul grup de 3x3 din dreapta | ||
if index_coloana >= nr_coloane: | if index_coloana >= nr_coloane: # daca nu mai avem in dreapta grupuri, trecem la grupurile de 3x3 de mai jos | ||
index_coloana = 0 | index_coloana = 0 | ||
index_linie += 3 | index_linie += 3 | ||
for index_linie in range(nr_linii): | for index_linie in range(nr_linii): # afisarea | ||
for index_coloana in range(nr_coloane): | for index_coloana in range(nr_coloane): | ||
print(matrice[index_linie][index_coloana], end=" ") | print(matrice[index_linie][index_coloana], end=" ") | ||
Line 69: | Line 69: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
# ne asteptam ca datele de intrare sa fie gresite fapt care ar genera o eroare de tipul ValueError | |||
# pe care o tratam corespunzator | |||
try: | try: | ||
n = int(input("Introduceți n: ")) | n = int(input("Introduceți n: ")) # citirea lui n | ||
validare(n) | validare(n) # validarea datelor de intrare | ||
gen_mat_22(n) | gen_mat_22(n) # apelul functiei de rezolvare | ||
except ValueError: | except ValueError: | ||
print("Datele de intrare nu corespund restrictiilor impuse") | print("Datele de intrare nu corespund restrictiilor impuse") | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 19:46, 29 April 2023
Cerința[edit | edit source]
Scrieți un program care citește de la tastatură un număr natural n și construiește o matrice cu 3*n linii și 3*n coloane, împărțită în n*n zone, numerotate de la 1 la n*n, de sus în jos și de la stânga la dreapta. Fiecare zonă ocupă 3 linii și 3 coloane și va conține pe diagonale numărul său de ordine, restul elementelor fiind egale cu 0.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran matricea construită, câte o linie din matrice pe o linie a ecranului, elementele de pe o linie fiind separate prin câte un spațiu.
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 20
Exemplu 1[edit | edit source]
- Intrare
- 2
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 1 0 1 2 0 2
- 0 1 0 0 2 0
- 1 0 1 2 0 2
- 3 0 3 4 0 4
- 0 3 0 0 4 0
Exemplu 2[edit | edit source]
- Intrare
- 34
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Explicație[edit | edit source]
- S-a citit n=2 și se construiește o matrice cu 4 zone a câte 3 linii și 3 coloane.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 3416 Gen Mat 22
def validare(nr_linii): # functia de validare a datelor de intrare
if nr_linii < 1 or nr_linii > 20: raise ValueError # daca nu corespund, ridicam eroarea Value Error
print("Datele de intrare corespund restrictiilor impuse")
def gen_mat_22(nr_linii):
nr_linii *= 3 nr_coloane = nr_linii matrice = [[0 for _ in range(nr_coloane)] for _ in range(nr_linii)] # initializarea matricii conform cerintei
index_linie = 0 # folosindu-ne de indexi vom parcurge pe rand fiecare patrat de 3x3 index_coloana = 0 valoare = 1 # primul patrat are valoarea 1
while index_linie < nr_linii: # cat timp nu iesim din matrice
matrice[index_linie][index_coloana] = valoare # construirea patratului de 3x3 matrice[index_linie][index_coloana + 2] = valoare matrice[index_linie + 1][index_coloana + 1] = valoare matrice[index_linie + 2][index_coloana] = valoare matrice[index_linie + 2][index_coloana + 2] = valoare
valoare += 1 # crestem valoarea index_coloana += 3 # trecem la urmatorul grup de 3x3 din dreapta
if index_coloana >= nr_coloane: # daca nu mai avem in dreapta grupuri, trecem la grupurile de 3x3 de mai jos index_coloana = 0 index_linie += 3
for index_linie in range(nr_linii): # afisarea for index_coloana in range(nr_coloane): print(matrice[index_linie][index_coloana], end=" ") print()
if __name__ == '__main__':
# ne asteptam ca datele de intrare sa fie gresite fapt care ar genera o eroare de tipul ValueError # pe care o tratam corespunzator try: n = int(input("Introduceți n: ")) # citirea lui n validare(n) # validarea datelor de intrare gen_mat_22(n) # apelul functiei de rezolvare except ValueError: print("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>