Título: nueva duda pila en C Publicado por: pakleisito en 18 Marzo 2011, 07:25 am Esta es mi nueva duda ... al compilar me sale error en la funcion convertir cuando llamo a las funciones push y pop.
Código
Saludos Título: Re: nueva duda pila en C Publicado por: Akai en 18 Marzo 2011, 13:16 pm Cuando dices "error al compilar" podrías al menos poner el error. Pero bueno, me siento generoso y voy a intentar compilar tu código ¬¬
1) Iostream se incluye sin el .h 2) usas malloc y free sin incluir cstdlib 3) La implementación de tus funciones, debería ir debajo del main, o no poner las declaraciones. 4) en convertir haces esto: Código y eso, NO se hace. Título: Re: nueva duda pila en C Publicado por: pakleisito en 18 Marzo 2011, 15:33 pm si mis problemas son exactamente con esas lineas.
pero me podrias decir entonces como SI se hace porfavor Gracias :) Título: Re: nueva duda pila en C Publicado por: Akai en 18 Marzo 2011, 15:36 pm sin el void
Código
El void lo utilizas cuando declaras una función, cuando la invocas no lo necesitas. Título: Re: nueva duda pila en C Publicado por: pakleisito en 18 Marzo 2011, 15:39 pm pero por que me sale este error en la funcion convertir exactamente al llamar a push y pop
42 expected primary-expression before ',' token 44 expected primary-expression before ')' token Gracias =) Título: Re: nueva duda pila en C Publicado por: Akai en 18 Marzo 2011, 18:36 pm Básicamente porque tu código está mal. Usas typedef como quien no quiere la cosa y sin saber lo que hace, tengo la impresión.
Código
NO TIENES DEFINIDO PILA!!! Título: Re: nueva duda pila en C Publicado por: pakleisito en 18 Marzo 2011, 20:08 pm ahora tengo este
Código
Pero tengo errores en las lineas: Código
Título: Re: nueva duda pila en C Publicado por: Akai en 18 Marzo 2011, 20:13 pm te sobra el &.
Aun así, te sigo diciendo, no sabes como funciona el typedef, y lo usas sin ton ni son. Título: Re: nueva duda pila en C Publicado por: pakleisito en 18 Marzo 2011, 20:20 pm ya se que no se usarlos correctamente ... pero me podrías explicar entonces que es lo que tengo que hacer para solucionarlo??
y si le quito los & entonces seria como si los apuntadores estuvieran de mas y el programa se truncaría. Título: Re: nueva duda pila en C Publicado por: Akai en 18 Marzo 2011, 20:36 pm Typedef: define un tipo. Simple y llanamente. le dice al compilador que un tipo se refiere a otro.
Código
Tu problema?: Código
tiponodo lo defines como un struct de nombre dato. defines el tipo pNodo como tiponodo* y lo mismo con Pila Y luego, defines una Pila* (tipo no definido) como pila. Resultado? tu pila es un tiponodo** Posible solución? Código sin ninguna definición mas. y luego, en el main o donde necesites usar un puntero a dicha estructura: Código
Título: Re: nueva duda pila en C Publicado por: Suzume en 24 Mayo 2011, 05:24 am 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"); } Título: Re: nueva duda pila en C Publicado por: D4RIO en 24 Mayo 2011, 17:25 pm 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? Código No estamos escribiendo un SMS ni nada por el estilo. Nadie te cobra por los carácteres que completan las palabras. Saludos Título: Re: nueva duda pila en C Publicado por: Suzume en 28 Mayo 2011, 05:24 am sino vas a ayudar mjor no respondas y si el post lleva tanto tiempo para q t metist en ste tema???
Título: Re: nueva duda pila en C Publicado por: D4RIO en 28 Mayo 2011, 16:50 pm Citar sino 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. Citar y 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. |