2835 - Gen Mat 26

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerința

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

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

Date de ieșire

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

2 ≤ n ≤ 20

Exemplu 1

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

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


Rezolvare

# 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")