2674 - IncDecRec: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
Line 6: Line 6:


==Date de ieșire==
==Date de ieșire==
Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse."
Dacă datele de intrare corespund restrictiilor impuse se va afișa mesajul "Datele de intrare corespund restricțiilor" și pe un rând nou se afișează ceea ce se cere. Altfel, dacă datele de intrare nu corespund cerinței se va afișa mesajul: "Datele de intrare nu corespund cerinței".
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse.".
 


==Restricții și precizări==
==Restricții și precizări==
Line 15: Line 15:


==Exemplu==
==Exemplu==
===Exemplu 1===
<syntaxhighlight lang="python" line>
Introduceți un număr natural: 4321
Introduceți un număr natural: 4321
Datele de intrare corespund restricțiilor impuse.
Datele de intrare corespund restricțiilor impuse.
Rezultatul este: 5230
Rezultatul este: 5230
</syntaxhighlight>
===Exemplu 2===
<syntaxhighlight lang="python" line>
Introduceti un numar: -1241
Datele de intrare nu corespund restrictiilor impuse.
</syntaxhighlight>


==Rezolvare==
==Rezolvare==
  def IncDecRec(n):
  <syntaxhighlight lang="python" line>
     if n == 0:
 
         return 0
def cifmaxpar(numar):
    last_digit = n % 10
    #Returneaza cea mai mare cifra para a unui numar dat.
    if last_digit % 2 == 0:
    #Daca numarul nu contine nicio cifra para, se returneaza -1.
         last_digit += 1
     if numar < 0 or numar >= 2000000000:
        print("Datele de intrare nu corespund restrictiilor impuse.")
         return None
    max_cifra_para = -1
    while numar > 0:
        cifra = numar % 10
        if cifra % 2 == 0 and cifra > max_cifra_para:
            max_cifra_para = cifra
         numar //= 10
    if max_cifra_para == -1:
        return -1
     else:
     else:
         last_digit -= 1
         return max_cifra_para
    return IncDecRec(n // 10) * 10 + last_digit
 
#Funcția de validare:
def main():
def validate_input(n):
    numar = int(input("Introduceti un numar: "))
     if 0 <= n <= 999_999_999:
    cifra_max = cifmaxpar(numar)
         print("Datele de intrare corespund restricțiilor impuse.")
    if cifra_max == None:
        return True
        return
     elif cifra_max == -1:
         print("Numarul dat nu contine nicio cifra para.")
     else:
     else:
         print("Datele de intrare nu corespund restricțiilor impuse.")
         print("Datele de intrare corespund restrictiilor impuse.")
        return False
         print(f"Cea mai mare cifra para a numarului dat este {cifra_max}.")
#Funcția main:
 
def main():
if __name__ == "__main__":
    n = int(input("Introduceți un număr natural: "))
    if validate_input(n):
         print(f"Rezultatul este: {IncDecRec(n)}")
if __name__ == "__main__":
     main()
     main()
</syntaxhighlight>

Revision as of 20:04, 30 March 2023

Cerinţa

Scrieți funcția recursivă IncDecRec care primind ca parametru un număr natural n, returnează numărul obținut din n prin scăderea cu 1 a fiecărei cifre impare și creșterea cu 1 a fiecărei cifre pare.

Date de intrare

Se va introduce de la tastatură un număr natural care va fi transmis ca perimetru

Date de ieșire

Dacă datele de intrare corespund restrictiilor impuse se va afișa mesajul "Datele de intrare corespund restricțiilor" și pe un rând nou se afișează ceea ce se cere. Altfel, dacă datele de intrare nu corespund cerinței se va afișa mesajul: "Datele de intrare nu corespund cerinței".


Restricții și precizări

0 ≤ n ≤ 999.999.999 Numele funcției este IncDecRec. Se recomandă utilizarea recursivității în rezolvarea problemei. De asemenea, se recomandă să nu se folosească alte funcții suplimentare.

Exemplu

Exemplu 1

<syntaxhighlight lang="python" line> Introduceți un număr natural: 4321 Datele de intrare corespund restricțiilor impuse. Rezultatul este: 5230 </syntaxhighlight>

Exemplu 2

<syntaxhighlight lang="python" line> Introduceti un numar: -1241 Datele de intrare nu corespund restrictiilor impuse. </syntaxhighlight>

Rezolvare

<syntaxhighlight lang="python" line>

def cifmaxpar(numar):

   #Returneaza cea mai mare cifra para a unui numar dat.
   #Daca numarul nu contine nicio cifra para, se returneaza -1.
   if numar < 0 or numar >= 2000000000:
       print("Datele de intrare nu corespund restrictiilor impuse.")
       return None
   max_cifra_para = -1
   while numar > 0:
       cifra = numar % 10
       if cifra % 2 == 0 and cifra > max_cifra_para:
           max_cifra_para = cifra
       numar //= 10
   if max_cifra_para == -1:
       return -1
   else:
       return max_cifra_para

def main():

   numar = int(input("Introduceti un numar: "))
   cifra_max = cifmaxpar(numar)
   if cifra_max == None:
       return
   elif cifra_max == -1:
       print("Numarul dat nu contine nicio cifra para.")
   else:
       print("Datele de intrare corespund restrictiilor impuse.")
       print(f"Cea mai mare cifra para a numarului dat este {cifra_max}.")

if __name__ == "__main__":

   main()

</syntaxhighlight>