3119 - Impare Bac: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerință== Subprogramul '''Impare''' are un singur parametru, '''n''', prin care primește un număr natural. Subprogramul înlocuiește fiecare cifră impară a lui '''n''' cu cea mai mare cifră pară strict mai mică decât ea (astfel cifra '''1''' se înlocuieşte cu cifra '''0''', cifra '''3''' cu cifra '''2''' etc.) și furnizează numărul obținut tot prin parametrul '''n'''. Scrieți definiția completă a subprogramului. ==Restricții de precizări== *'''≤...
 
 
(6 intermediate revisions by 2 users not shown)
Line 5: Line 5:
Scrieți definiția completă a subprogramului.
Scrieți definiția completă a subprogramului.


==Date de intrare== 
Se citește de la tastatură n număr natural '''n''', cu 1 ≤ n ≤ 1.000.000.000'''.
==Date de ieșire==
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afița numărul obținut prin înlocuirea fiecărei cifre impare a lui n cu cea mai mare cifră pară strict mai mică decât ea. Rezultatul va fi returnat prin parametrul '''n'''. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."


==Restricții de precizări==
==Restricții de precizări==
Line 15: Line 21:
==Exemplu==
==Exemplu==


Dacă '''n=235690''', atunci, după apel, '''n=224680''', iar dacă '''n=15690''', atunci, după apel, '''n=4680'''.
===Exemplul 1===
;Intrare
:235690
;Ieșire
:224680


===Exemplul 2===
;Intrare
:15690
;Ieșire
:4680


==Important==
==Important==
Line 27: Line 42:
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">


def Impare(n):
def validare(n):
     digits = [int(d) for d in str(n)]  # obținem lista de cifre a numărului n
     if n < 1 or n > 1000000000:
    for i in range(len(digits)):
         return False
         if digits[i] % 2 != 0:  # dacă cifra este impară
     return True
            max_even_digit = -1
            for j in range(digits[i]-1, -1, -1):  # căutăm cea mai mare cifră pară strict mai mică decât ea
                if j % 2 == 0:
                    max_even_digit = j
                    break
            if max_even_digit != -1:  # dacă există o cifră pară mai mică decât cifra impară
                digits[i] = max_even_digit  # înlocuim cifra impară cu cea mai mare cifră pară mai mică decât ea
     n = int(''.join(map(str, digits)))  # reconstruim numărul cu cifrele modificate


# Exemplu de folosire a funcției
def impare(n):
n = 235690
    cifre = list(str(n))
Impare(n)
    for i in range(len(cifre)):
print(n) # rezultatul afișat trebuie să fie 224680
        if int(cifre[i]) % 2 != 0:
            cifre[i] = str(int(cifre[i]) - 1)
            j = i - 1
            while j >= 0 and int(cifre[j]) == 8:
                j -= 1
            if j >= 0:
                cifre[j] = str(int(cifre[j]) + 2)
    n = int("".join(cifre))
    return n


# Funcția main pentru citirea de la tastatură și afișarea rezultatului
if __name__ == "__main__":
if __name__ == "__main__":
     n = int(input("Introduceți un număr natural: "))
     n = input("Introduceti numarul: ")
    Impare(n)
    if validare(n):
    print("Numărul cu cifrele impare înlocuite este:", n)
        n = int(n)
        print("Datele de intrare corespund restrictiilor impuse.")
        n = impare(n)
        print("Numarul inlocuit: ", n)
    else:
        print("Datele de intrare nu corespund restrictiilor impuse.")
 


</syntaxhighlight>
</syntaxhighlight>
==Explicatii==
Funcția Impare(n) primește un număr întreg n și returnează același număr, dar înlocuiește cifrele impare cu cea mai mare cifră pară, strict mai mică decât cifra impară înlocuită.
Pentru a face această înlocuire, funcția transformă numărul n într-o listă de cifre cu ajutorul funcției list(str(n)). Apoi, parcurge lista de cifre și verifică dacă fiecare cifră este impară.
Dacă cifra este impară, aceasta este înlocuită cu cea mai mare cifră pară, mai mică decât cifra impară înlocuită. Mai precis, se scade 1 din cifra impară și se caută cea mai mare cifră pară strict mai mică decât cifra impară înlocuită, parcurgând lista în sens invers.
La final, funcția reconstruiește numărul original din lista de cifre prin concatenarea acestora cu ajutorul funcției " ".join(cifre)) și transformă string-ul obținut înapoi într-un număr întreg prin intermediul funcției int().
Funcția validare(n) verifică dacă numărul n se încadrează în intervalul permis, și anume între 1 și 1000000000.
În cadrul blocului if __name__ == "__main__":, se citește un număr de la tastatură și se verifică dacă respectă restricțiile prin intermediul funcției validare(n). În caz afirmativ, se apelează funcția Impare(n) și se afișează rezultatul obținut, altfel se afișează un mesaj corespunzător.

Latest revision as of 15:05, 6 May 2023

Cerință[edit | edit source]

Subprogramul Impare are un singur parametru, n, prin care primește un număr natural. Subprogramul înlocuiește fiecare cifră impară a lui n cu cea mai mare cifră pară strict mai mică decât ea (astfel cifra 1 se înlocuieşte cu cifra 0, cifra 3 cu cifra 2 etc.) și furnizează numărul obținut tot prin parametrul n.

Scrieți definiția completă a subprogramului.


Date de intrare[edit | edit source]

Se citește de la tastatură n număr natural n, cu 1 ≤ n ≤ 1.000.000.000.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afița numărul obținut prin înlocuirea fiecărei cifre impare a lui n cu cea mai mare cifră pară strict mai mică decât ea. Rezultatul va fi returnat prin parametrul n. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții de precizări[edit | edit source]

  • ≤ n ≤ 1.000.000.000
  • Numele funcției va fi Impare
  • Funcția va primi un singur parametru, numărul n, iar la finalul funcției n va avea valoarea cerută.


Exemplu[edit | edit source]

Exemplul 1[edit | edit source]

Intrare
235690
Ieșire
224680

Exemplul 2[edit | edit source]

Intrare
15690
Ieșire
4680

Important[edit | edit source]

Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.


Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1">

def validare(n):

   if n < 1 or n > 1000000000:
       return False
   return True

def impare(n):

   cifre = list(str(n))
   for i in range(len(cifre)):
       if int(cifre[i]) % 2 != 0:
           cifre[i] = str(int(cifre[i]) - 1)
           j = i - 1
           while j >= 0 and int(cifre[j]) == 8:
               j -= 1
           if j >= 0:
               cifre[j] = str(int(cifre[j]) + 2)
   n = int("".join(cifre))
   return n

if __name__ == "__main__":

   n = input("Introduceti numarul: ")
   if validare(n):
       n = int(n)
       print("Datele de intrare corespund restrictiilor impuse.")
       n = impare(n)
       print("Numarul inlocuit: ", n)
   else:
       print("Datele de intrare nu corespund restrictiilor impuse.")


</syntaxhighlight>

Explicatii[edit | edit source]

Funcția Impare(n) primește un număr întreg n și returnează același număr, dar înlocuiește cifrele impare cu cea mai mare cifră pară, strict mai mică decât cifra impară înlocuită.

Pentru a face această înlocuire, funcția transformă numărul n într-o listă de cifre cu ajutorul funcției list(str(n)). Apoi, parcurge lista de cifre și verifică dacă fiecare cifră este impară.

Dacă cifra este impară, aceasta este înlocuită cu cea mai mare cifră pară, mai mică decât cifra impară înlocuită. Mai precis, se scade 1 din cifra impară și se caută cea mai mare cifră pară strict mai mică decât cifra impară înlocuită, parcurgând lista în sens invers.

La final, funcția reconstruiește numărul original din lista de cifre prin concatenarea acestora cu ajutorul funcției " ".join(cifre)) și transformă string-ul obținut înapoi într-un număr întreg prin intermediul funcției int().

Funcția validare(n) verifică dacă numărul n se încadrează în intervalul permis, și anume între 1 și 1000000000.

În cadrul blocului if __name__ == "__main__":, se citește un număr de la tastatură și se verifică dacă respectă restricțiile prin intermediul funcției validare(n). În caz afirmativ, se apelează funcția Impare(n) și se afișează rezultatul obținut, altfel se afișează un mesaj corespunzător.