4316 - Cifre 18

From Bitnami MediaWiki

Sursă: [1]

Cerinţa[edit | edit source]

Să se scrie un program care citește un număr natural numar și o valoare nenulă pozitie, cel mult egală cu numărul de cifre ale lui numar. Să se mărească cifra de pe pozitia ceruta din numar cu 1 dacă este mai mică decât 9 și să se înlocuiască cu 0 în caz contrar.

Date de intrare[edit | edit source]

Programul va citi de la tastatură numerele numar si pozitie.

Date de ieşire[edit | edit source]

Programul va afişa pe ecran valoarea lui numar, după transformarea cerută.

Restricții și precizări[edit | edit source]

  • numar ≤ 2.000.000.000

Exemplu[edit | edit source]

Intrare
31615 4
Ieșire
31625

Explicație[edit | edit source]

A patra cifră a lui numar=32615 este 1. Deoarece este mai mică decât 9 se va mări cu 1, deci numar devine 32625.

Exemplu[edit | edit source]

Intrare
32695 4
Ieșire
32605

Explicație[edit | edit source]

A patra cifră a lui numar=32615 este 9. În acest caz se înlocuiește cu 0, deci numar devine 32605.

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

def citeste_numar():

   # Citeste numarul de la utilizator
   numar = int(input("Introduceți numărul: "))
   return numar

def citeste_pozitie(numar):

   # Citeste pozitia cifrei de la utilizator
   pozitie = int(input("Introduceți poziția cifrei pe care doriți să o măriți: "))
   if pozitie <= 0 or pozitie > len(str(numar)):
       raise ValueError("Poziția trebuie să fie un număr nenul și mai mic sau egal cu numărul de cifre al numărului!")
   return pozitie

def maresti_cifra(numar, pozitie):

   # Extrage cifra de la pozitia data
   cifra = int(str(numar)[pozitie-1])
   if cifra < 9:
       # Daca cifra este mai mica decat 9, o marim cu 1
       cifra += 1
   else:
       # Daca cifra este 9, o inlocuim cu 0
       cifra = 0
   # Construieste noul numar prin inlocuirea cifrei de la pozitia data
   numar = str(numar)[:pozitie-1] + str(cifra) + str(numar)[pozitie:]
   return numar

def afiseaza_rezultat(numar):

   # Afiseaza rezultatul
   print("Datele sunt introduse corect.")
   print("Noul număr este:", int(numar))

def main():

   try:
       # Citeste numarul de la utilizator
       numar = citeste_numar()
       # Citeste pozitia cifrei de la utilizator
       pozitie = citeste_pozitie(numar)
       # Mareste cifra de la pozitia data
       numar_nou = maresti_cifra(numar, pozitie)
       # Afiseaza rezultatul
       afiseaza_rezultat(numar_nou)
   except ValueError as e:
       # Afiseaza mesaj de eroare daca apare o exceptie
       print(str(e))

if __name__ == "__main__":

   main()

</syntaxhighlight>

Rezolvare ver. 2[edit | edit source]

<syntaxhighlight lang="python" line>

  1. Citim numărul și poziția cifrei de la tastatură

numar = int(input("Introduceți numărul: ")) pozitie = int(input("Introduceți poziția cifrei pe care doriți să o măriți: "))

  1. Verificăm dacă numărul este un număr natural și poziția respectă condițiile impuse

if numar <= 0:

   print("Numărul trebuie să fie un număr natural pozitiv!")

elif pozitie <= 0 or pozitie > len(str(numar)):

   print("Poziția trebuie să fie un număr nenul și mai mic sau egal cu numărul de cifre al numărului!")

else:

   # Obținem cifra de pe poziția k
   cifra = int(str(numar)[pozitie-1])
   
   # Dacă cifra este mai mică decât 9, o mărim cu 1
   if cifra < 9:
       cifra += 1
   # În caz contrar, o înlocuim cu 0
   else:
       cifra = 0
   
   # Construim noul număr prin concatenarea părților din număr înainte și după poziția data
   numar = str(numar)[:pozitie-1] + str(cifra) + str(numar)[pozitie:]
   
   # Afișăm noul număr
   print("Datele sunt introduse corect.")
   print("Noul număr este:", int(numar))

</syntaxhighlight>