problemas na funçãoda pilha trocar o topo pela base e vice versa. [RESOLVIDO]

1. problemas na funçãoda pilha trocar o topo pela base e vice versa. [RESOLVIDO]

Marco Brainiac
mbrainiac

(usa Debian)

Enviado em 16/03/2016 - 17:54h

Pessoal estou com dificuldade na última função, para trocar o topo pela base e vice versa.
pediria ajuda para corrigir a função trocatopobase(), pois estou gerando valores errados.

As outras funções foram testados e funcionam.


Obrigado



#include<stdio.h>
#include<stdlib.h>
#define TAM_MAX 100
struct x {
int *itens; // Modificado itens[TAM_MAX];
int topo;
};
int empty(struct x *);
void push(int valor, struct x *);
int pop(struct x *);
int stackpop(struct x *);
int size(struct x *);
void trocatopobase(struct x *);



int main(){
struct x p, inv;
int n=0, k=4,op,w;
p.topo = 0;

char rep;



p.itens = (int *) malloc((k)*sizeof(int));
push(1,&p);
push(5,&p);
push(9,&p);
push(3,&p);
printf("\n<<< PROGRAMA PILHA >>\n\n");
printf("\n0: Sair \n");
printf("\n1: Inserir itens \n");
printf("\n2: Remover itens \n");
printf("\n3: Imprimir tamanho \n");
printf("\n4: Imprimir item topo \n");




do{
printf("\nEntre com a opcao desejada: \n");
scanf("%d",&op);
switch(op){
case 0 :
break;

case 1 :
printf("\ninserindo número a pilha: ");
scanf("%d",&w);
push(w,&p);
break;

case 2 :
if(pop(&p) == 0)
printf("\n>>> ATENCAO PILHA vazia! <<<\n");
else
printf("\nRemovendo da pilha e ficou no topo: %3d\n",pop(&p));
break;

case 3 :
printf("\nImprimir tamanho da pilha: %3d\n",size(&p));
break;

case 4 :
if(stackpop(&p) == 0)
printf("\n>>> ATENCAO PILHA vazia! <<<\n");
else
printf("\nImprimir item no topo da pilha: %3d\n", stackpop(&p));
break;

default :
printf("\nInfelizmente, opção incorreta\n");
break;
}
printf("Quer continuar a alterar pilha?\n Digite 's' para Sim\n Ou tecle qualquer tecla para sair:\n");
scanf("%s",&rep);
fflush(stdin) || __fpurge(stdin);
__fpurge(stdin);
}while((rep == 's') || (rep == 'S' ));


trocatopobase(&p); // função troca base topo


return 0;
}

int empty(struct x *pilha){
if(pilha->topo == 0)
return 1;
else
return 0;
}
void push(int valor, struct x *pilha){
pilha->itens[pilha->topo] = valor;
pilha->topo = pilha->topo + 1;
}
int pop(struct x *pilha){
if(empty(pilha) == 1){
printf("\n>>> ATENCAO PILHA vazia! <<<\n");
return 0;
}
else{
pilha->topo = pilha->topo - 1;
return pilha->itens[pilha->topo];
}
}
int stackpop(struct x *pilha){
if(empty(pilha) == 1){
printf("\n>>> ATENCAO PILHA vazia! <<<\n");
return 0;
}
else
return pilha->itens[pilha->topo - 1];
}
int size(struct x *pilha){
return pilha->topo;
}
void trocatopobase(struct x *pilha){// função troca base topo
int aux1, aux2, i;
aux1 = pilha ->itens[pilha->topo];
aux2 = pilha ->itens[pilha->topo-3];

printf("topo = %3d \n", pilha ->itens[pilha->topo]);

printf("aux1 = %3d\n", aux1);
printf("aux2 = %3d\n", aux2);

printf("\nItens sem trocar\n");
for(i=0; i<= 3; i++)
printf("%3d\n", pilha ->itens[pilha->topo - i]);

printf("\n\nTrocando Topo com Base\n");
pilha ->itens[pilha->topo] = aux2;
pilha ->itens[pilha->topo-3] = aux1;

for(i=0; i<= 3; i++)
printf("%3d\n", pilha ->itens[pilha->topo - i]);


}





saída:
mbrainiac@hotpc:~/Área de trabalho/C_programas/Estruturas$ ./aula4tr1a.x

<<< PROGRAMA PILHA >>


0: Sair

1: Inserir itens

2: Remover itens

3: Imprimir tamanho

4: Imprimir item topo

Entre com a opcao desejada:
4

Imprimir item no topo da pilha: 3
Quer continuar a alterar pilha?
Digite 's' para Sim
Ou tecle qualquer tecla para sair:
p
topo = 0
aux1 = 0
aux2 = 5

Itens sem trocar
0
3
9
5


Trocando Topo com Base
5
3
9
0


  


2. Re: problemas na funçãoda pilha trocar o topo pela base e vice versa. [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 16/03/2016 - 18:22h

Trabalhe com duas pilhas. Desempilhar de uma para a outra vai fazer com que a ordem se inverta. Ao final da inversão, retorne o ponteiro para a segunda pilha.


3. Re: problemas na funçãoda pilha trocar o topo pela base e vice versa.

Marco Brainiac
mbrainiac

(usa Debian)

Enviado em 17/03/2016 - 09:47h

paulo1205 escreveu:

Trabalhe com duas pilhas. Desempilhar de uma para a outra vai fazer com que a ordem se inverta. Ao final da inversão, retorne o ponteiro para a segunda pilha.



Poderia montar para mim? estou tendo uma dificuldade monstro com isto, vi tudo numa aula muito corrida.





4. Re: problemas na funçãoda pilha trocar o topo pela base e vice versa. [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/03/2016 - 10:09h

Eu já disse (quase) exatamente o que você tem de fazer. Você só precisa converter de Português para C (ou C++).


5. Re: problemas na funçãoda pilha trocar o topo pela base e vice versa. [RESOLVIDO]

Marco Brainiac
mbrainiac

(usa Debian)

Enviado em 17/03/2016 - 10:20h

paulo1205 escreveu:

Eu já disse (quase) exatamente o que você tem de fazer. Você só precisa converter de Português para C (ou C++).



Obrigado....





6. Re: problemas na funçãoda pilha trocar o topo pela base e vice versa. [RESOLVIDO]

Marco Brainiac
mbrainiac

(usa Debian)

Enviado em 17/03/2016 - 11:05h

Alguém poderia ajudar não em " português" mas em C?


7. Re: problemas na funçãoda pilha trocar o topo pela base e vice versa. [RESOLVIDO]

Lucas Ferreira dos santos
lksmodos

(usa Ubuntu)

Enviado em 17/03/2016 - 11:12h

mbrainiac escreveu:

Alguém poderia ajudar não em " português" mas em C?

Não vou codificar por que estou no trabalho, mas vamos lá, crie uma função que recebe uma pilha e retorne uma pilha , dentro dessa função crie uma pilha auxiliar que vai receber os elementos da pilha de entrada, por fim retorne a pilha auxiliar que contém os elementos invertidos.



8. Re: problemas na funçãoda pilha trocar o topo pela base e vice versa. [RESOLVIDO]

Marco Brainiac
mbrainiac

(usa Debian)

Enviado em 17/03/2016 - 15:54h

lksmodos escreveu:

mbrainiac escreveu:

Alguém poderia ajudar não em " português" mas em C?

Não vou codificar por que estou no trabalho, mas vamos lá, crie uma função que recebe uma pilha e retorne uma pilha , dentro dessa função crie uma pilha auxiliar que vai receber os elementos da pilha de entrada, por fim retorne a pilha auxiliar que contém os elementos invertidos.


Estou com dificuldades nesta parte de fazer a outra pilha receber os valores da primeira




9. Re: problemas na funçãoda pilha trocar o topo pela base e vice versa.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/03/2016 - 17:00h

Qual dificuldade?

Pense um pouco. O que significa “transferir elementos de uma pilha para outra”? Será que não seria “tirar elementos da primeira e colocar na segunda”?

E quais operações permitem a você, respectivamente, retirar e colocar elementos de uma pilha? Não seriam pop() e push()?


Outra abordagem: supondo que VOCÊ só possa mexer um prato de cada vez, como VOCÊ poderia mover vários pratos de uma pilha já existente para outro lugar na bancada? Se você for capaz de realizar essa tarefa e souber descrevê-la, você tem praticamente pronto o programa que tem de fazer.


Se você tem alguma pretensão de programar, você PRECISA aprender a expressar ideias de modo claro e a dividir problemas complexos em partes menores. Converter de Português (ou qualquer outro idioma natural) para C (ou qualquer outra linguagem de programação) é o menor dos problemas, pois é uma tarefa essencialmente mecânica.


10. Re: problemas na funçãoda pilha trocar o topo pela base e vice versa. [RESOLVIDO]

Lucas Ferreira dos santos
lksmodos

(usa Ubuntu)

Enviado em 17/03/2016 - 19:51h

mbrainiac escreveu:

lksmodos escreveu:

mbrainiac escreveu:

Alguém poderia ajudar não em " português" mas em C?

Não vou codificar por que estou no trabalho, mas vamos lá, crie uma função que recebe uma pilha e retorne uma pilha , dentro dessa função crie uma pilha auxiliar que vai receber os elementos da pilha de entrada, por fim retorne a pilha auxiliar que contém os elementos invertidos.


Estou com dificuldades nesta parte de fazer a outra pilha receber os valores da primeira


Qual a dificuldade ?
o esqueleto do codigo e praticamente esse :
while (!vazia(pilha_origem)){
aux = desempilha(pilha_origem);
empilha(nova_pilha);
}
return nova_pilha
basicamente e isso.....não vejo dificuldade.......tentei ser o mais simplista possível..



11. Re: problemas na funçãoda pilha trocar o topo pela base e vice versa. [RESOLVIDO]

Marco Brainiac
mbrainiac

(usa Debian)

Enviado em 17/03/2016 - 21:36h

paulo1205 escreveu:

Qual dificuldade?

Pense um pouco. O que significa “transferir elementos de uma pilha para outra”? Será que não seria “tirar elementos da primeira e colocar na segunda”?

E quais operações permitem a você, respectivamente, retirar e colocar elementos de uma pilha? Não seriam pop() e push()?


Outra abordagem: supondo que VOCÊ só possa mexer um prato de cada vez, como VOCÊ poderia mover vários pratos de uma pilha já existente para outro lugar na bancada? Se você for capaz de realizar essa tarefa e souber descrevê-la, você tem praticamente pronto o programa que tem de fazer.


Se você tem alguma pretensão de programar, você PRECISA aprender a expressar ideias de modo claro e a dividir problemas complexos em partes menores. Converter de Português (ou qualquer outro idioma natural) para C (ou qualquer outra linguagem de programação) é o menor dos problemas, pois é uma tarefa essencialmente mecânica.


Paulo o título do tópico diz "problemas na função da pilha trocar o topo pela base e vice versa"
Ou inverter os itens ...



12. Re: problemas na funçãoda pilha trocar o topo pela base e vice versa. [RESOLVIDO]

Marco Brainiac
mbrainiac

(usa Debian)

Enviado em 17/03/2016 - 21:54h


** Entrei inicialmente com

push(1,&p);
push(5,&p);
push(9,&p);
push(3,&p);

mas gerou números errados



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts