{ арифметические алгоритмы: моделирование сложения двоичных чисел          }
{ ------------------------------------------------------------------------ }
var sr,sf,ss:string;

function BinAdd(s1,s2:string):string;
var s:string; l,i,d,carry:byte;
begin
    {выравнивание строк по длине}
    if length(s1)>length(s2) then while length(s2)<length(s1) do s2:='0'+s2
                             else while length(s1)<length(s2) do s1:='0'+s1;
    l:=length(s1);
    s:=''; carry:=0;
    for i:=l downto 1 do begin
       d := (ord(s1[i])-ord('0')) + (ord(s2[i])-ord('0')) + carry;
       carry := d div 2;
       d:=d mod 2;
       s:=char(d+ord('0')) + s;
    end;
    if carry<>0 then s:='1'+s;
    BinAdd:=s;
end;

begin
     writeln('введите 1-е двоичное число:');
     readln(sf);
     writeln('введите 2-е двоичное число:');
     readln(ss);
     sr:=BinAdd(sf,ss);
     writeln('результат сложения = ',sr);
end.
