Beispiel #1
0
    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)
Beispiel #3
0
def test_inmultire():
    numar = Operatii([4, 12, 3, 2, 10], 16)

    cifra = 11
    assert numar.inmultire(cifra) == [3, 4, 6, 2, 12, 14]