elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda ejercicio de c (fallo al apilar)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda ejercicio de c (fallo al apilar)  (Leído 3,815 veces)
baisa

Desconectado Desconectado

Mensajes: 2


Ver Perfil
duda ejercicio de c (fallo al apilar)
« en: 5 Abril 2011, 14:23 pm »

Hola;

yo queria saber el error que tengo en el código ya que lo he mirado varias veces y nose cual es.
El fallo está al apilar los datos en la pila y al desapilarlos.

Gracias.
Si me pudieran contestar lo antes posible se lo agradeceria.

//LIBRERIAS UTILIZADAS
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 5

//DEFINICION DE ESTRUCTURA A UTILIZAR

struct info
{
   char cadena[20];
   float numero;
   struct info *siguiente;
};

//FUNCIÓN DE APILAR LOS DATOS

int apilar(struct info *pila1,struct info *paux, int num)
{
   if(num==(TAM))
      return(num);
   else
      {
      pila1[num].numero=paux->numero;
      strcpy(pila1[num].cadena,paux->cadena);
      num++;
      return 0;
      }
}

//FUNCIÓN DE DESAPILAR DATOS

int desapilar(struct info *pila1, struct info *paux, int num)
{
    int i;
   if(num==-1)
      return (num);

   else
   {
      paux->numero=pila1[0].numero;
      strcpy(paux->cadena,pila1[0].cadena);
      for(i=0;i<num;i++)
      {
       pila1.numero=pila1[i+1].numero;
       strcpy(pila1.cadena,pila1[i+1].cadena);
      }
      return 0;
   }


}

//FUNCIÓN PRINCIPAL

int main(void)
{
struct info pila1[TAM],aux;

int res, opcion=0, num=0,i;

while(opcion!=5)
{
   printf("\nElija una opcion: \n1)Apilar \n2)Desapilar \n3)Resetear \n4) Listar \n5)Salir\n");
   scanf("%d",&opcion);

   switch(opcion)
      {
      case 1:
      {
         printf("\nIntroduce una cadena: ");
         scanf("%s",aux.cadena);
         printf("\nIntroduce un numero: ");
         scanf("%f",&aux.numero);

         res = apilar(&pila1[num],&aux,num);

         if (res ==TAM)
            {
            printf("\nLa pila esta llena");
            break;
            }
         else
            {
            printf("\nLos datos introducidos son: %s, %f.",pila1[num].cadena,pila1[num].numero);
            num++;
            break;
            }

      }
      case 2:
            res = desapilar(&pila1[num], &aux,num);

         if (res < 0)
            {
            printf("\nLa pila esta vacia");
            break;
            }
         else
            {
            printf("\nLos datos extraidos son: %s, %f.",aux.cadena,aux.numero);
            num--;
            break;
            }

      case 3:
            {
            printf("\nLa pila se ha vaciado.");
            num=-1;
            break;
            }

      case 5:
            {
            printf("\nFin de la aplicacion ");
            break;
            }
      case 4:
            {
            printf("\nLos datos en estos momentos son: \n");
            for(i=0;i<num;i++)
            {
               printf("\n \nDato %d de la pila",i+1);
               printf("\n %s", pila1.cadena);
               printf("\n %f",pila1.numero);
            }
            break;
            }
      default:
         {
         printf("\n Opcion erronea.");
         break;
         }
   } //Fin del switch
} //Fin del while
getchar();
getchar();
return 0;
}

//FIN DEL CÓDIGO



En línea

ssaammuu

Desconectado Desconectado

Mensajes: 35



Ver Perfil WWW
Re: duda ejercicio de c (fallo al apilar)
« Respuesta #1 en: 5 Abril 2011, 22:32 pm »


//LIBRERIAS UTILIZADAS
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 5

//DEFINICION DE ESTRUCTURA A UTILIZAR

struct info
{
   char cadena[20];
   float numero;
   struct info *siguiente;
};

//FUNCIÓN DE APILAR LOS DATOS

int apilar(struct info *pila1,struct info *paux, int num)
{
   if(num==(TAM))
      return(num);
   else
      {
      pila1[num].numero=paux->numero;
      strcpy(pila1[num].cadena,paux->cadena);
      num++;
      return 0;
      }
}

//FUNCIÓN DE DESAPILAR DATOS

int desapilar(struct info *pila1, struct info *paux, int num)
{
    int i;
   if(num==-1)
      return (num);

   else
   {
      paux->numero=pila1[0].numero;
      strcpy(paux->cadena,pila1[0].cadena);
      for(i=0;i<num;i++)
      {
       pila1.numero=pila1[i+1].numero;
       strcpy(pila1.cadena,pila1[i+1].cadena);
      }
      return 0;
   }


}

//FUNCIÓN PRINCIPAL

int main(void)
{
struct info pila1[TAM],aux;

int res, opcion=0, num=0,i;

while(opcion!=5)
{
   printf("\nElija una opcion: \n1)Apilar \n2)Desapilar \n3)Resetear \n4) Listar \n5)Salir\n");
   scanf("%d",&opcion);

   switch(opcion)
      {
      case 1:
      {
         printf("\nIntroduce una cadena: ");
         scanf("%s",aux.cadena);
         printf("\nIntroduce un numero: ");
         scanf("%f",&aux.numero);

         res = apilar(&pila1[num],&aux,num);

         if (res ==TAM)
            {
            printf("\nLa pila esta llena");
            break;
            }
         else
            {
            printf("\nLos datos introducidos son: %s, %f.",pila1[num].cadena,pila1[num].numero);
            num++;
            break;
            }

      }
      case 2:
            res = desapilar(&pila1[num], &aux,num);

         if (res < 0)
            {
            printf("\nLa pila esta vacia");
            break;
            }
         else
            {
            printf("\nLos datos extraidos son: %s, %f.",aux.cadena,aux.numero);
            num--;
            break;
            }

      case 3:
            {
            printf("\nLa pila se ha vaciado.");
            num=-1;
            break;
            }

      case 5:
            {
            printf("\nFin de la aplicacion ");
            break;
            }
      case 4:
            {
            printf("\nLos datos en estos momentos son: \n");
            for(i=0;i<num;i++)
            {
               printf("\n \nDato %d de la pila",i+1);
               printf("\n %s", pila1.cadena);
               printf("\n %f",pila1.numero);

            }
            break;
            }
      default:
         {
         printf("\n Opcion erronea.");
         break;
         }
   } //Fin del switch
} //Fin del while
getchar();
getchar();
return 0;
}

//FIN DEL CÓDIGO



En las dos primeras lineas en rojo, estas intentado asignar un objeto del array pila1[TAM] al array entero por lo que da error seguramente algo de relacionado con signar un valor info a un info*.  Creo que alomejor se te a olvidado el [ i], es decir:
Código:
pila1[i].numero=pila1[i+1].numero;
strcpy(pila1[i].cadena,pila1[i+1].cadena);

Las otras dos lineas son otro despiste se te ha olvidado otra vez el [ i]:

Código:
               printf("\n %s", pila1[i].cadena);
               printf("\n %f",pila1[i].numero);


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
DUDA ejercicio de arreglos
Java
ailaht 2 2,806 Último mensaje 29 Marzo 2009, 20:36 pm
por juancho77
Tengo un fallo en el siguiente ejercicio
Programación C/C++
juni85 4 2,965 Último mensaje 8 Junio 2010, 08:19 am
por juni85
Duda en ejercicio++
Ejercicios
Lamarkus 1 3,489 Último mensaje 1 Diciembre 2010, 17:31 pm
por [L]ord [R]NA
duda con un ejercicio..
Programación C/C++
fer_fer_73 8 4,356 Último mensaje 4 Febrero 2011, 01:24 am
por negux
desarrollo de pila, error en función apilar
Programación C/C++
JZtban 7 3,283 Último mensaje 1 Mayo 2013, 05:24 am
por JZtban
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines