Avatar billede ultik Nybegynder
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
Avatar billede borrisholt Novice
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
Avatar billede ultik Nybegynder
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester