Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Алгоритмы
Курсы ККДП
Дистрибутивы
Ссылки

HotLog


 
{ арифметические алгоритмы: моделирование вычитания двоичных чисел         }
{ ------------------------------------------------------------------------ }
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.


Красноярский краевой Дворец пионеров, (c)2006 - 2017, ICQ: 151483



Токарная и фрезерная обработка на станках с ЧПУ для всех предприятий России и СНГ.   замена тормозной жидкости с абс