3416 - Gen Mat 22: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerința == 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 == Programul citește de la tastatură numărul n. == Date de ieșire == Programul...
 
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 6: Line 6:
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.
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 ==
== Restricții și precizări ==
1 ≤ n ≤ 20
* 1 ≤ n ≤ 20
 
== Exemplu 1 ==
== Exemplu 1 ==
; Intrare
; Intrare
Line 23: Line 24:
; Ieșire
; Ieșire
: Datele de intrare nu corespund restricțiilor impuse.
: Datele de intrare nu corespund restricțiilor impuse.
== Explicație ==
:S-a citit n=2 și se construiește o matrice cu 4 zone a câte 3 linii și 3 coloane.
<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):                    # 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>

Latest revision as of 19:46, 29 April 2023

Cerința

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

Programul citește de la tastatură numărul n.

Date de ieșire

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

  • 1 ≤ n ≤ 20

Exemplu 1

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

Intrare
34
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Explicație

S-a citit n=2 și se construiește o matrice cu 4 zone a câte 3 linii și 3 coloane.


Rezolvare

<syntaxhighlight lang="python" line="1">

  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>