nueva duda pila en C

Iniciado por pakleisito, 18 Marzo 2011, 07:25 AM

0 Miembros y 1 Visitante están viendo este tema.

Suzume

#10
thanks por los concjos q dist m sirvieron mucho. kisiera saber si akai m puedes ayudar en otra ocasion t lo agradcria mucho :)

EI: juntando mensajes.

/*hice st programa y m salen errores q no c que son intent corregirlos pro nada!!!
errores:
-cannot convert `tiponodo***' to `tiponodo**' for argument `1' to `void push(tiponodo**, int)'
-In function `float media(tiponodo**)':
-In function `int impardelete(tiponodo*)':

Y muchos otros mas!!!!!! talz vz puedan ayudarm xfa!!!!!  */
 
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define Null  0
//declaracion de pila y funciones
typedef struct nodo{
  int dato;
  struct nodo *siguiente;
}tiponodo;

typedef tiponodo *pNodo;
typedef tiponodo *pila;

float media(pila *);
int impardelete(pila *);
int empty(pila *);
int pop(pila *);
void push(pila *,int);
void menu(void);
int main()
{
   
int op,z=0,x,popvalue;
pila  *pl=Null;
menu();
scanf("%i",&op);
while(z==0){           
switch(op){
case 1: printf("\n ingrese el valor que agregara a la pila");
         scanf("%i",&x);
         push(pl,x);
         break;
case 2: if(empty(*pl)=Null)
           printf("\n error la pila esta vacia");   
         pop(&pl);
           printf("\n el valor eliminadio es: %i",popvalue);
         break;
case 3: media(pl);
         break;
case 4: impardelete(pl);
         break;
case 5: z=1;
default: printf("error!!! elija la opcion de nuevo");
          menu();
          scanf("%i",&op);
          break;
}//fin switch
}//fin while

getch();
}//fin main
 

//funciones
int empty(pila *ps)
{
return ((*ps)== Null);
}

void push(pila *ps, int a)
{
pNodo nuevo;
nuevo = (pNodo) malloc(sizeof(tiponodo));
if (nuevo != Null)
{
nuevo->dato = a;
nuevo->siguiente = *ps;
*ps = nuevo;
}
else
printf("No se pudo insertar el elemento. Falta de memoria\n");
}

int pop(pila * ps)
{   
pNodo temp;
int popvalue;
temp = *ps;
popvalue = (*ps)->dato;
*ps = (*ps)->siguiente;
free(temp);
return popvalue;
}
//funcion que calcular la media
float media(pila *ps){
int x,i=0,total=0;
float media;
pila aux=Null;
while(ps!=Null){
x=pop(*ps);
total+=x;
i++;
push(aux,x);
}
media=total/i;
while(aux!=Null){  //reestablecer la pila
x=pop(aux);
push(ps,x);
}
}//fin media

int impardelete(pila ps)//funcion que elimina los numeros impares de la pila
{
int x,num=0;
pila aux=Null;
while(ps!=Null){
if((ps.dato)%2)!=0){
  x=pop(ps);
  num++;
else{
  x=pop(ps);
  push(aux, x);
  }
return num;
}//fin while
}                     

void menu(void)
{
  printf("\nElija la opcion que desea utilizar");
  printf("\n insertar un dato                1");
  printf("\n eliminar un dato                2");
  printf("\n calcular la media               3");
  printf("\n calcular el numero de impares   4");
  printf("\n salir del programa              5");
}

D4RIO

1) Deberías abrir otro tema si tienes dudas, no resucitar un tema que lleva más de un mes sin posts.
2) Usa resaltado para el código, por favor.
3) Escribe en un español que todos entendamos. Es decir: ¿Realmente se supone que interpretemos esto?
/*hice st programa y m salen errores q no c que son intent corregirlos pro nada!!!
errores:
-cannot convert `tiponodo***' to `tiponodo**' for argument `1' to `void push(tiponodo**, int)'
-In function `float media(tiponodo**)':
-In function `int impardelete(tiponodo*)':

Y muchos otros mas!!!!!! talz vz puedan ayudarm xfa!!!!!  */

No estamos escribiendo un SMS ni nada por el estilo. Nadie te cobra por los carácteres que completan las palabras.

Saludos
OpenBSDFreeBSD

Suzume

sino vas a ayudar mjor no respondas y si el post lleva tanto tiempo para q t metist en ste tema???

D4RIO

Citarsino vas a ayudar mjor no respondas
Ayudé. Te dije qué deberías abrir un nuevo tema. A demás, aplicando ese mismo concepto, no deberías haber posteado en primer instancia  ;)
Lo ideal es que pongas tu propio tema, para que la gente lo vea en el tablón, o que mandes un privado a akai, si deseas hacerle una pregunta personal.

Citary si el post lleva tanto tiempo para q t metist en ste tema???
Como comentaba antes, resucitaste el tema. Cuando posteas en un tema, este queda en la parte superior del tablón nuevamente. Por eso es que no es buena idea resucitar un tema cuando tiene más de 1 mes (2 meses por reglamento, pero en 1 mes habrás levantado un tema viejo).

Tomalo a modo de consejo. No necesitas defenderte cuando te dan un consejo. Por otra parte, el consejo de escribir adecuadamente también vale.

PD: No dejes pasar 4 días solo para postear una antítesis no fundamentada.

Saludos.
OpenBSDFreeBSD