Главная
Дисциплины (2009-2010)
Дисциплины (2010-2011)
Разное
Популярные

:

{ арифметические алгоритмы: моделирование вычитания двоичных чисел         }
{ ------------------------------------------------------------------------ }

var sr, sf, ss: string;

{ вычитание двоичных строк, первое число должно быть >= второго }
function BinSub(s1, s2: string): string;
var s : string;
    l, i, j: 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 := '';
    for i := l downto 1 do begin
       case s1[i] of
        '1': if s2[i] = '0' then s := '1' + s else s := '0' +s;
        '0': if s2[i] = '0' then s := '0' + s else begin
                s := '1' + s;
                if (s1[i-1] = '1') then s1[i-1] := '0' else begin
                   j := 1;
                   while (i-j > 0) and (s1[i-j] = '0') do begin
                         s1[i-j] := '1';
                         inc(j);
                   end;
                   s1[i-j] := '0';
                end;
             end;
       end;
    end;
    { Уничтожение нулей слева }
    while (length(s) > 1) and (s[1] = '0') do delete(s, 1, 1);
    BinSub := s;
end;

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


Последнее обновление:
Copyright (C) 2009-2010 by RA0LHS
Hosted by uCoz