• Miércoles 20 de Noviembre de 2024, 14:20

Autor Tema:  estrucutras, punteros  (Leído 2486 veces)

bendroide

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
estrucutras, punteros
« en: Jueves 7 de Abril de 2011, 23:40 »
0
Código: C
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. struct agenda{
  7.     char nombre [50];
  8.     char telefono[25];
  9.     char email[50];
  10.     };
  11.     struct nodo{
  12.         struct agenda dato;
  13.         struct nodo *proximo;    
  14.         } ;
  15.    
  16.     struct nodo *nuevonodo
  17.            int colavacia(struct nodo *)
  18.     struct nodo *creacola (struct nodo *, struct agenda);
  19.    
  20.     void mostrar (struct nodo *);
  21.    
  22.     void main()
  23.     {
  24.         struct nodo *pri=NULL, *ult=NULL;
  25.         struct agenda x;
  26.        
  27.         printf ("ingrese nombre: ");
  28.         gets(x.nombre);
  29.         while (strcmpi(x.nombre, "fin"))
  30.    
  31.     {
  32.         printf ("ingrese telefono: ");
  33.         gets (x.telefono);
  34.         printf ("ingrese mail: ");
  35.         gets(x.mail);
  36.         ult=creacola(ult,x);
  37.         if (pri==NULL) pri=ult; //si es la 1 pasada pongo en pri el valor del primer nodo
  38.         printf ("ingrese nombre: ");
  39.         gets(x.nombre);
  40.     }
  41.     if (colavacia(pri)==1)
  42.     {
  43.     printf ("No se ingresaron registros");getch();
  44.     }
  45.     else mostrar(pri);
  46.    
  47.     }
  48.     struct nodo *nuevonodo()
  49.     {
  50.         struct nodo *p;
  51.         p=(struct nodo *)malloc(sizeof(struc nodo));
  52.         if(p==NULL)
  53.         {
  54.             printf ("memoria ram llena");
  55.             getch();
  56.             exit(0);
  57.         }
  58.         return p;
  59.     }
  60.    
  61.     struct nodo *creacola(struct nodo *ult, struct agenda x)
  62.     {
  63.         struct nodo *p;
  64.         p=nuevonodo();
  65.         (*P).dato=x;
  66.         (*p).proximo=NULL;
  67.         if(ult!=NULL) (*ult).proximo=p; //si hay nodo anterior en prox pongo la direccion del nodo actual
  68.         return p;
  69.     }
  70.    
  71.     int colavacia(struct nodo *pri)
  72.     {
  73.         if(pri==NULL) return 1;
  74.         else
  75.         return 0;
  76.     }
  77.    
  78.     void mostrar (struct nodo *pri)
  79.     {
  80.         struct nodo *aux;
  81.        
  82.     while(pri!=NULL)
  83.     {
  84.         printf("Nombre: %s - telefono: %s - Mail: %s n",
  85.         pri->dato.nombre,pri->dato.telefono,pri->dato.mail);
  86.         aux=pri;
  87.         pri=(*pri).proximo;
  88.         free(aux);
  89.     }
  90.     getch();
  91. }
  92.  

me tira un error en
Código: C
  1. int colavacia(struct nodo *)
  2.  

alguien me puede ayudar :p

saludos,
ben

Leber

  • Miembro activo
  • **
  • Mensajes: 65
    • Ver Perfil
Re: estrucutras, punteros
« Respuesta #1 en: Jueves 7 de Abril de 2011, 23:52 »
0
En verdad, mi compilador casi se rompe. Tu código contenía bastantes erratas de sintaxis.
Faltaban ";" , habías puesto mail en lugar de email. una P cuando tenia que ser p, el prototipo de la función nuevonodo estaba incompleta.

Despues de corregir eso, tu código queda así:

A mi me lanza un error porque no tengo la libreria conio (que no es estandart):

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <conio.h>
  5.  
  6. struct agenda{
  7.     char nombre [50];
  8.     char telefono[25];
  9.     char email[50];
  10.     };
  11.     struct nodo{
  12.         struct agenda dato;
  13.         struct nodo *proximo;    
  14.         } ;
  15.    
  16.     struct nodo *nuevonodo(void);
  17.            int colavacia(struct nodo *);
  18.     struct nodo *creacola (struct nodo *, struct agenda);
  19.    
  20.     void mostrar (struct nodo *);
  21.    
  22.     void main()
  23.     {
  24.         struct nodo *pri=NULL, *ult=NULL;
  25.         struct agenda x;
  26.        
  27.         printf ("ingrese nombre: ");
  28.         gets(x.nombre);
  29.         while (strcmp(x.nombre, "fin"))
  30.    
  31.     {
  32.         printf ("ingrese telefono: ");
  33.         gets (x.telefono);
  34.         printf ("ingrese mail: ");
  35.         gets(x.email);
  36.         ult=creacola(ult,x);
  37.         if (pri==NULL) pri=ult; //si es la 1 pasada pongo en pri el valor del primer nodo
  38.         printf ("ingrese nombre: ");
  39.         gets(x.nombre);
  40.     }
  41.     if (colavacia(pri)==1)
  42.     {
  43.     printf ("No se ingresaron registros");getch();
  44.     }
  45.     else mostrar(pri);
  46.    
  47.     }
  48.     struct nodo *nuevonodo()
  49.     {
  50.         struct nodo *p;
  51.         p=(struct nodo *)malloc(sizeof(struct nodo));
  52.         if(p==NULL)
  53.         {
  54.             printf ("memoria ram llena");
  55.             getch();
  56.             exit(0);
  57.         }
  58.         return p;
  59.     }
  60.    
  61.     struct nodo *creacola(struct nodo *ult, struct agenda x)
  62.     {
  63.         struct nodo *p;
  64.         p=nuevonodo();
  65.         (*p).dato=x;
  66.         (*p).proximo=NULL;
  67.         if(ult!=NULL) (*ult).proximo=p; //si hay nodo anterior en prox pongo la direccion del nodo actual
  68.         return p;
  69.     }
  70.    
  71.     int colavacia(struct nodo *pri)
  72.     {
  73.         if(pri==NULL) return 1;
  74.         else
  75.         return 0;
  76.     }
  77.    
  78.     void mostrar (struct nodo *pri)
  79.     {
  80.         struct nodo *aux;
  81.        
  82.     while(pri!=NULL)
  83.     {
  84.         printf("Nombre: %s - telefono: %s - Mail: %s n",
  85.         pri->dato.nombre,pri->dato.telefono,pri->dato.email);
  86.         aux=pri;
  87.         pri=(*pri).proximo;
  88.         free(aux);
  89.     }
  90. }
  91.  

bendroide

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: estrucutras, punteros
« Respuesta #2 en: Viernes 8 de Abril de 2011, 00:08 »
0
bine gracias, ahorita solo tengo que comentariar cada linea.

saludos coridales,
bendroide

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: estrucutras, punteros
« Respuesta #3 en: Viernes 8 de Abril de 2011, 09:06 »
0
Cita de: "bendroide"
comentariar
:good:  :good:  :good:

bendroide

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: estrucutras, punteros
« Respuesta #4 en: Sábado 9 de Abril de 2011, 00:25 »
0
Código: C
  1. #include <stdio.h> //libreria sirve para printf y scanf
  2. #include <stdlib.h> //librera obligatoria para malloc() y el free
  3. #include <string.h> //cadenas
  4. #include <conio.h> //hacer un pause para mostrar datos
  5.      
  6. struct agenda //se declara una estructura
  7. {
  8. /*miembros de la estructura*/
  9. char nombre [50];
  10. char telefono[25];
  11. char email[50];
  12. };
  13. /* se delcara una estructura nodo*/
  14.         struct nodo{
  15.             struct agenda dato; //estructura agenda dato
  16.             struct nodo *proximo;    //estructura nodo , defino un puntero
  17.             } ;
  18.        
  19.         struct nodo *nuevonodo(void);
  20.                int colavacia(struct nodo *);
  21.         struct nodo *creacola (struct nodo *, struct agenda);
  22.        
  23.         void mostrar (struct nodo *);// se declara la funcion  mostrar con prototipo de 1estructura y 1puntero
  24.        
  25.         void main() //funcion principal
  26.         {
  27.             struct nodo *pri=NULL, *ult=NULL;
  28.             struct agenda x;
  29.            
  30.             printf ("ingrese nombre: ");
  31.             gets(x.nombre);
  32.             while (strcmp(x.nombre, "fin"))
  33.        
  34.         {
  35.             printf ("ingrese telefono: ");
  36.             gets (x.telefono);
  37.             printf ("ingrese mail: ");
  38.             gets(x.email);
  39.             ult=creacola(ult,x);
  40.             if (pri==NULL) pri=ult; //si es la 1 pasada pongo en pri el valor del primer nodo
  41.             printf ("ingrese nombre: ");
  42.             gets(x.nombre);
  43.         }
  44.         if (colavacia(pri)==1)
  45.         {
  46.         printf ("No se ingresaron registros");getch();
  47.         }
  48.         else mostrar(pri);
  49.        
  50.         }
  51.         struct nodo *nuevonodo()
  52.         {
  53.             struct nodo *p;
  54.             p=(struct nodo *)malloc(sizeof(struct nodo));
  55.             if(p==NULL)
  56.             {
  57.                 printf ("memoria ram llena");
  58.                 getch();
  59.                 exit(0);
  60.             }
  61.             return p;
  62.         }
  63.        
  64.         struct nodo *creacola(struct nodo *ult, struct agenda x)
  65.         {
  66.             struct nodo *p;
  67.             p=nuevonodo();
  68.             (*p).dato=x;
  69.             (*p).proximo=NULL;
  70.             if(ult!=NULL) (*ult).proximo=p; //si hay nodo anterior en prox pongo la direccion del nodo actual
  71.             return p;
  72.         }
  73.        
  74.         int colavacia(struct nodo *pri) //funcion entera  con parametros de estructura  y puntero
  75.         {
  76.             if(pri==NULL) return 1; //si pri es nulo retorna 1
  77.             else //caso contrario
  78.             return 0; //retorna 0 y finaliza el programa
  79.         }
  80.        
  81.         void mostrar (struct nodo *pri) //funcion declarada para mostrar datos
  82.         //tiene como parametros strcut nodo  y un puntero a *pri
  83.         {
  84.             struct nodo *aux; //estructura dentro de una funcion nodo con un puntero a *aux
  85.            
  86.         while(pri!=NULL) //mientras se niega pri! es igual a un valor nulo, no apunta a ningun lado
  87.         {
  88.         /* imprime en pantalla telefono, mail, y imprime , y accede a cada mienbro de la estructura
  89.          struct agenda dato;  y las imprime*/
  90.             printf("Nombre: %s - telefono: %s - Mail: %s n",
  91.             pri->dato.nombre,pri->dato.telefono,pri->dato.email);
  92.             aux=pri; //las dos variables son iguales
  93.             pri=(*pri).proximo; //pri se igual a su apuntador
  94.             free(aux);
  95.         }
  96.     }
  97.  

hola amigos, no se si las lineas comentariadas esta bien o tengo que modificarla y en donde...

saludos,
bendroide

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: estrucutras, punteros
« Respuesta #5 en: Sábado 9 de Abril de 2011, 02:04 »
0
Bueno, en mi opinion esta bien, solo añadiria que en mi caso, perfiero comentar una linea antes, a comentar en la misma linea,como en el siguiente ejemplo:

Código: C++
  1.  
  2. //se declara una estructura
  3. struct agenda
  4.  
  5.  

 pero bueno, es preferencia personal, en todo caso, es valido como haces los comentarios.

P.D: Por si no lo notaste, tal como te lo hizo notar m0skit0, no se dice "comentariar" ni "comentariadas", el verbo correcto es "comentar", y se conjuga "comentadas".
La palabra "Comentario" no es verbo, asi que escribir "comentario" esta correcto

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

bendroide

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: estrucutras, punteros
« Respuesta #6 en: Sábado 9 de Abril de 2011, 02:59 »
0
ok, gracias por la correccion, pero me referia a la parte esta :D

Código: C
  1. struct nodo *pri=NULL, *ult=NULL;
  2.             struct agenda x;
  3.            
  4.             printf ("ingrese nombre: ");
  5.             gets(x.nombre);
  6.             while (strcmp(x.nombre, "fin"))
  7.        
  8.         {
  9.             printf ("ingrese telefono: ");
  10.             gets (x.telefono);
  11.             printf ("ingrese mail: ");
  12.             gets(x.email);
  13.             ult=creacola(ult,x);
  14.             if (pri==NULL) pri=ult; //si es la 1 pasada pongo en pri el valor del primer nodo
  15.             printf ("ingrese nombre: ");
  16.             gets(x.nombre);
  17.         }
  18.         if (colavacia(pri)==1)
  19.         {
  20.         printf ("No se ingresaron registros");getch();
  21.         }
  22.         else mostrar(pri);
  23.        
  24.         }
  25.         struct nodo *nuevonodo()
  26.         {
  27.             struct nodo *p;
  28.             p=(struct nodo *)malloc(sizeof(struct nodo));
  29.             if(p==NULL)
  30.             {
  31.                 printf ("memoria ram llena");
  32.                 getch();
  33.                 exit(0);
  34.             }
  35.             return p;
  36.         }
  37.  

S41UD0X,
bendroide