Ir para conteúdo

POWERED BY:

Arquivado

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

Ripper

[Resolvido] Decimal para BCD

Recommended Posts

Bom pessoal preciso de ajuda. Tenho que fazer um programa que converta decimal em BCD.

Tenho isso:

 

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int main() {
    
    int i;
    int num;
    char binario [33];
    binario [0]=0;
    
    printf("Digite o numero que deseja converter para BCD:"); scanf("%d",&num);
    itoa (num,binario,2);
    printf ("O numero convertido em binario e: %s\n",binario);
    getch();
    
    return 0;
    
    
    }

O que eu tenho converte decimal em binario, mas o que eu tenho que fazer é:

 

BCD

0 - 0000 6 - 0110

1 - 0001 7 - 0111

2 - 0010 8 - 1000

3 - 0011 9 - 1001

4 - 0100

5 - 0101

 

Se o numero for até 9 o que ja esta feito faz mas com um problema eu não consigo colocar o zero na frente. Se o numero for maior que 9, tenho que fazer isso:

 

Ex: 290 -> 2 - 0010 9 - 1001 0 - 0000 -> 290 em BCD é : 001010010000, ou seja o programa tem que ler o numero e concatenar as partes dele.

Alguém tem alguma ideia? Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char bin[4];

void dec2bin(char);

int main() {
char * numero = "75912";
unsigned int i;
for(i=0;i<strlen(numero);i++) {
	dec2bin(numero[i]);
	printf("%s ", bin);
}
puts("");
return 0;
}


void dec2bin(char numero) {

int i;
unsigned long dividendo, quoc, resto;
memset(&bin, '0', 4);

dividendo = strtol(&numero, NULL, 10);
for(i=3; i >= 0 && quoc != 0; i--) {
	quoc = dividendo / 2;
	resto = dividendo % 2;
	if (resto == 1) {
	bin[i] = '1';
	}
	dividendo = quoc;
}
}

 

Se você tentar usar uma variável local, ou você tem lixo ou falha de segmentação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Isis. Também achei isso na internet, só que eu dei uma "enxugada" no código:

 

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int c[18],bcd[20];


//Função de conversão de decimal para binário

void conv_d2b ( unsigned long x,int *c)
{
     int i;
     for(i=0;i<18;i++)
      *(c++)=(x>>i)&0x1;
}


//Função de conversão de decimal para BCD
void conv_d2bcd (unsigned long int x, int *bcd)
{
     int m,l,b,cc,i;
     unsigned long int dbcd;
     
     m=x/10000;
     l=(x%10000)/1000;
     b=(x%1000)/100;
     cc=(x%100)/10;
     
     dbcd=((((((((m*1157<<1)+l*129)<<1)+b*13)<<1)+cc)*3)<<1) + x;
     
     for(i=0;i<20;i++)
      *(bcd++)=(dbcd>>i)&0x1;
      }

int main(){
    

    int k;
    unsigned long int j,x;
    
    printf("Digite o numero que deseja converter :"); scanf("%lu",&x);
    printf("\n\n     BCD\t      Decimal\t      Binario\n");
       
       conv_d2bcd(x,bcd);
       for(k=19;k>=0;k--) 
       printf("%d", bcd[k]);
       
       printf("     %lu\t    ", x);
       
       conv_d2b(x,c);
       for(k=17;k>=0;k--)
       printf("%d",c[k]);
       printf("\n\n\r"); 
       
    
getch();
return 0;  
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cuidado com esses códigos pegados da net, pois alguns são antigos e possuem a <conio.h> e alguns comandos feios para segurar a tela kk ;D

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.