Форум: "Потрепаться";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
ВнизПомогите упростить: Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c