{ арифметические алгоритмы: моделирование сложения двоичных чисел }
{ ------------------------------------------------------------------------ }
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]) - 48) + (ord(s2[i]) - 48) + carry;
carry := d div 2;
d := d mod 2;
s := chr(d + 48) + 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.