hola , tengo una duda mi enunciado de mi problema es el siguiente: "Dados los elementos 1 ,- 2 , -3 ,4 ,5 ,7 realice una pila que sume los elementos positivos y los elementos negativos. Nota: usar memoria dinamica y no teclear datos en su programa"
la salida de impresion me da lo siguiente
Los elementos de la pila:
1 ,- 2 , -3 ,4 ,5 ,7
la suma de los positivos: 16 lo correcto seria 17
la suma de los negativos: -5
pero como pueden ver no me suma el primer elemento que es uno, no se que sera espero me puedan corregir si he errado, aqui les pongo el codigo.
aqui esta mi codigo:
#include<stdio.h>
#include<stdlib.h>
struct Pila
{
int Dato;
struct Pila *Siguiente;
};
void Push(struct Pila **,int);
int Pop(struct Pila **);
void ImprimePila(struct Pila *);
int main(void)
{
struct Pila *PtrPila;
PtrPila=NULL;
Push(&PtrPila, 7); Push(&PtrPila, 5); Push(&PtrPila, 4);
Push(&PtrPila,-3); Push(&PtrPila,-2); Push(&PtrPila, 1);
ImprimePila(PtrPila);
getchar();
return 0;
}
void Push(struct Pila **Tope, int valor)
{
struct Pila *Nuevo;
Nuevo = (struct Pila *) malloc( sizeof(struct Pila) );
if(Nuevo!=NULL)
{
Nuevo -> Dato = valor;
Nuevo -> Siguiente = *Tope;
*Tope=Nuevo;
}
else
printf("No hay memoria suficiente.\n");
}
int Pop(struct Pila **Tope)
{
struct Pila *Temporal;
int ValorPop;
Temporal= *Tope;
ValorPop=(*Tope)->Dato;
*Tope=(*Tope)->Siguiente;
free(Temporal);
return ValorPop;
}
void ImprimePila(struct Pila *Actual)
{
int suma=0, negativo=0;
if(Actual==NULL)
{
printf("La pila esta vacia.\n"); }
else
{
printf("Los elementos de la pila:\n");
while(Actual!=NULL)
{
printf(" %d ",Actual->Dato);
Actual=Actual->Siguiente;
if(Actual->Dato >=0)
suma+=Actual->Dato ;
else
negativo+=Actual -> Dato;
}
printf("\nLa suma de los positivos: %d", suma);
printf("\nLa suma de los negativos: %d", negativo);
}
}