Ir ao conteúdo
  • Cadastre-se

Programa que converte bases com vírgula


edu.po

Posts recomendados

Bom, sou novo em c e meu professor passou a tarefa de fazer um programa que converte de decimal, hexa, octa ou binário para qualquer outra das mesmas e ainda com vírgula, e ainda usando as mesmas formulas que faz com lápis e papel, depois de muita peleja cheguei este código. Queria saber se ficou bom, muito grande, com bug etc.

 

#include<stdio.h>
#include<locale.h>
#include<string.h>
#include<math.h>

float virgula=0, bekapvirgula;
int escolha, bekapdec, contar, numdec=0, base, tamanho, virgulacontrole, tamanho2, tamanhobekap;
int vetordec[100]={0};
char bistring[100];
char bitobistring[100];

int main(){
    setlocale(LC_ALL, "portuguese");
    printf("QUAL A BASE DO NÚMERO QUE VOCÊ VAI DIGITAR?\n1 - DECIMAL\n2 - BINARIO\n3 - OCTAL\n4 - HEXADECIMAL\n");
    scanf("%d", &escolha);

    switch(escolha){
        case 1:
            printf("DIGITE SEU NÚMERO EM DECIMAL PARA CONVERTER PARA TODAS AS BASES: ");
            scanf("%f", &virgula);
            numdec=virgula;
            virgula=virgula-numdec;
            base=2;
            decimal_para_qualquer_base();
            deci_com_virgula_pra_q_base();
            printf(" EM BINÁRIO\n");

            base=8;
            decimal_para_qualquer_base();
            deci_com_virgula_pra_q_base();
            printf(" EM OCTAL\n");

            base=16;
            decimal_para_qualquer_base();
            deci_com_virgula_pra_q_base();
            printf(" EM HEXADECIMAL\n");
            break;
        case 2:
            printf("DIGITE SEU NÚMERO EM BINÁRIO PARA CONVERTER PARA QUALQUER BASE: ");
            scanf("%s", bistring);

            base=2;
            qualquer_base_pra_decimal();
            vir_bi_pra_vir_dec();
            printf("%.2f EM DECIMAL\n", numdec+virgula);

            base=8;
            decimal_para_qualquer_base();
            deci_com_virgula_pra_q_base();
            printf(" EM OCTAL\n");

            base=16;
            decimal_para_qualquer_base();
            deci_com_virgula_pra_q_base();
            printf(" EM HEXADECIMAL\n");
            break;
        case 3:
            printf("DIGITE UM NÚMERO EM OCTAL PARA CONVERTER PARA QUALQUER BASE: ");
            scanf("%s", bistring);

            base=8;
            qualquer_base_pra_decimal();
            vir_octa_pra_vir_dec();
            printf("%f EM DECIMAL\n", numdec+virgula);

            base=2;
            decimal_para_qualquer_base();
            deci_com_virgula_pra_q_base();
            printf(" EM BINÁRIO\n");

            base=16;
            decimal_para_qualquer_base();
            deci_com_virgula_pra_q_base();
            printf(" HEXADECIMAL\n");
            break;
        case 4:
            printf("DIGITE UM NÚMERO EM HEXADECIMAL PARA CONVERTER PARA QUALQUER BASE: ");
            scanf("%s", bistring);

            base=16;
            qualquer_base_pra_decimal();
            vir_hex_pra_vir_dec();
            printf("%f EM DECIMAL\n", numdec+virgula);

            base=2;
            decimal_para_qualquer_base();
            deci_com_virgula_pra_q_base();
            printf(" EM BINÁRIO\n");

            base=8;
            decimal_para_qualquer_base();
            deci_com_virgula_pra_q_base();
            printf(" EM OCTAL\n");
            break;
        default:
            printf("VOCÊ NÃO ESCOLHEU UMA CASA VÁLIDA\n");
    }
    system("pause");
    return 0;
}
void decimal_para_qualquer_base(void){
    bekapdec=numdec;
    contar=0;
    while(bekapdec > 0){
        vetordec[contar]=bekapdec % base;
        bekapdec=bekapdec/base;
        ++contar;
    }
    for(; contar > 0; --contar){
        switch(vetordec[contar-1]){
            case 10: printf("A");break;
            case 11: printf("B");break;
            case 12: printf("C");break;
            case 13: printf("D");break;
            case 14: printf("E");break;
            case 15: printf("F");break;
            default: printf("%d", vetordec[contar-1]);
        }
    }
}
void qualquer_base_pra_decimal(void){
    for(tamanho=0;tamanho<100;++tamanho){
        if(bistring[tamanho]==','||bistring[tamanho]=='.'){
            break;
        }
    }
    if(tamanho<100){
        tamanho=tamanho-1;
    }else{
        tamanho = strlen(bistring)-1;
    }
    contar=0;
 	for(;tamanho>-1;--tamanho){
 		if(bistring[contar]=='1'){
 			numdec=numdec+(1*pow(base,tamanho));
		 }else if(bistring[contar]=='2'){
            numdec=numdec+(2*pow(base,tamanho));
		 }else if(bistring[contar]=='3'){
            numdec=numdec+(3*pow(base,tamanho));
		 }else if(bistring[contar]=='4'){
            numdec=numdec+(4*pow(base,tamanho));
		 }else if(bistring[contar]=='5'){
            numdec=numdec+(5*pow(base,tamanho));
		 }else if(bistring[contar]=='6'){
            numdec=numdec+(6*pow(base,tamanho));
		 }else if(bistring[contar]=='7'){
            numdec=numdec+(7*pow(base,tamanho));
		 }else if(bistring[contar]=='8'){
            numdec=numdec+(8*pow(base,tamanho));
		 }else if(bistring[contar]=='9'){
            numdec=numdec+(9*pow(base,tamanho));
		 }else if(bistring[contar]=='A'||bistring[contar]=='a'){
            numdec=numdec+(10*pow(base,tamanho));
		 }else if(bistring[contar]=='B'||bistring[contar]=='b'){
            numdec=numdec+(11*pow(base,tamanho));
		 }else if(bistring[contar]=='C'||bistring[contar]=='c'){
            numdec=numdec+(12*pow(base,tamanho));
		 }else if(bistring[contar]=='D'||bistring[contar]=='d'){
            numdec=numdec+(13*pow(base,tamanho));
		 }else if(bistring[contar]=='E'||bistring[contar]=='e'){
            numdec=numdec+(14*pow(base,tamanho));
		 }else if(bistring[contar]=='F'||bistring[contar]=='f'){
            numdec=numdec+(15*pow(base,tamanho));
		 }
		 ++contar;
	 }
}
void deci_com_virgula_pra_q_base(void){
    contar=0;
    bekapvirgula=virgula;
    //previnir depois de não aparecer esta virgula "estética"
    if(bekapvirgula!=0){
    	printf(",");
	}
 
    while(bekapvirgula != 0){
        bekapvirgula=bekapvirgula*base;
        virgulacontrole=bekapvirgula;
        bekapvirgula=bekapvirgula-virgulacontrole;

        switch(virgulacontrole){
            case 10: printf("A");break;
            case 11: printf("B");break;
            case 12: printf("C");break;
            case 13: printf("D");break;
            case 14: printf("E");break;
            case 15: printf("F");break;
            default: printf("%d", virgulacontrole);
        }
        ++contar;
    }
}
void vir_bi_pra_vir_dec(void){
    for(tamanho=0;tamanho<100;++tamanho){
        if(bistring[tamanho]==','||bistring[tamanho]=='.'){
            break;
        }
    }
    if(tamanho < 100){
        virgula=0;
        tamanho=tamanho+1;//onde vai começar
        tamanho2 = (strlen(bistring)-1);//onde vai terminar
        for(contar=-1;tamanho<=tamanho2;++tamanho){
            if(bistring[tamanho]=='1'){
                virgula=virgula+pow(2,contar);
            }
            --contar;
        }
    }
}
void vir_hex_pra_vir_dec(void){
    //virgula hex para virgula binario
    for(tamanho=0;tamanho<100;++tamanho){
        if(bistring[tamanho]==','||bistring[tamanho]=='.'){
            break;
        }
    }
    if(tamanho < 100){
        virgula=0;
        contar=0;
        tamanho=tamanho+1;//onde vai começar
        tamanho2 = (strlen(bistring)-1);//onde vai terminar
        for(;tamanho<=tamanho2;++tamanho){
            if(bistring[tamanho]=='0'){
                bitobistring[contar]='0';
                bitobistring[contar+1]='0';
                bitobistring[contar+2]='0';
                bitobistring[contar+3]='0';
            }else if(bistring[tamanho]=='1'){
                bitobistring[contar]='0';//8
                bitobistring[contar+1]='0';//4
                bitobistring[contar+2]='0';//2
                bitobistring[contar+3]='1';//1
            }else if(bistring[tamanho]=='2'){
                bitobistring[contar]='0';//8
                bitobistring[contar+1]='0';//4
                bitobistring[contar+2]='1';//2
                bitobistring[contar+3]='0';//1
            }else if(bistring[tamanho]=='3'){
                bitobistring[contar]='0';//8
                bitobistring[contar+1]='0';//4
                bitobistring[contar+2]='1';//2
                bitobistring[contar+3]='1';//1
            }else if(bistring[tamanho]=='4'){
                bitobistring[contar]='0';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='0';//2
                bitobistring[contar+3]='0';//1
            }else if(bistring[tamanho]=='5'){
                bitobistring[contar]='0';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='0';//2
                bitobistring[contar+3]='1';//1
            }else if(bistring[tamanho]=='6'){
                bitobistring[contar]='0';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='1';//2
                bitobistring[contar+3]='0';//1
            }else if(bistring[tamanho]=='7'){
                bitobistring[contar]='0';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='1';//2
                bitobistring[contar+3]='1';//1
            }else if(bistring[tamanho]=='8'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='0';//4
                bitobistring[contar+2]='0';//2
                bitobistring[contar+3]='0';//1
            }else if(bistring[tamanho]=='9'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='0';//4
                bitobistring[contar+2]='0';//2
                bitobistring[contar+3]='1';//1
            }else if(bistring[tamanho]=='A'||bistring[tamanho]=='a'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='0';//4
                bitobistring[contar+2]='1';//2
                bitobistring[contar+3]='0';//1
            }else if(bistring[tamanho]=='B'||bistring[tamanho]=='b'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='0';//4
                bitobistring[contar+2]='1';//2
                bitobistring[contar+3]='1';//1
            }else if(bistring[tamanho]=='C'||bistring[tamanho]=='c'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='0';//2
                bitobistring[contar+3]='0';//1
            }else if(bistring[tamanho]=='D'||bistring[tamanho]=='d'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='0';//2
                bitobistring[contar+3]='1';//1
            }else if(bistring[tamanho]=='E'||bistring[tamanho]=='e'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='1';//2
                bitobistring[contar+3]='0';//1
            }else if(bistring[tamanho]=='F'||bistring[tamanho]=='f'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='1';//2
                bitobistring[contar+3]='1';//1
            }
            contar=contar+4;
        }
        tamanho=0;
        tamanho2=(strlen(bitobistring)-1);
        for(contar=-1;tamanho<=tamanho2;++tamanho){
            if(bitobistring[tamanho]=='1'){
                virgula=virgula+pow(2,contar);
            }
            --contar;
        }
    }
}
void vir_octa_pra_vir_dec(void){
    for(tamanho=0;tamanho<100;++tamanho){
        if(bistring[tamanho]==','||bistring[tamanho]=='.'){
            break;
        }
    }
    if(tamanho < 100){
        virgula=0;
        contar=0;
        tamanho=tamanho+1;//onde vai começar
        tamanho2 = (strlen(bistring)-1);//onde vai terminar
        for(;tamanho<=tamanho2;++tamanho){
            if(bistring[tamanho]=='0'){
                bitobistring[contar]='0';
                bitobistring[contar+1]='0';
                bitobistring[contar+2]='0';
            }else if(bistring[tamanho]=='1'){
                bitobistring[contar]='0';//4
                bitobistring[contar+1]='0';//2
                bitobistring[contar+2]='1';//1
            }else if(bistring[tamanho]=='2'){
                bitobistring[contar]='0';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='0';//2
            }else if(bistring[tamanho]=='3'){
                bitobistring[contar]='0';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='1';//2
            }else if(bistring[tamanho]=='4'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='0';//4
                bitobistring[contar+2]='0';//2
            }else if(bistring[tamanho]=='5'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='0';//4
                bitobistring[contar+2]='1';//2
            }else if(bistring[tamanho]=='6'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='0';//2
            }else if(bistring[tamanho]=='7'){
                bitobistring[contar]='1';//8
                bitobistring[contar+1]='1';//4
                bitobistring[contar+2]='1';//2
            }
            contar=contar+3;
        }
        tamanho=0;
        tamanho2=(strlen(bitobistring)-1);
        for(contar=-1;tamanho<=tamanho2;++tamanho){
            if(bitobistring[tamanho]=='1'){
                virgula=virgula+pow(2,contar);
            }
            --contar;
        }
    }
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...