Jump to content
Fórum Script Brasil
  • 0

alguém pode me ajuda a resolver esse exercicio


Question

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 to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148680
    • Total Posts
      644502
×
×
  • Create New...