2835 - Gen Mat 26: Difference between revisions

From Bitnami MediaWiki
 
Line 29: Line 29:
<br>
<br>
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line="1">
#2835 Gen Mat 26
# 2835 Gen Mat 26
def validare(nr_elemente):
def validare(nr_elemente, prima_linie):         # functia de validare a datelor de intrare
     if 2 <= nr_elemente <= 20:
     if 2 <= nr_elemente <= 20 and nr_elemente == len(prima_linie):
         # print("Datele de intrare corespund restrictiilor impuse")
         # print("Datele de intrare corespund restrictiilor impuse")
         return True
         return True
     else:
     else:
         raise ValueError("")
         raise ValueError("")       # daca nu corespund, ridicam eroarea ValueError




def gen_mat26(nr_linii, prima_linie):
def gen_mat26(nr_linii, prima_linie):


     matrice = []
     matrice = []                   # initializarea matricii patratice
     for linie in range(nr_linii):
     for linie in range(nr_linii):
         linia = []
         linia = []
Line 48: Line 48:
         matrice.append(linia)
         matrice.append(linia)


     matrice[0] = prima_linie
     matrice[0] = prima_linie       # prima linie e chiar cea citita
     for linie in range(1, nr_linii):
     for linie in range(1, nr_linii):   # parcurgem matricea de la a doua linie
         ultimul_numar = matrice[linie-1][nr_linii-1]
         ultimul_numar = matrice[linie-1][nr_linii-1]
         for coloana in range(nr_linii-1, -1, -1):
        # ultimul numar trebuie sa ajunga pe prima pozitie deci il salvam
         for coloana in range(nr_linii-1, -1, -1):       # parcurgem coloanele de la ultima spre prima
             if coloana == 0:
             if coloana == 0:
                 matrice[linie][coloana] = ultimul_numar
                 matrice[linie][coloana] = ultimul_numar     # priimul numar devine ultimul
             else:
             else:
                 matrice[linie][coloana] = matrice[linie-1][coloana-1]
                 matrice[linie][coloana] = matrice[linie-1][coloana-1]   # restul iau valoarea elementului din spate


     for linie in range(nr_linii):
     for linie in range(nr_linii):                   # afisarea
         for coloana in range(nr_linii):
         for coloana in range(nr_linii):
             print(matrice[linie][coloana], end=" ")
             print(matrice[linie][coloana], end=" ")
Line 64: Line 65:


if __name__ == '__main__':
if __name__ == '__main__':
     n = int(input("Introduceti numarul n: "))
     # 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("Introduceti numarul n: "))      # citirea lui n
 
        sir = input(f"Introduceti prima linie ( {n} numere cu spatii intre ele): ")    # citirea liniei
        sir = sir.split()


    sir = input(f"Introduceti prima linie ( {n} numere cu spatii intre ele): ")
    sir = sir.split()
    try:
         sir = list(map(int, sir))
         sir = list(map(int, sir))
         validare(n)
         validare(n, sir)                                     # validarea datelor de intrare
         gen_mat26(n, sir)
         gen_mat26(n, sir)



Latest revision as of 19:01, 29 April 2023

Cerința[edit | edit source]

Scrieţi un program care citește de la tastatură un număr natural, n (n∈[2,20]), apoi n numere naturale din intervalul [0,104], reprezentând, de la stânga la dreapta, în această ordine, valorile elementelor aflate pe prima linie a unui tablou bidimensional cu n linii și n coloane. Programul construiește în memorie tabloul, inițializând celelalte elemente, astfel încât fiecare linie să se obțină prin permutarea circulară a elementelor liniei anterioare, de la stânga spre dreapta, cu o poziție.

Programul afişează pe ecran tabloul obținut, fiecare linie a tabloului pe câte o linie a ecranului, elementele de pe aceeași linie fiind separate prin câte un spațiu.

Date de intrare[edit | edit source]

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

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 tabloul construit, câte o linie a matricei pe câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu. În caz contrar, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse".

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

2 ≤ n ≤ 20

Exemplu 1[edit | edit source]

Intrare
4
1 1 3 2
Ieșire
Datele introduse corespund restricțiilor impuse.
1 1 3 2
2 1 1 3
3 2 1 1
1 3 2 1


Exemplu 2[edit | edit source]

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


Rezolvare[edit | edit source]

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

  1. 2835 Gen Mat 26

def validare(nr_elemente, prima_linie): # functia de validare a datelor de intrare

   if 2 <= nr_elemente <= 20 and nr_elemente == len(prima_linie):
       # print("Datele de intrare corespund restrictiilor impuse")
       return True
   else:
       raise ValueError("")        # daca nu corespund, ridicam eroarea ValueError


def gen_mat26(nr_linii, prima_linie):

   matrice = []                    # initializarea matricii patratice
   for linie in range(nr_linii):
       linia = []
       for coloana in range(nr_linii):
           linia.append(0)
       matrice.append(linia)
   matrice[0] = prima_linie        # prima linie e chiar cea citita
   for linie in range(1, nr_linii):    # parcurgem matricea de la a doua linie
       ultimul_numar = matrice[linie-1][nr_linii-1]
       # ultimul numar trebuie sa ajunga pe prima pozitie deci il salvam
       for coloana in range(nr_linii-1, -1, -1):       # parcurgem coloanele de la ultima spre prima
           if coloana == 0:
               matrice[linie][coloana] = ultimul_numar     # priimul numar devine ultimul
           else:
               matrice[linie][coloana] = matrice[linie-1][coloana-1]   # restul iau valoarea elementului din spate
   for linie in range(nr_linii):                   # afisarea
       for coloana in range(nr_linii):
           print(matrice[linie][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("Introduceti numarul n: "))       # citirea lui n
       sir = input(f"Introduceti prima linie ( {n} numere cu spatii intre ele): ")     # citirea liniei
       sir = sir.split()
       sir = list(map(int, sir))
       validare(n, sir)                                     # validarea datelor de intrare
       gen_mat26(n, sir)
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse")

</syntaxhighlight>