Introdução
Sistemas numéricos são formas de representar números usando diferentes símbolos e operações matemáticas. A conversão entre diferentes sistemas numéricos é uma tarefa comum em programação. Neste laboratório, demonstraremos programas que podem converter números de um sistema para outro. Abordaremos:
- Conversão de Binário para Decimal
- Conversão de Octal para Decimal
- Conversão de Decimal para Binário (sem recursão)
- Conversão de Decimal para Binário (com recursão)
Nota: Você precisa criar o arquivo
~/project/main.cpor conta própria para praticar a codificação e aprender como compilar e executá-lo usando gcc.
cd ~/project
## create main.c
touch main.c
## compile main.c
gcc main.c -o main
## run main
./main
Conversão de Binário para Decimal
Binário é um sistema numérico que usa apenas dois dígitos, 0 e 1. Decimal é um sistema numérico que usa dez dígitos, de 0 a 9. Aqui está o programa em C que converte um número binário para seu equivalente decimal:
#include<stdio.h>
#include<math.h>
// Declaração do protótipo da função
int binary_decimal(int n);
int main()
{
printf("\n\n\t\tLabEx - O melhor lugar para aprender\n\n\n");
int n;
char c;
printf("Digite o número binário: ");
scanf("%d", &n);
printf("\n\n\nO equivalente decimal de %d é %d\n\n", n, binary_decimal(n)); // chamada da função
printf("\n\n\t\t\tProgramar é Divertido !\n\n\n");
return 0;
}
// Definição da função para converter binário para decimal.
int binary_decimal(int n)
{
int decimal = 0, i = 0, rem;
while(n != 0)
{
rem = n%10; // dá o dígito na casa das unidades
n = n/10; // dá o número excluindo seu dígito das unidades
/*
pow é uma função definida pelo sistema que recebe
dois inteiros como parâmetros de entrada
*/
decimal += rem*pow(2, i++);
}
/*
retorna o equivalente decimal do número binário
de entrada para a chamada da função
*/
return decimal;
}
Conversão de Octal para Decimal
Octal é um sistema numérico que usa oito dígitos, de 0 a 7. Aqui está o programa em C que converte um número octal para seu equivalente decimal:
#include<stdio.h>
#include<math.h>
int main()
{
printf("\n\n\t\tLabEx - O melhor lugar para aprender\n\n\n");
long int octal, val, decimal = 0;
int i = 0;
printf("Digite qualquer número octal: ");
scanf("%ld", &val);
octal = val;
while(octal != 0)
{
/*
i++ é pós-incremento, onde o valor é
primeiro atribuído e depois incrementado
*/
decimal += (octal % 10)*pow(8, i++);
octal/=10; // o mesmo que octal=octal/10
}
printf("\n\n\nO valor decimal equivalente de %ld é %ld\n\n\n", val, decimal);
printf("\n\n\t\t\tProgramar é Divertido !\n\n\n");
return 0;
}
Conversão de Decimal para Binário (sem Recursão)
Aqui está o programa em C que converte um número decimal para seu equivalente binário sem recursão:
#include<stdio.h>
int main()
{
printf("\n\n\t\tLabEx - O melhor lugar para aprender\n\n\n");
int n,c,k;
printf("Digite um inteiro no sistema de numeração decimal: ");
scanf("%d", &n);
// Em formato de 31 bits
printf("\n\n\nO equivalente binário do valor decimal %d é:", n);
for(c = 31; c >= 0; c--)
{
k = n>>c;
/*
num&1 = retorna verdadeiro se o último dígito de num for 1
senão falso
*/
if(k&1)
printf("1");
else
printf("0");
}
printf("\n");
printf("\n\n\t\t\tProgramar é Divertido !\n\n\n");
return 0;
}
Conversão de Decimal para Binário (com Recursão)
Aqui está o programa em C que converte um número decimal para seu equivalente binário com recursão:
#include<stdio.h>
//Declarações de protótipos de função
void decimal_binary(int );
void F(int );
void reverse(int );
int main()
{
printf("\n\n\t\tLabEx - O melhor lugar para aprender\n\n\n");
int n;
printf("\n\nDigite um inteiro no sistema de numeração decimal: ");
scanf("%d", &n);
//Em formato de 31 bits
printf("\n\nO equivalente binário do valor decimal %d usando o método decimal_binary é: ", n);
decimal_binary(n); // chamada de função
printf("\n\nO equivalente binário do valor decimal %d usando o método F() é: ", n);
F(n); // chamada de função
printf("\n\nA inversão da representação binária do valor %d é: ", n);
reverse(n); // chamada de função
printf("\n\n\t\t\tProgramar é Divertido !\n\n\n");
return 0;
}
// definição da função
void decimal_binary(int i)
{
if(i <= 1)
printf("%d", i); // para imprimir em formato de cima para baixo
else
{
decimal_binary(i/2);
printf("%d", i%2);
}
}
void F(int j)
{
if(j/2)
{
F(j/2);
}
printf("%d", j%2);
}
void reverse(int k)
{
if(k <= 1)
printf("%d", k);
else
{
printf("%d", k%2);
F(k/2);
}
printf("\n\n");
}
Resumo
Neste laboratório, apresentamos programas que podem converter números entre diferentes sistemas numéricos. Cobrimos a conversão de binário para decimal, octal para decimal e decimal para binário (com e sem recursão). Esperamos que este laboratório tenha ajudado você a entender como converter números entre diferentes sistemas numéricos em programação C.



