sábado, 9 de maio de 2009

Exemplo Adaptado de Rotina de Conversao de Hexadecima - Binario - Octal

Salve, salve amigos,

Navegando na internet neste final de semana, localize uma unit contendo alguns códigos interessantes e resolvi realizar algumas alterações no código para que você possa precisar em algum momento converter de Hexadecimal, Binário ou Octal.

Não se esqueçam de deixar seu comentário

------------------------------------------------------------------------------------------------

Em um formulario, adicione os seguintes componentes:

Um RadioGroup contendo os seguintes itens: Dec, Bin. Oct, Hex

Deixe selecionado a primeira opção. (Dec)

Adicione um componente Edit, e limpe seu caption.

Na seção public, declare as seguintes procedure:

Procedure RotinadeConversao_D; // Converte um numero para decimal
Procedure Rotinadeconversao_B; // Converter de decimal para

*******************************************************************

procedure TForm3.RotinadeConversao_D;
var
i, Bin :Integer;
Calcular :Real;
Inverter :String;

begin

Calcular:=0;
Inverter :=AnsiReverseString(Edit1.text) ;

For i:= 1 to Length(Edit1.text) do begin

{ Convertendo de Binario Para Decimal}

If PosicaoAnterior = 1 Then Begin
Bin := StrToInt(Inverter[i]);
Calcular := Calcular + (Bin * Power(2,i-1)); //Power Eleva Potencia
end
{ Fim da Conversão de Binario Para Decimal}
else

{ Inicio de Octal Para Decimal}
if PosicaoAnterior = 2 Then Begin
Bin:=StrtoInt(Inverter[i]);
Calcular := Calcular + (Bin * Power(8,i-1));
end
{ Fim da Conversão de Octal Para Decimal}
else
{ Convertendo de Hexadecimal Para Decimal}
if PosicaoAnterior = 3 Then Begin
Case Inverter[i]of
'A':Bin :=10;
'B':Bin :=11;
'C':Bin :=12;
'D':Bin :=13;
'E':Bin :=14;
'F':Bin :=15;
else Bin:=StrtoInt(Inverter[i]);
end;
Calcular := Calcular + (Bin * power(16,i-1));
end;
{ Fim da Conversão de Hexadecimal Para Decimal}
end;
Edit1.text:=(FloatToStr(Calcular));
end;


***************************************************

procedure TForm3.Rotinadeconversao_B;
var

Calculo,Conversao,Bin,Resto:Integer;
Aux:String;
Begin
Aux:='';
if Edit1.Text<>'' Then
Conversao:= Trunc(StrToFloat(Edit1.text))
else
Conversao:=0;
Edit1.text:='';
{Inicio Conversao para Binario}
if RgTipo.ItemIndex=1 Then Begin
repeat
Bin := Conversao div 2;
Resto := Conversao mod 2;
Aux := Aux + IntToStr(resto);
Conversao:= Bin;
until (conversao <=1); Aux:= Aux + IntToSTR(Bin); Edit1.Text:= AnsiReverseString(Aux); end {Fim da Conversao para Binario} else {Inicio Conversao para Octal} if RgTipo.ItemIndex=2 then Begin Repeat Bin := Conversao div 8; Resto := Conversao mod 8; Conversao:= Bin; Aux := Aux + IntToStr(resto); Until (Conversao <=1); if bin>0 then
Aux:= Aux + IntToSTR(Bin);
Edit1.Text:= AnsiReverseString(aux);
end
{Fim da Conversão para Octal}
else Begin
{Inicio da Conversao para Hexadecimal}
Repeat
Bin := Conversao div 16;
Resto := Conversao mod 16;
Conversao:= Bin;
case Resto of
10: Edit1.Text :=Edit1.Text + 'A';
11: Edit1.Text :=Edit1.Text + 'B';
12: Edit1.Text :=Edit1.Text + 'C';
13: Edit1.Text :=Edit1.Text + 'D';
14: Edit1.Text :=Edit1.Text + 'E';
15: Edit1.Text :=Edit1.Text + 'F';
else Edit1.Text :=Edit1.Text+ IntToStr(resto);
end;
until (Conversao <=1); if Bin>0 then
Edit1.Text:= Edit1.Text + IntToSTR(bin);
Edit1.text:= AnsiReverseString(Edit1.text);
end;
{Fim da Conversao para Hexadecimal}

end;


**************************************************************

No evento OnKeyPress do componente Edit, digite o seguinte código

if not (key in ['0'..'9']) then
key:=#0;

*********************************************************************

No evento Onclick do componente RadioGroup, digite o seguinte código:


case(RGTIPO.ItemIndex) of
0: begin
RotinadeConversao_D;
PosicaoAnterior:=0;
end;
1: begin
if (PosicaoAnterior=2)Or (PosicaoAnterior=3) Then Begin
RotinadeConversao_D;
PosicaoAnterior:=1;
Rotinadeconversao_B;
end
else Begin
PosicaoAnterior:=1;
Rotinadeconversao_B;
end;
end;//Fim CAse 1
2: begin
If (PosicaoAnterior=1) or (PosicaoAnterior=3) Then Begin
RotinadeConversao_D;
PosicaoAnterior:=2;
Rotinadeconversao_B;
end else Begin
PosicaoAnterior:=2;
Rotinadeconversao_B;
end;
end;
3: begin
If (PosicaoAnterior=1) or (PosicaoAnterior=2) Then Begin
RotinadeConversao_D;
PosicaoAnterior:=3;
Rotinadeconversao_B;
end else Begin
PosicaoAnterior:=3;
Rotinadeconversao_B;
end;
end;
end;
end;

***********************************************************************

Bom, agora basta compilar e digita por exemplo o valor 100 dentro do edit e selecionar uma das opções do Radiogroup


Um forte abraço

Marcos Antonio

8 comentários:

PHILIPE DORNELAS disse...

Agora sim meu caro amigo!!
Eis ai o que vc fez, não quebrou um galho, mas sim a arvore inteira!! hehehe

Abraço, parabéns pelo blog e obrigado!
Philipe Dornelas

Anônimo disse...

Muito interessante Marcos, sem dúvidas ajudará a muitos.

Forte Abraço,

Gesilene Martins.

Ronaldo Almeida disse...

Sabe aquela luz do fim do túnio... É isso ai!

gøødbøÿ disse...

Legal Marquinhos, como a Gesilene disse, vai ajudar muita gente!

t+

Luiz André

Henrique P. Boueri disse...

aí fessor,
vai salvar a vida de mta gente
vlw

RoD GuaLBeRTo disse...
Este comentário foi removido pelo autor.
Thales Ricardo Menezes disse...

E ai Professor, muito legal seu blog espero que continue assim, trazendo novas notícias no mundo da informática.

INFOWeb disse...

Salve Salve Marcos,
Que isso heim, o blog ta
muito bom mesmo, gostei de
ver, ele ta ajudadando batante..

Abração..Parabéns pelo blog..
João Eduardo