Арифметические действия в системах счисления, отличных от десятичной. - Pascal

Узнай цену своей работы

Формулировка задачи:

А вы случайно не знаете как сделать калькулятор в СС отличной от десятичной. Который будет выполнять операции минуя 10 СС. То есть будет производить деление, умножение, сложение в столбик))

Решение задачи: «Арифметические действия в системах счисления, отличных от десятичной.»

textual
Листинг программы
program Delenie;
uses crt;
const max=1000;
type mas=array[1..max] of shortInt; //массив для вычислений
var
  s:boolean;
  m1,m2,ost,t:string; //делимое, делитель и остаток
  a1,a2,mm1,mm2,p:mas; //промежуточные массивы
  cod:Integer; //переменная для перевода строки в число
  f,k,l,i,j,z,c,q,sum:integer;//разные переменные
  m,n1,n2:integer;
function Sravn(m:integer;a1,mm2:mas):boolean;//функция сравнения чисел(массивов)
  var
    k:integer;
  begin
    if m<>n2 then Sravn:=(m>n2)//заменяет две строки(true, false)
    else begin
       Sravn:=true;
       k:=1;
       while (k<=m)and(a1[k]=mm2[k])do inc(k);
       if (k<=m)then Sravn:=(a1[k]>mm2[k]); //то же
    end;
  end;
begin  //начало программы
  clrScr;
  writeLn(' Vvedite delimoe');
  readLn(m1);
  n1:=length(m1);
  for i:=1 to n1 do val(m1[i],mm1[i],cod);//преобразуем в массив
  writeln(' Vvedite delitel');
  readLn(m2);
  n2:=length(m2);
  for i:=1 to n2 do val(m2[i],mm2[i],cod);// преобразуем в массив
  for i:=1 to n2-1 do a1[i]:=mm1[i];  //берем из 1 числа на одну цифру меньше, чем 2 число
  if (n2>n1)or((n2=n1)and(m2[1]>m1[1]))then //если 2 число > 1, то остаток=1 числу
    begin
     ost:=m1;
     writeln('Ostatok=',ost);
     readln;
     exit; //заканчиваем программу
    end;
  m:=n2-1; //дальше я все не могу описать. Идет деление столбиком с вычитанием и сравнением чисел, как в младших классах, рассматриваются все возможные случаи
  i:=m;
  while(i<n1)Do
    begin
      while ((Sravn(m,a1,mm2)=false) and (i<n1)) do
        begin
          sum:=0;
          for q:=1 to m do
            begin
              sum:=sum+a1[q];
              if sum<>0 then break;
            end;
          if ((m>0)and(sum<>0))or(m=0) then m:=m+1;
          i:=i+1;
          a1[m]:=mm1[i];
        end;
      j:=0;
      while(Sravn(m,a1,mm2)=true)do
        begin
          f:=n2+1;
          for k:=m downto m-n2 do
            begin
              f:=f-1;
              if a1[k]>=mm2[f] then a2[k]:=a1[k]-mm2[f]
              else
                begin
                  a1[k]:=a1[k]+10;
                  a1[k-1]:=a1[k-1]-1;
                  for l:=k downto 1 do
                  if a1[l]<0 then
                     begin
                       a1[l-1]:=a1[l-1]-1;
                       a1[l]:=a1[l]+10;
                     end;
                  a2[k]:=a1[k]-mm2[f];
                end;
            end;
          for l:=m-n2-1 downto 1 do
          a2[l]:=a1[l];
          j:=j+1;
          p[i-n2+1]:=j;
          while((a2[1]=0)and(m>0))do
            begin
              for z:=1 to m-1 do
              a2[z]:=a2[z+1];
              m:=m-1;
              a2[m+1]:=0;
            end;
          for z:=1 to m do
          a1[z]:=a2[z];
        end;
      while((a1[1]=0)and(m>0))do
        begin
          for z:=1 to m-1 do
          a1[z]:=a1[z+1];
          m:=m-1;
          a1[m+1]:=0;
        end;
    end;
  ost:='';
  for i:=1 to m do //преобразуем массив–остаток в строку
     begin
      str(a1[i],t);
      ost:=ost+t;
     end;
  writeln('Ostatok=',ost);
  readln;
end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы