Ir ao conteúdo
  • Cadastre-se

Programa sem erro mas trava na execução


Mari Valente

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

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...