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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2015, 14:59   #1
Smirnyaga52
Пользователь
 
Регистрация: 12.10.2014
Сообщений: 44
Восклицание Сложить два числа в модифицированном обратном и дополнительных кодах

Сложить два числа в модифицированном обратном и дополнительных кодах:
А1=1,1010
А2=1,0001
Smirnyaga52 вне форума Ответить с цитированием
Старый 16.01.2015, 15:05   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Даю образец:
Код:
function chisloPerewod_iz_10_w_2(chislo_10: integer): string;
var i:integer;
begin
{***************************************************************************}
{                                                                           }
{ Перевод из десятичного числа chislo_10 в двоичное число системы счисления }
{                                                                           }
{***************************************************************************}
   Result:='';
   Repeat
      i:=chislo_10 mod 2;
      Result:=IntToStr(i)+Result;
      chislo_10:=chislo_10 div 2;
   Until chislo_10=0;
end;

function chisloPerewod_iz_2_w_10(chislo_n: string): integer;
var i,j:integer;
    s:string;
begin
{**************************************************************************}
{                                                                          }
{ Перевод из двоичного числа chislo_n в десятичное число системы счисления }
{                                                                          }
{**************************************************************************}
   Result:=0;
   For j:=1 to Length(chislo_n) do
   begin
      s:=chislo_n[j];
      i:=StrToInt(s);
      Result:=Result+i*Round(exp(ln(2)*(Length(chislo_n)-j)));
   end;
end;

function strDlinaStroki(s: string; dlina_s: integer): string;
begin
{********************************************************************************}
{                                                                                }
{ Установить длину строки s, равной dlina_s символов (добавление нулей в начале) }
{                                                                                }
{********************************************************************************}
   While Length(s)<dlina_s do
      s:='0'+s;
   Result:=s;
end;

function Plus(a,b:char):string;
begin
{***********************************}
{                                   }
{ Таблица сложения двух чисел a и b }
{                                   }
{***********************************}
   Result:='00';
   If (a='0') and (b='1') then
      Result:='01';
   If (a='1') and (b='0') then
      Result:='01';
   If (a='1') and (b='1') then
      Result:='10';
end;

const a=36;
      b=5;//ввод чисел
var s1,s2,s,d1,d2:string;
    i1,i2,i,c{сумма чисел c=a+b}:integer;
    um{1 "в уме" или нет}:char;
begin
   Cls;
   { Переводим числа a и b в двоичную систему счисления }
   { После знака "//" дан результат (для наглядности) }
   s1:=chisloPerewod_iz_10_w_2(a);//100100
   s2:=chisloPerewod_iz_10_w_2(b);//101
   { Считаем количество разрядов }
   i1:=Length(s1);//6
   i2:=Length(s2);//3
   { Устанавливаем количество разрядов в s1 и s2 равными, увеличенными на 1 }
   If i1<i2 then
      i1:=i2;
   i1:=i1+1;//7
   s1:=strDlinaStroki(s1,i1);//0100100
   s2:=strDlinaStroki(s2,i1);//0000101
   s:=strDlinaStroki('',i1);//0000000
   um:='0';
   { Складываем числа s1 и s2 }
   For i:=i1 downto 2 do
   begin
      d1:=Plus(s1[i],s2[i]);
      s[i]:=d1[2];
      If um='1' then
      begin
         d2:=Plus(s[i],'1');
         s[i]:=d2[2];
      end;
      If (d1[1]='1') or (d2[1]='1') then
         um:='1' else
         um:='0';
   end;
   If um='1' then
      s[1]:='1';
   Writeln('Сложение в двоичной системе получилось: ',s);
   i:=chisloPerewod_iz_2_w_10(s);
   Writeln('Сложение в десятичной системе получилось: ',i);
   Writeln('Самопроверка: ',a,' + ',b,' = ',a+b);
end.
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 16.01.2015, 15:40   #3
Smirnyaga52
Пользователь
 
Регистрация: 12.10.2014
Сообщений: 44
По умолчанию

а без кода простыми цифрами
Smirnyaga52 вне форума Ответить с цитированием
Старый 16.01.2015, 15:44   #4
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

В смысле?...
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 16.01.2015, 15:51   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,716
По умолчанию

В столбик, на листочке в клеточку, ... человеку просто лень даже вики прочитать.
p51x вне форума Ответить с цитированием
Старый 16.01.2015, 15:56   #6
Smirnyaga52
Пользователь
 
Регистрация: 12.10.2014
Сообщений: 44
По умолчанию

мне не лень я просто путаюсь в нулях и единицах
Smirnyaga52 вне форума Ответить с цитированием
Старый 16.01.2015, 15:57   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

никто не заметил, что в условии двоичные числа дробные?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 16.01.2015, 15:59   #8
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

А1=1,1010
А2=1,0001
А =10,1011
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 16.01.2015, 15:59   #9
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

А1=1,1010
А2=1,0001
А =10,1011
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 16.01.2015, 16:29   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,716
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
никто не заметил, что в условии двоичные числа дробные?
Та не... просто поделили по 4 разряда для удобства. Хотя могёт...
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложить два 48 разрядных числа @Серж@ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 16.12.2011 20:17
MMX сложить два числа gansm Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 29.10.2010 05:16
Макрос: сложить два числа белочка Microsoft Office Excel 6 23.12.2009 22:02
Сложить два числа iwaniwan Win Api 3 23.04.2009 06:27
Представить двоичные числа в обратном и дополнительном кодах Бубликова Помощь студентам 12 08.12.2008 21:17