Добавление двух 4-значных двоичных чисел с использованием схем сумматора - PullRequest
0 голосов
/ 06 июля 2018

Мне нужно написать программу, которая добавляет два 4-значных двоичных числа, используя схему сумматора, которая дает нам ответ. Мне нужно использовать функцию int (), чтобы преобразовать это из двоичного в десятичное (должны отображаться оба значения). Я изо всех сил пытаюсь создать код, который создает правильный двоичный И десятичный вывод. Мы вводим 2 набора из четырех цифр. Предполагается, что цифры проходят через схему, а результаты должны быть сложены вместе. Прямо сейчас у ворот все хорошо. Но я не могу получить цифры, чтобы сложить правильно. Бинарное сложение через схему некорректно. Преобразователь и входы все в порядке.

Пользователь должен ввести четырехзначное двоичное число для x (x1, x2, x3, x4) и y (y1, y2, y3, y4) и ci = 0. Например: x = 1111 y = 0000

Это схема сумматора вместе со схемой, которая показывает, как будет выглядеть схема после добавления двух двоичных чисел (я пока не могу встраивать изображения)

это мой текущий код:

import string

print('Simple Circuits for Final Project')

x = input('x| enter 4 digits: ')
y = input('y| enter 4 digits: ')

list1 = list(x)
print(list1)

list2 = list(y)
print(list2)



#define all the gates
def xorgate(x,y):
    if x == y:
        return '0'
    else:
        return '1'

def andgate (x,y):
    if x == '1' and y == '1':
        return '1'
    else:
        return '0'

def orgate (x,y):
    if x == '1' or y == '1':
        return '1'
    else:
        return '0'

#define the entire circuit and input the list of inputs for the circuit.
#include the outputs based on the gates defined above.
def circuit(x,y,ci):
    a = 3 #starting value for the while loop, get approp position for our list
    adder = ['0','0','0','0','0']#adder list only has strings of zero. list to hold binary numbers from the output of the adding circuit
    b = 4
    while a >= 0:



        xorout = xorgate(x[a],y[a])
        print("xor:",(xorout))
        s = xorgate(ci,xorout)
        print("Ci:",ci)
        andout = andgate(xorout, ci)
        print("and1:",andout)
        and2out = andgate(x[a],y[a])
        print("and2:",and2out)
        co = orgate(andout,and2out)

        print('s:',s)
        print('co:',co)
        print('-----------------')

        ci = co
        adder[b] = str(s)
        a-=1
        b-=1


    adder[4]=ci
    #print(final)
    print('The Final Binary Output is:', adder[::-1])

    #OUR CONVERTER IS RIGHT, BUT WE CAN'T GET THE BINARY ADDITION ACCURATE
    outputfinal = ((int(adder[4]) * 16) + (int(adder[3]) * 8)+(int(adder[2]) * 4)+(int(adder[1]) * 2)+(int(adder[0]) * 1))
    print('The Final Decimal Output is:', outputfinal)
hold = '0'
circuit(list1,list2,hold)# 3 value for circuit

Это та часть, которую мы считаем неправильной:

    ci = co
    adder[b] = str(s)
    a-=1
    b-=1


adder[4]=ci
#print(final)
print('The Final Binary Output is:', adder[::-1])

Вот таков мой текущий вывод, что неверно:

x| enter 4 digits: 1111
y| enter 4 digits: 0000
['1', '1', '1', '1']
['0', '0', '0', '0']
xor: 1
Ci: 0
and1: 0
and2: 0
s: 1
co: 0
-----------------
xor: 1
Ci: 0
and1: 0
and2: 0
s: 1
co: 0
-----------------
xor: 1
Ci: 0
and1: 0
and2: 0
s: 1
co: 0
-----------------
xor: 1
Ci: 0
and1: 0
and2: 0
s: 1
co: 0
-----------------
The Final Binary Output is: ['0', '1', '1', '1', '0']
The Final Decimal Output is: 14

1 Ответ

0 голосов
/ 06 июля 2018

Вы путаете порядок вашего списка сумматоров.

Первый адрес должен быть 0, а не 4:

adder[0]=ci
#print(final)

Не переворачивать список пока

print('The Final Binary Output is:', adder)

Поскольку ваш конвертер ожидает, что он будет в обратном порядке, я переверну его здесь, а не переписываю ваш конвертер:

adder = adder[::-1]
#OUR CONVERTER IS RIGHT, BUT WE CAN'T GET THE BINARY ADDITION ACCURATE
outputfinal = ((int(adder[4]) * 16) + (int(adder[3]) * 8)+(int(adder[2]) * 4)+(int(adder[1]) * 2)+(int(adder[0]) * 1))
print('The Final Decimal Output is:', outputfinal)

Вы можете опробовать всю программу (поскольку вы получаете другой результат) в онлайн-реплее: https://repl.it/repls/CompetitiveSerpentineAccess

...