• Lunes 29 de Abril de 2024, 03:47

Autor Tema:  Apuntadores Dobles En C++  (Leído 2237 veces)

VeronicaNF

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Apuntadores Dobles En C++
« en: Lunes 24 de Septiembre de 2007, 01:42 »
0
class cliente
        {
        private:
        char num[30];
        cliente * sig;
        public:
                char * cliente:: getnum()
                        {
                        return num;
                        }
                void cliente:: clien()
                        {
                        gets(num);
                        }
                void cliente:: direccion(cliente * siguiente)
                        {
                        sig=siguiente;
                        }
                cliente* cliente:: sigue()
                        {
                        return sig;
                        }
        }
void insertar_antes(cliente **inicio)
        {
        cliente *aux, * aux2;
        aux2= * inicio;
        aux= new cliente;
        aux->clien();
        aux->direccion(aux2);
        * inicio= aux;
        }
void creacion(cliente** inicio)
        {
        cliente *aux;
        aux=new cliente;
        aux-> clien();
        aux->direccion(NULL);
        *inicio= aux;
        }
void meter(cliente** inicio)
        {
        clien *aux;
        aux= *inicio;
        if(aux==NULL)
                creacion(&aux);
        else
                insertar_antes(&aux);
        *inicio=aux;
        }
void sacar(cliente** inicio)
        {
        cliente*aux;
        cliente *aux2;
        aux=*inicio;
        if(aux==NULL)
                cout<<"Ta vacia";
        else
                {
                aux2= aux-> getnum();
                delete aux;
                *inicio=aux2;
                }
        }
char menu()
        {
        char opc;
        clrscr();
        gotoxy(30,3);
        cout<<"MENU";
        gotoxy(28,7);
        cout<<"1)Meter";
        gotoxy(28,9);
        cout<<"2)sacar";
        gotoxy(28,11);
        cout<<"3)Salir";
        do
                {
                opc=getch();
                }while(!strchr("123",opc));
        return opc;
        }
main()
        {
        cliente*cima;
        cima=NULL;
        char opc;
        do
                {
                opc=menu();
                switch(opc)
                        {
                        case'1':meter(&cima);
                                break;
                        case'2': sacar(&cima);
                        }
                }while (opc!='3');
        }

Cualquier ayuda es bien recibida :)

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Apuntadores Dobles En C++
« Respuesta #1 en: Martes 25 de Septiembre de 2007, 02:42 »
0
Antes que nada, te recomiendo que indentes tu codigo y utilices [ code ][ /code ] (sin espacio entre los corchetes) al postear, eso hace mas clara la lectura.

Queda un error, pero en esa parte no se que es lo que quieres hacer, asi que no lo he corregido, necesitaras estudiar muuuuuucho mas, pues se nota que te hace falta practica, he dejado comentarios para que te des cuenta de cuales fueron tus errores :P

Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;iostream&#62; // necesario para utilizar cout
  5.  
  6. using namespace std; // necesario para utilizar cout
  7.  
  8. class cliente
  9. {
  10. private:
  11.     char num[30];
  12.     cliente * sig;
  13. public:
  14.     char * cliente:: getnum()
  15.     {
  16.         return num;
  17.     }
  18.     void cliente:: clien()
  19.     {
  20.         gets(num);
  21.     }
  22.     void cliente:: direccion(cliente * siguiente)
  23.     {
  24.         sig=siguiente;
  25.     }
  26.     cliente* cliente:: sigue()
  27.     {
  28.         return sig;
  29.     }
  30. }; // Olvidate poner un punto y coma aqui
  31. void insertar_antes(cliente **inicio)
  32. {
  33.     cliente *aux, * aux2;
  34.     aux2= * inicio;
  35.     aux= new cliente;
  36.     aux-&#62;clien();
  37.     aux-&#62;direccion(aux2);
  38.     * inicio= aux;
  39. }
  40. void creacion(cliente** inicio)
  41. {
  42.     cliente *aux;
  43.     aux=new cliente;
  44.     aux-&#62; clien();
  45.     aux-&#62;direccion(NULL);
  46.     *inicio= aux;
  47. }
  48. void meter(cliente** inicio)
  49. {
  50.     cliente *aux; // en esta definicion pusiste clien,y es cliente
  51.     aux= *inicio;
  52.     if (aux==NULL)
  53.         creacion(&aux);
  54.     else
  55.         insertar_antes(&aux);
  56.     *inicio=aux;
  57. }
  58. void sacar(cliente** inicio)
  59. {
  60.     cliente*aux;
  61.     cliente *aux2;
  62.     aux=*inicio;
  63.     if (aux==NULL)
  64.         cout&#60;&#60;&#34;Ta vacia&#34;;
  65.     else
  66.     {
  67.         aux2= aux-&#62; getnum(); // en esta parte no se que quieres hacer
  68.         delete aux;
  69.         *inicio=aux2;
  70.     }
  71. }
  72. char menu()
  73. {
  74.     char opc;
  75.     clrscr();
  76.     gotoxy(30,3);
  77.     cout&#60;&#60;&#34;MENU&#34;;
  78.     gotoxy(28,7);
  79.     cout&#60;&#60;&#34;1)Meter&#34;;
  80.     gotoxy(28,9);
  81.     cout&#60;&#60;&#34;2)sacar&#34;;
  82.     gotoxy(28,11);
  83.     cout&#60;&#60;&#34;3)Salir&#34;;
  84.     do
  85.     {
  86.         opc=getch();
  87.     }
  88.     while (!strchr(&#34;123&#34;,opc));
  89.     return opc;
  90. }
  91. main()
  92. {
  93.     cliente*cima;
  94.     cima=NULL;
  95.     char opc;
  96.     do
  97.     {
  98.         opc=menu();
  99.         switch (opc)
  100.         {
  101.         case'1':
  102.             meter(&cima);
  103.             break;
  104.         case'2':
  105.             sacar(&cima);
  106.         }
  107.     }
  108.     while (opc!='3');
  109. }
  110.  
  111.  
  112.  

Saludos :)

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

VeronicaNF

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Apuntadores Dobles En C++
« Respuesta #2 en: Miércoles 26 de Septiembre de 2007, 00:28 »
0
ProfesorX, puedo preguntarle algo?
¿Despues de finalizar las clases siempre va punto y coma?
¿si no pongo "using namespace std;" cuando utilizo conio, el programa no funcionara? ya que nunca utilizaba eso y si funcionaba, si utilizo las librerias aunque cuando publique el programa no las agrege  :D

en esta parte del codigo me equiboque al teclearlo jeje

Código: Text
  1.  
  2. void sacar(cliente** inicio)
  3. {
  4.    cliente*aux;
  5.    cliente *aux2;
  6.    aux=*inicio;
  7.    if (aux==NULL)
  8.        cout&#60;&#60;&#34;Ta vacia&#34;;
  9.    else
  10.    {
  11.        aux2= aux-&#62; sigue(); // me equiboque era &#34;sigue&#34; en lugar de getnum, disculpa
  12.        aux-&#62;getnum();
  13.        delete aux;
  14.        *inicio=aux2;
  15.    }
  16. }
  17.  
  18.  

muchas gracias por la ayuda  :rolleyes:

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Apuntadores Dobles En C++
« Respuesta #3 en: Miércoles 26 de Septiembre de 2007, 18:53 »
0
Citar
¿Despues de finalizar las clases siempre va punto y coma?

Asi es.

Citar
¿si no pongo "using namespace std;" cuando utilizo conio, el programa no funcionara? ya que nunca utilizaba eso y si funcionaba, si utilizo las librerias aunque cuando publique el programa no las agrege

el "using namespace std;" no es para utilizar conio, es para la utilizacion de cout, cin, y similares. En compiladores antiguos de C++ no era necesario, pero en compiladores mas nuevos (como el que yo utilizo), si es necesario, puesto que esas funciones estan definidas en namespaces, el uso de namespaces es para evitar ambigüedades, o sea, que tu puedes tener dos funciones que se llamen igual, pero en namespaces diferentes, en ese caso, antepones el nombre del namespace a la funcion, y asi evitas la ambiguedad. o sea, que si no utilizas namespaces, tendrias que escribir:

Código: Text
  1.  
  2. std::cout &#60;&#60; &#34;Hola Mundo&#092;n&#34;;
  3.  
  4.  

El tema de namespaces es muy amplio, si tienes mas dudas, busca acerca de namespaces, para que tengas mas informacion/ejemplos.

Saludos :)

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

VeronicaNF

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Apuntadores Dobles En C++
« Respuesta #4 en: Miércoles 26 de Septiembre de 2007, 23:15 »
0
Muchas gracias por la ayuda ProfesorX
hasta luego
bye   :hola: