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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2018, 19:35   #1
nothingness07
Новичок
Джуниор
 
Аватар для nothingness07
 
Регистрация: 18.10.2018
Сообщений: 4
По умолчанию Нужно сложить два 2-ичных числа на Паскале

Я пытаюсь сложить два числа в 2-ичной системе. Мне сказали сначала перевести 10-ичные числа в 2-ичную и затем их сложить. Я пытался попробовать как-то соединить два кода.

С начала перевод числа в 2-ичную, но для одного числа

Код:
Var a, b, k: longint;
begin
  Readln(a);
  k:=1; b:=0;
  repeat
    b:=b+(a mod 2)*k;
    
    k:=k*10;
    a:=a div 2
  until (a=0);
  Writeln(b)
end.

И сложение двух 2-ичных, здесь у меня проблема, я не особо понимаю как это сделать. Я попробовал так

var x, y, z: integer;
begin
  
  for x:=1 to 2-1 do
    begin
      for y:=1 to 2-1 do
        begin
          z:=(x+y div 2)*10 + (x+y) mod 2;
        end;
       writeln (z);
    end;
end.
Пожалуйста, оформляйте Ваш код согласно правилам.

Это переделанный код для умножения, я просто не знаю как сделать по другому.
Может кто что подскажет?

Последний раз редактировалось Вадим Мошев; 18.10.2018 в 20:06.
nothingness07 вне форума Ответить с цитированием
Старый 19.10.2018, 14:52   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Учитывая, что в компе все целые числа и так хранятся и обрабатываются в двоичном виде, то эту смешную задачку и решать можно по смешному. Здесь не предусмотрена "защита от дурака", так что все символы во входной строке, отличные от '1', будут восприниматься как 0. Двоичные числа будем вводить и выводить как строки.

Код:
program binary_plus;
var
 i,j,k: integer;
 st: string ;
 
function inp_bin:integer ;
var
  i,j,k,n:integer;
  stro:string ;
begin
   writeln ('Enter a binary number') ;
   readln (stro) ;
   n := Length (stro) ;
   i := 0 ; k := 1 ;
   for j := n downto 1 do
     begin
       if stro[j]='1' then i := i + k ;
       k := k+k
     end ;  
   inp_bin := i ;
end ;

begin
  i := inp_bin ;
  j := inp_bin ;
  k := i+j ;
  i := 1 ;
  st := '' ;
  repeat
    if (k and i) > 0 then st := '1' + st else st := '0' + st ;
    i := i+i;
  until (i>k) ;
  writeln (st) ;
  readln (i)
end.

Последний раз редактировалось digitalis; 19.10.2018 в 14:55.
digitalis вне форума Ответить с цитированием
Старый 19.10.2018, 16:40   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

http://www.programmersforum.ru/showp...3&postcount=12

(с) Аватар

Код:
function BinAdd(Value1,Value2: String): String;
var i,j,i1,i2: Integer;
    s: String;
begin
  i1:=Length(Value1);
  i2:=Length(Value2);
  s:=''; i:=0;
  while (i1>0) or (i2>0) do begin
    if (i1>0) and (i2>0) then begin j:=StrToInt(Value1[i1])+StrToInt(Value2[i2]); Dec(i1); Dec(i2); end
    else if i1>0         then begin j:=StrToInt(Value1[i1]);                      Dec(i1);          end
                         else begin j:=StrToInt(Value2[i2]);                      Dec(i2);          end;
    Inc(j,i);
    s:=IntToStr(j mod 2)+s;
    i:=j div 2;
  end;
  if i=1 then s:='1'+s;
  BinAdd:=s;
end;

....
var s1, s2 : string;
  s1:='100110101101';
  s2:='10011010110101';
  WriteLn( BinAdd(s1,s2) );
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.10.2018, 16:53   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Много есть вариантов...
"Все программы хороши - выбирай на вкус" © Некрасов . "Мцыри"

Последний раз редактировалось digitalis; 19.10.2018 в 16:56.
digitalis вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложить два 250-ти разрядных числа. anasttb Паскаль, Turbo Pascal, PascalABC.NET 6 26.02.2017 11:16
Сложить два 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