Newsgroup: it.comp.lang.pascal
Titolo: Conversione di basi

 Ho ncessità di scrivere una serie di procedure
 per la conversione di un numero in basi differenti:
es.
      bin2dec
      dec2bin
      bin2hex
      hex2bin
      dec2hex
      hex2dec
e forse anche quelle con l'ottale (ma forse no...)
Io non sono mai stato un mago a scuola con le conversioni tra basi
numeriche a mano (insomma non ho sviluppato la base..), figuriamoci 
se devo implementarle al mio fidato TP ^_^___^_^
Per ora ho sviluppato solo la conversione dec2bin e funziona alla
perfezione.
Poi sono passato a quella bin2hex x' rovistando nella mia roba
scolastica ho trovato la mia tabella dei nibble che mi ha dato un idea
che non riesco a portare a termine.
Insomma sono n-e-g-a-t-o (non in tutto però...) ;-))
Non c'è nessuno che mi potrebbe dare una mano?? 
Accetto tutti i vostri suggerimenti (e mi risparmiereste un sacco di
tempo se qlc di voi ha le procedure già fatte): sapete com'è devo fare
ancora 2 programmi per la scuola (gestione di un hotel e di un agenzia
di viaggi....)
Ciao Ciao, e Grazie!!!
Lawrence Oluyede
rhy...@tiscalinet.it
"Per cambiare, 
per diventare un' altra cosa
dobbiamo prima sapere cosa siamo"
Bruce Lee

 wrote in message
sl4hks43dfu3a7m9l...@4ax.com...


      hex2dec
program ProgettoBasi ;
const CifraDec  : array ['0'..'9'] of integer =
                  ( 0,1,2,3,4,5,6,7,8,9 ) ;
      CifraHex  : array ['A'..'F'] of integer =
                  ( 10,11,12,13,14,15 ) ;
      Simbolo : array [0..15] of char =
      ('0','1','2','3','4','5','6','7','8','9',
       'A','B','C','D','E','F' ) ;
(* Bin2Dec *)
(*         *)
function Bin2Dec( BinStr : string ) : integer ;
var Ris, I, L, P : integer ;
begin
  Ris := 0 ;
  L := length( BinStr ) ;
  P := 1 ;
  for I := L downto 1 do
  begin
    Ris := Ris + CifraDec[ BinStr[I] ] * P ;
    P := P * 2 ;
  end ;
  Bin2Dec := Ris ;
end ;
(* Dec2Bin *)
(*         *)
function Dec2Bin( Dec : integer ) : string ;
var Ris : string ;
begin
  repeat
    Ris := Simbolo[ Dec mod 2 ] + Ris ;
    Dec := Dec div 2 ;
  until ( Dec = 0 ) ;
  Dec2Bin := Ris ;
end ;
(* Hex2Dec *)
(*         *)
function Hex2Dec( HexStr : string ) : integer ;
var Ris, I, L, P : integer ;
    C : integer ;
begin
  Ris := 0 ;
  L := length( HexStr ) ;
  P := 1 ;
  for I := L downto 1 do
  begin
    if ( HexStr[I] in ['0'..'9'] ) then
      C := CifraDec[ HexStr[I] ]
    else
      C := CifraHex[ HexStr[I] ] ;
    Ris := Ris + C * P ;
    P := P * 16 ;
  end ;
  Hex2Dec := Ris ;
end ;
(* Dec2Hex *)
(*         *)
function Dec2Hex( Dec : integer ) : string ;
var Ris : string ;
begin
  repeat
    Ris := Simbolo[ Dec mod 16 ] + Ris ;
    Dec := Dec div 16 ;
  until ( Dec = 0 ) ;
  Dec2Hex := Ris ;
end ;
(* Bin2Hex *)
(*         *)
function Bin2Hex( BinStr : string ) : string ;
var Ris, I, L, P : integer ;
begin
  Bin2Hex := Dec2Hex( Bin2Dec( BinStr ) ) ;
end ;
(* Hex2Bin *)
(*         *)
function Hex2Bin( HexStr : string ) : string ;
begin
  Hex2Bin := Dec2Bin( Hex2Dec( HexStr ) ) ;
end ;
begin
  writeln( Bin2Hex( Dec2Bin( Hex2Dec( '0123ABCD' ) ) ) ) ;
  writeln( Dec2Hex( Bin2Dec( Hex2Bin( '0123ABCD' ) ) ) ) ;
end.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------
#exclude <windows.h>

>





 - rimuovi XXX x rispondere    ICQ #8814554
"Lo zero e' il piu' grande o-piccolo."
		-- Prof. Danilo Percivale, Analisi Matematica II,
		   4/11/1997, riguardo agli infinitesimi

Questo è quello che ho io
--------------------------------------------------------------
// Conversion between binary and decimal numbers
function BinToDec(s:string):extended; export;
var
  ppos,l,i:integer;
  res:extended;
Function Power(A, N: extended): extended;
begin
  Power := exp(N * ln(A));
end;
begin
  res:=0;
  l:=length(s);
  ppos:=pos('.',s);
  for i:=1 to ppos-1 do
    res:=res+strtoint(s[i])*power(2,ppos-1-i);
  for i:=ppos+1 to l do
    res:=res+strtoint(s[i])*power(2,ppos-i);
  result:=res;
end;
function BinToInt(s:string):integer; export;
var
  l,i,res:integer;
Function Power(A, N: extended): extended;
  begin
    Power := exp(N * ln(A));
  end;
begin
  res:=0;
  l:=length(s);
  for i:=1 to l do
    res:=res+strtoint(s[i])*trunc(power(2,l-i));
  Result:=res;
end;
Function IntToBin(s:integer):string; export;
var
  res:string;
  n,i:integer;
  a:char;
begin
  i:=0;
  while s<>0 do
  begin
    i:=i+1;
    res:=res+inttostr(s mod 2);
    s:=s div 2;
  end;
  for n:=1 to i div 2 do
  begin
    a:=res[n];
    res[n]:=res[i-n+1];
    res[i-n+1]:=a;
  end;
  result:=res;
end;
function DecToBin(s:extended):string; overload; export;
var
  res:string;
  i:integer;
  n:extended;
function DetDigit(s:extended):integer;
var
  n,temp:integer;
  tmp:string;
begin
  tmp:=floattostr(s);
  tmp:=copy(tmp,3,length(tmp));
  n:=strtoint(tmp);
  temp:=1;
  i:=0;
  while temp<n do
  begin
    i:=i+1;
    temp:=temp*2;
  end;
  result:=i
end;
begin
  for i:=1 to detdigit(s) do
  begin
    while s<>0 do
    begin
      n:=s*2;
      res:=res+inttostr(trunc(n));
      s:=n-trunc(n);
    end;
  end;
  result:='0.'+res;
end;
function DecToBin(s:extended; limit:integer):string; overload; export;
var                  file://limit is the number of decimal digits
  res:string;
  i:integer;
  n:extended;
function DetDigit(s:extended):integer;
var
  n,temp:integer;
  tmp:string;
begin
  tmp:=floattostr(s);
  tmp:=copy(tmp,3,length(tmp));
  n:=strtoint(tmp);
  temp:=1;
  i:=0;
  while temp<n do
  begin
    i:=i+1;
    temp:=temp*2;
  end;
  result:=i
end;
begin
  for i:=1 to detdigit(s) do
  begin
    while s<>0 do
    begin
      n:=s*2;
      res:=res+inttostr(trunc(n));
      s:=n-trunc(n);
    end;
  end;
  result:='0.'+res;
  setlength(result,limit+2);
end;
Function HexToInt(s:string):integer; export;
const
  HEX:array['A'..'F'] of integer=(10,11,12,13,14,15);
var
  Int,i:integer;
begin
  Int:=0;
  for i:=1 to Length(s) do
  if s[i] < 'A' then
    Int:=Int*16+ord(s[i])-48
  else
    Int:=Int*16+hex[s[i]];
  Result:=Int;
end;
Function BaseChange(Num, NewBase : Word) : String; export;
Const
  BaseChars : Array [0..36] of Char = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Var
  St : String;
begin
  St := '';
  Repeat
    St  := BaseChars[Num MOD NewBase] + St;
    Num := Num Div NewBase;
  Until Num = 0;
  Result := St;
end;

Ciao, io ho provato il tuo programma e oltre all'output mi appaiono strani
simboli, che non riesco a cancellare neache con la clrscr, sai perchč?
Ciao

Grazie mille anche a te.
Grazie al vostro aiuto ho risolto i mie problemi.
Sarò lieto di potervi aiutare , in futuro, nel limite delle mie
capacità..
Ciao ciao
