4212 - IncCifPare: Difference between revisions

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


== Cerința ==
== Cerința ==
Să se scrie un program care citește un număr natural '''numar''' și care crește cu 1 valoarea cifrelor pare. De exemplu, dacă '''numar'''=1234 atunci se va obține numărul 1335, iar dacă '''numar'''=135 atunci numărul rămâne neschimbat.
Să se scrie un program care citește un număr natural '''n''' și care crește cu 1 valoarea cifrelor pare. De exemplu, dacă '''n'''=1234 atunci se va obține numărul 1335, iar dacă '''n'''=135 atunci numărul rămâne neschimbat.
== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numărul '''numar'''.
Programul citește de la tastatură numărul '''n'''.
== Date de ieșire ==
== Date de ieșire ==
Programul va afișa pe ecran numărul obținut prin creșterea cu 1 a cifrelor pare ale lui '''numar'''.
Dacă datele introduse sunt corecte, pe ecran se va afișa mesajul: '''"Datele sunt introduse corect."''', apoi programul va afișa numărul obținut prin creșterea cu 1 a cifrelor pare ale lui '''n'''. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."''''.
 
== Restricții și precizări ==
== Restricții și precizări ==
* 0 ≤ '''numar''' ≤ 1.000.000.000
* 0 ≤ '''n''' ≤ 1.000.000.000
== Exemplu ==
== Exemplu ==
; Intrare
; Intrare
Line 15: Line 16:
: 1335
: 1335
== Rezolvare ==
== Rezolvare ==
def cresterecifrepare():
<syntaxhighlight lang="python" line>
     numar = int(input())
#4212
 
def verificare_numar(n: int) -> bool:
     return 0 <= n <= 1000000000
 
def creste_cifre_pare(n: int) -> int:
     r = 0
     r = 0
     p = 1
     p = 1
     while numar > 0:
     while n > 0:
         cifra = numar % 10
         cifra = n % 10
         if cifra % 2 == 0:
         if cifra % 2 == 0:
             cifra += 1
             cifra += 1
         r += cifra * p
         r += cifra * p
         p = p * 10
         p = p * 10
         numar = numar // 10
         n = n // 10
     print(r)
     return r


if __name__ == '__main__':
if __name__ == '__main__':
     cresterecifrepare()
     n = int(input("Introduceti un numar natural: "))
    if not verificare_numar(n):
        print("Datele nu corespund restricțiilor impuse.")
        exit()
    print("Datele introduse sunt corecte.")
    rezultat = creste_cifre_pare(n)
    print(f"Numarul obtinut este: {rezultat}")
 
 
 
</syntaxhighlight>
 
== Explicație rezolvare ==
Funcția '''verificare_numar''' primește un parametru '''n''' și returnează '''True''' dacă '''n''' este un număr întreg între 0 și 1000000000 (conform restricțiilor din cerință), altfel returnează '''False'''. <br><br>Funcția '''creste_cifre_pare''' primește un număr întreg '''n''' și folosește o buclă '''while''' pentru a parcurge cifrele lui de la dreapta la stânga. Pentru fiecare cifră, se verifică dacă este pară și, dacă este, se crește cu 1. Apoi, cifra este adunată la rezultatul '''r''', care se actualizează în fiecare iterație prin înmulțirea cu '''p''', care reprezintă puterea de '''10''' corespunzătoare poziției curente a cifrei în numărul inițial. La final, funcția returnează '''r'''.<br><br>În funcția '''main''', utilizatorul este întâmpinat cu un mesaj de introducere și se citește numărul '''n''' de la tastatură folosind input. Apoi, se verifică dacă '''n''' este valid folosind '''verificare_numar'''. Dacă nu este, se afișează un mesaj de eroare și programul se încheie folosind '''exit()'''. Dacă este valid, se calculează numărul obținut prin apelul funcției '''creste_cifre_pare''' și se afișează pe ecran folosind print.

Revision as of 17:46, 27 April 2023

Sursa: [1]

Cerința

Să se scrie un program care citește un număr natural n și care crește cu 1 valoarea cifrelor pare. De exemplu, dacă n=1234 atunci se va obține numărul 1335, iar dacă n=135 atunci numărul rămâne neschimbat.

Date de intrare

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

Date de ieșire

Dacă datele introduse sunt corecte, pe ecran se va afișa mesajul: "Datele sunt introduse corect.", apoi programul va afișa numărul obținut prin creșterea cu 1 a cifrelor pare ale lui n. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."'.

Restricții și precizări

  • 0 ≤ n ≤ 1.000.000.000

Exemplu

Intrare
1234
Ieșire
1335

Rezolvare

<syntaxhighlight lang="python" line>

  1. 4212

def verificare_numar(n: int) -> bool:

   return 0 <= n <= 1000000000

def creste_cifre_pare(n: int) -> int:

   r = 0
   p = 1
   while n > 0:
       cifra = n % 10
       if cifra % 2 == 0:
           cifra += 1
       r += cifra * p
       p = p * 10
       n = n // 10
   return r

if __name__ == '__main__':

   n = int(input("Introduceti un numar natural: "))
   if not verificare_numar(n):
       print("Datele nu corespund restricțiilor impuse.")
       exit()
   print("Datele introduse sunt corecte.")
   rezultat = creste_cifre_pare(n)
   print(f"Numarul obtinut este: {rezultat}")


</syntaxhighlight>

Explicație rezolvare

Funcția verificare_numar primește un parametru n și returnează True dacă n este un număr întreg între 0 și 1000000000 (conform restricțiilor din cerință), altfel returnează False.

Funcția creste_cifre_pare primește un număr întreg n și folosește o buclă while pentru a parcurge cifrele lui de la dreapta la stânga. Pentru fiecare cifră, se verifică dacă este pară și, dacă este, se crește cu 1. Apoi, cifra este adunată la rezultatul r, care se actualizează în fiecare iterație prin înmulțirea cu p, care reprezintă puterea de 10 corespunzătoare poziției curente a cifrei în numărul inițial. La final, funcția returnează r.

În funcția main, utilizatorul este întâmpinat cu un mesaj de introducere și se citește numărul n de la tastatură folosind input. Apoi, se verifică dacă n este valid folosind verificare_numar. Dacă nu este, se afișează un mesaj de eroare și programul se încheie folosind exit(). Dacă este valid, se calculează numărul obținut prin apelul funcției creste_cifre_pare și se afișează pe ecran folosind print.