1842 - CreareNumarRec: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Pagină nouă: == Cerinţa == Scrieți definiția completă a subprogramului recursiv F, care primește prin intermediul parametrului n un număr natural nenul (1≤n≤9), iar prin intermediul parametrului a, un tablou unidimensional care conţine n valori naturale, fiecare dintre acestea reprezentând câte o cifră a unui număr. Astfel, a0 reprezintă prima cifră a numărului, a1 a doua cifră, etc. Subprogramul furnizează prin parametrul k o valoare naturală egală cu numărul obţ...
 
Cata (talk | contribs)
No edit summary
Line 14: Line 14:
Dacă n=6 și a= (2, 3, 5, 6, 4, 1), după apel k=264.
Dacă n=6 și a= (2, 3, 5, 6, 4, 1), după apel k=264.


== Important ==
== Explicație ==
Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.
Funcția <code>F</code> primește trei argumente:
 
* <code>n</code> - un număr întreg pozitiv, reprezentând numărul de elemente din lista <code>a</code>
* <code>a</code> - o listă de numere întregi, având lungimea <code>n</code>
* <code>k</code> - un număr întreg, inițial -1
 
Funcția începe prin a verifica cazul de bază <code>n == 0</code>, caz în care returnează valoarea lui <code>k</code>.
 
În caz contrar, verifică dacă ultimul element din lista <code>a</code> este un număr par (<code>a[n-1] % 2 == 0</code>). Dacă este par, verifică dacă <code>k</code> este -1, caz în care atribuie lui <code>k</code> valoarea elementului respectiv din lista <code>a</code>. În caz contrar, concatenază valoarea elementului din lista <code>a</code> cu <code>k</code>, transformând <code>k</code> într-un număr format din două sau mai multe cifre.
 
În final, funcția se autoapelează cu parametrii <code>n-1</code>, <code>a</code> și <code>k</code> și returnează valoarea rezultată de această apelare.


== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def validate_n(n):
    if isinstance(n, int) and 0 < n < 10:
        return True
    return False
def validate_a(a):
    if isinstance(a, list) and all(isinstance(x, int) for x in a) and len(a) == 10:
        return True
    return False
def validate_k(k):
    if isinstance(k, int):
        return True
    return False
def F(n, a, k):
def F(n, a, k):
     if n == 0:
     if n == 0:
Line 28: Line 53:
             k = int(str(a[n-1]) + str(k))
             k = int(str(a[n-1]) + str(k))
     return F(n-1, a, k)
     return F(n-1, a, k)
def main():
    n = input("Introduceți un număr întreg pozitiv n (0 < n < 10): ")
    try:
        n = int(n)
        if validate_n(n):
            a = []
            for i in range(10):
                elem = input(f"Introduceți elementul a[{i}]: ")
                elem = int(elem)
                a.append(elem)
            if validate_a(a):
                k = -1
                result = F(n, a, k)
                if validate_k(result):
                    print(f"Rezultatul este: {result}")
                else:
                    print("Nu s-a putut calcula rezultatul.")
            else:
                print("Lista a nu este validă.")
        else:
            print("Numărul introdus nu este valid.")
    except ValueError:
        print("Nu ați introdus un număr întreg.")
</syntaxhighlight>
</syntaxhighlight>

Revision as of 13:49, 6 April 2023

Cerinţa

Scrieți definiția completă a subprogramului recursiv F, care primește prin intermediul parametrului n un număr natural nenul (1≤n≤9), iar prin intermediul parametrului a, un tablou unidimensional care conţine n valori naturale, fiecare dintre acestea reprezentând câte o cifră a unui număr. Astfel, a0 reprezintă prima cifră a numărului, a1 a doua cifră, etc.

Subprogramul furnizează prin parametrul k o valoare naturală egală cu numărul obţinut din cifrele pare memorate în tabloul a sau valoarea -1 dacă în tablou nu există nicio cifră pară.

Restricţii şi precizări

  • 0 < n < 10
  • Numele subprogramului cerut este F
  • Parametrii sunt, în această ordine: n, a, k
  • Elementele vectorului a sunt indexate de la zero
  • Valoarea lui k nu va depăși 2000000000
  • Se recomandă realizarea unei soluții recursive

Exemplu

Dacă n=6 și a= (2, 3, 5, 6, 4, 1), după apel k=264.

Explicație

Funcția F primește trei argumente:

  • n - un număr întreg pozitiv, reprezentând numărul de elemente din lista a
  • a - o listă de numere întregi, având lungimea n
  • k - un număr întreg, inițial -1

Funcția începe prin a verifica cazul de bază n == 0, caz în care returnează valoarea lui k.

În caz contrar, verifică dacă ultimul element din lista a este un număr par (a[n-1] % 2 == 0). Dacă este par, verifică dacă k este -1, caz în care atribuie lui k valoarea elementului respectiv din lista a. În caz contrar, concatenază valoarea elementului din lista a cu k, transformând k într-un număr format din două sau mai multe cifre.

În final, funcția se autoapelează cu parametrii n-1, a și k și returnează valoarea rezultată de această apelare.

Rezolvare

<syntaxhighlight lang="python"> def validate_n(n):

   if isinstance(n, int) and 0 < n < 10:
       return True
   return False

def validate_a(a):

   if isinstance(a, list) and all(isinstance(x, int) for x in a) and len(a) == 10:
       return True
   return False

def validate_k(k):

   if isinstance(k, int):
       return True
   return False

def F(n, a, k):

   if n == 0:
       return k
   elif a[n-1] % 2 == 0:
       if k == -1:
           k = a[n-1]
       else:
           k = int(str(a[n-1]) + str(k))
   return F(n-1, a, k)

def main():

   n = input("Introduceți un număr întreg pozitiv n (0 < n < 10): ")
   try:
       n = int(n)
       if validate_n(n):
           a = []
           for i in range(10):
               elem = input(f"Introduceți elementul a[{i}]: ")
               elem = int(elem)
               a.append(elem)
           if validate_a(a):
               k = -1
               result = F(n, a, k)
               if validate_k(result):
                   print(f"Rezultatul este: {result}")
               else:
                   print("Nu s-a putut calcula rezultatul.")
           else:
               print("Lista a nu este validă.")
       else:
           print("Numărul introdus nu este valid.")
   except ValueError:
       print("Nu ați introdus un număr întreg.")

</syntaxhighlight>