1862 - CntCifKRec: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
No edit summary
Cata (talk | contribs)
 
(One intermediate revision 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 n 2.000.000.000
* 0 ⩽ n ⩽ 2.000.000.000
* 0 k 9
* 0 ⩽ k ⩽ 9
== Exemplu ==
După apelul cnt_cif(2750, 4, c), valoarea lui c va fi 2.


== Explicație ==
==Date de intrare==
Această funcție primește un număr întreg pozitiv <code>n</code>, un număr întreg <code>k</code> și o listă <code>c</code> cu un element. Scopul său este de a număra numărul de cifre din numărul <code>n</code> care sunt mai mari sau egale cu <code>k</code>, și de a stoca această valoare în lista <code>c</code>.
Programul citește de la tastatură numărul n și k.


Funcția primește parametrii <code>n</code>, <code>k</code> și <code>c</code>, iar lista <code>c</code> trebuie să fie o listă cu un singur element, astfel încât valoarea numărătorului să poată fi stocată și accesată prin referință.
==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."


Funcția începe prin verificarea cazului de bază, adică cazul în care <code>n</code> este un singur cifră și verifică dacă această cifră este mai mare sau egală cu <code>k</code>. Dacă este adevărat, valoarea stocată în lista <code>c</code> este crescută cu 1.
==Exemplu==
 
; Intrare
În caz contrar, se face o apelare recursivă a funcției, cu noul parametru <code>n</code> fără ultima cifră și aceleași valori pentru <code>k</code> și <code>c</code>. Apoi, funcția verifică dacă ultima cifră a lui <code>n</code> este mai mare sau egală cu <code>k</code>, și dacă este adevărat, valoarea stocată în lista <code>c</code> este crescută cu 1.
: Introduceti n: 2750
 
: Introduceti k: 4
Astfel, după ce toate cifrele din numărul <code>n</code> au fost verificate, lista <code>c</code> conține numărul de cifre din numărul <code>n</code> care sunt mai mari sau egale cu <code>k</code>.
; Ieșire
: Datele introduse sunt corecte.
: Numarul de cifre mai mari sau egale cu 4 din numarul 2750 este: 2


== Rezolvare ==
== Rezolvare ==
Line 39: Line 40:
             c[0] += 1
             c[0] += 1


def main():
if __name__ == "__main__":
     n = input("Introduceti n: ")
     n = input("Introduceti n: ")
     k = input("Introduceti k: ")
     k = input("Introduceti k: ")
Line 48: Line 49:
             c = [0]  # lista pentru a putea modifica valoarea in interiorul functiei
             c = [0]  # lista pentru a putea modifica valoarea in interiorul functiei
             cnt_cif(n, k, c)
             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]}")
             print(f"Numarul de cifre mai mari sau egale cu {k} din numarul {n} este: {c[0]}")
         else:
         else:
             print("Input invalid!")
             print("Numarul introdus nu este valid.")
     except ValueError:
     except ValueError:
         print("Input invalid!")
         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.