4042 - b16 rec

From Bitnami MediaWiki
Revision as of 10:06, 6 April 2023 by Cata (talk | contribs)

Cerința

Se citește un număr natural n în baza 10. Să se transforme acest număr în baza 16, folosind un subprogram recursiv.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Programul va afișa pe ecran un șir de caractere reprezentând transformarea numărul n în baza 16.

Restricții și precizări

  • Reprezentarea în baza 10 a numărului dat este un număr natural cel mult egal cu 4 294 967 295.
  • Cifrele în baza 16 sunt : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

Exemplu

Intrare
16712523

Ieșire
FF034B

Explicație

Funcția DecToHexRec(n) primește ca parametru un număr întreg pozitiv n și returnează reprezentarea sa în baza 16 (sau sistemul hexadecimal) utilizând recursivitatea.

Funcția verifică dacă n este mai mic decat 16. Dacă acest lucru este adevărat, înseamnă că n este o cifră în baza 16 și funcția returnează reprezentarea sa ca și string. Dacă n este mai mare decât 16, funcția este apelată recursiv pentru a obține reprezentarea cifrelor mai semnificative ale lui n. Variabila q este folosită pentru a reține câtul împărțirii lui n la 16 și r este folosită pentru a reține restul acestei împărțiri. Dacă restul este mai mic decat 10, funcția returnează reprezentarea acestuia ca și string, iar dacă este mai mare sau egal cu 10, funcția returnează caracterul corespunzător din tabelul ASCII pentru cifrele hexazecimale.

În final, funcția returnează reprezentarea numărului n în baza 16 ca și un string.

Rezolvare

<syntaxhighlight lang="python"> def validate_n(n):

   if isinstance(n, int) and n >= 0 and n <= 4294967295:
       return True
   else:
       return False

def DecToHexRec(n):

   if n < 16:
       if n < 10:
           return str(n)
       else:
           return chr(ord('A') + n - 10)
   else:
       q = n // 16
       r = n % 16
       if r < 10:
           return DecToHexRec(q) + str(r)
       else:
           return DecToHexRec(q) + chr(ord('A') + r - 10)

def main():

   n = input("Introduceți un număr întreg pozitiv mai mic sau egal cu 4294967295: ")
   try:
       n = int(n)
       if validate_n(n):
           hex_n = DecToHexRec(n)
           print(f"Reprezentarea în hexazecimal a numărului {n} este: {hex_n}")
       else:
           print("Numărul introdus nu este valid.")
   except ValueError:
       print("Nu ați introdus un număr întreg.")

</syntaxhighlight>