Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2012, 16:16   #1
Altana
 
Регистрация: 22.05.2012
Сообщений: 9
Восклицание Сумматоры

Здравствуйте. Нужно сделать сумматор в Turbo Pascal. Каким образом? Нет идей, совершенно..
Altana вне форума Ответить с цитированием
Старый 19.11.2012, 16:21   #2
Altana
 
Регистрация: 22.05.2012
Сообщений: 9
По умолчанию

Ну для начала конечно вводим переменные, и т.п.
Не понимаю сам сумматор. Что за три входа и два выхода?
Altana вне форума Ответить с цитированием
Старый 19.11.2012, 17:52   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Что за три входа и два выхода?
А что не понятного? Есть устройство у него три входа - вот в доме 3 подъезда, 3 входа.
И есть 2 выхода - т.е. результат.
p51x вне форума Ответить с цитированием
Старый 20.11.2012, 05:17   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Altana Посмотреть сообщение
Не понимаю сам сумматор. Что за три входа и два выхода?
Я полагаю, тебе нужен двоичный сумматор. Это устройство, которое работает с одноразрядными двоичными числами. А именно - суммирует их, то есть находит сумму двух чисел. Почему при этом входа не два (слагаемые), а три, а выход не один (сумма), а два? Потому что есть еще признак переполнения (перенос разряда на следующую операцию). Ты умеешь складывать "в столбик"? Когда складываешь два разряда, может произойти _переполнение_ - то есть, результат превышает значение, которое можно записать одной цифрой. В таких случаях говорят типа "два пишем, один в уме". Вот этот "один в уме" - это и есть тот самый загадочный второй выход )), который идет в дополнение к сумме разрядов. А третий вход - это признак переполнения предыдущей операции (то есть тот самый 1, который уже был в уме).

Обычно работа подобных устройств описывается таблицей, в которой каждому набору сигналов (то есть чисел 0 и 1) на входе соответствует набор сигналов на выходе. В такой таблице должны быть описаны все возможные комбинации на входе. Вот тебе пример одной строки в такой таблице, соответствующий сложению 1 + 1 при признаке переполнения, равном 0
Код:
слаг_1  слаг_2  перенос   сумма  перенос
  1       1        0        0      1
Это соответствует тому, что в двоичной системе счисления 1+1=10, при этом мы 0 пишем, а 1 "держим в уме"
Целиком и полностью такую таблицу ты либо можешь написать сама, либо посмотреть в Вики, она там есть (ищи на слово "сумматор").

Программа же, я полагаю, должна просто реализовывать такую таблицу, вот и все. Как именно это делать - вопрос предпочтений самого программиста (либо требований, предъявляемых преподавателем). Можно делать "чисто" - по таблице, с использованием многочисленных операторов if ... then, а можно "грязно", учитывая, что Pascal на самом деле уже умеет складывать )).

Вот тебе в качестве примера "грязная" реализация.
Код:
type
  tBin= 0..1;
...

procedure BinAdder(x,y,z: tBin; var s,t: tBin);
var
  a: integer;
begin
  a:= x+y+z;  // тут может понадобиться явное преобразование типов
  s:= a mod 2;
  t:= a div 2
end;
А "чистую" реализацию попробуй сделать сама. Если что, мы поможем )).
Успехов тебе.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц