Falha de segmentação(Imagem do núcleo gravada) [RESOLVIDO]

1. Falha de segmentação(Imagem do núcleo gravada) [RESOLVIDO]

Guilherme Giacomin
gzebra

(usa Ubuntu)

Enviado em 18/03/2018 - 09:07h

Já pesquisei e vi que esse erro do terminal aparece quando é acessado posições indevidas no vetor ou algo parecido. Meu código está abaixo, acredito que o erro esteja na função fatorial... Quem puder me ajudar, fico MUITO agradecido


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//by Guilherme Giacomin (gz)

void exibir_vetor(int * v){
int i;

for(i=(40000-1) ; i>-1 ; i--){
if(v[i]!=-1)
printf("%d",v[i]);
}

}

int num_digitos(int num){
int i;
int cont=0;

for(i=1; num%i!=num ; i*=10){
cont++;
}

return cont;

}

void soma_vetorial(int * v, int * s){
int i,soma,resto=0;

for(i=0 ; i<40000 ; i++){
soma = v[i] + s[i];
v[i] = soma % 10 + resto;
resto = soma / 10;

if(v[i+1]==-1 || s[i+1]==-1){
if(v[i+1]==-1 && s[i+1]==-1){
if(resto==0)
i=40000; //"break"
else
v[i+1]=0; s[i+1]=0;
}

else if(v[i+1]==-1){
v[i+1]=0;
}

else if(s[i+1]==-1){
s[i+1]=0;
}
}
}

}

void igualar(int * r, int * s){
int i,i1;
for(i=0 ; i<40000 ; i++){
r[i] = s[i];
if(s[i+1]==-1 && r[i+1]==-1){
i=40000; //"break"
}
}

}

void preenche_vetor(int * h,int n){
//Preenche o Vetor 'h' com o valor de 'n'
//Todas as outras posições são preenchidas com -1

int i=0,div=1;
int num=n;

for(; (num%div)!=num ; i++){
h[i]=n%10;

n/=10;
div*=10;
}

for( ; i<40000 ; i++){
h[i]=-1;
}

}


void fatorial(int n,int * v){

int save[40000],fator[40000];
int i,i0,i1,produto,vai1=0;
int digitos,n_und; //n_und : numero na unidade desejada(dezena, centena, ...)
int num;
preenche_vetor(save,1);
preenche_vetor(fator,1);



for(n-=1 ; n>1 ; n--){

igualar(save,v);


num=n;

for(digitos=1 ; digitos<=num_digitos(n) ; digitos++ , num/=10 ){

igualar(fator,save);

n_und = num%10;

if(digitos>1){

for(i0=1 ; i0<digitos ; i0++){ //"arredar" para a esquerda todos os numeros
for(i1=39998 ; i1>=0 ; i1--){ // 'digitos' vezes
if(fator[i1]!=-1)
fator[i1+1]=fator[i1];
}
}

for(i1=0 ; i1<(digitos-1) ; i1++) //Colocar 0's para simular a multiplicação pela
fator[i1]=0; // unidade(centena,milhar,...) em questão

}

for(i=0 ; i<40000 ; i++){

produto = fator[i]*n_und;
fator[i] = (produto+ vai1) % 10 ;
vai1 = (produto+vai1) / 10;

if(fator[i+1]==-1){

if(vai1==0)
i=40000; //"break" no for mais interno
else
fator[i+1]=0; //valor -1 resultaria em erros no cálculo
}

}

if(digitos!=1){
soma_vetorial(v,fator);
}
else{
igualar(v,fator);
}

}
}

}





int main(){

int v[40000];
int n;


printf("Digite um numero inteiro: ");
scanf("%d",&n);

preenche_vetor(v,n);
fatorial(n,v);

printf("Resultado: ");

//exibir_vetor(v);


return 0;
}



  


2. problema encontrado

Guilherme Giacomin
gzebra

(usa Ubuntu)

Enviado em 18/03/2018 - 09:23h

Na função 'soma_vetorial', o primo else estava faltando chaves...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts