Показать сообщение отдельно
Старый 04.04.2011, 14:59   #8
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: Сложение вещественных чисел произвольной длины.

вот пример, но только для сложения положительных чисел:
var
  idTxt : integer;
  cmdExit : command;
  a,b : string;


function sum(a,b : string) : string;
var
  s : string;
  ap,bp : integer;
  sm,ost : integer;
begin
  ap:=pos(a,'.');
  bp:=pos(b,'.');
  if (ap=-1) then begin a:=a+'.'; ap:=pos(a,'.'); end;
  if (bp=-1) then begin b:=b+'.'; bp:=pos(b,'.'); end;
  while (ap<bp) do begin a:='0'+a; ap:=ap+1; end;
  while (bp<ap) do begin b:='0'+b; bp:=bp+1; end;
  ap:=length(a);
  bp:=length(b);
  while (ap<bp) do begin a:=a+'0'; ap:=ap+1; end;
  while (bp<ap) do begin b:=b+'0'; bp:=bp+1; end;
  s:='';
  ost:=0;
  for ap:=bp-1 downto 0 do
  begin
    if getChar(a,ap)<>'.' then
    begin
      sm:=(ord(getChar(a,ap))-48) + (ord(getChar(b,ap))-48);
      if ost>0 then begin sm:=sm+ost; ost:=0; end;
      while sm>=10 do begin sm:=sm-10; ost:=ost+1; end;
      s:=''+sm+s;
    end
    else s:='.'+s;
  end;
  if ost>0 then s:=''+ost+s;
  sum:=s;
end;


begin
  showForm;
  a:='12999999';
  b:='6789.2999';
  idTxt := formAddString(a+'+'+b+'='+sum(a,b));
  cmdExit := createCommand('Exit', CM_EXIT, 1);
  addCommand(cmdExit);
  repeat delay(1000); until getClickedCommand=cmdExit;
end.
(Offline)
 
Ответить с цитированием