1585 - Gen Mat 23: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
(One intermediate revision by the same user not shown)
Line 4: Line 4:
Programul citește de la tastatură numărul n.
Programul citește de la tastatură numărul n.
== Date de ieșire ==
== Date de ieșire ==
Programul va afișa pe ecran matricea construită, câte o linie a matricei pe o linie a ecranului, cu un spaţiu între elementele fiecărei linii.
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 ==
== Restricții și precizări ==
1 ≤ n ≤ 30
1 ≤ n ≤ 30
Line 26: Line 27:
<br>
<br>
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line="1">
#1585 Gen Mat 23
# 1585 Gen Mat 23
def verificare_restrictii(nr_linii):
def verificare_restrictii(nr_linii):   # functia de verificare a restrictiilor
     if 1 <= nr_linii <= 30:
     if 1 <= nr_linii <= 30:
         return True
         return True
Line 38: Line 39:
     matrice = []
     matrice = []


     for i in range(0, nr_linii):
     for i in range(0, nr_linii):       # crearea matricii patratice
         linie = []
         linie = []
         for j in range(0, nr_linii):
         for j in range(0, nr_linii):
             linie.append(0)
             linie.append(0)
         matrice.append(linie)
         matrice.append(linie)


     i = 0
     i = 0           # i reprezinta startul unui chenar de 1 iar nr_linii - 1 va fi astfel sfarsitul acelui chenar
     while i < nr_linii-i:
     while i < nr_linii-i:
         if i % 2 == 0:
         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):
             for linie in range(i, nr_linii-i):
                 if linie == i or linie == nr_linii - 1:
                # 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):
                     for coloana in range(i, nr_linii-i):
                         matrice[linie][coloana] = 1
                         matrice[linie][coloana] = 1
                 else:
                 else:                                       # prima si ultima coloana
                     matrice[linie][i] = 1
                     matrice[linie][i] = 1
                     matrice[linie][nr_linii-i-1] = 1
                     matrice[linie][nr_linii-i-1] = 1


         i += 1
         i += 1 # trecem la urmatorul chenar


     for linie in matrice:
     for linie in matrice:               # afisarea
         for element in linie:
         for element in linie:
             print(element, end=" ")
             print(element, end=" ")
Line 65: Line 66:


if __name__ == '__main__':
if __name__ == '__main__':
     numar_linii = int(input("Introduceti numarul n "))
     # ne asteptam ca datele de intrare sa fie gresite fapt care ar genera o eroare de tipul ValueError
    if verificare_restrictii(numar_linii):
    # pe care o tratam corespunzator
        print("Datele de intrare corespund restrictiilor impuse.")
    try:
        genmat23(numar_linii)
        numar_linii = int(input("Introduceti numarul n ")) # citirea numarului de linii
     else:
        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.")
         print("Datele de intrare nu corespund restrictiilor impuse.")
       
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 18:17, 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 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>