// Esta função converte um número decimal para a base 2, 8 ou 16.
// Recebe como parâmetro um número decimal (num_dec), e a base (base) cujo número será convertido.
void decToBase(int num_dec, int base) {
char resto[ALG] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}, num_conv;
int indx = 0;
// Este loop realiza as operações de divisão. Os restos são guardados no vetor 'num_conv'
while(num_dec > 0)
{
num_conv[indx] = resto[num_dec % base];
num_dec /= base;
indx++;
}
// Exclui o caractere especial '\0' do final da string
indx -= 1;
// Utilizado para identificar a saída do programa
switch(base)
{
case 2 : printf("BINÁŔIO: "); break;
case 8 : printf("OCTAL: "); break;
case 16 : printf("HEXADECIMAL: "); break;
}
// Inverte a string contida no vetor num_conv
for(indx; indx >= 0; indx--)
printf("%c", num_conv[indx]);
printf("\n");
switch(opcao)
{
int num_salva;
case 2: if(base=2)
{
// Esta função permite converter um número na base 2, 8 ou 16 para a base decimal.
// Recebe como parâmetro uma string (representação do número), e um número inteiro que
// determina em qual base está o número do primeiro parâmetro.
void baseToDec(char* num_base, int base) {
int indx = 0, exp = 0, cont = 0, dec = 0, num = 0;
// Este loop determina o tamanho da string
while(num_base[cont] != '\0') {
cont++;
}
// Neste loop, a string é percorrida de trás para frente. Cada caractere é convertido
// em um número inteiro, multiplicado pela base elevada ao expoente (0..Comprimento da string)
// e somado ao valor da variável 'dec', que recebe as somas sucessivas.
for(exp, indx=(cont-1); exp < cont; exp++, indx--)
{
if(base == 16)
{
switch(num_base[indx]) {
case 'A' : case 'a' : num = 10; break;
case 'B' : case 'b' : num = 11; break;
case 'C' : case 'c' : num = 12; break;
case 'D' : case 'd' : num = 13; break;
case 'E' : case 'e' : num = 14; break;
case 'F' : case 'f' : num = 15; break;
default : num = (int)num_base[indx] - (int)'0';
}
}
else
num = (int)num_base[indx] - (int)'0';
// Aqui avalia se o usuário digitou um número válido ou não!
if(num > (base-1) || num < 0) {
printf("Você informou um número inválido!\n");
exit(0);
}
dec += num * pow(base, exp);
}
// O número convertido para decimal é exibido
printf("DECIMAL: %d\n", dec);
}
// Função que imprime o menu da calculadora
void menu(void) {
printf("\nBEM-VINDO AO CONVERSOR DE BASES NUMÉRICAS\n");
printf("QUAL OPERAÇÃO DESEJA REALIZAR? \n");
printf("[ 1 ] DECIMAL -> BINARIO, OCTAL e HEXADECIMAL\n");
printf("[ 2 ] BINARIO -> DECIMAL, OCTAL e HEXADECIMAL\n");
printf("[ 3 ] OCTAL -> DECIMAL, BINARIO e HEXADECIMAL\n");
printf("[ 4 ] HEXADECIMAL -> DECIMAL, BINARIO, OCTAL\n");
printf("[ 0 ] SAIR\n");
}
// Função que chama as funções correspondentes à opção escolhida
void process_calc(int opt)
{
char str;
switch(opt) {
case 0 :
printf("CALCULADORA ENCERRADA!\n");
exit(0);
Pergunta
joaovitor102
não converte o codigo na hora de ir de binario para hexa ou etc
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define SIZE 255
#define ALG 17
int number,opcao;
// Esta função converte um número decimal para a base 2, 8 ou 16.
// Recebe como parâmetro um número decimal (num_dec), e a base (base) cujo número será convertido.
void decToBase(int num_dec, int base) {
char resto[ALG] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}, num_conv;
int indx = 0;
// Este loop realiza as operações de divisão. Os restos são guardados no vetor 'num_conv'
while(num_dec > 0)
{
num_conv[indx] = resto[num_dec % base];
num_dec /= base;
indx++;
}
// Exclui o caractere especial '\0' do final da string
indx -= 1;
// Utilizado para identificar a saída do programa
switch(base)
{
case 2 : printf("BINÁŔIO: "); break;
case 8 : printf("OCTAL: "); break;
case 16 : printf("HEXADECIMAL: "); break;
}
// Inverte a string contida no vetor num_conv
for(indx; indx >= 0; indx--)
printf("%c", num_conv[indx]);
printf("\n");
switch(opcao)
{
int num_salva;
case 2: if(base=2)
{
for(indx; indx >= 0; indx--)
{
number+=num_conv[indx];
}
}
break;
case 3: if(base=8)
{
for(indx; indx >= 0; indx--)
{
number+=num_conv[indx];
}
}
break;
case 4: if(base=16)
{
for(indx; indx >= 0; indx--)
{
number+=num_conv[indx];
}
}
break;
}
}
// Esta função permite converter um número na base 2, 8 ou 16 para a base decimal.
// Recebe como parâmetro uma string (representação do número), e um número inteiro que
// determina em qual base está o número do primeiro parâmetro.
void baseToDec(char* num_base, int base) {
int indx = 0, exp = 0, cont = 0, dec = 0, num = 0;
// Este loop determina o tamanho da string
while(num_base[cont] != '\0') {
cont++;
}
// Neste loop, a string é percorrida de trás para frente. Cada caractere é convertido
// em um número inteiro, multiplicado pela base elevada ao expoente (0..Comprimento da string)
// e somado ao valor da variável 'dec', que recebe as somas sucessivas.
for(exp, indx=(cont-1); exp < cont; exp++, indx--)
{
if(base == 16)
{
switch(num_base[indx]) {
case 'A' : case 'a' : num = 10; break;
case 'B' : case 'b' : num = 11; break;
case 'C' : case 'c' : num = 12; break;
case 'D' : case 'd' : num = 13; break;
case 'E' : case 'e' : num = 14; break;
case 'F' : case 'f' : num = 15; break;
default : num = (int)num_base[indx] - (int)'0';
}
}
else
num = (int)num_base[indx] - (int)'0';
// Aqui avalia se o usuário digitou um número válido ou não!
if(num > (base-1) || num < 0) {
printf("Você informou um número inválido!\n");
exit(0);
}
dec += num * pow(base, exp);
}
// O número convertido para decimal é exibido
printf("DECIMAL: %d\n", dec);
}
// Função que imprime o menu da calculadora
void menu(void) {
printf("\nBEM-VINDO AO CONVERSOR DE BASES NUMÉRICAS\n");
printf("QUAL OPERAÇÃO DESEJA REALIZAR? \n");
printf("[ 1 ] DECIMAL -> BINARIO, OCTAL e HEXADECIMAL\n");
printf("[ 2 ] BINARIO -> DECIMAL, OCTAL e HEXADECIMAL\n");
printf("[ 3 ] OCTAL -> DECIMAL, BINARIO e HEXADECIMAL\n");
printf("[ 4 ] HEXADECIMAL -> DECIMAL, BINARIO, OCTAL\n");
printf("[ 0 ] SAIR\n");
}
// Função que chama as funções correspondentes à opção escolhida
void process_calc(int opt)
{
char str;
switch(opt) {
case 0 :
printf("CALCULADORA ENCERRADA!\n");
exit(0);
case 1 :
printf("DECIMAL: ");
scanf("%d", &number);
decToBase(number, 2);
decToBase(number, 8);
decToBase(number, 16);
break;
case 2 :
printf("BINÁRIO: ");
scanf("%s", str);
baseToDec(str, 2);
decToBase(number, 8);
decToBase(number, 16);
break;
case 3 :
printf("OCTAL = ");
scanf("%s", str,3);
baseToDec(str, 8);
decToBase(number, 2);
decToBase(number, 16);
break;
case 4 :
printf("HEXADECIMAL = ");
scanf("%s", str);
baseToDec(str, 16);
decToBase(number, 2);
decToBase(number, 8);
break;
default :
printf("OPÇÃO NÃO PERMITIDA!\nTENTE NOVAMENTE\n");
break;
}
}
int main(void) {
menu();
printf("QUAL OPERAÇÃO DESEJA REALIZAR? ");
scanf("%d", &opcao);
process_calc(opcao);
return 0;
}
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.