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[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">

  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>