17 дек. 2012 г.

Delphi Деление ОДЦ на короткое.

Откопал свои старый исходник, код ужасен, но переписывать лень кому нужно разберется.
{ Деление ОДЦ на короткое. если не делится без остатка то выводит сообщение. }

function dell(delimoe,delitel:string):string;
 var
res,ost,stemp:string;
i1,i2,s2,x,q,tmp:integer;
{http://rucode.blogspot.ru/}
begin  {комментарии в фигурных скобках показывает выполнение для 3975/55   }
//delimoe:=edit1.Text; {3975}
//delitel:=edit2.text; {55}
i1:=length(delimoe);//количество разрядов в делимом {4}
i2:=length(delitel);//количество разрядов в делителе {2}
s2:=strtoint(delitel);
//цикл по количеству разрядов делителя дабы 
//узнать какое первое число мы будем делить
 for q:=1 to i2 do {2 раза выполнится} 
  begin
stemp:=stemp+delimoe[q];{stemp принимает значение 39} //постепенно получаем i2 количество первых цифр делимого
  i1:=i1-1; {i1 становится 2}//опускаем счетчик разрядов делимого ниже
  end;
  {если 39<55 то берем i2+1 тобишь 3 разряд, i1 становится 1}
if strtoint(stemp)< s2 then begin stemp:=stemp+delimoe[i2+1]; i1:=i1-1; end; //сравниваем то число что взяли с делителем если меньше то
//берем еще разряд и опускаем счетчик разрядов еще на 1
 {на входе в цикл имеем 397 выолнение цикла 2 раза. так как остался +1 разряд}
for x:=1 to i1+1 do  //цикл по количеству не взятых разрядов
begin
{1-выполнение цикла. если 397<55 невыполняется}
{2-выполнение цикла имеем стемп=12 условие выполняется берется разряд}
if strtoint(stemp)< s2 then begin stemp:=stemp+delimoe[i1+1]; i1:=i1-1; end; //это условие для 2 и последующих выполнений цикла в роли
//стемп уже выступает частное от предыдущего расчета.
{1-выполнение тмп=7
2выолнение тмп=125/55}
tmp:=strtoint(stemp) div s2; // делим наше входное число на делитель и записываем резуль в ответ
res:=res+inttostr(tmp);
 tmp:=strtoint(stemp) mod s2;
 {1выполнение ост=12}
 ost:=inttostr(tmp);  //записали остаток теперь к нему нужно прибавить след разряд
 stemp:=ost;{присвоенно значение 12} //для этого мы присваем переменной стемп наш остаток и цикл включается еще раз
 //если остались заряды
 end;
 if strtoint(ost)<>0 then res:='печально, не делится';
 result:=res;
 end;

Комментариев нет:

Отправить комментарий