1585 - Gen Mat 23

From Bitnami MediaWiki

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 pătratică având n linii şi n coloane, cu elemente 0 şi 1, dispuse în pătrate concentrice, fiecare pătrat fiind format doar din valori 1 sau doar din valori 0, ca în exemplul de mai jos, astfel încât elementul aflat pe prima linie şi prima coloană să fie egal cu 1.

Date de intrare[edit | edit source]

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

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: " Datele de intrare corespund restrictiilor impuse", apoi pe un rand nou va afișa matricea construită, câte o linie a matricei pe o linie a ecranului, cu un spaţiu între elementele fiecărei linii. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse".

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

1 ≤ n ≤ 30

Exemplu 1[edit | edit source]

Intrare
6
Ieșire
Datele introduse corespund restricțiilor impuse.
1 1 1 1 1 1
1 0 0 0 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 0 0 0 1
1 1 1 1 1 1


Exemplu 2[edit | edit source]

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


Rezolvare[edit | edit source]

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

  1. 1585 Gen Mat 23

def verificare_restrictii(nr_linii): # functia de verificare a restrictiilor

   if 1 <= nr_linii <= 30:
       return True
   else:
       return False


def genmat23(nr_linii):

   matrice = []
   for i in range(0, nr_linii):        # crearea matricii patratice
       linie = []
       for j in range(0, nr_linii):
           linie.append(0)
       matrice.append(linie)
   i = 0           # i reprezinta startul unui chenar de 1 iar nr_linii - 1 va fi astfel sfarsitul acelui chenar
   while i < nr_linii-i:
       if i % 2 == 0:  # numarand de la 0, 1 va fi introdus pe liniile 0, 2 ,4 etc adica pe linii si coloane pare
           for linie in range(i, nr_linii-i):
               # completam doar marginile cu 1
               if linie == i or linie == nr_linii - 1:     # prima si ultima linie
                   for coloana in range(i, nr_linii-i):
                       matrice[linie][coloana] = 1
               else:                                       # prima si ultima coloana
                   matrice[linie][i] = 1
                   matrice[linie][nr_linii-i-1] = 1
       i += 1  # trecem la urmatorul chenar
   for linie in matrice:               # afisarea
       for element in linie:
           print(element, 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:
       numar_linii = int(input("Introduceti numarul n "))  # citirea numarului de linii
       if verificare_restrictii(numar_linii):          # veridicarea restrictiilor
           print("Datele de intrare corespund restrictiilor impuse.")
           genmat23(numar_linii)                       # apelul functiei de rezolvare
       else:
           print("Datele de intrare nu corespund restrictiilor impuse.")
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse.")
       

</syntaxhighlight>