Ir ao conteúdo
  • Cadastre-se
Mari Valente

Programa sem erro mas trava na execução

Posts recomendados

É a primeira vez que estou trabalhando com o C. Eu sei python. To fazendo um código que organize uma lista de numeros usando lista encadeada. O metodo de organização é pelo digito mais significativo( primeiro pelas unidades, depois pelas dezenas...), parecido com o radix. O programa copila sem erro mas ele trava após eu digitar o primeiro valor e apertar enter. Acredito que o programa esteja com bastante erro por ser o meu primeiro. Eu to usando liguagem C e o codeblocks. logica do programa: insiro um numero e aloco ele na lista inicial. Apos todos os numeros requeridos digita-se -1 para o programa começar a rodar. O programa pega os numeros da lista inicial e transfere para a lista do ultimo digito. apos concatena todas as listas de digitos e começa de novo o processo mas dessa vez com o digito das dezenas. assim até acabar os digitos.

 

 

#include<stdio.h>

#include<stdlib.h>

 

 

typedef struct celula{

                int numero;

                struct celula *prox;

     }celula;

 

typedef struct lista{

        struct celula *ini;

    }lista;

 

void insere (int x,lista c){

    celula *p;

    p=c.ini;

    while(p->prox!=NULL)

        p = p-> prox;

    celula *nova;

    nova = malloc (sizeof (celula));

    nova->numero = x;

    nova->prox = NULL;

    p->prox = nova;

 

}

 

void novalista(lista c){

        c.ini=malloc(sizeof (celula));

        c.ini->prox=NULL;

    }

 

void transfere(lista c, int potencia,lista d,lista e,lista f,lista g,lista h,lista i,lista j,lista k,lista l,lista m){

    celula *q;

    int cont, res;

    q=c.ini->prox;

    while(q!=NULL){

        cont=q->numero;

        res=cont%potencia;

        res=res/(potencia/10);

        if(res==0)

            insere(cont,d);

        if(res==1)

            insere(cont,e);

        if(res==2)

            insere(cont,f);

        if(res==3)

            insere(cont,g);

        if(res==4)

            insere(cont,h);

        if(res==5)

            insere(cont,i);

        if(res==6)

            insere(cont,j);

        if(res==7)

            insere(cont,k);

        if(res==8)

            insere(cont,l);

        if(res==9)

            insere(cont,m);

        q=q->prox;

    }

}

void apagar(lista c) {

    celula *morta;

    morta = c.ini->prox;

    while (c.ini->prox!=NULL){

        if (morta->prox == NULL)

            c.ini->prox = NULL;

        else

            c.ini->prox = morta->prox;

        free (morta);

        }

    }

void concatena(lista c,lista d){

    celula *p=c.ini;

    while(p->prox!=NULL)

        p = p-> prox;

    p->prox=d.ini->prox;

}

int algarismos(lista c){

    celula *q;

    int cont, res, fim = 1, potencia=10;

    q=c.ini->prox;

    while(fim!=0){

        fim=0;

        while(q!=NULL){

            cont=q->numero;

            res=cont/potencia;

            if(res!=0)

                fim=1;

                potencia=potencia*10;

                break;

    return potencia;

        }

    }

}

void prin(lista c) {

    celula *q;

    for (q = c.ini->prox; q != NULL; q = q->prox)

        printf ("%d\n", q->numero);

}

int main (){

 

    int fim, a = 0, potencia=10 ;

    printf("Digite os numeros que deseja organizar, em seguida digite '-1':\n");

    lista inicial,ini0,ini1,ini2,ini3,ini4,ini5,ini6,ini7,ini8,ini9;

    novalista(inicial);

    novalista(ini0);

    novalista(ini1);

    novalista(ini2);

    novalista(ini3);

    novalista(ini4);

    novalista(ini5);

    novalista(ini6);

    novalista(ini7);

    novalista(ini8);

    novalista(ini9);

    while(a!=-1){

        scanf("%d", &a);

        if (a!=-1)

            insere(a,inicial);

    }

    fim=algarismos(inicial);

    while (potencia<fim){

        transfere(inicial,potencia,ini0,ini1,ini2,ini3,ini4,ini5,ini6,ini7,ini8,ini9);

        apagar(inicial);

        concatena(inicial,ini0);

        concatena(inicial,ini1);

        concatena(inicial,ini2);

        concatena(inicial,ini3);

        concatena(inicial,ini4);

        concatena(inicial,ini5);

        concatena(inicial,ini6);

        concatena(inicial,ini7);

        concatena(inicial,ini8);

        concatena(inicial,ini9);

        apagar(ini0);

        apagar(ini1);

        apagar(ini2);

        apagar(ini3);

        apagar(ini4);

        apagar(ini5);

        apagar(ini6);

        apagar(ini7);

        apagar(ini8);

        apagar(ini9);

        potencia=potencia*10;

    }

    prin(inicial);

}

Untitled1.txt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!