4208 - ExistaImpareRec: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Pagină nouă: == Cerința == Scrieți funcția recursivă <span style="color: red;">ExistaImpareRec</span> care primind ca parametru un număr natural <span style="color: red;">n</span>, returnează <span style="color: red;">1</span> dacă <span style="color: red;">n</span> conține cel puțin o cifră impară, sau returnează <span style="color: red;">0</span> dacă <span style="color: red;">n</span> conține doar cifre pare. == Restricții și precizări == * <span style="color: red;">0...
 
Cata (talk | contribs)
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Cerința ==
== Cerința ==
Scrieți funcția recursivă <span style="color: red;">ExistaImpareRec</span> care primind ca parametru un număr natural <span style="color: red;">n</span>, returnează <span style="color: red;">1</span> dacă <span style="color: red;">n</span> conține cel puțin o cifră impară, sau returnează <span style="color: red;">0</span> dacă <span style="color: red;">n</span> conține doar cifre pare.
Scrieți funcția recursivă ExistaImpareRec care primind ca parametru un număr natural n, returnează 1 dacă n conține cel puțin o cifră impară, sau returnează 0 dacă n conține doar cifre pare.
== Restricții și precizări ==  
== Restricții și precizări ==  
* <span style="color: red;">0 ≤ n ≤ 231 - 1</span>
* 0 ≤ n ≤ 2<sup>31</sup> - 1
* Numele funcției este <span style="color: red;">ExistaImpareRec</span>.
* Numele funcției este ExistaImpareRec.
* Se recomandă utilizarea recursivității în rezolvarea problemei.
* Se recomandă utilizarea recursivității în rezolvarea problemei.
== Exemplu ==
==Date de intrare==
<span style="color: red;">ExistaImpareRec(240) = 0</span> și <span style="color: red;">ExistaImpareRec(2134) = 1</span>.
Programul citește de la tastatură numărul n.
== Important ==
 
Soluția propusă va conține doar funcția cerută. Introducerea în soluție a altor instrucțiuni poate duce la erori de compilare sau de execuție, care vor duce la depunctarea soluției.
==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 mesajul cerut în funcție de cifrele pare ale numărului introdus. În cazul în care numărul introdus depășește limitele date, se va afișa "Numarul introdus nu este valid.", iar dacă numărul introdus nu este întreg, se va afișa "Nu ati introdus un numar intreg."
== Exemplu 1 ==
; Intrare
: Introduceti un numar intreg intre 0 si 2^31 - 1: 240
; Ieșire
: Datele introduse sunt corecte.
: Toate cifrele numarului 240 sunt pare.
==Exemplu 2==
; Intrare
: Introduceti un numar intreg intre 0 si 2^31 - 1: 2134
; Ieșire
: Datele introduse sunt corecte.
: Exista cel putin o cifra impara in numarul 2134.
== Rezolvare ==
== Rezolvare ==
=== Varianta 1 ===
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def validate_n(n):
    if isinstance(n, int) and n >= 0 and n <= 2**31 - 1:
        return True
    else:
        return False
def ExistaImpareRec(n):
def ExistaImpareRec(n):
     if n == 0:
     if n == 0:
Line 19: Line 38:
     else:
     else:
         return ExistaImpareRec(n // 10)
         return ExistaImpareRec(n // 10)
if __name__ == "__main__":
    n = input("Introduceti un numar intreg intre 0 si 2^31 - 1: ")
    try:
        n = int(n)
        if validate_n(n):
            result = ExistaImpareRec(n)
            print("Datele introduse sunt corecte.")
            if result == 1:
                print(f"Exista cel putin o cifra impara in numarul {n}.")
            else:
                print(f"Toate cifrele numarului {n} sunt pare.")
        else:
            print("Numarul introdus nu este valid.")
    except ValueError:
        print("Nu ati introdus un numar intreg.")
</syntaxhighlight>
</syntaxhighlight>
==Explicație==
* validate_n(n) - Verifică dacă n este un întreg pozitiv și se încadrează în intervalul 0 și 2^31 - 1. În caz contrar, returnează False.
* ExistaImpareRec(n) - Verifică recursiv dacă ultima cifră a lui n este impară. Dacă n este zero, returnează 0 pentru a indica că numărul nu conține cifre impare. În caz contrar, verifică dacă ultima cifră este impară. Dacă este impară, returnează 1. Altfel, apelează funcția cu n împărțit la 10, pentru a verifica următoarea cifră.
* if __name__ == "__main__": - Acesta este punctul de intrare în program. În această secțiune, utilizatorul poate introduce un număr întreg n. Codul verifică dacă n este un număr întreg valid și se încadrează în intervalul specificat. În caz afirmativ, apelul ExistaImpareRec(n) și afișează un mesaj corespunzător.

Latest revision as of 07:15, 3 May 2023

Cerința[edit]

Scrieți funcția recursivă ExistaImpareRec care primind ca parametru un număr natural n, returnează 1 dacă n conține cel puțin o cifră impară, sau returnează 0 dacă n conține doar cifre pare.

Restricții și precizări[edit]

  • 0 ≤ n ≤ 231 - 1
  • Numele funcției este ExistaImpareRec.
  • Se recomandă utilizarea recursivității în rezolvarea problemei.

Date de intrare[edit]

Programul citește de la tastatură numărul n.

Date de ieșire[edit]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte.", apoi pe un rând nou mesajul cerut în funcție de cifrele pare ale numărului introdus. În cazul în care numărul introdus depășește limitele date, se va afișa "Numarul introdus nu este valid.", iar dacă numărul introdus nu este întreg, se va afișa "Nu ati introdus un numar intreg."

Exemplu 1[edit]

Intrare
Introduceti un numar intreg intre 0 si 2^31 - 1: 240
Ieșire
Datele introduse sunt corecte.
Toate cifrele numarului 240 sunt pare.

Exemplu 2[edit]

Intrare
Introduceti un numar intreg intre 0 si 2^31 - 1: 2134
Ieșire
Datele introduse sunt corecte.
Exista cel putin o cifra impara in numarul 2134.

Rezolvare[edit]

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

   if isinstance(n, int) and n >= 0 and n <= 2**31 - 1:
       return True
   else:
       return False


def ExistaImpareRec(n):

   if n == 0:
       return 0
   elif n % 2 == 1:
       return 1
   else:
       return ExistaImpareRec(n // 10)

if __name__ == "__main__":

   n = input("Introduceti un numar intreg intre 0 si 2^31 - 1: ")
   try:
       n = int(n)
       if validate_n(n):
           result = ExistaImpareRec(n)
           print("Datele introduse sunt corecte.")
           if result == 1:
               print(f"Exista cel putin o cifra impara in numarul {n}.")
           else:
               print(f"Toate cifrele numarului {n} sunt pare.")
       else:
           print("Numarul introdus nu este valid.")
   except ValueError:
       print("Nu ati introdus un numar intreg.")

</syntaxhighlight>

Explicație[edit]

  • validate_n(n) - Verifică dacă n este un întreg pozitiv și se încadrează în intervalul 0 și 2^31 - 1. În caz contrar, returnează False.
  • ExistaImpareRec(n) - Verifică recursiv dacă ultima cifră a lui n este impară. Dacă n este zero, returnează 0 pentru a indica că numărul nu conține cifre impare. În caz contrar, verifică dacă ultima cifră este impară. Dacă este impară, returnează 1. Altfel, apelează funcția cu n împărțit la 10, pentru a verifica următoarea cifră.
  • if __name__ == "__main__": - Acesta este punctul de intrare în program. În această secțiune, utilizatorul poate introduce un număr întreg n. Codul verifică dacă n este un număr întreg valid și se încadrează în intervalul specificat. În caz afirmativ, apelul ExistaImpareRec(n) și afișează un mesaj corespunzător.