Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизКак задать констату пользовательского типа? Найти похожие ветки
← →
TStas © (2005-05-29 01:59) [0]Написал тип
type
ImpossibleNumber = record
modul:String;
sign:Boolean; //Положительное - true
end;
Это числа невозможной длинны. Работает все отлично, только не получается почему-то задать константы соответствующие 1 и 0.
← →
lookin © (2005-05-29 02:12) [1]Т.е.?
← →
Cobalt © (2005-05-29 03:09) [2]2 TStas © (29.05.05 01:59)
Help по const в руки:
Delphi Language Reference, Record constants
← →
Defunct © (2005-05-29 04:49) [3]TStas © (29.05.05 01:59)
> sign:Boolean; //Положительное - true
Гм... Обычно "Sign = true" знак есть, значит отрицательное.
234234
-324234
Вы же не пишете
+234234
← →
Marser © (2005-05-29 10:03) [4]
> Гм... Обычно "Sign = true" знак есть, значит
> отрицательное.
Есть разные записи.
Но знак обычно - старший бит. Поэтому непонятно, зачем нужно добавлять булеву переменную и создавать запись, чтобы с ней иметь проблемы непонятного характера.
← →
TStas © (2005-05-29 10:15) [5]Знак отвечает на вопрос положительное ли число. Задал так просто, кроме того так их проще сравнивать. При преобразовании в строку, естественно, плюс не появвляется. Знак добавлен отдельно, потому что для представления модулей чисел большой длины я использовал обычную строку, в которую в обратном порядке записал десятичные байты. Например 2 будет выглядить как ord(2). Все на самом деле получилось просто и быстро. Обрабатываются с очень хорошей скоростью. Только с 0 и 1 проблема небольшая вышла. Пока в функциях вместо 1 пишу StrToImpNum("1"), но мне так не нравится.
← →
TStas © (2005-05-29 10:17) [6]То есть не ord(2), а Char(2), конечно.
← →
Marser © (2005-05-29 10:22) [7]
> в которую в обратном порядке записал десятичные байты.
Это как? Оптимальным вариантом представления является выделение для одной десятичной цифры тетрады - четырёх бит. Таким же образом можно закодировать и HEX.
> Только с 0 и 1 проблема небольшая вышла. Пока в
> функциях вместо 1 пишу StrToImpNum("1"), но мне так не
> нравится.
Как это в коде выглядит?
← →
TStas © (2005-05-29 23:21) [8]Сделал более экономное с моей точки зрения представление - в системе счисления по основанию 256, тогда байты используются полностью, очень сильно экономится память и быстрее обрабатываеться должно, ведь числа получаются намного короче.
>Marser
>Как это в коде выглядит?
Вы имеете в виду как выглядят константы 1 и 0? Сейчас уже исправил, задал, как написано в справке.
Вы имеете с виду как выглядят констаны или что?
← →
Marser © (2005-05-29 23:41) [9]Я хотел посмотреть, как Вы заносите и считываете числа. Кажется, Вы уже самостоятельно управились :-)
← →
vidiv © (2005-05-30 04:39) [10]type
ImpossibleNumber = record
modul:String;
sign:Boolean;
end;
const A:ImpossibleNumber=(modul:"1";sign:true);
это вы имели ввиду?
← →
TStas © (2005-05-30 12:24) [11]function ImpNumToStr(ImN:ImpossibleNumber):String; //Так считываю
var
i:Integer;
b:Byte;
begin
if ImN.modul=Char(0) then
begin
Result:="0";
exit;
end;
Result:="";
for i:=1 to Length(ImN.modul) do
begin
b:=ord(ImN.modul[i]);
Result:=Result+IntToStr(b);
end;
Result:=invert(Result);
if not ImN.sign then Result:="-"+Result;
end;
function StrToImpNum(s:String):ImpossibleNumber; //А так заношу
var
i:Integer;
b:Byte;
begin
if s[1]="-" then
begin
Result.sign:=false;
Delete(s, 1, 1);
end
else Result.sign:=true;
if s[1]="+" then Delete(s, 1, 1);
Result.modul:="";
while ((s[1]="0") and (Length(s)>1)) do
begin
Delete(s, 1, 1);
end;
for i:=1 to Length(s) do
if isNumber(s[i]) then Result.modul:=Result.modul+s[i];
Result.modul:=invert(Result.modul); //Препеписывает в обратном порядке
for i:=1 to Length(Result.modul) do
begin
b:=StrToInt(Result.modul[i]);
Result.modul[i]:=Char(b);
end
end;
Попробовал написать то же самое, но в системе счисления по основанию 256, а потом устроил проверку на скорось. Получилось, что в 10-ном представлении числа обрабатываются как минимум в 10 быстрее, точно не измерял
← →
Digitman © (2005-05-30 12:28) [12]
> TStas © (30.05.05 12:24) [11]
а для чего вообще хранить свои числа в строковом представлении ?
← →
TStas © (2005-05-30 12:43) [13]>divid
Именно так я и делал
>Digitman
Чтобы снять все ограничения на длинну числа
← →
Kolan © (2005-05-30 12:53) [14]А ШО
Extended
нехватает?
← →
Digitman © (2005-05-30 13:05) [15]
> TStas © (30.05.05 12:43) [13]
> ограничения на длинну числа
у числа нет понятия "длина".
у числа есть значение.
ты там что, звезды решил посчитать ?)
у массива байт тоже, считай, нет ограничений на число элементов
вот и храни в массиве байт свое число ! зачем хранить массив char"ов-то ? каковым по сути является string ?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.05 c