1842 - CreareNumarRec
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 listaaa- o listă de numere întregi, având lungimeank- 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>