Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   calculadora conversora como hacer? (https://www.clubdelphi.com/foros/showthread.php?t=75639)

justinesteban 09-09-2011 15:57:56

calculadora conversora como hacer?
 
como hacer una calculadora conversora (binario, decimal, octal y exadecimal que permita ingresar un numero en cualquier base segun este seleccionado en el radiogrupo y lo convierta haciendo click en cualquier otro itemindex?
como la calculadora programador de windows 7 o calculadora cientifica de windowsxp.
utilizando solo un edit y un radiogrup con 4 itemindex

oscarac 09-09-2011 16:06:55

tienes algo avanzado?
has pensado en algo?
alguna idea?

newtron 09-09-2011 16:11:35

Mucho me temo que tendrás que currar un poco. :)

justinesteban 09-09-2011 16:11:41

1 Archivos Adjunto(s)
si ya tengo las funciones de suma ponderada y divicion reiterada

Código Delphi [-]
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    rgbases: TRadioGroup;
    Label1: TLabel;
    resul: TLabel;
    Label2: TLabel;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    function sp(s:string; bp:integer):string;
    function dr(s:string; bl:integer):string;
    procedure rgbasesClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  case rgbases.ItemIndex of
  0: if not (key in ['1','0']) then
  key:=#0;
  1: if not (key in ['0'..'7']) then
  key:=#0;
  2: if not (key in ['0'..'9']) then
  key:=#0;
  3: if not (key in ['0'..'9','A'..'F']) then
  key:=#0;
  end;
end;

function tform1.sp(s:string; bp:integer):string;
var
  i:integer;
  ac:Extended;
  begin
    ac:=0;
    for i:=1 to length(s) do
      case s[i] of
        'A':ac:=ac+10*power(bp,length(s)-i);
        'B':ac:=ac+11*power(bp,length(s)-1);
        'C':ac:=ac+12*power(bp,length(s)-1);
        'D':ac:=ac+13*power(bp,length(s)-1);
        'E':ac:=ac+14*power(bp,length(s)-1);
        'F':ac:=ac+15*power(bp,length(s)-1);
      ELSE
        ac:=ac+strtoint(s[i])*power(bp,length(s)-i);
      end;
      result :=FloatTostr(ac);
    end;
function tform1.dr(s:string;bl:integer):string;
var
d,numero:integer;
resultado:string;
begin
  resultado:='';
  numero:=strtoint(s);
  while numero>0 do
  begin
    d:=numero mod bl;
    numero:=numero div bl;
      case d of
        10:resultado:='A'+ resultado;
        11:resultado:='B'+ resultado;
        12:resultado:='C'+ resultado;
        13:resultado:='D'+ resultado;
        14:resultado:='E'+ resultado;
        15:resultado:='F'+resultado;
      else
        resultado:=inttostr(d)+resultado;
      end;
      result:=resultado;
    end;
    end;


     



end;
end.

ecfisa 09-09-2011 16:16:20

Hola.

Te pongo unos enlaces que te van a ayudar:

Y te agrego una función que te pasará un numero en cualquier base a decimal:
Código Delphi [-]
function BaseNToDec(Num : string; Base : byte): Integer;
const
  BHex = '0123456789ABCDEFGHIJKLM'; // creo que son suficientes...
var
  i : Byte;
begin
  Result:=0;
  for i:=1 to length(Num) do
    Result:= Result * Base + Pos(Upcase(Num[i]), BHex) - 1;
end;

Saludos.

Edito: Podés valerte de esta última función para convertir los números a decimal y realizar las operaciones en base 10.

Casimiro Noteví 09-09-2011 16:18:44

Recuerda poner etiquetas al código, ejemplo:




No olvides leer nuestra guía de estilo.

.


La franja horaria es GMT +2. Ahora son las 22:44:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi