4212 - IncCifPare: Difference between revisions
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 ''' | 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 ''' | Programul citește de la tastatură numărul '''n'''. | ||
== Date de ieșire == | == 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 == | == Restricții și precizări == | ||
* 0 ≤ ''' | * 0 ≤ '''n''' ≤ 1.000.000.000 | ||
== Exemplu == | == Exemplu == | ||
; Intrare | ; Intrare | ||
Line 15: | Line 16: | ||
: 1335 | : 1335 | ||
== Rezolvare == | == Rezolvare == | ||
def | <syntaxhighlight lang="python" line> | ||
#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 | while n > 0: | ||
cifra = | 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 | ||
n = n // 10 | |||
return r | |||
if __name__ == '__main__': | 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'''. <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>
- 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.