0945 - Baze: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerință== Se dă un număr n scris în baza b. Să se afișeze scrierea acestuia în baza c. ==Date de intrare== Programul citește de la tastatură numerele n, b și c separate prin spații. ==Date de ieșire== Programul va afișa pe ecran scrierea numărului n în baza c. ==Restricții de precizări== *2 ⩽ b, c ⩽ 10 *numărul n este natural si are cel mult nouă cifre *rezolvarea acestei probleme necesită utilizarea tablourilor sau a altor forme de memorare...
 
No edit summary
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:


==Cerință==
==Cerință==
Se dă un număr n scris în baza b. Să se afișeze scrierea acestuia în baza c.
Se dă un număr '''n''' scris în baza '''b'''. Să se afișeze scrierea acestuia în baza '''c.'''
==Date de intrare==
==Date de intrare==
Programul citește de la tastatură numerele n, b și c separate prin spații.
Programul citește de la tastatură numerele '''n, b și c''' separate prin spații.
==Date de ieșire==
==Date de ieșire==
Programul va afișa pe ecran scrierea numărului n în baza c.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa pe ecran scrierea numărului '''n''' în baza '''c'''. Î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==
*2 ⩽ b, c ⩽ 10
*2 ⩽ '''b, c''' ⩽ 10


*numărul n este natural si are cel mult nouă cifre
*numărul n este natural si are cel mult nouă cifre
Line 28: Line 29:


== Rezolvare ==
== Rezolvare ==
=== Rezolvare ver. 1===
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">
n, b, c = input("Introduceți numerele n, b și c separate prin spații: ").split()
def validare(n, b, c):
n = int(n, int(b))
    # Verifică dacă n conține doar cifre valide pentru baza b și dacă n este între 0 și 999999999 în baza 10
n = format(n, "0" + str(c) + "d")
    # Verifică de asemenea dacă b și c sunt între 2 și 10
print(n)
    return all(digit.isdigit() and int(digit) < int(b) for digit in n) and 0 <= int(n, int(b)) <= 999999999 and 2 <= int(b) <= 10 and 2 <= int(c) <= 10
 
 
def baze(n, b, c):
    n_baza_10 = int(n, b)  # Converteste numarul n din baza b in baza 10
    n_baza_c = format(n_baza_10, '0' + str(len(n)) + 'd')  # Converteste numarul din baza 10 in baza c si completeaza cu zerouri la stanga daca este necesar
    base_c_digits = "0123456789abcdefghijklmnopqrstuvwxyz"[:c]  # Defineste caracterele valide pentru baza c
    base_c_num = ""
    remainder = n_baza_10
    while remainder > 0:
        digit = base_c_digits[remainder % c]  # Obtine ultima cifra in baza c
        base_c_num = digit + base_c_num  # Adauga cifra la stanga numarului in baza c
        remainder //= c  # Actualizeaza catul pentru urmatoarea iteratie
    print("Numărul {} în baza {} este {}".format(n, c, int(base_c_num))) # Afiseaza rezultatul final
 
 
if __name__ == '__main__':
    n = input("Introdu numărul n: ")
    b = input("Introdu baza b: ")
    c = input("Introdu baza c: ")
 
    if validare(n, b, c):
        b, c = int(b), int(c)
        print("Datele introduse corespund restricțiilor impuse.")
        baze(n, b, c)  # Apeleaza functia pentru a afisa rezultatul final
    else:
        print("Datele introduse nu corespund restricțiilor impuse.")
 


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 08:44, 25 April 2023

Cerință[edit | edit source]

Se dă un număr n scris în baza b. Să se afișeze scrierea acestuia în baza c.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele n, b și c separate prin spații.

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 pe ecran scrierea numărului n în baza c. Î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]

  • 2 ⩽ b, c ⩽ 10
  • numărul n este natural si are cel mult nouă cifre
  • rezolvarea acestei probleme necesită utilizarea tablourilor sau a altor forme de memorare a unui număr variabil de valori.

Exemplul 1[edit | edit source]

Intrare
2013
4
7
Ieșire
Datele introduse corespund restricțiilor impuse.
252

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1"> def validare(n, b, c):

   # Verifică dacă n conține doar cifre valide pentru baza b și dacă n este între 0 și 999999999 în baza 10
   # Verifică de asemenea dacă b și c sunt între 2 și 10
   return all(digit.isdigit() and int(digit) < int(b) for digit in n) and 0 <= int(n, int(b)) <= 999999999 and 2 <= int(b) <= 10 and 2 <= int(c) <= 10


def baze(n, b, c):

   n_baza_10 = int(n, b)  # Converteste numarul n din baza b in baza 10
   n_baza_c = format(n_baza_10, '0' + str(len(n)) + 'd')  # Converteste numarul din baza 10 in baza c si completeaza cu zerouri la stanga daca este necesar
   base_c_digits = "0123456789abcdefghijklmnopqrstuvwxyz"[:c]  # Defineste caracterele valide pentru baza c
   base_c_num = ""
   remainder = n_baza_10
   while remainder > 0:
       digit = base_c_digits[remainder % c]  # Obtine ultima cifra in baza c
       base_c_num = digit + base_c_num  # Adauga cifra la stanga numarului in baza c
       remainder //= c  # Actualizeaza catul pentru urmatoarea iteratie
   print("Numărul {} în baza {} este {}".format(n, c, int(base_c_num)))  # Afiseaza rezultatul final


if __name__ == '__main__':

   n = input("Introdu numărul n: ")
   b = input("Introdu baza b: ")
   c = input("Introdu baza c: ")
   if validare(n, b, c):
       b, c = int(b), int(c)
       print("Datele introduse corespund restricțiilor impuse.")
       baze(n, b, c)  # Apeleaza functia pentru a afisa rezultatul final
   else:
       print("Datele introduse nu corespund restricțiilor impuse.")


</syntaxhighlight>