Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Programacion C++, struct a clases

Estas en el tema de Programacion C++, struct a clases en el foro de C/C++ en Foros del Web. Hola, buenas tardes, quisiera saber si me podrían ayudar, hice un programa con struct, pero mi maestra al ultimo momento dijo que lo quería con ...
  #1 (permalink)  
Antiguo 05/05/2015, 14:04
 
Fecha de Ingreso: mayo-2015
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Programacion C++, struct a clases

Hola, buenas tardes, quisiera saber si me podrían ayudar,
hice un programa con struct, pero mi maestra al ultimo momento dijo que lo quería con clases, el problema es que no se como pasar mi programa a clases, alguien me podría orientar o ayudar porfavor?

Este es mi programa.
//****************************//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>
#include <iostream>
using namespace std;

typedef struct dato nodo;

nodo* crear_lista(nodo* lista);
nodo* ingresar_dato(char* nombre, int boleta, nodo* lista);

void mostrar_lista(nodo* lista);
void mostrar_nodo(nodo* elemento);
void menu(void);

void borrar_lista(nodo* lista);
nodo* borrar_nodoxnombre(char *nombre, nodo* lista);
nodo* borrar_nodoxnota(int boleta, nodo* lista);

nodo* buscar_nodo(nodo* lista, char *caracter);
void ordenar_lista(nodo* lista);



struct dato
{
char nombre[80];
int nota;
struct dato *sig;
};

nodo* crear_lista(nodo* lista)
{
return (lista = NULL);
}

nodo* ingresar_dato(char* nombre, int boleta, nodo* lista)
{
nodo *nuevo_dato;
nodo *auxiliar = NULL;

nuevo_dato = (nodo*)malloc(sizeof(nodo));

if(nuevo_dato != NULL)
{
strcpy((nuevo_dato->nombre), nombre);
nuevo_dato->nota = boleta;
nuevo_dato->sig = NULL;

if(lista == NULL)
lista = nuevo_dato;
else
{
auxiliar = lista;
while(auxiliar->sig != NULL)
auxiliar = auxiliar->sig;
auxiliar->sig = nuevo_dato;
}
}
else
cout<<"\n\nNo se pudo reservar memoria\n\n";
return lista;
}

void mostrar_lista(nodo* lista)
{
nodo *auxiliar;
int contador = 0;

if(lista == NULL)
cout<<"\n\nLa lista esta vacia\n\n";

auxiliar = lista;
while(auxiliar != NULL)
{
cout<<"\n\nPersona"<<(contador+1);
cout<<"\nNombre y Apellido: "<<auxiliar->nombre;
cout<<"\n\nBoleta: "<< auxiliar->nota;
contador++;

auxiliar = auxiliar->sig;
}
cout<<"\nFin de lista\n\n";
}

void borrar_lista(nodo* lista)
{
nodo *borra;

borra = lista;
while(borra)
{
lista = lista->sig;
free(borra);
borra = lista;
}
}

void menu(void)
{

cout<<"\n\nLista_Practica_3 3CM7:\n\n";
cout<<"1) Ingresar dato\n";
cout<<"2) Mostrar lista\n";
cout<<"3) Borrar lista\n";
cout<<"4) Borrar por nombre\n";
cout<<"5) Borrar por boleta\n";
cout<<"6) Buscar en lista\n";
cout<<"7) Ordenar lista\n";
cout<<"0)SALIR\n\n";


}

nodo* borrar_nodoxnombre(char *nombre, nodo* lista)
{
if(lista != NULL)
{
nodo *ptraux;
nodo *ptranterior = NULL;
int cont;

ptraux = lista;
while(ptraux != NULL && (strcmp(ptraux->nombre, nombre) != 0))
{
ptranterior = ptraux;
ptraux = ptraux->sig;
cont++;
}
if(cont == 1 && ptraux->sig == NULL)
{
free(ptraux);
lista = NULL;
}
if(ptraux == NULL)
cout<<"\n\nNo se encontro una persona con ese nombre\n\n";
else if(ptranterior == NULL)
{
lista = lista->sig;
free(ptraux);
}
else
{
ptranterior->sig = ptraux->sig;
free(ptraux);
}
}

return lista;
}

nodo* borrar_nodoxnota(int boleta, nodo* lista)
{
if(lista != NULL)
{
nodo *ptraux;
nodo *ptranterior = NULL;
int cont = 0;

ptraux = lista;
while(ptraux != NULL && ptraux->nota != boleta)
{
ptranterior = ptraux;
ptraux = ptraux->sig;
cont++;
}
if(cont == 1 && ptraux->sig == NULL)
{
free(ptraux);
lista = NULL;
}
if(ptraux == NULL)
cout<<"\n\nNo se encontro una persona con ese numero de boleta\n\n";
else if(ptranterior == NULL)
{
lista = lista->sig;
free(ptraux);
}
else
{
ptranterior->sig = ptraux->sig;
free(ptraux);
}
}

return lista;
}

nodo* buscar_nodo(nodo* lista, char *caracter)
{
nodo *aux;
char noabuscar[20];
char a[] = "a";
char b[] = "b";
int nabuscar;
if(lista != NULL)
{
if(strcmp(caracter,a) == 0)
{
cout<<"\n\nIngrese el nombre a buscar: ";
fflush(stdin);
fgets(noabuscar, 20, stdin);
aux = lista;
while(aux != NULL)
{
if(strcmp(aux->nombre, noabuscar) == 0)
return aux;
aux = aux->sig;
}
return aux;
}
else if(strcmp(caracter,b) == 0)
{
cout<<"\n\nIngrese la nota a buscar: ";
fflush(stdin);
cout<<nabuscar;
aux = lista;
while(aux != NULL)
{
if(aux->nota == nabuscar)
return aux;
aux = aux->sig;
}
return aux;
}
else
{
cout<<"\n\nOpcion no valida\n\n";
return 0;
}
}
}

void mostrar_nodo(nodo* elemento)
{
nodo* nodoencontrado;
nodoencontrado = elemento;
if(nodoencontrado == NULL)
cout<<"\n\nNo se obtuvieron resultados\n\n";


else
{
cout<<"\n\nNodo encontrado:\n\n";
cout<<"\nNompre y apellido:"<< nodoencontrado->nombre;
cout<<"\nBoleta: "<< nodoencontrado->nota;

}
}
/* \n\n\n\n */

void ordenar_lista(nodo* lista)
{
nodo *anterior;
nodo *siguiente;
nodo temp;

anterior = lista;

while(anterior->sig != NULL)
{
siguiente = anterior->sig;

while(siguiente != NULL)
{
if(strcmp(anterior->nombre, siguiente->nombre) > 0)
{
strcpy(temp.nombre, siguiente->nombre);
temp.nota = siguiente->nota;
strcpy(siguiente->nombre, anterior->nombre);
siguiente->nota = anterior->nota;
strcpy(anterior->nombre, temp.nombre);
anterior->nota = temp.nota;
}
siguiente = siguiente->sig;
}
anterior = anterior->sig;
siguiente = anterior->sig;
}
cout<<"\n\nLista ordenada\n\n";


}

int main(int argc, char** argv)
{
nodo *inicio;
nodo *nodobuscado;
char nom[20];
char nomaborrar[20];
int nborrar;
int nota, i, cant, op;
char s[2];

inicio = crear_lista(inicio);

menu();
cin>>op;
while(op != 0)
{
switch(op)
{
case 1: cout<<"\n\nQue cantidad de datos ingresara: ";
cin>>cant;
cout<<"\n\n";

cout<<"Ingreso de datos:\n\n";
for(i=0 ; i < cant ; i++)
{
cout<<"Nombre y apellido: ";
fflush(stdin);
fgets(nom, 80, stdin);
cout<<"\nBoleta: ";
fflush(stdin);
cin>>nota;
cout<<"\n\n";
inicio = ingresar_dato(nom, nota, inicio);
}
break;

case 2: mostrar_lista(inicio);
break;

case 3: borrar_lista(inicio);
free(inicio);
cout<<"\n\nLista Borrada\n\n";
inicio = NULL;
break;

case 4: cout<<"\n\nIngrese el nombre a borrar\n\n";
fflush(stdin);
fgets(nomaborrar, 80, stdin);
inicio = borrar_nodoxnombre(nomaborrar, inicio);
break;

case 5: cout<<"\n\nIngrese la nota a borrar\n\n";
fflush(stdin);
cin>>nborrar;
inicio = borrar_nodoxnota(nborrar, inicio);
break;

case 6: cout<<"\n\n('a') para buscar por nombre || ('b') para buscar por nota\n\n";
fflush(stdin);
fgets(s, 2, stdin);
nodobuscado = buscar_nodo(inicio, s);
mostrar_nodo(nodobuscado);
break;

case 7: ordenar_lista(inicio);
break;



default: cout<<"\n\n Este no es una opcion, intentelo nuevamente// \n\n";
}
getch();
system("cls");
menu();
cin>>op;
}


return (EXIT_SUCCESS);
}
  #2 (permalink)  
Antiguo 05/05/2015, 14:50
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Información Respuesta: Programacion C++, struct a clases

No entiendo cuales pueden ser las dificultades de pasar de struct a class.

Te recomiendo que miras la referencia de C++ o tus apuntes sobre clases.
Aún así te voy a guiar ligeramente para que puedas resolver tu ejercicio con clases.

Para resolver tu ejercicio:
1-Define el struct dato como la class dato.
2-Dentro de la clase define como miembros privados los miembros de tu antiguo struct.
3-Mete tus funciones en las que se utilice la clase como métodos públicos.
4-Adapta las funciones para que funcionen correctamente recuerda que para acceder ahora no tendrás que dar el struct como argumento de las funciones y desde los métodos de la clase puedes acceder directamente a los miembros.

Esto sólo es una ligera ayuda por si te has quedado atascado, como ya te he dicho mira las referencias y/o apuntes y si tienes dudas sobre algo concreto pregúntalo y alguien de este foro te responderá tarde o temprano.

Por cierto, intenta utilizar las etiquetas HIGHLIGHT de C++ a la hora de publicar en el foro, facilita mucho al resto de usuarios leer y trabajar con el código.

Un saludo.
  #3 (permalink)  
Antiguo 05/05/2015, 15:52
 
Fecha de Ingreso: mayo-2015
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Programacion C++, struct a clases

Hola, esque hace mucho que no usaba clases, y ya se me olvido como usarlas, esa es mi dificultad... tratare de pasarlo por mi cuenta, gracias por su ayuda.
  #4 (permalink)  
Antiguo 05/05/2015, 15:55
 
Fecha de Ingreso: mayo-2015
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Programacion C++, struct a clases

hola, buenas tardes, quisiera saber si me podrían ayudar,
hice un programa con struct, pero mi maestra al ultimo momento dijo que lo quería con clases, el problema es que no se como pasar mi programa a clases, alguien me podría orientar o ayudar porfavor?

Este es mi programa.

Código c++:
Ver original
  1. //****************************//
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include<conio.h>
  7. #include <iostream>
  8. using namespace std;
  9.  
  10. typedef struct dato nodo;
  11.  
  12. nodo* crear_lista(nodo* lista);
  13. nodo* ingresar_dato(char* nombre, int boleta, nodo* lista);
  14.  
  15. void mostrar_lista(nodo* lista);
  16. void mostrar_nodo(nodo* elemento);
  17. void menu(void);
  18.  
  19. void borrar_lista(nodo* lista);
  20. nodo* borrar_nodoxnombre(char *nombre, nodo* lista);
  21. nodo* borrar_nodoxnota(int boleta, nodo* lista);
  22.  
  23. nodo* buscar_nodo(nodo* lista, char *caracter);
  24. void ordenar_lista(nodo* lista);
  25.  
  26.  
  27.  
  28. struct dato
  29.     {
  30.     char nombre[80];
  31.     int nota;
  32.     struct dato *sig;
  33.     };
  34.  
  35. nodo* crear_lista(nodo* lista)
  36.     {
  37.     return (lista = null);
  38.     }
  39.  
  40. nodo* ingresar_dato(char* nombre, int boleta, nodo* lista)
  41.     {
  42.     nodo *nuevo_dato;
  43.     nodo *auxiliar = null;
  44.  
  45.     nuevo_dato = (nodo*)malloc(sizeof(nodo));
  46.  
  47.     if(nuevo_dato != null)
  48.         {
  49.         strcpy((nuevo_dato->nombre), nombre);
  50.         nuevo_dato->nota = boleta;
  51.         nuevo_dato->sig = null;
  52.  
  53.         if(lista == null)
  54.             lista = nuevo_dato;
  55.         else
  56.             {
  57.             auxiliar = lista;
  58.             while(auxiliar->sig != null)
  59.                 auxiliar = auxiliar->sig;
  60.             auxiliar->sig = nuevo_dato;
  61.             }
  62.         }
  63.     else
  64.          cout<<"\n\nno se pudo reservar memoria\n\n";
  65.     return lista;
  66.     }
  67.  
  68. void mostrar_lista(nodo* lista)
  69.     {
  70.     nodo *auxiliar;
  71.     int contador = 0;
  72.  
  73.     if(lista == null)
  74.         cout<<"\n\nla lista esta vacia\n\n";
  75.  
  76.     auxiliar = lista;
  77.     while(auxiliar != null)
  78.         {
  79.          cout<<"\n\npersona"<<(contador+1);
  80.          cout<<"\nnombre y apellido: "<<auxiliar->nombre;
  81.          cout<<"\n\nboleta:      "<< auxiliar->nota;
  82.         contador++;
  83.  
  84.         auxiliar = auxiliar->sig;
  85.         }
  86.    cout<<"\nfin de lista\n\n";
  87.     }
  88.  
  89. void borrar_lista(nodo* lista)
  90.     {
  91.     nodo *borra;
  92.  
  93.     borra = lista;
  94.     while(borra)
  95.         {
  96.         lista = lista->sig;
  97.         free(borra);
  98.         borra = lista;
  99.         }
  100.     }
  101.  
  102. void menu(void)
  103.     {
  104.  
  105.      cout<<"\n\nlista_practica_3             3cm7:\n\n";
  106.      cout<<"1) ingresar dato\n";
  107.     cout<<"2) mostrar lista\n";
  108.    cout<<"3) borrar lista\n";
  109.     cout<<"4) borrar por nombre\n";
  110.      cout<<"5) borrar por boleta\n";
  111.      cout<<"6) buscar en lista\n";
  112.      cout<<"7) ordenar lista\n";
  113.     cout<<"0)salir\n\n";
  114.  
  115.  
  116.     }
  117.  
  118. nodo* borrar_nodoxnombre(char *nombre, nodo* lista)
  119.      {
  120.     if(lista != null)
  121.         {
  122.         nodo *ptraux;
  123.         nodo *ptranterior = null;
  124.         int cont;
  125.  
  126.         ptraux = lista;
  127.         while(ptraux != null && (strcmp(ptraux->nombre, nombre) != 0))
  128.             {
  129.             ptranterior = ptraux;
  130.             ptraux = ptraux->sig;
  131.             cont++;
  132.             }
  133.         if(cont == 1 && ptraux->sig == null)
  134.             {
  135.             free(ptraux);
  136.             lista = null;
  137.             }
  138.         if(ptraux == null)
  139.             cout<<"\n\nno se encontro una persona con ese nombre\n\n";
  140.         else if(ptranterior == null)
  141.             {
  142.             lista = lista->sig;
  143.             free(ptraux);
  144.             }
  145.         else
  146.             {
  147.             ptranterior->sig = ptraux->sig;
  148.             free(ptraux);
  149.             }
  150.         }
  151.  
  152.     return lista;
  153.     }
  154.  
  155. nodo* borrar_nodoxnota(int boleta, nodo* lista)
  156.         {
  157.     if(lista != null)
  158.         {
  159.         nodo *ptraux;
  160.         nodo *ptranterior = null;
  161.         int cont = 0;
  162.  
  163.         ptraux = lista;
  164.         while(ptraux != null && ptraux->nota != boleta)
  165.             {
  166.             ptranterior = ptraux;
  167.             ptraux = ptraux->sig;
  168.             cont++;
  169.             }
  170.         if(cont == 1 && ptraux->sig == null)
  171.             {
  172.             free(ptraux);
  173.             lista = null;
  174.             }
  175.         if(ptraux == null)
  176.             cout<<"\n\nno se encontro una persona con ese numero de boleta\n\n";
  177.         else if(ptranterior == null)
  178.             {
  179.             lista = lista->sig;
  180.             free(ptraux);
  181.             }
  182.         else
  183.             {
  184.             ptranterior->sig = ptraux->sig;
  185.             free(ptraux);
  186.             }
  187.         }
  188.  
  189.     return lista;
  190.     }
  191.  
  192. nodo* buscar_nodo(nodo* lista, char *caracter)
  193.     {
  194.     nodo *aux;
  195.     char noabuscar[20];
  196.     char a[] = "a";
  197.     char b[] = "b";
  198.     int nabuscar;
  199.     if(lista != null)
  200.         {
  201.         if(strcmp(caracter,a) == 0)
  202.             {
  203.             cout<<"\n\ningrese el nombre a buscar: ";
  204.             fflush(stdin);
  205.             fgets(noabuscar, 20, stdin);
  206.             aux = lista;
  207.             while(aux != null)
  208.                 {
  209.                 if(strcmp(aux->nombre, noabuscar) == 0)
  210.                     return aux;
  211.                 aux = aux->sig;
  212.                 }
  213.             return aux;
  214.             }
  215.         else if(strcmp(caracter,b) == 0)
  216.             {
  217.             cout<<"\n\ningrese la nota a buscar: ";
  218.             fflush(stdin);
  219.             cout<<nabuscar;
  220.             aux = lista;
  221.             while(aux != null)
  222.                 {
  223.                 if(aux->nota == nabuscar)
  224.                     return aux;
  225.                 aux = aux->sig;
  226.                 }
  227.             return aux;
  228.             }
  229.          else
  230.             {
  231.             cout<<"\n\nopcion no valida\n\n";
  232.             return 0;
  233.             }
  234.         }
  235.     }
  236.  
  237. void mostrar_nodo(nodo* elemento)
  238.     {
  239.     nodo* nodoencontrado;
  240.     nodoencontrado = elemento;
  241.     if(nodoencontrado == null)
  242.        cout<<"\n\nno se obtuvieron resultados\n\n";
  243.  
  244.  
  245.     else
  246.         {
  247.         cout<<"\n\nnodo encontrado:\n\n";
  248.         cout<<"\nnompre y apellido:"<< nodoencontrado->nombre;
  249.         cout<<"\nboleta:  "<< nodoencontrado->nota;
  250.  
  251.         }
  252.     }
  253. /*    \n\n\n\n   */
  254.  
  255. void ordenar_lista(nodo* lista)
  256.     {
  257.     nodo *anterior;
  258.     nodo *siguiente;
  259.     nodo temp;
  260.  
  261.     anterior = lista;
  262.  
  263.     while(anterior->sig != null)
  264.         {
  265.         siguiente = anterior->sig;
  266.  
  267.         while(siguiente != null)
  268.             {
  269.             if(strcmp(anterior->nombre, siguiente->nombre) > 0)
  270.                 {
  271.                 strcpy(temp.nombre, siguiente->nombre);
  272.                 temp.nota = siguiente->nota;
  273.                 strcpy(siguiente->nombre, anterior->nombre);
  274.                 siguiente->nota = anterior->nota;
  275.                 strcpy(anterior->nombre, temp.nombre);
  276.                 anterior->nota = temp.nota;
  277.                 }
  278.             siguiente = siguiente->sig;
  279.             }
  280.         anterior = anterior->sig;
  281.         siguiente = anterior->sig;
  282.         }
  283. cout<<"\n\nlista ordenada\n\n";
  284.  
  285.  
  286.     }
  287.  
  288.     int main(int argc, char** argv)
  289.     {
  290.     nodo *inicio;
  291.     nodo *nodobuscado;
  292.     char nom[20];
  293.     char nomaborrar[20];
  294.     int nborrar;
  295.     int nota, i, cant, op;
  296.     char s[2];
  297.  
  298.     inicio = crear_lista(inicio);
  299.  
  300.     menu();
  301.     cin>>op;
  302.     while(op != 0)
  303.         {
  304.         switch(op)
  305.             {
  306.             case 1: Cout<<"\n\nque cantidad de datos ingresara: ";
  307.                     cin>>cant;
  308.                     cout<<"\n\n";
  309.  
  310.                     cout<<"ingreso de datos:\n\n";
  311.                     for(i=0 ; i < cant ; i++)
  312.                         {
  313.                         cout<<"nombre y apellido: ";
  314.                         fflush(stdin);
  315.                         fgets(nom, 80, stdin);
  316.                        cout<<"\nboleta:      ";
  317.                         fflush(stdin);
  318.                         cin>>nota;
  319.                         cout<<"\n\n";
  320.                         inicio = ingresar_dato(nom, nota, inicio);
  321.                         }
  322.                     break;
  323.  
  324.             case 2: Mostrar_lista(inicio);
  325.                     break;
  326.  
  327.             case 3: Borrar_lista(inicio);
  328.                     free(inicio);
  329.                     cout<<"\n\nlista borrada\n\n";
  330.                     inicio = null;
  331.                     break;
  332.  
  333.             case 4: Cout<<"\n\ningrese el nombre a borrar\n\n";
  334.                     fflush(stdin);
  335.                     fgets(nomaborrar, 80, stdin);
  336.                     inicio = borrar_nodoxnombre(nomaborrar, inicio);
  337.                     break;
  338.  
  339.             case 5: Cout<<"\n\ningrese la nota a borrar\n\n";
  340.                     fflush(stdin);
  341.                     cin>>nborrar;
  342.                     inicio = borrar_nodoxnota(nborrar, inicio);
  343.                     break;
  344.  
  345.             case 6: Cout<<"\n\n('a') para buscar por nombre || ('b') para buscar por nota\n\n";
  346.                     fflush(stdin);
  347.                     fgets(s, 2, stdin);
  348.                     nodobuscado = buscar_nodo(inicio, s);
  349.                     mostrar_nodo(nodobuscado);
  350.                     break;
  351.  
  352.             case 7: Ordenar_lista(inicio);
  353.                     break;
  354.  
  355.  
  356.  
  357.             default: Cout<<"\n\n este no es una opcion, intentelo nuevamente// \n\n";
  358.             }
  359.              getch();
  360.             system("cls");
  361.         menu();
  362.         cin>>op;
  363.         }
  364.  
  365.  
  366.     return (exit_success);
  367.     }
  #5 (permalink)  
Antiguo 05/05/2015, 16:20
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Programacion C++, struct a clases

En realidad usar clases no es tan sencillo como lo describes xKuZz. Una cosa es cambiar la palabra struct por class y te van a trabajar de forma similar ya que una estructura en C++ trabaja de forma similar a una clase con todos los miembros públicos, y otra totalmente distinta es seguir a rajatabla los pilares de la POO.

Si realmente no sabes nada de clases hay que empezar a estudiar sobre el tema. No hace falta profundizar mucho ya que con que sepas sobre como encapsular los datos, un poco sobre los constructores/destructores puedes adaptar perfectamente ese ejemplo a clases, y de una forma que quede bien.

Ahora bien... Aquí no hacemos deberes a nadie y por eso entiendo el punto de vista de xKuZz, que en el fondo quiere decir que tienes que ensuciarte más, y lleva razón. Nadie te lo va hacer por ti, pero sí que te podemos ayudar.

Bien te voy a pasar unos enlaces que te van a venir de perlas. Pero no creas que te lo voy a dar echo. Soy de los que prefieren enseñar un hombre a pescar antes que darle un pescado.

En esa pagina tienes todo sobre listas, incluidos ejemplos tanto en C como en C++, pero ojo, no esta completo. Por ejemplo método ordenar no esta implementado, ni borrar por nombre...etc etc. Eses métodos te los dejo a ti que investigues algo.

vale... Ahora te dejo enlaces a algunos vídeos que te explican que son clases, constructores y destructores, que es un objeto.... Todo lo que esta relacionado con el tema, de nada sirve que pilles el ejemplo y no entiendas para que sirve cada cosa, eso así no te servirá.

Para una introducción de que es una clase vea:
http://www.minidosis.org/#/actividad...etoYMetodo.vid

Este es el santo grial para ti. Es el que te explica como cambiar todas las funciones que tienes desperdigadas por el programa y te enseña como crear una clase lista con esas funciones ya incrustadas por así decirlo. Vea:
http://www.minidosis.org/#/actividad...nesMiembro.vid

Este te habla sobre encapsulación que que nada más es hacer que algunos datos que nos convengan sean solo accesibles desde la parte publica de la misma clase transformándolos en privados, es uno de los pilares de la POO, muy importante prestar mucha atención en ese vídeo, no es complicado pero si requiere su tiempo y dedicación:
http://www.minidosis.org/#/actividad...ses.Clases.vid

Muy importante también es intender que son los constructores:
http://www.minidosis.org/#/actividad...onstructor.vid
...Y variantes:
http://www.minidosis.org/#/actividad...PorDefecto.vid
http://www.minidosis.org/#/actividad...torDeCopia.vid

Este explica como acceder a datos privados(encapsulados) de la clase para leerlos y modificarlos, muy importante también.
Métodos geters o consultores:
http://www.minidosis.org/#/actividad...onsultores.vid

Y métodos seters o modificadores:
http://www.minidosis.org/#/actividad...ificadores.vid

ahora bien... La cosa no para ahí, hay muchos más vídeos en: http://www.minidosis.org/#/temas De echo es un curso bastante completo y para mi uno de los mejores, aun me ayuda a diario.

Hay ejercicios relacionados a todo lo que puse aquí:
http://www.minidosis.org/#/temas/Cpp.Objetos
http://www.minidosis.org/#/temas/Cpp.Clases

faltan cosas que puedes ver por otros lados en Internet como los destructores etc etc.

Y ahora por ultimo te paso la pagina con los ejemplos sobre listas:
http://www.c.conclase.net/edd/

Aquí hay varios tipos de listas:
http://www.c.conclase.net/edd/?cap=ejemplos#inicio
En C: https://www.dropbox.com/s/zbdzdmmbt1158kd/lista_c.zip
En C++: https://www.dropbox.com/s/e7u36uz8pvbxk7e/lista_cpp.zip
Estudie sus diferencias.

Bueno... Esta es una grande oportunidad para aprender sobre clases. Tomalo o dejalo tu decides, nosotros estaremos aquí para las dudas que te vayan a surgir.

Aquí también hay mucha referencia sobre el tema:
http://c.conclase.net/curso/index.php

Si necesitar ayuda no me importa ayudarte algo por chat, es solo agregarme en skype, me llamo igual por allá.

Bueno, no se si me deje algo atrás ya que son muchas cosas pero es mucho más de lo que tuve yo en su día y creo que puedes hacerlo si te aplicas a ello.

Si no, siempre puedes cambiar el struct por class como te dijo xKuZz XDDD

¡¡¡No desanimes, suerte!!!

Edit:
Cita:
...alguien me podría orientar o ayudar porfavor?
Deaniz poder podemos... Pero intenta aprender algo de lo que puse primero ok, puedes agregarme como dije, si lo vas hacer avisame por aquí antes que no tengo instalado el servicio de skype.
O bien preguntas aqui mismo, pero no esperes que te lo hagan por que ayudarte es el que te sostiene una luz mientras tu haces los deberes =).
  #6 (permalink)  
Antiguo 05/05/2015, 17:25
 
Fecha de Ingreso: mayo-2015
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Programacion C++, struct a clases

Gracias por su pronta respuesta
esto es lo que llevo, pero aún así me siguen mandando errores.
seguire tratando, y obviamente no quiero que me lo hagan, ya que gracias a esto depende una calificación y los conocimientos adquiridos que tenga gracias a esta practica

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include<conio.h>
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. class nodo{
  9. public:
  10. void crear_lista(nodo* lista);
  11. void ingresar_dato(char* nombre, int boleta, nodo* lista);
  12.  
  13. void mostrar_lista(nodo* lista);
  14. void mostrar_nodo(nodo* elemento);
  15. void menu(void);
  16.  
  17. void borrar_lista(nodo* lista);
  18. void borrar_nodoxnombre(char *nombre, nodo* lista);
  19. void borrar_nodoxnota(int boleta, nodo* lista);
  20.  
  21. void buscar_nodo(nodo* lista, char *caracter);
  22. void ordenar_lista(nodo* lista);
  23. };
  24.  
  25.  
  26. class dato
  27.     {
  28.         public:
  29.     char nombre[80];
  30.     int nota;
  31.      dato *sig;
  32.     };
  33.  
  34. void nodo ::crear_lista(nodo* lista)
  35.     {
  36.     return (*lista = NULL);
  37.     }
  38.  
  39. void nodo ::ingresar_dato(char* nombre, int boleta, nodo* lista)
  40.     {
  41.     nodo *nuevo_dato;
  42.     nodo *auxiliar = NULL;
  43.  
  44.     nuevo_dato = (nodo*)malloc(sizeof(nodo));
  45.  
  46.     if(nuevo_dato != NULL)
  47.         {
  48.         strcpy((nuevo_dato->nombre), nombre);
  49.         nuevo_dato->nota = boleta;
  50.         nuevo_dato->sig = NULL;
  51.  
  52.         if(lista == NULL)
  53.             lista = nuevo_dato;
  54.         else
  55.             {
  56.             auxiliar = lista;
  57.             while(auxiliar->sig != NULL)
  58.                 auxiliar = auxiliar->sig;
  59.             auxiliar->sig = nuevo_dato;
  60.             }
  61.         }
  62.     else
  63.          cout<<"\n\nNo se pudo reservar memoria\n\n";
  64.     return lista;
  65.     }
  66.  
  67. int nodo ::void mostrar_lista(nodo* lista)
  68.     {
  69.     nodo *auxiliar;
  70.     int contador = 0;
  71.  
  72.     if(lista == NULL)
  73.         cout<<"\n\nLa lista esta vacia\n\n";
  74.  
  75.     auxiliar = lista;
  76.     while(auxiliar != NULL)
  77.         {
  78.          cout<<"\n\nPersona"<<(contador+1);
  79.          cout<<"\nNombre y Apellido: "<<auxiliar->nombre;
  80.          cout<<"\n\nBoleta:      "<< auxiliar->nota;
  81.         contador++;
  82.  
  83.         auxiliar = auxiliar->sig;
  84.         }
  85.    cout<<"\nFin de lista\n\n";
  86.     }
  87.  
  88. void nodo::void borrar_lista(nodo* lista)
  89.     {
  90.     nodo *borra;
  91.  
  92.     borra = lista;
  93.     while(borra)
  94.         {
  95.         lista = lista->sig;
  96.         free(borra);
  97.         borra = lista;
  98.         }
  99.     }
  100.  
  101. void nodo::void menu(void)
  102.     {
  103.  
  104.      cout<<"\n\nLista_Practica_3             3CM7:\n\n";
  105.      cout<<"1) Ingresar dato\n";
  106.     cout<<"2) Mostrar lista\n";
  107.    cout<<"3) Borrar lista\n";
  108.     cout<<"4) Borrar por nombre\n";
  109.      cout<<"5) Borrar por boleta\n";
  110.      cout<<"6) Buscar en lista\n";
  111.      cout<<"7) Ordenar lista\n";
  112.     cout<<"0)SALIR\n\n";
  113.  
  114.  
  115.     }
  116.  
  117. void nodo ::borrar_nodoxnombre(char *nombre, nodo* lista)
  118.      {
  119.     if(lista != NULL)
  120.         {
  121.         nodo *ptraux;
  122.         nodo *ptranterior = NULL;
  123.         int cont;
  124.  
  125.         ptraux = lista;
  126.         while(ptraux != NULL && (strcmp(ptraux->nombre, nombre) != 0))
  127.             {
  128.             ptranterior = ptraux;
  129.             ptraux = ptraux->sig;
  130.             cont++;
  131.             }
  132.         if(cont == 1 && ptraux->sig == NULL)
  133.             {
  134.             free(ptraux);
  135.             lista = NULL;
  136.             }
  137.         if(ptraux == NULL)
  138.             cout<<"\n\nNo se encontro una persona con ese nombre\n\n";
  139.         else if(ptranterior == NULL)
  140.             {
  141.             lista = lista->sig;
  142.             free(ptraux);
  143.             }
  144.         else
  145.             {
  146.             ptranterior->sig = ptraux->sig;
  147.             free(ptraux);
  148.             }
  149.         }
  150.  
  151.     return lista;
  152.     }
  153.  
  154. void nodo:: borrar_nodoxnota(int boleta, nodo* lista)
  155.         {
  156.     if(lista != NULL)
  157.         {
  158.         nodo *ptraux;
  159.         nodo *ptranterior = NULL;
  160.         int cont = 0;
  161.  
  162.         ptraux = lista;
  163.         while(ptraux != NULL && ptraux->nota != boleta)
  164.             {
  165.             ptranterior = ptraux;
  166.             ptraux = ptraux->sig;
  167.             cont++;
  168.             }
  169.         if(cont == 1 && ptraux->sig == NULL)
  170.             {
  171.             free(ptraux);
  172.             lista = NULL;
  173.             }
  174.         if(ptraux == NULL)
  175.             cout<<"\n\nNo se encontro una persona con ese numero de boleta\n\n";
  176.         else if(ptranterior == NULL)
  177.             {
  178.             lista = lista->sig;
  179.             free(ptraux);
  180.             }
  181.         else
  182.             {
  183.             ptranterior->sig = ptraux->sig;
  184.             free(ptraux);
  185.             }
  186.         }
  187.  
  188.     return lista;
  189.     }
  190.  
  191. void nodo:: buscar_nodo(nodo* lista, char *caracter)
  192.     {
  193.     nodo *aux;
  194.     char noabuscar[20];
  195.     char a[] = "a";
  196.     char b[] = "b";
  197.     int nabuscar;
  198.     if(lista != NULL)
  199.         {
  200.         if(strcmp(caracter,a) == 0)
  201.             {
  202.             cout<<"\n\nIngrese el nombre a buscar: ";
  203.             fflush(stdin);
  204.             fgets(noabuscar, 20, stdin);
  205.             aux = lista;
  206.             while(aux != NULL)
  207.                 {
  208.                 if(strcmp(aux->nombre, noabuscar) == 0)
  209.                     return aux;
  210.                 aux = aux->sig;
  211.                 }
  212.             return aux;
  213.             }
  214.         else if(strcmp(caracter,b) == 0)
  215.             {
  216.             cout<<"\n\nIngrese la nota a buscar: ";
  217.             fflush(stdin);
  218.             cout<<nabuscar;
  219.             aux = lista;
  220.             while(aux != NULL)
  221.                 {
  222.                 if(aux->nota == nabuscar)
  223.                     return aux;
  224.                 aux = aux->sig;
  225.                 }
  226.             return aux;
  227.             }
  228.          else
  229.             {
  230.             cout<<"\n\nOpcion no valida\n\n";
  231.             return 0;
  232.             }
  233.         }
  234.     }
  235.  
  236. void nodo::void mostrar_nodo(nodo* elemento)
  237.     {
  238.     nodo* nodoencontrado;
  239.     nodoencontrado = elemento;
  240.     if(nodoencontrado == NULL)
  241.        cout<<"\n\nNo se obtuvieron resultados\n\n";
  242.  
  243.  
  244.     else
  245.         {
  246.         cout<<"\n\nNodo encontrado:\n\n";
  247.         cout<<"\nNompre y apellido:"<< nodoencontrado->nombre;
  248.         cout<<"\nBoleta:  "<< nodoencontrado->nota;
  249.  
  250.         }
  251.     }
  252. /*    \n\n\n\n   */
  253.  
  254. void nodo :: void ordenar_lista(nodo* lista)
  255.     {
  256.     nodo *anterior;
  257.     nodo *siguiente;
  258.     nodo temp;
  259.  
  260.     anterior = lista;
  261.  
  262.     while(anterior->sig != NULL)
  263.         {
  264.         siguiente = anterior->sig;
  265.  
  266.         while(siguiente != NULL)
  267.             {
  268.             if(strcmp(anterior->nombre, siguiente->nombre) > 0)
  269.                 {
  270.                 strcpy(temp.nombre, siguiente->nombre);
  271.                 temp.nota = siguiente->nota;
  272.                 strcpy(siguiente->nombre, anterior->nombre);
  273.                 siguiente->nota = anterior->nota;
  274.                 strcpy(anterior->nombre, temp.nombre);
  275.                 anterior->nota = temp.nota;
  276.                 }
  277.             siguiente = siguiente->sig;
  278.             }
  279.         anterior = anterior->sig;
  280.         siguiente = anterior->sig;
  281.         }
  282. cout<<"\n\nLista ordenada\n\n";
  283.  
  284.  
  285.     }
  286.  
  287.     int main(int argc, char** argv)
  288.     {
  289.          Listas list;
  290.     nodo *inicio;
  291.     nodo *nodobuscado;
  292.     char nom[20];
  293.     char nomaborrar[20];
  294.     int nborrar;
  295.     int nota, i, cant, op;
  296.     char s[2];
  297.  
  298.     inicio = list.crear_lista(inicio);
  299.  
  300.     menu();
  301.     cin>>op;
  302.     while(op != 0)
  303.         {
  304.         switch(op)
  305.             {
  306.             case 1: cout<<"\n\nQue cantidad de datos ingresara: ";
  307.                     cin>>cant;
  308.                     cout<<"\n\n";
  309.  
  310.                     cout<<"Ingreso de datos:\n\n";
  311.                     for(i=0 ; i < cant ; i++)
  312.                         {
  313.                         cout<<"Nombre y apellido: ";
  314.                         fflush(stdin);
  315.                         fgets(nom, 80, stdin);
  316.                        cout<<"\nBoleta:      ";
  317.                         fflush(stdin);
  318.                         cin>>nota;
  319.                         cout<<"\n\n";
  320.                         inicio = list.ingresar_dato(nom, nota, inicio);
  321.                         }
  322.                     break;
  323.  
  324.             case 2: list.mostrar_lista(inicio);
  325.                     break;
  326.  
  327.             case 3: list.borrar_lista(inicio);
  328.                     free(inicio);
  329.                     cout<<"\n\nLista Borrada\n\n";
  330.                     inicio = NULL;
  331.                     break;
  332.  
  333.             case 4: cout<<"\n\nIngrese el nombre a borrar\n\n";
  334.                     fflush(stdin);
  335.                     fgets(nomaborrar, 80, stdin);
  336.                     inicio = list.borrar_nodoxnombre(nomaborrar, inicio);
  337.                     break;
  338.  
  339.             case 5: cout<<"\n\nIngrese la nota a borrar\n\n";
  340.                     fflush(stdin);
  341.                     cin>>nborrar;
  342.                     inicio = list.borrar_nodoxnota(nborrar, inicio);
  343.                     break;
  344.  
  345.             case 6: cout<<"\n\n('a') para buscar por nombre || ('b') para buscar por nota\n\n";
  346.                     fflush(stdin);
  347.                     fgets(s, 2, stdin);
  348.                     list.nodobuscado = buscar_nodo(inicio, s);
  349.                     list.mostrar_nodo(nodobuscado);
  350.                     break;
  351.  
  352.             case 7: list.ordenar_lista(inicio);
  353.                     break;
  354.  
  355.  
  356.  
  357.             default: cout<<"\n\n \\Opcion incorrecta --- Intentelo nuevamente// \n\n";
  358.             }
  359.              getch();
  360.             system("cls");
  361.         menu();
  362.         cin>>op;
  363.         }
  364.  
  365.  
  366.     return (EXIT_SUCCESS);
  367.     }

Etiquetas: char, clases, int, memoria, numero, programa, programacion, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:04.