Ir ao conteúdo
  • Cadastre-se

Mari Valente

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. É 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

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!