Ganhe dinheiro  escrevendo tutoriais para o Fórum do BABOO! Conheça os Tutoriais Pagos 2016

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Mc Fly

Conversor de bases numéricas em C

4 posts neste tópico
Gostaria de algumas dicas sobre um conversor de bases numéricas em linguagem C, obrigado.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, sou iniciante em programação, mas já fiz um algoritimo para converter números decimais em binários e binários em decimais, além de um conversor de números hexadecimais para binário e de binário para hexadecimal. Na época em que eu fiz eles (a cerca de um mês atrás) não conhecia o "%" por isso inventei uma gambiarra para fazer a conversão decimal > binário. Ai vai os códigos:

55.gif Conversor Binário > Decimal, Decimal > Binário

 

 

#include <iostream.h>

#include <conio.h>

#include <math.h>

int n,v,x=1,y=1,d,z,w=1,r,cont,cont2,cont3,c=2;

void binario(){

  clrscr();

  cout<<"Numer";

  cin>>n;

  if(n!=0){

  if(n!=1){

  v=n;

while(v>x){

x=pow(2,y)-1;

y=y+1;

}

y=y-1;

d=y-1;

z=n;

w=1;

for(cont=y;cont>0;cont--){

if(w==1){

for(cont2=d;cont2>0;cont2--)

  z=z/2;

gotoxy(1,5);

cout<<z;

d=d-1;

w=w-1;

}

else{

r=n;

for(cont3=d;cont3>0;cont3--)

  r=r/2;

if(r==1){

gotoxy(c,5);

cout<<r;

}

else{

  if(r==0){

gotoxy(c,5);

cout<<r;

  }

  else{

  while((r!=1)&&(r!=0))

  r=r-2;

  gotoxy(c,5);

  cout<<r;

  d=d-1;

  c=c+1;

  }

  }

}

}

  }

  else{

  gotoxy(1,5);

  cout<<"1";

 }

 }

 else{

  gotoxy(1,5);

  cout<<"0";

 }

}

void decimal(){

  clrscr();

  cout<<"Numero de Bits:";

  cin>>n;

  z=n-1;

  r=0;

  for(cont=n;cont>0;cont--){

  cout<<"Digito Binari";

  cin>>v;

  r=r+(pow(2,z)*v);

  z=z-1;

  }

  cout<<"n"<<r;

}

void main(){

  int o;

  char a;

  do{

  clrscr();

  cout<<"1 - Conversao Decimal Binario";

  cout<<"n2- Conversao Binario Decimal";

  cout<<"nEscolha uma opca";

  cin>>o;

  switch Conversor Hexadecimal > Binário, Binário > Hexadecimal

 

 

#include <iostream.h>

#include <conio.h>

#include <ctype.h>

int o,n,d,cont,x=1;

char l,o2;

void binario(){

  gotoxy(1,7);

  cout<<"Numero de Digitos: ";

  cin>>n;

  for(cont=n;cont>0;cont--){

  gotoxy(1,8);

  cout<<"   ";

  gotoxy(1,8);

  cout<<"[N] Numero [Outra Tecla] Letra ";

  cin>>o2;

  if((o2==''n'')||(o2==''N'')){

  gotoxy(1,9);

  cout<<"   ";

  gotoxy(1,9);

  cout<<"Digit ";

  cin>>d;

  switch38.gif{

 case 0: gotoxy(x,11);

cout<<"0000";

break;

 case 1: gotoxy(x,11);

cout<<"0001";

break;

 case 2: gotoxy(x,11);

cout<<"0010";

break;

 case 3: gotoxy(x,11);

cout<<"0011";

break;

 case 4: gotoxy(x,11);

cout<<"0100";

break;

 case 5: gotoxy(x,11);

cout<<"0101";

break;

 case 6: gotoxy(x,11);

cout<<"0110";

break;

 case 7: gotoxy(x,11);

cout<<"0111";

break;

 case 8: gotoxy(x,11);

cout<<"1000";

break;

 case 9: gotoxy(x,11);

cout<<"1001";

break;

 default: gotoxy(1,13);

cout<<"Opcao Invalida";

break;

  }

  x=x+5;

  }//fim do if

  else{

  gotoxy(1,9);

  cout<<"   ";

  gotoxy(1,9);

  cout<<"Digit ";

  cin>>l;

  l=toupper24.gif;

  switch24.gif{

 case ''A'': gotoxy(x,11);

  cout<<"1010";

  break;

 case ''B'': gotoxy(x,11);

  cout<<"1011";

  break;

 case ''C'': gotoxy(x,11);

  cout<<"1100";

  break;

 case ''D'': gotoxy(x,11);

  cout<<"1101";

  break;

 case ''E'': gotoxy(x,11);

  cout<<"1110";

  break;

 case ''F'': gotoxy(x,11);

  cout<<"1111";

  break;

 default: gotoxy(1,13);

cout<<"Opcao Invalida";

break;

  }

  x=x+5;

  }//fim else

  }//fim for

}

void hexadecimal(){

  gotoxy(1,7);

  cout<<"Numero de Grupos de 4 bits (0000): ";

  cin>>n;

  for(cont=n;cont>0;cont--){

  gotoxy(1,8);

  cout<<" ";

  gotoxy(1,8);

  cout<<"Grupo de 4 bits: ";

  cin>>d;

  switch38.gif{

 case 0000: gotoxy(x,11);

  cout<<"0";

  break;

 case 0001: gotoxy(x,11);

  cout<<"1";

  break;

 case 0010: gotoxy(x,11);

  cout<<"2";

  break;

 case 0011: gotoxy(x,11);

  cout<<"3";

  break;

 case 0100: gotoxy(x,11);

  cout<<"4";

  break;

 case 0101: gotoxy(x,11);

  cout<<"5";

  break;

 case 0110: gotoxy(x,11);

  cout<<"6";

  break;

 case 0111: gotoxy(x,11);

  cout<<"7";

  break;

 case 1000: gotoxy(x,11);

cout<<"8";

break;

 case 1001: gotoxy(x,11);

cout<<"9";

break;

 case 1010: gotoxy(x,11);

cout<<"A";

break;

 case 1011: gotoxy(x,11);

cout<<"B";

break;

 case 1100: gotoxy(x,11);

cout<<"C";

break;

 case 1101: gotoxy(x,11);

cout<<"D";

break;

 case 1110: gotoxy(x,11);

cout<<"E";

break;

 case 1111: gotoxy(x,11);

cout<<"F";

break;

 default: gotoxy(1,13);

cout<<"Opcao Invalida";

break;

  }

  x=x+1;

  }

}

void main(){

  int o3;

  char e;

  do{

  clrscr();

  x=1;

  cout<<"1 - Conversao Hexadecimal Binario";

  cout<<"n2- Conversao Binario Hexadecimal";

  cout<<"nEscolha uma Opca";

  cin>>o3;

  switch(o3){

 case 1: binario();

break;

 case 2: hexadecimal();

break;

 default: cout<<"nOpcao Invalida";

break;

  }

  cout<<"nnDeseja Converter Outro Numero?";

  cout<<" Sim [Outra Tecla] Nao ";

  cin>>e;

  }while((e==''s'')||(e==''S''));

}

 

 

 

Desculpe se o código ficou meio bagunçado (por causa da página da Internet pois o código original está ok) tentei arrumar o máximo que pude.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

  Kra meu colega me mandou esse programa ano passado, vê se ajuda !

 

/*-----------------------------------------------------------------------------+

| Programador: Jorge Augusto |

| E-Mail: jorgeaugustofox@bol.com.br |

| Nota: Compilado no Visual C++ 6.0 Introductory Edition |

+-----------------------------------------------------------------------------*/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

// Prototipo de funções:

char *ConverteBase(int, int, int);

 

// Função principal

int main(int argc, char *argv[])

{

  int iNumM  = 0;

  int iBaseO = 0;

 int iBaseD = 0;

 

  printf("Digite o Numero para convertern");

  scanf("%d", &iNumM);

 printf("Digite a Base de Origemn");

  scanf("%d", &iBaseO);

 printf("Digite a Base de Destinon");

  scanf("%d", &iBaseD);

  printf("%d na Base %d  corresponde a %s na Base %dn", iNumM, iBaseO, ConverteBase(iNumM, iBaseO, iBaseD), iBaseD);

  system("PAUSE");

 

  return 0;

}

/*

 Essa função é genérica mais pode ser dividor para executar a tarefa de forma mais específica

 fiz ela desse jeito por que assim se tem tudo de uma única vez... divida se achar necessário

*/

char *ConverteBase(int iNum, int iBaseOrig, int iBaseDest)

{

  char   szBuffer[40]; // buffer maior que 32 para 4 bi em binário

  static char szResult[40]; // idem

  char r   = 0; // resto

  char i   = 0; // iterador

  char c   = 0; // contador

  char cLen = 0; // comprimento da string

 int  iTemp  = 0; // temporário claro!

 int  iIndex = 0; // indece da matriz

  szBuffer[0] = 0;

  szResult[0] = 0;

 

  sprintf(szBuffer, "%d", iNum);

 cLen = strlen(szBuffer);

 

 iIndex = cLen - 1;

 // converte para a base 10

  for(i = 0; i < cLen; i++){

iTemp += (szBuffer[iIndex] - 48) * (pow(iBaseOrig, i));

iIndex--;

 }

 

 iNum = iTemp;

 i ^= i;

 // converte de 10 para a base de destino

  do{

  r = (iNum % iBaseDest);

  iNum = iNum / iBaseDest;

  szBuffer = r + 48;

  i++;

  }while(iNum != 0);

 

 i--;

 

 // inverte a string do resultado... necessário

 for(; i > -1; i--, c++){

  szResult[c] = szBuffer;

  }

 

  return szResult;

}  

 


Só sei que nada sei!

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom galerinha, vi aqui varias pessoas mandando seus programas e aceitei o desafio. Fiz um para conversão de decimal para binario e de binario para decimal.

OBS: só aceita conversao de decimal para binário no valor de 65535 e de binário para decimal no valor de 1111111111111111 (16 numeros "1"), isso devido a limitação da variável unsigned int.

 

La vai o programa (ficou um pouco grande): Ah.. foi feito em Turbo C++ 3.0

 

#include <conio.h>

#include <stdio.h>

#include <ctype.h>

#include <string.h>

#include <math.h>

void binario(unsigned int num)

{

 unsigned int bin[50];

 int 'n' = 0; // está entre aspas porque o corretor troca o "ene" por não

 do

 {

  bin[n++] = num % 2;

  num = num / 2;

 } while (num != 1);

 bin[n] = num;

 printf("nnNumero em binari ");

 for (int i = n; i >= 0; i--)

 {

  printf("%i",bin);

 }

}

void decimal(char *num)

{

 unsigned int t = strlen(num),

dec[20], total = 0,

cont = 1, pot = 2,

teste = 1;

 for (int i = 0; i < t; i++)

 {

  if (num == '1') dec = 1;

  else if (num == '0') dec = 0;

else { teste = 0; break; }

 }

 if (teste)

 {

if (dec[--t]) total = 1;

for (int i = t-1; i >= 0; i--)

{

  pot = pow(2,cont++);

  if (dec) total = total + pot;

}

printf("nnNumero em decimal: %d",total);

 }

 else

 {

  printf("nnVALOR INVALIDO!!!");

 }

}

void main()

{

 unsigned int numd;

 char resp,numb[20];

 do

 {

  clrscr();

  printf("Conversao para decimal ou para binario? (D - decimal, B - binario)n");

  resp = getche();

  switch (toupper(resp))

  {

case 'D': printf("nnDigite o número Binari ");

  gets(numb); fflush(stdin);

  decimal(numb);

  break;

case 'B': printf("nnDigite o número Decimal: ");

  scanf("%d",&numd);

  binario(numd);

  break;

default:  printf("nnOpcao invalida!");

  break;

  }

  printf("nnnDeseja digitar outro número (S para digitar, qualquer outro para sair)? ");

  resp = getche(); fflush(stdin);

 } while (toupper(resp) == 'S');

}

 

é isso aí.. se alguém achar um jeito de melhorar esse programa, por favor, me deixe saber, sempre gosto de aprender mais e melhorar o desempenho dos meus programas, mesmo que os mais simples.

 

EDITADO! mudei as variaveis int para unsigned int, com isso o valor máximo foi para 65535 contra 32767 de antes.

______________________________________________________________________

AMD Athlon 64 3200+ S939 BOX Venice / placa-mãe Asus A8N-E S939 PCI-E

2x512 RAM DDR PC3200 Kingston Dual / HD Serial ATA 160GB Samsung 7200 RPM

7600GT 256mb/128bits / Teclado e mouse Wireless Leadership

Monitor 17" LG Flatron Tela Plana / Gravador de DVD LG

Gabinete X-Blade Prata com Display LCD / Seventeam 420BKV.

Skype: bspavanelli

0

Compartilhar este post


Link para o post
Compartilhar em outros sites
    • 1 Mensagens
    • 226 Visualizações
    • 6 Mensagens
    • 545 Visualizações
    • 3 Mensagens
    • 896 Visualizações
    • 4 Mensagens
    • 8311 Visualizações
    • 1 Mensagens
    • 533 Visualizações