Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.05;
Скачать: CL | DM;

Вниз

Помогите упростить:   Найти похожие ветки 

 
Style ©   (2004-02-13 12:00) [0]

Деление столбиком:

function del(s: string;d,mantisa:integer): string;
begin
result := _trimzeros(_innerdel(s,d,0,mantisa));
end;

function _innerdel(s: string; d,r,mantisa:integer): string;
var
i: integer;
begin

if(r > 0) then
begin

if(Length(s) > 0) then
begin
i := StrToInt(IntToStr(r) + s[1]) div d;
r := StrToInt(IntToStr(r) + s[1]) - i*d;
end
else
begin
i := StrToInt(IntToStr(r) + "0") div d;
r := StrToInt(IntToStr(r) + "0") - i*d;
end;

end
else
begin

if(Length(s) > 0) then
begin
i := StrToInt(s[1]) div d;
r := StrToInt(s[1]) - i*d;
end
else
begin
i := 0 div d;
r := 0 - i*d;
end;

end;

if(length(s) <= 1) then
begin
if(length(s) = 0) then
begin
dec(mantisa);
if(mantisa > 0) then
begin
result := IntToStr(i) + _innerdel(s,d,r,mantisa);
end
else
result := IntToStr(i);

end
else
begin
if(mantisa > 0) then
begin
result := IntToStr(i) + DecimalSeparator + _innerdel("",d,r,mantisa);
end
else
result := IntToStr(i);

end;

end
else
result := IntToStr(i) + _innerdel(copy(s,2,Length(s)-1),d,r,mantisa);

end;

function _trimzeros(s: string): string;
var
i: integer;
separate: boolean;
mantisa: string;
begin
result := "";
separate:= false;

for i := 1 to Length(s) do
begin
if(s[i] = DecimalSeparator) then
begin
separate := true;
break;
end;

if(s[i] <> "0") then
begin
result := result + s[i];
end else
begin
if(i < Length(s)) then
begin
if(s[i+1] = DecimalSeparator) then
begin
result := result + s[i];
end;
end; // i < len(s)
end; //s[i] <> 0
end; //for

mantisa := "";
if(separate) then
begin
separate := false;
for i := Length(s) downto 1 do
begin
if(s[i] = DecimalSeparator) then
begin
break;
end
else
begin
if(s[i] <> "0") then Separate := true;
if(Separate) then
Mantisa := s[i] + Mantisa;
end;
end;
end;

if(mantisa <> "") then
result := result + DecimalSeparator + Mantisa;

end;


 
Johnmen ©   (2004-02-13 12:37) [1]

Вот так нормально ?

function del(s: string;d,mantisa:integer): string;
begin
result := _trimzeros(_innerdel(s,d,0,mantisa));
end;

function _innerdel(s: string; d,r,mantisa:integer): string;
begin
result := IntToStr(r);
end;

function _trimzeros(s: string): string;
begin
result := s;
end;


Мог бы еще упростить, но лень...:))))))))))))


 
ПИТОН   (2004-02-13 13:00) [2]

Берешь что-нибудь поострее столбика, например топор и делишь.
Если деление между людьми, то АК даже лучше.
И никаких алгоритмов.


 
Style ©   (2004-02-13 13:02) [3]

Johnmen ©
:)))

такой значить лентяй :)


 
Style ©   (2004-02-13 13:04) [4]

2 ПИТОН
А мне еще складывать вычитать и умножать нада!

Тут одним топором не обойтись, к тому же я совсем забыл про знаки :)


 
ПИТОН   (2004-02-13 13:42) [5]

Ну, с помощью АК можно себе умножать, а тех кто не хочет от себя вычитать и делить, то тех складывать.


 
Style ©   (2004-02-13 13:50) [6]

ПИТОН :)))


 
ПИТОН   (2004-02-13 13:53) [7]

Попробуй пойти от обратного -
найди результат a div b, а потом рисуй как надо.



Страницы: 1 вся ветка

Текущий архив: 2004.03.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
4-12582
Aleksandr
2003-12-26 18:46
2004.03.05
Как послать другому приложению строку?


3-12277
Dalex
2004-02-07 10:36
2004.03.05
Резервное копирование файлов базы


1-12322
Lena19
2004-02-22 21:35
2004.03.05
как убить объект (самого себя)


8-12452
Meronikol
2003-11-02 05:37
2004.03.05
Помогите решить проблему


3-12291
Relaxxx
2004-02-06 19:15
2004.03.05
Как мне в одну ячейку ДБГрид записать несколько строчек...