1300 - Hex: Difference between revisions
Cuceu Andrei (talk | contribs) Pagină nouă: ==Enunt== Andino este un elev pasionat de informatică. Din păcate, profesoara de matematică l-a prins rezolvând probleme de informatică în ora ei. Totuşi, ştiind că el este un elev bun, a decis să-i dea o provocare. Ea i-a dat o foaie pe care era scris un număr '''b''' în baza '''2''' şi i-a cerut să îl transforme în baza '''16''' într-un timp cât mai scurt. Andino, fiind în criză de timp, vă roagă să-l ajutaţi! ==Cerință== Să se transforme num... |
Vardai Erwin (talk | contribs) |
||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== | ==Enunț== | ||
Andino este un elev pasionat de informatică. Din păcate, profesoara de matematică l-a prins rezolvând probleme de informatică în ora ei. Totuşi, ştiind că el este un elev bun, a decis să-i dea o provocare. | Andino este un elev pasionat de informatică. Din păcate, profesoara de matematică l-a prins rezolvând probleme de informatică în ora ei. Totuşi, ştiind că el este un elev bun, a decis să-i dea o provocare. | ||
Line 18: | Line 18: | ||
==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." | |||
Fișierul de ieșire hex.out va conține pe prima linie numărul '''x''', reprezentând numărul''' b''' scris în baza '''16'''. | Fișierul de ieșire hex.out va conține pe prima linie numărul '''x''', reprezentând numărul''' b''' scris în baza '''16'''. | ||
În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse." | |||
==Restricții și precizări== | ==Restricții și precizări== | ||
Line 32: | Line 32: | ||
==Exemplul 1== | ==Exemplul 1== | ||
;'''hex.in ''' | ;'''hex.in ''' | ||
:1001010 | |||
;'''hex.out ''' | ;'''hex.out ''' | ||
:4A | |||
;Ieșire | |||
:Datele de intrare corespund restricțiilor impuse. | |||
== | ==Explicație== | ||
Numărul '''1001010(2)''' este scrierea în baza '''2''' a numărului '''74(10)'''. Scrierea în sistemul hexazecimal a numărului '''74''' este '''4A(16)'''. | Numărul '''1001010(2)''' este scrierea în baza '''2''' a numărului '''74(10)'''. Scrierea în sistemul hexazecimal a numărului '''74''' este '''4A(16)'''. | ||
==Rezolvare== | ==Rezolvare== | ||
Line 76: | Line 74: | ||
if not validate_binary_number(binary_number): | if not validate_binary_number(binary_number): | ||
print(' | print('Datele de intrare nu corespund restricțiilor impuse.') | ||
else: | else: | ||
print("Datele de intrare corespund restricțiilor impuse.") | |||
decimal_number = binary_to_decimal(binary_number) | decimal_number = binary_to_decimal(binary_number) | ||
hex_number = decimal_to_hex(decimal_number) | hex_number = decimal_to_hex(decimal_number) | ||
with open('hex.out', 'w') as fout: | with open('hex.out', 'w') as fout: | ||
fout.write(hex_number) | fout.write(hex_number) | ||
Line 87: | Line 85: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicație== | |||
== | |||
Funcția validate_binary_number verifică dacă numărul dat este valid, adică este scris în baza 2. | Funcția validate_binary_number verifică dacă numărul dat este valid, adică este scris în baza 2. |
Latest revision as of 17:20, 7 May 2023
Enunț[edit | edit source]
Andino este un elev pasionat de informatică. Din păcate, profesoara de matematică l-a prins rezolvând probleme de informatică în ora ei. Totuşi, ştiind că el este un elev bun, a decis să-i dea o provocare.
Ea i-a dat o foaie pe care era scris un număr b în baza 2 şi i-a cerut să îl transforme în baza 16 într-un timp cât mai scurt.
Andino, fiind în criză de timp, vă roagă să-l ajutaţi!
Cerință[edit | edit source]
Să se transforme numărul dat de profesoară în baza 16.
Date de intrare[edit | edit source]
Fișierul de intrare hex.in conține pe prima linie numărul b, scris în baza 2.
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." Fișierul de ieșire hex.out va conține pe prima linie numărul x, reprezentând numărul b scris în baza 16. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."
Restricții și precizări[edit | edit source]
- 1 ≤ lungimea numărului dat ≤ 10000
- Cifrele în baza 16 sunt 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
- Pentru 40% din teste, 1 ≤ lungimea numărului ≤ 20
- Dacă îl ajutaţi pe Andino să rezolve problema, el vă va răsplăti cu 100 de puncte
Exemplul 1[edit | edit source]
- hex.in
- 1001010
- hex.out
- 4A
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
Explicație[edit | edit source]
Numărul 1001010(2) este scrierea în baza 2 a numărului 74(10). Scrierea în sistemul hexazecimal a numărului 74 este 4A(16).
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line="1" start="1">
def validate_binary_number(binary_number):
for digit in binary_number: if digit not in ['0', '1']: return False return True
def binary_to_decimal(binary_number):
decimal_number = 0 for digit in binary_number: decimal_number = decimal_number * 2 + int(digit) return decimal_number
def decimal_to_hex(decimal_number):
hex_digits = "0123456789ABCDEF" hex_number = "" while decimal_number > 0: remainder = decimal_number % 16 hex_number = hex_digits[remainder] + hex_number decimal_number //= 16 return hex_number
if __name__ == '__main__':
with open('hex.in', 'r') as fin: binary_number = fin.readline().strip()
if not validate_binary_number(binary_number): print('Datele de intrare nu corespund restricțiilor impuse.') else: print("Datele de intrare corespund restricțiilor impuse.") decimal_number = binary_to_decimal(binary_number) hex_number = decimal_to_hex(decimal_number) with open('hex.out', 'w') as fout: fout.write(hex_number)
</syntaxhighlight>
Explicație[edit | edit source]
Funcția validate_binary_number verifică dacă numărul dat este valid, adică este scris în baza 2.
Funcția binary_to_decimal convertește numărul dat din baza 2 în baza 10, prin parcurgerea cifrelor numărului și adunarea puterilor de 2 corespunzătoare cifrelor de 1.
Funcția decimal_to_hex convertește numărul dat din baza 10 în baza 16, prin împărțirea repetată a numărului la 16 și adăugarea cifrei corespunzătoare rămășiței în șirul rezultat.
În blocul if __name__ == '__main__':, citim numărul dat din fișierul de intrare hex.in, verificăm dacă este valid, apoi convertim numărul din baza 2 în baza 10 și din baza 10 în baza 16. La final, scriem rezultatul în fișierul de ieșire hex.out.