2835 - Gen Mat 26: Difference between revisions
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 = 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">
- 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>