def adunare():
        """
           Adunarea a doua numere naturale intr-o baza citita de la tastatura(2-16).
           Numerele pot sa fie in aceeasi baza sau nu.
        """
        print("\nPrimul numar: ".upper())
        numar1 = Console.citesteInstanta()
        numar1 = Operatii(numar1[0], numar1[1])

        print("\nAl doilea numar: ".upper())
        numar2 = Console.citesteInstanta()
        numar2 = Operatii(numar2[0], numar2[1])

        print("\nBaza destinatie: ".upper())
        baza = Console.citesteBaza(
            "Citeste o baza destinatie de la 2 la 16 in care vrei sa se afle rezultatul: "
        )

        nr1 = Console.fromList_toString(numar1.getNumar())
        nr2 = Console.fromList_toString(numar2.getNumar())
        baza1 = numar1.getBaza()
        baza2 = numar2.getBaza()

        numar1 = Console.converteste(numar1, baza)
        numar2 = Console.converteste(numar2, baza)

        return "\nREZULTAT: {}({}) + {}({}) = {}({})".format(
            nr1, baza1, nr2, baza2,
            Console.fromList_toString(Operatii.adunare(numar1, numar2)), baza)
Beispiel #2
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()
Beispiel #3
0
def test_adunare():
    numar1 = Operatii([3, 1, 4, 7], 8)
    numar2 = Operatii([2, 0, 2], 8)
    assert numar1.adunare(numar2) == [3, 3, 5, 1]