def substitutie(nr, baza): """ Algoritmul de conversie a unui numar dintr-o baza mai mica intr-o baza mai mare folosind metoda substitutiei. :INPUTS: - nr- o instanta a clasei Operatii din modulul operatiiElementare. - baza- baza in care vrem sa convertim numarul :OUTPUTS: rezultat- rezultatul convertirii numarului in baza ceruta. Daca nr=244(7), acesta va fi o instanta a clasei Operatii, deci se va afla sub forma Operatii([2,4,4],7) Unde: [2,4,4]- sirul cifrelor numarului 7 - baza in care se afla numarul Pentru numarul 332(6) -> ? (7) ,avem lista cifrelor [3,3,2] Se parcurge lista cifrelor de la stanga spre dreapta [3, 3 ,2] ordine puteri: 2 1 0 Se imnulteste fiecare cifra cu baza in care se afla numarul curent ridicata la o putere ( vezi ordinea puterilor). Trebuie sa fim atenti la faptul ca calculele se vor efectua in baza destinatie rezultat= 3*6^2 + 3*6 + 2 6^2 in baza 7 va fi egal cu 51 (ne folosim de algoritmul de inmultire a unui numar cu o cifra) rezultat= 3*51 + 3*6 + 2 3*51 in baza 7 va fi egal cu 213 3*6 in baza 7 va fi egal cu 24 rezultat= 213 + 24 +2 (ne folosim de algoritmul de adunare a doua numere in aceeasi baza de numeratie) rezultat = 213+ 26= 242 (7) """ rezultat = Operatii([0], baza) listaCifre = nr.getNumar() for index in range(len(listaCifre)): x = Operatii([nr.getBaza()], baza) #baza= baza in care vrem sa trecem numarul if index == len(listaCifre) - 1: x = Operatii([1], baza) else: for putere in range(len(nr.getNumar()) - index - 2, 0, -1): x = Operatii.inmultire(x, nr.getBaza()) x = Operatii(x, baza) x = Operatii.inmultire(x, listaCifre[index]) x = Operatii(x, baza) rezultat = Operatii.adunare(x, rezultat) rezultat = Operatii(rezultat, baza) x = rezultat.getNumar() return rezultat.getNumar()
def inmultire(): """ Inmulteste un numar care se afla intr-o baza de la 2 la 16, cu o cifra care se afla in aceeasi baza ca numarul. """ print("\nNumarul: ".upper()) numar = Console.citesteInstanta() numar = Operatii(numar[0], numar[1]) nr = Console.fromList_toString(numar.getNumar()) baza = numar.getBaza() print("\nCifra: ".upper()) cifra = Console.citesteCifra(numar.getBaza()) #return "Rezultatul inmultirii este: {}".format(Console.fromList_toString(Operatii.inmultire(numar,cifra))) return "\nREZULTAT: {}({}) * {}({}) = {}({})".format( nr, baza, cifra, baza, Console.fromList_toString(Operatii.inmultire(numar, cifra)), baza)
def test_inmultire(): numar = Operatii([4, 12, 3, 2, 10], 16) cifra = 11 assert numar.inmultire(cifra) == [3, 4, 6, 2, 12, 14]