somar 2 pilhas
Tenho 2 pilhas com valores definidos: pilha1: 592 e pilha2: 3784, tenho q somar as duas pilhas, empilhar em uma terceira pilha e imprimir.
Tentei fazer de um jeito mas n qr dar certo e tenho a impressão q tem uma maneira mt mais facil de se fazer.
o programa para de responder qnd executo
#include <stdio.h>
typedef struct
{
int uni;
int dez;
int cent;
int mil;
int soma;
} TipoItem;typedef struct celula
{
TipoItem item;
struct celula *prox;
} Celula;typedef struct
{
Celula *base;
Celula *topo;
} Pilha;
Pilha pilha;void FPV(Pilha *pilha)
{
pilha->topo=(Celula*)malloc(sizeof(Celula));
pilha->topo->prox=NULL;
pilha->base=pilha->topo;
}int Vazia(Pilha pilha)
{
if(pilha.base==pilha.topo)
return 1;
else
return 0;
}void Empilha(Pilha *pilha, TipoItem x)
{
Celula *aux;
pilha->topo->item=x;
aux=(Celula*)malloc(sizeof(Celula));
aux->prox=pilha->topo;
pilha->topo=aux;
}void Desempilha(Pilha pilha, TipoItem x)
{
if(!Vazia(*pilha))
{
*x = pilha->topo->prox->item;
Celula *aux;
aux=pilha->topo;
pilha->topo=aux->prox;
free(aux);
}
}
void Imprime(Pilha pilha)
{
Pilha *pilhaAux;
FPV(&pilhaAux);
TipoItem x;
while(!Vazia(pilha))
{
Desempilha(&pilha, &x);
Empilha(&pilhaAux, x);
}
while(!Vazia(*pilhaAux))
{
Desempilha(&pilhaAux, &x);
printf("%d\n%s\n%s\n", x.mil, x.cent, x.dez, x.uni);
Empilha(&pilha, x);
}
}int main()
{
TipoItem u,d,c,m;
int vai_um;
Pilha *pilha1;
Pilha *pilha2;
Pilha *pilha3;
FPV(&pilha1);
FPV(&pilha2);
FPV(&pilha3);
pilha1->topo->item.uni = 2;
pilha1->topo->item.dez = 9;
pilha1->topo->item.cent = 5;
pilha1->topo->item.mil = 0;
pilha2->topo->item.uni = 4;
pilha2->topo->item.dez = 8;
pilha2->topo->item.cent = 7;
pilha2->topo->item.mil = 3;
Empilha(&pilha1,c);
Empilha(&pilha1,d);
Empilha(&pilha1,u);
Empilha(&pilha2,m);
Empilha(&pilha2,c);
Empilha(&pilha2,d);
Empilha(&pilha2,u);
somaPilha(*pilha1,*pilha2,*pilha3);
}
void somaPilha(Pilha pilha1,Pilha pilha2,Pilha *pilha3)
{
int vai_um;
while(!Vazia(*pilha1) && !Vazia(*pilha2))
{
pilha3->topo->item.uni = pilha1->topo->item.uni + pilha2->topo->item.uni;
if(pilha3->topo->item.uni > 9)
vai_um = pilha3->topo->item.uni - (pilha3->topo->item.uni - 10);
pilha3->topo->item.dez = pilha1->topo->item.dez + pilha2->topo->item.dez + vai_um;
if(pilha3->topo->item.dez > 9)
vai_um = pilha3->topo->item.dez - (pilha3->topo->item.dez - 10);
pilha3->topo->item.cent = pilha1->topo->item.cent + pilha2->topo->item.cent + vai_um;
if(pilha3->topo->item.cent > 9)
vai_um = pilha3->topo->item.cent - (pilha3->topo->item.cent - 10);
pilha3->topo->item.mil = pilha1->topo->item.mil + pilha2->topo->item.mil + vai_um;
}
Imprime(*pilha3);
}o meu vai_um tbm ta errado, mas n consegui pensar em outra maneira de fazer
Discussão (1)
Carregando comentários...