0215 - Gen Mat 6: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerința == Scrieţi un program care citeşte de la tastatură un număr natural n cu exact 5 cifre şi construieşte în memorie o matrice cu 6 linii şi 6 coloane ale cărei elemente vor primi valori după cum urmează: : -elementele aflate pe diagonala principală sunt toate nule; : -elementele de pe linia 1, aflate deasupra diagonalei principale precum şi elementele de pe coloana 1, aflate sub diagonala principală au toate valoarea egală cu cifra unităţilor lui n...
 
explicatii
 
(3 intermediate revisions by the same user not shown)
Line 10: Line 10:
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 afișează pe ecran matricea 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.
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 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 ==
== Restricții și precizări ==
: n = 5
: n = 5
Line 27: Line 28:
<br>
<br>
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line="1">
#0215- Gen Mat 6
# 0215- Gen Mat 6
def verificare_restrictii(n):      # functia de verificare a restrictiilor
    if nr_cifre(n) == 5:
        return True
    else:
        return False
 
 
def nr_cifre(numar):                # functie care returneaza numarul de cifre ale unui numar dat ca parametru
    numar_cifre = 0
    while numar > 0:
        numar_cifre += 1
        numar //= 10
    return numar_cifre
 
 
def genmat6(n):                    # functia de rezolvare
    numar = n            # creem o copie a lui n pentru a putea folosi copia fara a modifica n cand ii extragem cifrele
    matrice = []
    nr_linii = nr_cifre(n) + 1      # numarul de linii si de coloane este 1 + numarul cifrelor lui n
 
    for i in range(1, nr_linii+1):      # creem matricea corespunzatoare
        linie = []
        for j in range(1, nr_linii+1):
            linie.append(0)
        matrice.append(linie)
 
    for linie in range(1, nr_linii+1):  # parcurgem intai matricea pe linie
        # in problema, numaratoarea incepe de la 1 dar matricea noastra este numerotata de la 0
        # deci aplicam +1 si -1 unde e necesar
        for coloana in range(1, nr_linii+1):
            if linie + coloana > linie * 2:    # introducem deasupra diagonalei principale
                matrice[linie-1][coloana-1] = numar % 10    # ultima cifra
        numar //= 10        # trecem la cifra urmatoare
 
    numar = n      # deoarece am creat copia, n ramane nemodificat si il putem reutiliza pentru completarea coloanelor
 
    for coloana in range(1, nr_linii+1):        # parcurgem matricea pe coloane
        for linie in range(1, nr_linii+1):
            if linie + coloana < linie * 2:    # doar sub diagonala principala
                matrice[linie-1][coloana-1] = numar % 10    # introducem ultima cifra
        numar //= 10    # trecem la cifra urmatoare
 
    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:
 
        nr = int(input("Introduceti numarul: "))        # citirea lui nr
 
        if verificare_restrictii(nr):      # verificam restrictiile
            print("Datele de intrare corespund restrictiilor impuse.")
            genmat6(nr)                      # apelam functia de rezolvare
        else:
            print("Datele de intrare nu corespund restrictiilor impuse.")
    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse.")
 
</syntaxhighlight>

Latest revision as of 18:27, 26 April 2023

Cerința[edit | edit source]

Scrieţi un program care citeşte de la tastatură un număr natural n cu exact 5 cifre şi construieşte în memorie o matrice cu 6 linii şi 6 coloane ale cărei elemente vor primi valori după cum urmează:

-elementele aflate pe diagonala principală sunt toate nule;
-elementele de pe linia 1, aflate deasupra diagonalei principale precum şi elementele de pe coloana 1, aflate sub diagonala principală au toate valoarea egală cu cifra unităţilor lui n;
-elementele de pe linia 2, aflate deasupra diagonalei principale precum şi elementele de pe coloana 2, aflate sub diagonala principală au toate valoarea egală cu cifra zecilor lui n;
-elementele de pe linia 6, aflate deasupra diagonalei principale precum şi elementele de pe coloana 6, aflate sub diagonala principală au toate valoarea egală cu cifra zecilor de mii a lui n;

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 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]

n = 5

Exemplu 1[edit | edit source]

Intrare
28731
Ieșire
Datele introduse corespund restricțiilor impuse.
0 1 1 1 1 1
1 0 3 3 3 3
1 3 0 7 7 7
1 3 7 0 8 8
1 3 7 8 0 2
1 3 7 8 2 0


Rezolvare[edit | edit source]

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

  1. 0215- Gen Mat 6

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

   if nr_cifre(n) == 5:
       return True
   else:
       return False


def nr_cifre(numar): # functie care returneaza numarul de cifre ale unui numar dat ca parametru

   numar_cifre = 0
   while numar > 0:
       numar_cifre += 1
       numar //= 10
   return numar_cifre


def genmat6(n): # functia de rezolvare

   numar = n             # creem o copie a lui n pentru a putea folosi copia fara a modifica n cand ii extragem cifrele
   matrice = []
   nr_linii = nr_cifre(n) + 1      # numarul de linii si de coloane este 1 + numarul cifrelor lui n
   for i in range(1, nr_linii+1):      # creem matricea corespunzatoare
       linie = []
       for j in range(1, nr_linii+1):
           linie.append(0)
       matrice.append(linie)
   for linie in range(1, nr_linii+1):   # parcurgem intai matricea pe linie
       # in problema, numaratoarea incepe de la 1 dar matricea noastra este numerotata de la 0
       # deci aplicam +1 si -1 unde e necesar
       for coloana in range(1, nr_linii+1):
           if linie + coloana > linie * 2:     # introducem deasupra diagonalei principale
               matrice[linie-1][coloana-1] = numar % 10    # ultima cifra
       numar //= 10        # trecem la cifra urmatoare
   numar = n       # deoarece am creat copia, n ramane nemodificat si il putem reutiliza pentru completarea coloanelor
   for coloana in range(1, nr_linii+1):        # parcurgem matricea pe coloane
       for linie in range(1, nr_linii+1):
           if linie + coloana < linie * 2:     # doar sub diagonala principala
               matrice[linie-1][coloana-1] = numar % 10    # introducem ultima cifra
       numar //= 10    # trecem la cifra urmatoare
   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:
       nr = int(input("Introduceti numarul: "))        # citirea lui nr
       if verificare_restrictii(nr):       # verificam restrictiile
           print("Datele de intrare corespund restrictiilor impuse.")
           genmat6(nr)                      # apelam functia de rezolvare
       else:
           print("Datele de intrare nu corespund restrictiilor impuse.")
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>