Сложить двоичные числа в Pascal
Как это сделать не знаю. Но думаю, что нужно складыват число 3 раза. Подскажите, вот задача:Даны натуральное число n, целые числа a0, ..., an такие, что каждое ai равно нулю или единице и an ≠ 0. Последовательность a0, ..., an задает двоичное предстовление некоторого целого числа p = an2n + ... + a12 + a0. Получить последовательность нулей и едениц задающую двоичное представление числа 3p
|
Цитата:
Код:
Var Программа писалась и отлаживалась в нормальном Паскале (Free, Turbo). Если у Вас этот зловонный АВС (у себя подобной гадости не держу), то следует: 1. Спереди присобачить Program Tralala; 2. Всюду LongInt заменить на Integer. |
Vladimir_S, спасибо, что решили. Но я вот всё разбираюсь, а что-то не совсем понимаю, почему второе число мы умножаем на 10, что от этого происходит? (наверное это очень глупые вопросы, но я хочу во всём этом разбираться и понимать).
|
Цитата:
В задаче речь идет об умножении на 3 - это аналог умножения на одиннадцать в десятичной системе. На этом и строится алгоритм: сперва умножаем на 2, т.е. сдвигаем все цифры влево и приписываем 0, а потом к этому прибавляем (в двоичной арифметике) само исходное число. Ну а как проще всего объяснить компьютеру, что нужно сдвинуть все разряды влево и справа присобачить ноль? А умножить на 10. |
Vladimir_S, ещё раз спасибо! Всё понятно теперь.
|
Извините, а можете ещё прокомментировать значения переменных, если вам не трудно?
|
Цитата:
1. В основной программе: n - разрядность (количество знаков) двоичного числа i - переменная цикла М - само число. Формируется методом случайной генерации нулей и единиц от младшего разряда до (n-1)-го. В старший (n-й) разряд всегда записывается 1. Т - счетчик разрядов М1 - результат сдвига влево всех разрядов числа М на один и приписывания справа нуля. В двоичной записи соответствует умножению числа М на два. Для "внутреннего употребления" М1=М*10. 2. В функции Bin2Dec (преобразование двоичного числа в десятичное): b, B1 - преобразуемое двоичное число Q - очередная значащая цифра (0 или 1), начиная с младшего разряда r - двоичный вес очередного разряда D - лишний идентификатор. Убрал. 3. В функции двоичного сложения Sum2Bin: b1,b2 (b1a,b2a) - складываемые двоичные числа b3 - формируемая двоичная сумма r - десятичный вес разряда с1, с2, с3 - цифры (0 или 1) в очередном разряде складываемых чисел и суммы. d - переносимая в следующий разряд цифра. |
Vladimir_S, Здравствуйте! Я вчера сдавала данную задачу и мне сказали, чтобы сделать её более просто, чтобы можно было ввести любое по размеру двоичное число и сделать всё с помощью функции и не переводить 3 в десятичную систему счисления. Я кое-что написала (не знаю правильно ли), но не могу разобраться как посчитать число p. Вы может знаете как это сделать? подскажите пожалуйста!
program nomer_589(c); function um(const s: string): longint; var i: integer; r: longint; begin r := 0; for i := 1 to length(s) do begin if (s[i] = '1') or (s[i] = '0') then r := r * 2 + (ord(s[i]) - ord('0')) else begin um := -i; exit; end; end; um := r end; function umnogenie(dec: longint): string; begin if dec = 0 then umnogenie := '' else if odd(dec) then umnogenie := umnogenie( dec div 2) + '1' else umnogenie := umnogenie(dec div 2) + '0'; end; const t = 3; var s: string; d1: longint; begin Write('введите первое двоичное число: '); ReadLn(s); d1 := um(s); WriteLn('Произведение равно ', umnogenie( d1 * t )); Readln end. |
задача 589
Вложений: 1
Вот задача эта, а то может у меня непонятно написано.
|
Цитата:
Цитата:
|
Часовой пояс GMT +4, время: 14:33. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.