Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

745 / Л.Р.№4 / lab4_var_5

.PAS
Скачиваний:
4
Добавлен:
22.02.2016
Размер:
2 Кб
Скачать
Program LAB_4;
  uses crt;
  var a,b,c:string;

  procedure SUM(var b,c:string);
    var j,r:integer;
  begin
    r:=0;
    for j:=32 downto 1 do
      begin
        if ord(b[j])+ord(c[j])-96+r>1 then
          begin
            if ord(b[j])+ord(c[j])-96+r>2 then c[j]:='1'
              else c[j]:='0';
            r:=1;
          end
          else
            begin
              if ord(b[j])+ord(c[j])-96+r=1 then c[j]:='1'
                else c[j]:='0';
              r:=0;
            end;
      end;
  end;

  Function DOD(b:string):string;
    var i:integer;
        a:string;
  Begin
    a:=b;
    i:=length(a);
    while a[i]<>'1' do dec(i);
    for i:=i-1 downto 1 do if a[i]='0' then a[i]:='1'
      else a[i]:='0';
    DOD:=a;
  end;

  Function ERROR(a:string):boolean;
    var i:integer;
  begin
    ERROR:=FALSE;
    if length(a)<>32 then ERROR:=TRUE
      else for i:=1 to length(a) do if (a[i]<>'1')and(a[i]<>'0') then ERROR:=TRUE;
  end;

  Function Zsyv(a:string):string;
  begin
    delete(a,2,1);
    Zsyv:=concat(a,'0');
  end;

  procedure Znak(var a:string; var a1:char);
  begin
    a1:=a[1];
    a[1]:='0';
  end;

  Procedure Division(var a:string; b:string; var c:string);
    var j,n:integer;
        a1,b1:char;
        bd:string;
  begin
    Znak(a,a1);
    Znak(b,b1);
    j:=2;
    n:=1;
    while a[j]<>'1' do inc(j);
    while b[j]<>'1' do
      begin
        b:=Zsyv(b);
        inc(n);
      end;
    for j:=1 to n do
      begin
        bd:=dod(b);
        Sum(bd,a);
        if a[1]='1' then
          begin
            Sum(b,a);
            c:=concat(c,'0');
          end
          else c:=concat(c,'1');
        b:=concat('0',b);
        delete(b,33,1);
      end;
    For j:=1 to 31-n do insert('0',c,2);
    if a1='1' then a:=Dod(a);
    if a1<>b1 then c:=Dod(c);
  end;

Begin
clrscr;
  write('A --> ');
  readln(a);
  if Error(a) then writeln('FATAL ERROR')
    else
      begin
        write('B --> ');
        readln(b);
        if Error(b) then writeln('FATAL ERROR')
          else
            begin
              c:='0';
              Division(a,b,c);
              writeln('Chastka A/B = ',c);
              writeln('Ostacha A/B = ',a);
            end;
      end;
readkey;
End.
Соседние файлы в папке Л.Р.№4