Um problema típico em ciência da computação consiste em converter um número da sua forma decimal para a forma binária. Por exemplo, o número 12 tem sua representação binária igual a 1100. A conversão entre sistemas numéricos é feita com base em algumas regras e serve para que se obtenha o valor de um elemento no sistema numérico mais adequado a cada situação. Entre os sistemas numéricos mais utilizados na computação, há o binário, decimal, octal e hexadecimal. Cada um destes apresenta sua própria faixa de valores possíveis, e cada um possui uma aplicação especifica dentro da ciência da computação.
Você deve elaborar um algoritmo que realize a conversão entre sistemas numéricos. O programa deve receber um número em um sistema escolhido e realizar a mudança para outro sistema escolhido. O programa deve abordar os quatro sistemas numéricos descritos no enunciado. Utilize funções e/ou procedimentos com passagem de parâmetros em sua solução.
Para responder essa pergunta devemos colocar em prática nosso conhecimento sobre Algoritmo e Estrutura de Dados.
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
void decimal_to_octal(int num) {
int result[15] = {};
int i = 0, j = 0;
if(num >= 8) {
printf("Decimal: %d -> Octal: ", num);
while(num >= 8) {
result[i++] = num % 8;
num = num / 8;
}
result[i] = num;
// Imprimindo o valor invertido sem os zeros à esquerda
for(j = i; j >= 0; j--) {
printf("%d", result[j]);
}
printf("\n");
} else {
printf("Decimal: %d -> Octal: %d\n", num, num);
}
}
void decimal_to_binario(int num) {
char b[20];
itoa(num, b,2); //Converte para base 2
printf("\nO numero %d em binario e: %s",a,);
}
void decimal_to_hexa(int num){
int q, resto, i;
q = num / 16;
resto = num % 16;
numEntrada /= 16;
switch(resto){
case 10:
strcat(hexa, "A");
break;
case 11:
strcat(hexa, "B");
break;
case 12:
strcat(hexa, "C");
break;
case 13:
strcat(hexa, "D");
break;
case 14:
strcat(hexa, "E");
break;
case 15:
strcat(hexa, "F");
break;
case 16:
strcat(hexa, "G");
break;
default:
sprintf(getInt, "%i", resto);
strcat(hexa, getInt);
}
while(q != 0);
for(i=strlen(hexa); i >= 0; i--){
printf("%c", hexa[i]);
}
}
int main(void) {
int num, a;
printf("Digite um numero em decimal: ");
scanf("%d",&num);
printf("Escolha a base que deseja que o numero seja convertido ");
printf("1_ Binario. ");
printf("2_ Octal. ");
printf("3_ Hexadecimal. ");
scanf("%d",&a);
if(a==1){
decimal_to_binario(num);
}
else if(a==2){
decimal_to_octal(num);
}
else if(a==3){
decimal_to_hexa(num);
}
else{
printf("Não existe o código digitado.");
}
return 0;
}
Portanto, o algoritmo acima apenas permite que o usuário converta de decimal para as outras 3 bases. Porém, caso queira que uma base seja escolhida para ser convertida para outra base de desejo do usuário, recomenda-se converter o algarismo inserido pelo usuário e convertido para decimal e em seguida convertido para a base escolhida, pois assim o código não fica muito maior, facilitando na hora de programar.
Para responder essa pergunta devemos colocar em prática nosso conhecimento sobre Algoritmo e Estrutura de Dados.
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
void decimal_to_octal(int num) {
int result[15] = {};
int i = 0, j = 0;
if(num >= 8) {
printf("Decimal: %d -> Octal: ", num);
while(num >= 8) {
result[i++] = num % 8;
num = num ⁄ 8;
}
result[i] = num;
⁄⁄ Imprimindo o valor invertido sem os zeros à esquerda
for(j = i; j >= 0; j--) {
printf("%d", result[j]);
}
printf(" ");
} else {
printf("Decimal: %d -> Octal: %d ", num, num);
}
}
void decimal_to_binario(int num) {
char b[20];
itoa(num, b,2); ⁄⁄Converte para base 2
printf(" O numero %d em binario e: %s",a,);
}
void decimal_to_hexa(int num){
int q, resto, i;
q = num ⁄ 16;
resto = num % 16;
numEntrada ⁄= 16;
switch(resto){
case 10:
strcat(hexa, "A");
break;
case 11:
strcat(hexa, "B");
break;
case 12:
strcat(hexa, "C");
break;
case 13:
strcat(hexa, "D");
break;
case 14:
strcat(hexa, "E");
break;
case 15:
strcat(hexa, "F");
break;
case 16:
strcat(hexa, "G");
break;
default:
sprintf(getInt, "%i", resto);
strcat(hexa, getInt);
}
while(q != 0);
for(i=strlen(hexa); i >= 0; i--){
printf("%c", hexa[i]);
}
}
int main(void) {
int num, a;
printf("Digite um numero em decimal: ");
scanf("%d",&num);
printf("Escolha a base que deseja que o numero seja convertido ");
printf("1_ Binario. ");
printf("2_ Octal. ");
printf("3_ Hexadecimal. ");
scanf("%d",&a);
if(a==1){
decimal_to_binario(num);
}
else if(a==2){
decimal_to_octal(num);
}
else if(a==3){
decimal_to_hexa(num);
}
else{
printf("Não existe o código digitado.");
}
return 0;
}
Portanto, o algoritmo acima apenas permite que o usuário converta de decimal para as outras 3 bases. Porém, caso queira que uma base seja escolhida para ser convertida para outra base de desejo do usuário, recomenda-se converter o algarismo inserido pelo usuário e convertido para decimal e em seguida convertido para a base escolhida, pois assim o código não fica muito maior, facilitando na hora de programar.
Para escrever sua resposta aqui, entre ou crie uma conta
Compartilhar