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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / fallo al mostrar y buscar los datos insertados en: 5 Abril 2011, 15:05 pm
Hola;
 Este es el código en el cual tengo un fallo a la hora de mostrar el nombre de los datos insertados y otro también a la hora de vuscar los datos por la edad introducida el nombre lo muestra mal y nose donde esta el error.

Si me pueden ayudar se lo agradezco.
Gracias.

Este es el código;




//LIBRERIAS UTILIZADAS
 
 
#include <stdio.h>
#include <stdlib.h>

//ESTRUCTURA A UTILIZAR

typedef struct lalista{
        char nombre[100];
       float peso;
       int edad;
        struct lalista *siguiente;
        }telemento;

//DECLARACION DE FUNCIONES

telemento *NuevoElemento(void);
void mostrar_lista(telemento *);
void insertar(telemento **, telemento **);
void buscar_por_edad(telemento *, telemento *);

//FUNCION PRINCIPAL

int main(void)
{
    telemento *principio=NULL,*final=NULL, *paux=NULL;//punteros a la cola.
    int opcion=0;

    printf("\nVamos a manejar una lista de enteros.");

while(opcion!=4)
{
   printf("\nElija una opcion: \n1)Mostrar \n2)Insertar \n3)Buscar \n4)Salir\n");
   scanf("%d",&opcion);
   switch(opcion)
      {
      case 1:   printf("\nLa lista actual es: ");
            mostrar_lista(principio);
            break;
      case 2: printf("\nInsertar un nuevo elemento al final de la lista: ");
            insertar(&principio,&final);
            break;
   case 3: printf("\nBuscar por edad: ");
            buscar_por_edad(principio,paux); //Devolver en paux el primero de la lista que tenga la edad buscada
   
            break;
   case 4: printf("\nFin de la aplicacion: ");
            break;
   default: printf("\nOpcion incorrecta, pruebe de nuevo\n");
   } //Fin del switch
   } //Fin del while
return 0;
} //Fin de main

telemento *NuevoElemento(void)
{
          telemento *q=((telemento *)malloc(sizeof(telemento)));
          if(!q){
                 printf("Error\n");
                 exit(1);
          }
          return q;
}

void mostrar_lista(telemento *principio)
{
     telemento *puntero;
     puntero=principio;
     
     
     if(puntero==NULL)
     {
                      printf("Cola vacia\n");
     }
     else{
          puntero=principio;
          while(puntero!=NULL)
          {
                              printf("%s %f %d",puntero->nombre, puntero->peso, puntero->edad);
                              puntero=puntero->siguiente;
          }
     }
}

void insertar(telemento **principio,telemento **final)
{
     telemento *puntero_inicio,*puntero_final,*puntero;
     
     char nombre[100];
    float peso;
    int edad;
     fflush(stdin);
     printf("Nombre: ");
     gets(nombre);
     printf("Peso: ");
     scanf("%f",&peso);
     printf("Edad: ");
     scanf("%d",&edad);
     
     puntero_inicio=*principio;//Puntero al inicio  de la cola.
     puntero_final=*final; //Puntero al final de la cola.
     
     puntero=NuevoElemento();
     strcpy(nombre,puntero->nombre);//Metemos los datos.
     puntero->peso=peso;
     puntero->edad=edad;
     puntero->siguiente=NULL;//El ultimo apuntara a NULL.
     
     if(puntero_inicio==NULL)//la cola esta vacia.
     {
           puntero_inicio=puntero;
           puntero_final=puntero;
     }
     else{
          puntero_final->siguiente=puntero;
          puntero_final=puntero;
          }
         
     *final=puntero_final;
     *principio=puntero_inicio;
}

void buscar_por_edad(telemento *principio, telemento *paux)
{
     telemento *puntero;
     puntero=principio;
     
     if(puntero==NULL)
     {
           printf("Cola vacia\n");
     }
     else{
          int buscar;
          printf("Busqueda por edad: ");
          scanf("%d",buscar);
          puntero=principio;
          while(puntero!=NULL)
          {
               if(puntero->edad==buscar)
               {
               printf("%s %f %d",puntero->nombre, puntero->peso, puntero->edad);
               paux=puntero;
               }
               else
               {
                   printf("No hay nadie con esa edad");
               }
          puntero=puntero->siguiente;
          }
          }
}
2  Programación / Programación C/C++ / 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

Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines