示例#1
0
    def substitutie():
        """

            Apeleaza functiile de converitire a unui numar dintr-o baza mai mica intr-o alta mare prin substitutie.
        """

        print("\nNumarul: ".upper())
        mesaj_citire = "Citeste o baza strict mai mica decat 16: "
        mesaj_atentionare = "\n           Baza sursa trebuie sa fie un numar strict mai mic decat 16, dar mai mare sau egal decat 2\n".upper(
        )
        baza = Console.citesteBaza(mesaj_citire, mesaj_atentionare, 2, 15)
        numar = Console.citesteInstanta(baza)
        numar = Operatii(numar[0], numar[1])
        nr = Console.fromList_toString(numar.getNumar())
        bz = numar.getBaza()

        print("\nbaza destinatie: ".upper())
        mesaj1 = "Citeste o baza mai mare decat baza data in care vrei sa fie convertit numarul: "
        mesaj2 = "\n           Baza trebuie sa fie un numar mai mare decat baza numarului citit si mai mica  sau egala decat 16\n".upper(
        )
        baza = Console.citesteBaza(mesaj1, mesaj2, numar.getBaza(), 16)

        numar = Conversii.substitutie(numar, baza)
        #return "Rezultatul este: {}".format(Console.fromList_toString(numar))
        return "\nREZULTAT: {}({})  = {}({})".format(
            nr, bz, Console.fromList_toString(numar), baza)
示例#2
0
    def impartiriSuccesive():
        """
            Citeste o baza si un numar in acea baza
            Citeste baza destinatie, baza care este mai mica decat baza in care a fost citit numarul
            Gesticuleaza procesul de convertire a numarul in baza destinatie folosind algoritmul de impartiri succesive

        """
        print("\nNumarul: ".upper())
        mesaj_citire = "Citeste o baza strict mai mare decat 2: "
        mesaj_atentionare = "\n           Baza sursa trebuie sa fie un numar strict mai mare decat 2, dar mai mic decat egal decat 16\n".upper(
        )
        baza = Console.citesteBaza(mesaj_citire, mesaj_atentionare, 3, 16)
        numar = Console.citesteInstanta(baza)
        numar = Operatii(numar[0], numar[1])
        nr = Console.fromList_toString(numar.getNumar())
        bz = numar.getBaza()

        print("\nbaza destinatie: ".upper())
        mesaj1 = "Citeste o baza mai mica decat baza sursa in care vrei sa fie convertit rezultatul: "
        mesaj2 = "\n           Baza trebuie sa fie un numar mai mic decat baza numarului citit si mai mare egala decat 2\n".upper(
        )
        baza = Console.citesteBaza(mesaj1, mesaj2, 2, numar.getBaza())

        numar = Conversii.impartiriSuccesive(numar, baza)
        #return "Rezultatul este: {}".format(Console.fromList_toString(numar))
        return "\nREZULTAT: {}({})  = {}({})".format(
            nr, bz, Console.fromList_toString(numar), baza)
示例#3
0
def test_conversieBazaIntermediara():
    x = Operatii([1, 1, 2, 0, 1], 6)
    baza = 12
    assert (Conversii.conversieBazaIntermediara(x, baza)) == [11, 0, 1]

    x = Operatii([1, 7, 3], 8)
    baza = 7
    assert Conversii.conversieBazaIntermediara(x, baza) == [2, 3, 4]
示例#4
0
def test_substitutie():
    x = Operatii([1, 1, 2, 0, 1], 6)
    baza = 12
    assert Conversii.substitutie(x, baza) == [11, 0, 1]

    x = Operatii([6, 7, 3, 4], 8)
    baza = 6
    assert Conversii.substitutie(x, baza) == [2, 4, 2, 3, 2]
示例#5
0
    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)
示例#6
0
def test_impartiriSuccesive():

    nr = Operatii([1, 7, 3], 8)
    baza = 7

    assert Conversii.impartiriSuccesive(nr, baza) == [2, 3, 4]

    nr = Operatii([2, 4, 2], 7)
    baza = 6
    assert Conversii.impartiriSuccesive(nr, baza) == [3, 3, 2]

    x = Operatii([11, 0, 1], 12)
    baza = 6
    assert Conversii.impartiriSuccesive(x, baza) == [1, 1, 2, 0, 1]
示例#7
0
 def converteste(numar, baza):
     """
         Se converteste un numar dintr-o baza data in alta baza, folosindu-se baza intermediara 10
     :param numar:   numarul de convertit
     :param baza:    baza in care vrem sa convertim numarul
     :return:        numarul convertit in baza ceruta
     """
     if numar.getBaza() != baza:
         numar = Conversii.conversieBazaIntermediara(numar, baza)
         numar = Operatii(numar, baza)
     return numar
示例#8
0
    def impartire():
        """
            Imparteste un numar care se afla intr-o baza de la 2 la 16, la o cifra care se afla in aceeazi baza ca numarul.

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

        nr = Console.fromList_toString(numar.getNumar())
        baza = numar.getBaza()

        while True:

            print("\nCifra: ".upper())
            cifra = Console.citesteCifra(numar.getBaza())
            if cifra == 0:
                print("\n           Cifra trebuie sa fie diferita de 0.\n".
                      upper())
            else:
                break

        rez = Operatii.impartire(numar, cifra)
        #return "Catul impartirii este {}, iar restul este {}".format(Console.fromList_toString(cifra[0]), cifra[1])
        return "\nREZULTAT: {}({}) / {}({}) = {} rest {}".format(
            nr, baza, cifra, baza, Console.fromList_toString(rez[0]), rez[1])
示例#9
0
    def bazaIntermediara():
        """
            Citeste o baza(2-16) si un numar in aceeasi baza
            Citeste o baza destinatie cuprinsa intre 2 si 16
            Gesticuleaza procesul de convertire a numarului folosindu-se de algoritmul de convertire folosind o baza intermediara
        :return:
        """

        print("\nNumarul: ".upper())
        numar = Console.citesteInstanta()
        numar = Operatii(numar[0], numar[1])
        nr = Console.fromList_toString(numar.getNumar())
        bz = numar.getBaza()

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

        numar = Conversii.conversieBazaIntermediara(numar, baza)
        #return "Rezultatul este: {}".format(Console.fromList_toString(numar))
        return "\nREZULTAT: {}({})  = {}({})".format(
            nr, bz, Console.fromList_toString(numar), baza)
示例#10
0
def test_impartire():
    numar = Operatii([2, 9, 11, 4, 13], 16)
    cifra = 8

    assert numar.impartire(cifra) == [[5, 3, 6, 9], 5]

    numar = Operatii([5], 10)
    cifra = 9
    assert (numar.impartire(cifra)) == [[0], 5]
示例#11
0
    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)
示例#12
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]
示例#13
0
def test_inmultire():
    numar = Operatii([4, 12, 3, 2, 10], 16)

    cifra = 11
    assert numar.inmultire(cifra) == [3, 4, 6, 2, 12, 14]
示例#14
0
def test_scadere():
    numar1 = Operatii([3, 1, 4, 7], 8)
    numar2 = Operatii([2, 0, 2], 8)
    assert numar2.scadere(numar1) == [2, 7, 4, 5]

    numar1 = Operatii([1, 0, 2], 8)
    assert (numar1.scadere(numar2)) == [1, 0, 0]

    numar1 = Operatii([1, 0, 0, 1, 1, 0], 2)
    numar2 = Operatii([1, 0, 0, 1], 2)

    assert Operatii.scadere(numar2, numar1) == [1, 1, 1, 0, 1]
示例#15
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()
示例#16
0
    def scadere():
        """
            Scaderea a noua numere in baze identice sau diferite, si afisarea rezultatului intr-o a treia baza.
            Se face verificarea ca descazutul sa fie mai mare decat scazatorul, altfel utilizatorul este atentionat cu un mesaj.
        """
        print("\nDescazutul: ".upper())
        numar1 = Console.citesteInstanta()
        numar1 = Operatii(numar1[0], numar1[1])

        while True:
            try:

                print("\nScazatorul: ".upper())
                numar2 = Console.citesteInstanta()
                numar2 = Operatii(numar2[0], numar2[1])
                print("\nBaza destinatie: ".upper())
                baza = Console.citesteBaza(
                    "Cisteste o baza 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)
                Validator.compare(numar1.getNumar(), numar2.getNumar())
                break
            except ValueError as msg:
                print(msg)

        #return "Rezultatul scaderii este: {}".format(Console.fromList_toString(Operatii.scadere(numar2, numar1)))
        return "\nREZULTAT: {}({}) - {}({}) = {}({})".format(
            nr1, baza1, nr2, baza2,
            Console.fromList_toString(Operatii.scadere(numar2, numar1)), baza)