1862 - CntCifKRec: Difference between revisions
Pagină nouă: == Cerinţa == Să se scrie o funcție Python recursivă cu trei parametri n, k, c și întoarce prin parametrul c numărul de cifre ale lui n care sunt mai mari sau egale decât k. == Restricţii şi precizări == * Numele funcției va fi cnt_cif * Funcția va avea trei parametri: n, k, c, cu semnificația de mai sus * 0 ≤ n ≤ 2.000.000.000 * 0 ≤ k ≤ 9 == Exemplu == După apelul cnt_cif(2750, 4, c), valoarea lui c va fi 2. == Important == Soluţia propusă va conţ... |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
* Numele funcției va fi cnt_cif | * Numele funcției va fi cnt_cif | ||
* Funcția va avea trei parametri: n, k, c, cu semnificația de mai sus | * Funcția va avea trei parametri: n, k, c, cu semnificația de mai sus | ||
* 0 | * 0 ⩽ n ⩽ 2.000.000.000 | ||
* 0 | * 0 ⩽ k ⩽ 9 | ||
== | ==Date de intrare== | ||
Programul citește de la tastatură numărul n și k. | |||
==Date de ieșire== | |||
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte.", apoi pe un rând nou un mesaj dat în funcție de valoarea returnată de funcția cnt_cif, reprezentând numărul cerut. În cazul în care n sau k depășește limitele date, se va afișa "Numarul introdus nu este valid.", iar dacă n sau k nu este întreg, se va afișa "Nu ati introdus un numar intreg." | |||
==Exemplu== | |||
; Intrare | |||
: Introduceti n: 2750 | |||
: Introduceti k: 4 | |||
; Ieșire | |||
: Datele introduse sunt corecte. | |||
: Numarul de cifre mai mari sau egale cu 4 din numarul 2750 este: 2 | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
def validate_input(n, k): | |||
if not isinstance(n, int) or not isinstance(k, int): | |||
return False | |||
if not (0 <= n <= 2000000000) or not (0 <= k <= 9): | |||
return False | |||
return True | |||
def cnt_cif(n, k, c): | def cnt_cif(n, k, c): | ||
if n < 9: | if n < 9: | ||
Line 23: | Line 39: | ||
if n % 10 >= k: | if n % 10 >= k: | ||
c[0] += 1 | c[0] += 1 | ||
if __name__ == "__main__": | |||
n = input("Introduceti n: ") | |||
k = input("Introduceti k: ") | |||
try: | |||
n = int(n) | |||
k = int(k) | |||
if validate_input(n, k): | |||
c = [0] # lista pentru a putea modifica valoarea in interiorul functiei | |||
cnt_cif(n, k, c) | |||
print("Datele introduse sunt corecte.") | |||
print(f"Numarul de cifre mai mari sau egale cu {k} din numarul {n} este: {c[0]}") | |||
else: | |||
print("Numarul introdus nu este valid.") | |||
except ValueError: | |||
print("Nu ati introdus un numar intreg.") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicație== | |||
Funcția `validate_input(n, k)` verifică dacă cele două argumente primite sunt numere întregi și dacă se încadrează în limitele specificate în cerință. Dacă da, returnează `True`, altfel `False`. | |||
Funcția `cnt_cif(n, k, c)` numără câte cifre din numărul `n` sunt mai mari sau egale cu `k`. Aceasta primește `n`, `k` și `c`, unde `c` este o listă care conține un singur element. Acest element va fi actualizat în interiorul funcției pentru a reflecta numărul de cifre din `n` care sunt mai mari sau egale cu `k`. | |||
În funcția `cnt_cif`, numerele sunt parcurse prin recursivitate de la cifra unităților până la cifra cea mai semnificativă. În timp ce numerele sunt parcurse, elementul din lista `c` este actualizat în funcție de cifrele care sunt mai mari sau egale cu `k`. | |||
În funcția principală `main`, se cere utilizatorului să introducă valorile `n` și `k`. Dacă valorile introduse sunt corecte, funcția `cnt_cif` este apelată pentru a număra cifrele mai mari sau egale cu `k` din `n`. Dacă valorile introduse nu sunt corecte, se afișează un mesaj de eroare. |
Latest revision as of 18:01, 27 April 2023
Cerinţa[edit | edit source]
Să se scrie o funcție Python recursivă cu trei parametri n, k, c și întoarce prin parametrul c numărul de cifre ale lui n care sunt mai mari sau egale decât k.
Restricţii şi precizări[edit | edit source]
- Numele funcției va fi cnt_cif
- Funcția va avea trei parametri: n, k, c, cu semnificația de mai sus
- 0 ⩽ n ⩽ 2.000.000.000
- 0 ⩽ k ⩽ 9
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n și k.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte.", apoi pe un rând nou un mesaj dat în funcție de valoarea returnată de funcția cnt_cif, reprezentând numărul cerut. În cazul în care n sau k depășește limitele date, se va afișa "Numarul introdus nu este valid.", iar dacă n sau k nu este întreg, se va afișa "Nu ati introdus un numar intreg."
Exemplu[edit | edit source]
- Intrare
- Introduceti n: 2750
- Introduceti k: 4
- Ieșire
- Datele introduse sunt corecte.
- Numarul de cifre mai mari sau egale cu 4 din numarul 2750 este: 2
Rezolvare[edit | edit source]
<syntaxhighlight lang="python"> def validate_input(n, k):
if not isinstance(n, int) or not isinstance(k, int): return False if not (0 <= n <= 2000000000) or not (0 <= k <= 9): return False return True
def cnt_cif(n, k, c):
if n < 9: if n >= k: c[0] += 1 else: cnt_cif(n // 10, k, c) if n % 10 >= k: c[0] += 1
if __name__ == "__main__":
n = input("Introduceti n: ") k = input("Introduceti k: ") try: n = int(n) k = int(k) if validate_input(n, k): c = [0] # lista pentru a putea modifica valoarea in interiorul functiei cnt_cif(n, k, c) print("Datele introduse sunt corecte.") print(f"Numarul de cifre mai mari sau egale cu {k} din numarul {n} este: {c[0]}") else: print("Numarul introdus nu este valid.") except ValueError: print("Nu ati introdus un numar intreg.")
</syntaxhighlight>
Explicație[edit | edit source]
Funcția `validate_input(n, k)` verifică dacă cele două argumente primite sunt numere întregi și dacă se încadrează în limitele specificate în cerință. Dacă da, returnează `True`, altfel `False`.
Funcția `cnt_cif(n, k, c)` numără câte cifre din numărul `n` sunt mai mari sau egale cu `k`. Aceasta primește `n`, `k` și `c`, unde `c` este o listă care conține un singur element. Acest element va fi actualizat în interiorul funcției pentru a reflecta numărul de cifre din `n` care sunt mai mari sau egale cu `k`.
În funcția `cnt_cif`, numerele sunt parcurse prin recursivitate de la cifra unităților până la cifra cea mai semnificativă. În timp ce numerele sunt parcurse, elementul din lista `c` este actualizat în funcție de cifrele care sunt mai mari sau egale cu `k`.
În funcția principală `main`, se cere utilizatorului să introducă valorile `n` și `k`. Dacă valorile introduse sunt corecte, funcția `cnt_cif` este apelată pentru a număra cifrele mai mari sau egale cu `k` din `n`. Dacă valorile introduse nu sunt corecte, se afișează un mesaj de eroare.