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

Вниз

представление числа в виде строки   Найти похожие ветки 

 
McSimm2   (2003-12-02 16:50) [0]

Подскажите мастера алгоритм, как реализовать самому функцию inttostr


 
Smithson ©   (2003-12-02 16:54) [1]

посмотри исходники val :))


 
McSimm2   (2003-12-02 16:58) [2]

Smithson © (02.12.03 16:54) [1]

Нет, val тор же не подойдёт, нужно более на "структурном" уровне


function TForm1.GetStr2(ANum : integer):string;
var
stop: Boolean;
por, koef, tmpNum: Integer;
begin
por := round(exp(trunc((ln(ANum)/ln(10))) * ln(10)));
tmpNum := ANum;
result := "";
while tmpNum > 0 do
begin
koef := tmpNum div por;
tmpNum := tmpNum - koef * por;
por := por div 10;
result := result + char(48 + koef);
if por = 0 then
por := 1;
end;
end;


Вот может проще как то можно сделать. Ведь наверняка какие алгоритмы есть ....


 
Тимохов   (2003-12-02 17:01) [3]

что это за уровень то такой "структурный"?


 
McSimm2   (2003-12-02 17:03) [4]

Тимохов (02.12.03 17:01) [3]

Да ладно тебе, придираться :)))
Просто не пользуясь никакими колёсами, которые уже изобретены...


 
Тимохов   (2003-12-02 17:05) [5]

все-таки непонятно чего ты хочешь.
"структурно" это красивое слово, но в данном контексте (без дополнительных пояснений со стороны автора) не имеет смысла.


 
han_malign ©   (2003-12-02 17:17) [6]

> por := round(exp(trunc((ln(ANum)/ln(10))) * ln(10)));
- где такую траву берешь, что просто div/mod - уже не катит?


 
McSimm2   (2003-12-03 09:45) [7]

Всё тот же перевод из integer в string ...


function TFrm_main.MyIntToStr(AValue: Integer): String;
var
_LengthText: Integer;
_ResultPCharText: PChar;
_ResultStringText, _s: String;
_tempVal, _i, _por: Integer;

function StrPas(const Str: PChar): String;
begin
Result := Str;
end;

const
Pos0 = ord("0");

begin
try
_tempVal := Avalue;
_LengthText := Trunc(ln(_tempVal) / ln(10)) + 1;
GetMem(_ResultPCharText, _LengthText + 1);

Как вот в этом месте записать в переменную
_ResultPCharText нужный адрес, если длина уже сидит в
_LengthText ???
Есть какая нибудь функция ?
Типа
int GetWindowText(
HWND hWnd, // handle of window or control with text
LPTSTR lpString, // address of buffer for text
int nMaxCount // maximum number of characters to copy
);



_ResultPCharText := PChar(_tempVal + Pos0);
_ResultStringText := StrPas(@_ResultPCharText);
Result := _ResultStringText;
finally
FreeMem(_ResultPCharText);
end;
end;


Подскажите пожалуйста...


 
Slym ©   (2003-12-03 10:27) [8]

function IntToStr(i:integer):string;
begin
result:="";
repeat
result:=char(i mod 10+48)+result;
i:=i div 10;
until i=0;
end;


 
vedmed_   (2003-12-03 10:35) [9]

2 Slym: не работает для отрицательных чисел и нуля

мой вариант:

function YetAnotherIntToStr(aVal: Integer): string;
var
lSign: string;
begin
if aVal = 0 then
Result := "0"
else
begin
Result := "";
if aVal < 0 then
begin
lSign := "-";
aVal := -aVal;
end
else
lSign := "";
while aVal > 0 do
begin
Result := Chr((aVal mod 10) + Ord("0")) + Result;
aVal := aVal div 10;
end;
Result := lSign + Result;
end;
end;

его можно оптимизировать предварительно выделив память под результат


 
Digitman ©   (2003-12-03 10:47) [10]

function MyIntToStr(Value: Integer): String;
var
i: Integer;
neg: Boolean;
m: Integer;
begin
i := 11;
Result := StringOfChar(" ", i);
neg := Value < 0;
if neg then Value := -Value;
repeat
Result[i] := Char(Value mod 10 + Ord("0"));
Value := Value div 10;
Dec(i);
until Value = 0;
if neg then Result[i] := "-";
Result := Trim(Result);
end;


 
Amoeba   (2003-12-03 13:07) [11]

А зачем в очередной раз понадобилось изобретать велосипед?



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
7-36853
Максим
2003-10-08 08:45
2003.12.12
Помогите !!!!!


11-36587
mike.dld
2003-03-27 02:34
2003.12.12
Глюк


1-36609
Bel
2003-11-29 11:47
2003.12.12
QReport - композитно-композитный отчет.


1-36671
Паша_Кимры
2003-11-30 13:37
2003.12.12
Технология СОМ


3-36560
Mila
2003-11-12 11:36
2003.12.12
есть:БД в Clipper(dBase)