21. august 2000 - 21:56
Der er
1 kommentar og
1 løsning
Tal etc.......
Hej !
Jeg leder efter dels informationer om mulighederne i talformater, da jeg skal til at lave et program der skal kunne regne med tal der FYLDER megabytes hvis de skrives i filer (!!!). Er der nogle talformater til dette ? Og hvad med streng formatet, er der nogle begrænsninger ?
Og så :
Nogle funktioner til omregning mellem talsystemer ? Binær specielt ( decimal->binær, binær->decimal )
Med venlig hilsen
Ulrik Jensen
21. august 2000 - 22:08
#1
En streng har en begrænsning på 2GB ifgl omline hjælpen. Mig bekendt er der ingen tal formater der kan håntere mere end en 64 bits integer .... Hvis du har brug for stører tal skal du selv implemtere din data type .... Jeg kan levere en stor pi og en stor e hvis du får brug for det .... Dvs. e er på 1000 decimaler pi bestemmer du selv.
Mht. din konvetering vil jeg foreslå :
function IntToBin(Value: LongInt;Size: Integer): String;
var
i: Integer;
begin
Result:=\'\';
for i:=Size downto 0 do begin
if Value and (1 shl i)<>0 then begin
Result:=Result+\'1\';
end else begin
Result:=Result+\'0\';
end;
end;
end;
function BinToInt(Value: String): LongInt;
var
i,Size: Integer;
begin
Result:=0;
Size:=Length(Value);
for i:=Size downto 0 do begin
if Copy(Value,i,1)=\'1\' then begin
Result:=Result+(1 shl i);
end;
end;
end;
Eller denne her
{
Give this function any decimal value, specify a base (1..16) and it will return you a string
containing the proper value, BaseX. You can use a similar method for Arabic/Roman
conversion (see below).
}
function DecToBase( Decimal: LongInt; const Base: Byte): String;
const
Symbols: String[16] = \'0123456789ABCDEF\';
var
scratch: String;
remainder: Byte;
begin
scratch := \'\';
repeat
remainder := Decimal mod Base;
scratch := Symbols[remainder + 1] + scratch;
Decimal := Decimal div Base;
until ( Decimal = 0 );
Result := scratch;
end;
Eller denne her
{
Give this function any decimal value (1...3999), and it will return you a string containing
the proper value in Roman notation.
}
function DecToRoman( Decimal: LongInt ): String;
const
Romans: Array[1..13] of String =
( \'I\', \'IV\', \'V\', \'IX\', \'X\', \'XL\', \'L\', \'XC\', \'C\', \'CD\', \'D\', \'CM\', \'M\' );
Arabics: Array[1..13] of Integer =
( 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);
var
i: Integer;
scratch: String;
begin
scratch := \'\';
for i := 13 downto 1 do
while ( Decimal >= Arabics[i] ) do
begin
Decimal := Decimal - Arabics[i];
scratch := scratch + Romans[i];
end;
Result := scratch;
end;
Jens B
22. august 2000 - 06:16
#2
Tak, jeg får dog ikke brug for de store tal alligevel, men tak for hjælpen.
Med venlig hilsen
Ulrik Jensen