2826 - Duplicare1: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
 
(Nu s-au afișat 3 versiuni intermediare efectuate de alți 2 utilizatori)
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.
: Datele de intrare nu corespund restrictiilor impuse.
: 2238800


==Rezolvare==
==Rezolvare==
<syntaxhighlight lang="python>
<syntaxhighlight lang="python>
def validate_input(n: int, d: int) -> bool:
def validate_input(n):
     # Verificăm dacă n este între 1 și 10^4
     return 1 <= int(n) <= 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
def duplicare(n):
    result = 0
     even_digits = [c for c in n if int(c) % 2 == 0]
   
     if not even_digits:
    # Parcurgem cifrele numărului n
         return '-1'
    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:
     else:
         return result
         return ''.join([c + c if int(c) % 2 == 0 else c for c in n])


def main():
    # Citim numarul n de la tastatura
    n = int(input("Introduceti numarul n: "))


    # Apelam subprogramul duplicare si afisam rezultatul
if __name__ == '__main__':
     d = duplicare(n)
     n = input("Introduceti numarul n: ")
     if d == -1:
     if not validate_input(n):
         print("Numarul n nu are cifre pare")
         print("Datele de intrare nu corespund restrictiilor impuse.")
     else:
     else:
        print("Datele de intrare nu corespund restrictiilor impuse.")
        d = duplicare(n)
         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__':
    main()


</syntaxhighlight>
</syntaxhighlight>
==Explicație==
Functia "validate_input(n)" este folosita pentru a verifica daca numarul introdus "n" este intre 1 si 10^4. Aceasta functie primeste ca parametru un string "n", pe care il converteste in integer si il compara cu intervalul specificat. Daca numarul nu se incadreaza in acest interval, functia va returna "False", altfel va returna "True".
Functia "duplicare(n)" primeste un numar "n" sub forma de string si cauta cifrele pare din acesta. Daca nu exista nicio cifra para, functia va returna "-1". Daca exista cifre pare, acestea vor fi duplicate, in timp ce cifrele impare vor fi lasate neschimbate. Functia va returna numarul obtinut prin duplicarea cifrelor pare sub forma de string.
Blocul "if name == 'main':" este folosit pentru a verifica daca acest fisier este rulat direct sau importat ca modul. In cazul in care este rulat direct, se va afisa un mesaj de introducere pentru utilizator, iar apoi se va verifica daca numarul introdus este valid folosind functia "validate_input". Daca nu este valid, se va afisa un mesaj corespunzator. Daca numarul este valid, se va apela functia "duplicare" si se va afisa rezultatul obtinut.

Versiunea curentă din 6 mai 2023 18:12

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
Datele de intrare nu corespund restrictiilor impuse.
2238800

Rezolvare

def validate_input(n):
    return 1 <= int(n) <= 10 ** 4


def duplicare(n):
    even_digits = [c for c in n if int(c) % 2 == 0]
    if not even_digits:
        return '-1'
    else:
        return ''.join([c + c if int(c) % 2 == 0 else c for c in n])


if __name__ == '__main__':
    n = input("Introduceti numarul n: ")
    if not validate_input(n):
        print("Datele de intrare nu corespund restrictiilor impuse.")
    else:
        print("Datele de intrare nu corespund restrictiilor impuse.")
        d = duplicare(n)
        print(f"Numarul obtinut prin duplicarea cifrelor pare din {n} este: {d}")

Explicație

Functia "validate_input(n)" este folosita pentru a verifica daca numarul introdus "n" este intre 1 si 10^4. Aceasta functie primeste ca parametru un string "n", pe care il converteste in integer si il compara cu intervalul specificat. Daca numarul nu se incadreaza in acest interval, functia va returna "False", altfel va returna "True".

Functia "duplicare(n)" primeste un numar "n" sub forma de string si cauta cifrele pare din acesta. Daca nu exista nicio cifra para, functia va returna "-1". Daca exista cifre pare, acestea vor fi duplicate, in timp ce cifrele impare vor fi lasate neschimbate. Functia va returna numarul obtinut prin duplicarea cifrelor pare sub forma de string.

Blocul "if name == 'main':" este folosit pentru a verifica daca acest fisier este rulat direct sau importat ca modul. In cazul in care este rulat direct, se va afisa un mesaj de introducere pentru utilizator, iar apoi se va verifica daca numarul introdus este valid folosind functia "validate_input". Daca nu este valid, se va afisa un mesaj corespunzator. Daca numarul este valid, se va apela functia "duplicare" si se va afisa rezultatul obtinut.