2826 - Duplicare1: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
Fără descriere a modificării
Linia 6: Linia 6:
Scrieți definiția completă a subprogramului în Python.
Scrieți definiția completă a subprogramului în Python.


==Date de intrare==  
==Date de intrare==
*'''n''': un număr natural între '''1 și 10^4 '''inclusiv.
Programul citește de la tastatură numărul n.
 
==Date de ieșire==
==Date de ieșire==
 
Dacă datele sunt introduse corect, pe ecran se va afișa: "Date de intrare valide", apoi pe un rând nou numărul cerut cu cifrele pare duplicate. În cazul în care numărul introdus nu corespunde restricțiilor date, se va afișa "Date de intrare invalide"
*'''d''': un număr întreg reprezentând rezultatul duplicării cifrelor pare din '''n'''. Dacă '''n''' nu are cifre pare, '''d '''va fi '''-1'''.


==Exemplu==
==Exemplu==
Dacă n=2380, după apel d=2238800.
; Intrare
 
: 2380
==Explicație==
; Ieșire
Funcția duplicare primește ca parametri un număr natural n și un număr d, prin care se furnizează valoarea calculată. Funcția parcurge cifrele numărului n și adaugă în numărul rezultat fie cifra respectivă de două ori (dacă este pară), fie o singură dată (dacă este impară). Dacă nu există nicio cifră pară în numărul n, funcția returnează -1.
: Date de intrare valide
: 2238800


==Rezolvare==
==Rezolvare==
Linia 23: Linia 23:
def validate_input(n: int, d: int) -> bool:
def validate_input(n: int, d: int) -> bool:
     # Verificăm dacă n este între 1 și 10^4
     # Verificăm dacă n este între 1 și 10^4
     if n < 1 or n > 10**4:
     if n < 1 or n > 10 ** 4:
         return False
         return False
   
 
     # Verificăm dacă d este între -1 și 10^9
     # Verificăm dacă d este între -1 și 10^9
     if d < -1 or d > 10**9:
     if d < -1 or d > 10 ** 9:
         return False
         return False
   
 
     return True
     return True


def duplicare(n: int, d: int) -> int:
def duplicare(n: int, d: int) -> int:
     # Initializăm numărul rezultat cu 0
     # Initializăm numărul rezultat cu 0
     result = 0
     result = 0
   
 
     # Parcurgem cifrele numărului n
     # Parcurgem cifrele numărului n
     while n > 0:
     while n > 0:
         # Extragerea ultimei cifre din n
         # Extragerea ultimei cifre din n
         cifra = n % 10
         cifra = n % 10
       
 
         # Dacă cifra este pară, o adăugăm de două ori în numărul rezultat
         # Dacă cifra este pară, o adăugăm de două ori în numărul rezultat
         if cifra % 2 == 0:
         if cifra % 2 == 0:
Linia 46: Linia 47:
         else:
         else:
             result = result * 10 + cifra
             result = result * 10 + cifra
       
 
         # Trecem la următoarea cifră
         # Trecem la următoarea cifră
         n //= 10
         n //= 10
   
 
     # Dacă nu am adăugat nicio cifră pară, returnăm -1
     # Dacă nu am adăugat nicio cifră pară, returnăm -1
     if result == 0:
     if result == 0:
Linia 56: Linia 57:
         return result
         return result


def main():
 
if __name__ == '__main__':
     # Citim numarul n de la tastatura
     # Citim numarul n de la tastatura
     n = int(input("Introduceti numarul n: "))
     n = int(input("Introduceti numarul n: "))
Linia 62: Linia 64:
     # Apelam subprogramul duplicare si afisam rezultatul
     # Apelam subprogramul duplicare si afisam rezultatul
     d = duplicare(n)
     d = duplicare(n)
    if not validate_input(n, d):
        print("Date de intrare invalide")
    else:
        print("Date de intrare valide")
     if d == -1:
     if d == -1:
         print("Numarul n nu are cifre pare")
         print("Numarul n nu are cifre pare")
Linia 67: Linia 73:
         print(f"Numarul obtinut prin duplicarea cifrelor pare din {n} este: {d}")
         print(f"Numarul obtinut prin duplicarea cifrelor pare din {n} este: {d}")


if __name__ == '__main__':
</syntaxhighlight>
    main()
 
==Explicație==
Acest program are două funcții și un bloc de cod principal:
 
1. Funcția `validate_input` primește doi parametri: `n` și `d`, ambele de tip int. Funcția verifică dacă `n` se află între 1 și 10^4 și dacă `d` se află între -1 și 10^9. Dacă ambele condiții sunt adevărate, funcția returnează True, altfel returnează False.
 
2. Funcția `duplicare` primește doi parametri: `n` și `d`, ambele de tip int. Funcția parcurge cifrele numărului `n` și, pentru fiecare cifră pară, o adaugă de două ori la `result`. Dacă `n` nu are cifre pare, funcția returnează -1. Altfel, funcția returnează numărul obținut prin duplicarea cifrelor pare.


</syntaxhighlight>
3. Blocul principal citește un număr întreg `n` de la tastatură, apelează funcția `duplicare` și afișează rezultatul. Dacă datele de intrare sunt invalide (potrivit funcției `validate_input`), se afișează un mesaj de eroare. Dacă `duplicare` returnează -1, se afișează un mesaj care indică că `n` nu are cifre pare, iar în caz contrar se afișează numărul obținut prin duplicarea cifrelor pare.

Versiunea de la data 3 mai 2023 05:42

Cerința

Subprogramul duplicare are doi parametri, în această ordine:

  • n, prin care primește un număr natural (n∈[1,104]);
  • d, prin care furnizează numărul obţinut prin duplicarea fiecărei cifre pare a lui n sau -1 dacă acesta nu are nicio cifră pară.

Scrieți definiția completă a subprogramului în Python.

Date de intrare

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

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Date de intrare valide", apoi pe un rând nou numărul cerut cu cifrele pare duplicate. În cazul în care numărul introdus nu corespunde restricțiilor date, se va afișa "Date de intrare invalide"

Exemplu

Intrare
2380
Ieșire
Date de intrare valide
2238800

Rezolvare

def validate_input(n: int, d: int) -> bool:
    # Verificăm dacă n este între 1 și 10^4
    if n < 1 or n > 10 ** 4:
        return False

    # Verificăm dacă d este între -1 și 10^9
    if d < -1 or d > 10 ** 9:
        return False

    return True


def duplicare(n: int, d: int) -> int:
    # Initializăm numărul rezultat cu 0
    result = 0

    # Parcurgem cifrele numărului n
    while n > 0:
        # Extragerea ultimei cifre din n
        cifra = n % 10

        # Dacă cifra este pară, o adăugăm de două ori în numărul rezultat
        if cifra % 2 == 0:
            result = result * 100 + cifra * 10 + cifra
        else:
            result = result * 10 + cifra

        # Trecem la următoarea cifră
        n //= 10

    # Dacă nu am adăugat nicio cifră pară, returnăm -1
    if result == 0:
        return -1
    else:
        return result


if __name__ == '__main__':
    # Citim numarul n de la tastatura
    n = int(input("Introduceti numarul n: "))

    # Apelam subprogramul duplicare si afisam rezultatul
    d = duplicare(n)
    if not validate_input(n, d):
        print("Date de intrare invalide")
    else:
        print("Date de intrare valide")
    if d == -1:
        print("Numarul n nu are cifre pare")
    else:
        print(f"Numarul obtinut prin duplicarea cifrelor pare din {n} este: {d}")

Explicație

Acest program are două funcții și un bloc de cod principal:

1. Funcția `validate_input` primește doi parametri: `n` și `d`, ambele de tip int. Funcția verifică dacă `n` se află între 1 și 10^4 și dacă `d` se află între -1 și 10^9. Dacă ambele condiții sunt adevărate, funcția returnează True, altfel returnează False.

2. Funcția `duplicare` primește doi parametri: `n` și `d`, ambele de tip int. Funcția parcurge cifrele numărului `n` și, pentru fiecare cifră pară, o adaugă de două ori la `result`. Dacă `n` nu are cifre pare, funcția returnează -1. Altfel, funcția returnează numărul obținut prin duplicarea cifrelor pare.

3. Blocul principal citește un număr întreg `n` de la tastatură, apelează funcția `duplicare` și afișează rezultatul. Dacă datele de intrare sunt invalide (potrivit funcției `validate_input`), se afișează un mesaj de eroare. Dacă `duplicare` returnează -1, se afișează un mesaj care indică că `n` nu are cifre pare, iar în caz contrar se afișează numărul obținut prin duplicarea cifrelor pare.