Арифметические действия в системах счисления, отличных от десятичной. - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д