samuelfd
(usa Ubuntu)
Enviado em 17/10/2014 - 13:17h
Alguem poderia me ajudar nesse algoritmo, o algoritmo a baixo tem a função de fazer conversoes de bases 2-8-10-16 para base 2-8-10 e 16 mais quando e feita de qualquer base para a base 16 ele encerra o programa com a mensagem "Segmentation faul" poderiam me auxiliar ?
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main () {
int base_atual,base_saida,cont_i,tamanho,soma,d,z,cont,restart=1,j;
//base_atual "essa variavel responsavel por receber a base de origem"
//base_saida "essa variavel responsavel por receber a base de saida"
//cont_i "essa variavel responsavel por contar"
//tamanho "essa variavel responsavel por contar quantos digitos tem o numero a ser convertido"
//soma "essa variavel responsavel por somar o numeros depois de convertido para gerar o numeor em decimal"
//d "essa variavel responsavel por receber a divisao do numero somado divido pela base de saida"
//z "essa variavel responsavel por contar"
//cont "essa variavel responsavel por contar"
//restart "essa variavel responsavel por reniciar o programa"
double m;
char vetor[1000], vetor2 [1000];
int vetor3 [10000];
while(restart!=0){
j=0;
soma=0;
d=0;
//"esse trecho do programa e responsavel por receber os dados do usuario, e lhe informar quais digitos podem ser inseridos de acordo com a base digitada."
printf("Digite a base atual(2-8-10-16)\n");
scanf("%d",&base_atual);
if(base_atual==2){
printf("\nEssa base so aceita numeros de 0 a 1\n\n");
}
if(base_atual==4){
printf("\nEssa base so aceita numeros de 0 a 3\n\n");
}
if(base_atual==8){
printf("\nEssa base so aceita numeros de 0 a 7\n\n");
}
if(base_atual==10){
printf("\nEssa base so aceita numeros de 0 a 9\n\n");
}
if(base_atual==16){
printf("\nEssa base so aceita numeros de 0 a 9 e somente letras maiusculas A-F,\n\n");
}
printf("Digite o numero a ser convertido\n");
gets(vetor);
gets(vetor);
tamanho=strlen(vetor);
cont=tamanho;
//"esse trecho e responsavel por converte de qualquer base de entrada para a base decimal."
if(base_atual==16){
cont_i=0;
while(cont_i<tamanho){
if(vetor[cont_i]==65+j){
if(vetor[cont_i]<=70){
vetor[cont_i]=10+j;
cont_i++;
j=0;
}
}
if(vetor[cont_i]==48+j && vetor[cont_i]<58){
vetor[cont_i]=0+j;
j=0;
cont_i++;
}
j++;
}
for(cont_i=0;cont_i<tamanho;cont_i++){
int posicao=vetor[cont_i];
m=posicao*pow(base_atual,cont);
cont--;
soma=soma+m;
}
}
if(base_atual!=16){
for(cont_i=0;cont_i<tamanho;cont_i++){
int posicao=vetor[cont_i]-48;
m=posicao*pow(base_atual,cont);
cont--;
soma=soma+m;
}
}
//esse trecho do programa e responsavel por converte da base decimal ja convertida anteriomente para base de saida de 2 a 10 e 16"
printf("Digite a base a ser convertida\n");
scanf("%d",&base_saida);
cont_i=0;
soma=soma/base_atual;
z=soma;
if(soma<base_saida && base_saida!=16){
printf("O numero na base %d e : %d",base_saida,soma);
}
if(soma>=base_saida || base_saida==16){
while(soma>=base_saida || base_saida==16){
d=soma/base_saida;
vetor[cont_i]=soma%base_saida;
soma=d;
cont_i++;
}}
vetor[cont_i]=d;
//"esse trecho e responsavel por imprimir o resultado depois de feito a conversao desejada"
if(z>=base_saida || base_saida==16){
printf("O numero na base %d convertido pra base %d e :\t",base_atual,base_saida);
while(cont_i>=0){
if(base_saida==16){
if(vetor[cont_i]==10){
vetor2[cont_i]='A';
printf("%c",vetor2[cont_i]);
}
if(vetor[cont_i]==11){
vetor2[cont_i]='B';
printf("%c",vetor2[cont_i]);
}
if(vetor[cont_i]==12){
vetor2[cont_i]='C';
printf("%c",vetor2[cont_i]);
}
if(vetor[cont_i]==13){
vetor2[cont_i]='D';
printf("%c",vetor2[cont_i]);
}
if(vetor[cont_i]==14){
vetor2[cont_i]='E';
printf("%c",vetor2[cont_i]);
}
if(vetor[cont_i]==15){
vetor2[cont_i]='F';
printf("%c",vetor2[cont_i]);
}
if(vetor[cont_i]==0){
vetor3[cont_i]=0;
printf("%d",vetor3[cont_i]);
}
if(vetor[cont_i]==1){
vetor3[cont_i]=1;
printf("%d",vetor3[cont_i]);
}
if(vetor[cont_i]==2){
vetor3[cont_i]=2;
printf("%d",vetor3[cont_i]);
}
if(vetor[cont_i]==3){
vetor3[cont_i]=3;
printf("%d",vetor3[cont_i]);
}
if(vetor[cont_i]==4){
vetor3[cont_i]=4;
printf("%d",vetor3[cont_i]);
}
if(vetor[cont_i]==5){
vetor3[cont_i]=5;
printf("%d",vetor3[cont_i]);
}
if(vetor[cont_i]==6){
vetor3[cont_i]=6;
printf("%d",vetor3[cont_i]);
}
if(vetor[cont_i]==7){
vetor3[cont_i]=7;
printf("%d",vetor3[cont_i]);
}
if(vetor[cont_i]==8){
vetor3[cont_i]=8;
printf("%d",vetor3[cont_i]);
}
if(vetor[cont_i]==9){
vetor3[cont_i]=9;
printf("%d",vetor3[cont_i]);
}}
if(base_saida!=16){
printf("%d",vetor[cont_i]);
}
cont_i--;
}}
//"esse trecho e responsavel por perguntar o usuario se deseja fazer uma nova conversão"
printf("\n\nDeseja fazer outra conversao?\nse sim digite1\nse nao digite 0\n");
scanf("%d",&restart);
}
printf("\nObrigado por usar minha calculadora\n");
printf("Programa Desenvlovido Por: Samuel Ribeiro Rodrigues\nAluno do curso de ciência da computacão da Universidade Federal De São João del Rei \nVersão: 1.0");
return 0;
}