Ir para conteúdo
Fórum Script Brasil

joaovitor102

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por joaovitor102

  1. 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;
    }
     

×
×
  • Criar Novo...