Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cciceromp

Empilhamento de caixas

Recommended Posts

EX:10 caixas, com os seguintyes pesos. 2,2,3,3,4,4,5,5,6,6.Empilhar da mais pesada para mais leve.2233445566Como corrigir meu codigo, ele tem que receber na onde acima, e mostrar ao contrario, obrigado desde já.int topo=-1; //Indica o topo da pilhaint pilha[MAX]; //Declaração da pilha void insere (void); //Função que insere itens na pilhavoid remover(void); //Função que remove itens da pilhavoid exibe (void); //Função que exibe os itens da pilhaint main (void){ int op; for (;;) { system("clear"); //Limpa a tela, somente no Linux //--------------------------------- //MENU PRINCIPAL //--------------------------------- printf("\nMenu"); printf("\n\n1- Insere"); printf("\n2- Remover"); printf("\n3- Exibir"); printf("\n4- Sair"); printf("\n\nEntre a sua opção:"); //--------------------------------- scanf("%d",&op); switch(op) { case 1 : insere(); break; case 2 : remover(); break; case 3 : exibe(); break; case 4 : exit(0); default: printf("\nOpção Errada"); getchar(); break; } }}void insere (void){ int i; topo = topo + 1; if (topo == MAX) //Insere itens na pilha até que topo for diferente de MAX { printf("\nPilha Cheia"); topo = topo - 1; getchar(); } printf("Entre com o número (TOPO = %d): ",topo); scanf ("%d",&i); pilha[topo] = i;} void remover (void){ if (topo >= 0) { pilha[topo] = 0; topo = topo - 1; } else { printf("Pilha Vazia"); getchar(); } }void exibe (void){ int x; char s[80]; system("clear"); for (x=0;x<=topo;x++) printf("\n %d",pilha[x]); printf("\n (S)air"); scanf("%s",s);}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Corrijam-me se eu estiver enganado mas na própria definição de pilha vemos que "primeiro elemento a ser colocado, último a ser retirado. Último elemento a ser colocado, primeiro a ser retirado".

(Sua implementação não foi de uma pilha então)

 

Se seguirmos este conceito não seria possível fazer o que você quer a não ser que ordenasse-mos os valores antes de passá-los para a pilha (pra que passá-los para a pilha se eles já devem estar em outra estrutura ordenados?).

 

Considerando que você não quer nem saber de pilhas, filas e listas você pode simplesmente mandar ordenar seu vetor logo depois de cada entrada dada pelo usuário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu apenas preciso retiar n do ultimo colocar mas sim da primeira caixa colocada..

Não entendi bulhufas que você falou. Dá pra explicar melhor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu apenas preciso retiar n do ultimo colocar mas sim da primeira caixa colocada..

colocando em virgulas...

Eu apenas preciso retirar, nao do ultimo colocado, mas sim da primeira caixa colocada..

isto se chama FILA o q você esta querendo fazer.. fifo (first in, fist out)

para criar uma fila você deve inserir mais uma variavel de controle do inicio do vetor..

ela inicializa em -1 tb.. igual ao topo..

 

qdo você inserir na FILA, incrementa-se a variavel topo

qdo você retirar da FILA, incrementa-se a variavel inicio

 

a fila somente estara vazia qdo o topo for igual ao inicio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve!cciceromp, o que você está tentando fazer, pela descrição do problema, você faz com o conceito de Pilha. Como dito, Pilha tem o conceito de LIFO (Last In First Out --> Último a entrar, primeiro a sair). Alocando na Pilha os elementos de peso maior primeiro e depois os de pedo menor, quando você desalocar da pilha ficaria ao contrário. Ou seja:122334467Você teria:Topo: 1Base: 7Assim, quando você mandar sair o elemento do topo da pilha você teria, obrigatóriamente, o elemento (caixa) com o menor peso!Entendeu?Abraços,William Rodrigues

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.