0945 - Baze: Difference between revisions
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== | ||
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 | 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 | # 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ță
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
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
- 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
- Intrare
- 2013
- 4
- 7
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 252
Rezolvare
Rezolvare ver. 1
<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>