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

[SOLUCIONADO] funciones y estructuras

Estas en el tema de funciones y estructuras en el foro de C/C++ en Foros del Web. que me hace falta para que me funcionen los modulos @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #include <iostream.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include ...
  #1 (permalink)  
Antiguo 28/09/2014, 16:59
 
Fecha de Ingreso: septiembre-2014
Mensajes: 5
Antigüedad: 10 años, 1 mes
Puntos: 0
Mensaje funciones y estructuras

que me hace falta para que me funcionen los modulos

Código C++:
Ver original
  1. #include <iostream.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <conio.h>
  6.  
  7. # define x 10
  8.  
  9. struct fecha{
  10.     int dd;
  11.     int mm;
  12.     int aa;
  13.     };
  14.  
  15. struct domicilio{
  16.     char col [30];
  17.     char calle[20];
  18.     int num;
  19.     };
  20.  
  21. struct datosmedicos {
  22.     char cm [5];
  23.     char nm [60];
  24.     char esp [40];
  25.     fecha fi;
  26.     int statusm; //estado
  27.     };
  28.  
  29. struct datospaciente {
  30.     char cp [5];
  31.     char gnro;
  32.     char np [60];
  33.     int statusp;
  34.     fecha fi;
  35.     domicilio direcc;
  36.  
  37.     };
  38.  
  39.  
  40. void encabezado (void);
  41. void menu (void);
  42. void menumedicos (void);
  43. void moduloaltasm ( struct datosmedicos dms[ ], int& j );
  44. void modulobajasm(struct datosmedicos dms[x]);
  45. void moduloconsultasm(struct datosmedicos dms[ ]);
  46. void moduloreportesm(struct datosmedicos dms[ ], int j);
  47.  
  48.  
  49. void error (void);
  50.  
  51.  
  52.  
  53.  
  54. main(){
  55.  
  56.  
  57.         menu();
  58.  
  59.         return 0;
  60.         }
  61.  
  62. //*********************************************************************************************************************************************
  63. void encabezado (void){
  64.  
  65.         clrscr();
  66.         gotoxy(24,2);
  67.         cout<<"HOSPITAL LOS ANGELES S.A DE C.V.";
  68.         gotoxy(25.5,3);
  69.         cout<<"Domicilio conocido sin numero";
  70.  
  71. return;
  72. }
  73.  
  74. //***************************************************************************
  75. int j=0,k;
  76. void menu (void){
  77.  
  78.  
  79. char op;
  80.  
  81.         encabezado();
  82.         gotoxy(27,5);
  83.         cout<<"M E N U  P R I N C I P A L";
  84.         gotoxy(27.5,7);
  85.         cout<< "Sistema Computacional ABC"<<endl<<endl;
  86.         cout<< "(M) edicos"<<endl<<endl;
  87.         cout<< "(P) acientes"<<endl<<endl;
  88.         cout<< "(S) alir"<<endl<<endl;
  89.         gotoxy(29.5,15);
  90.         cout<< "Digita tu Seleccion: ";
  91.         fflush(stdin);
  92.         cin>>op;
  93.  
  94.         switch (op)
  95.                 {
  96.                 case 77:   //M, m (Medicos)
  97.                 case 109:
  98.                 menumedicos();
  99.                 break;
  100.  
  101.                 case 80:   //P, p (Pacientes)
  102.                 case 112:
  103.                
  104.                 break;
  105.  
  106.                 case 'S':
  107.                 case 's':
  108.                 clrscr();
  109.                 gotoxy (33,10);
  110.                 cout<<"Hasta Luego...";
  111.                 break;
  112.  
  113.                 default:
  114.                 error();
  115.                 menu();
  116.                 break;
  117.  
  118.                 }
  119.  
  120.  
  121. return;
  122. }
  123.  
  124. //*****************************************************************************
  125.  
  126. void menumedicos (void){
  127.  
  128. datosmedicos dms[x]; //variable arreglo de estructuras
  129. int j=0;
  130.  
  131. char opm;
  132.  
  133.         encabezado();
  134.                     gotoxy(29,5);
  135.                     cout<<"M E N U  M E D I C O S"<<endl<<endl;
  136.                     cout<< "(A) ltas"<<endl<<endl;
  137.                     cout<< "(B) ajas"<<endl<<endl;
  138.                     cout<< "(C) onsultas"<<endl<<endl;
  139.                     cout<< "(R) eportes"<<endl<<endl;
  140.                     cout<< "(M) odificaciones"<<endl<<endl;
  141.                     cout<< "(V) olver"<<endl<<endl;
  142.                     gotoxy(29.5,19);
  143.                     cout<< "Digita tu Seleccion: ";
  144.                     fflush(stdin);
  145.                     cin>>opm;
  146.  
  147.                     switch (opm)
  148.                         {
  149.                         case 65:  //A,a *Altas
  150.                         case 97:
  151.                         moduloaltasm( dms, j );
  152.  
  153.                         break;
  154.  
  155.                   case 66:  //B,b *Bajas
  156.                         case 98:
  157.                         modulobajasm(dms);
  158.  
  159.                         break;
  160.  
  161.                   case 69:  //C,c *consultas
  162.                         case 99:
  163.                         moduloconsultasm(dms);
  164.  
  165.                         break;
  166.  
  167.                   case 82:  //R,r *Reportes
  168.                         case 114:
  169.                         moduloreportesm(dms,j);
  170.  
  171.                         break;
  172.  
  173.                   case 77:  //M,m *Modificaciones
  174.                         case 109:
  175.                
  176.  
  177.                         break;
  178.  
  179.                 case 86:  // V,v *Volver
  180.                         case 118:
  181.                         menu();
  182.                         break;
  183.  
  184.                         default:
  185.                         error();
  186.                         menumedicos();
  187.                         break;
  188.                         }
  189. return;
  190. }
  191.  
  192. //****************************************************************************
  193. void moduloaltasm ( struct datosmedicos dms[x],int& ){
  194. int j=0;
  195. char resp;
  196.  
  197.                     do
  198.                             {
  199.                                 encabezado();
  200.                                 gotoxy(30,5);
  201.                                 cout<<"MODULO ALTAS MEDICOS"<<endl<<endl;
  202.                                 cout<<"Escribe el Codigo de Referencia: ";
  203.                                 fflush(stdin);gets(dms[j].cm);
  204.                                 cout<<"Escribe el nombre: ";
  205.                                 fflush (stdin);gets (dms[j].nm);
  206.                                 cout<<"Escribe su Especialidad: ";
  207.                                 fflush(stdin);gets(dms[j].esp);
  208.                                 cout<<endl<<"Escribe la fecha de ingreso: "<<endl<<"Dia:  ";
  209.                                 cin>>dms[j].fi.dd;
  210.                                 cout<<"Mes:  ";
  211.                                 cin>>dms[j].fi.mm;
  212.                                 cout<<"Año:  ";
  213.                                 cin>>dms[j].fi.aa;
  214.  
  215.                                 dms[j].statusm = 1;
  216.  
  217.  
  218.                                 cout<<endl<<endl<<" Deseas Registrar Otro Medico [S/N]?: ";
  219.                                 fflush(stdin);//limpia buffer
  220.                                 cin>>resp;
  221.                                 clrscr();
  222.                                 j++;
  223.                                 }while(resp!= 78 && resp!= 110);
  224.  
  225.                                 menumedicos();
  226.  
  227. return;
  228. }
  229.  
  230. //*****************************************************************************
  231. void modulobajasm(struct datosmedicos dms[x] ){
  232. int k,encontrado;
  233. char cmb[5],rbm;
  234.  
  235.                                 encabezado();
  236.                                 gotoxy(30,5);
  237.                                 cout<<"MODULO BAJAS MEDICOS"<<endl<<endl;
  238.  
  239.                                     cout<<"Escribe el codigo del medico a dar de baja: ";
  240.                                     fflush(stdin);
  241.                                     gets(cmb);
  242.  
  243.                                     k = 0;
  244.                                     encontrado = 0; //VARIABLE BANDERA
  245.  
  246.                                     do {
  247.                                         if( !encontrado && !strcmp( cmb, dms[ k ].cm )) {
  248.                                         cout<<endl<<"Se encontro lo siguiente: "<<endl;
  249.  
  250.                                         cout<<"Codigo de referencia: "<<dms[k].cm ;
  251.                                         cout<<endl<<"Nombre: "<<dms[k].nm;
  252.                                         cout<<endl<<"Medico especialista en: "<<dms[k].esp;
  253.                                         cout<<endl<<"Fecha de Ingreso: ";
  254.                                         cout<<dms[k].fi.dd<<" / "<<dms[k].fi.mm<<" / "<<dms[k].fi.aa;
  255.                                         cout<<"\nstatus: " <<dms[k].statusm<<endl;
  256.                                         cout<<endl;
  257.  
  258.                                         encontrado = 1;
  259.                                         cout<<"Desea dar de baja el registro [ S/N ]?: ";
  260.                                         fflush(stdin);
  261.                                         cin>>rbm;
  262.  
  263.                                             if ( rbm == 83 || rbm == 115){
  264.                                             dms[ k ].statusm = 0;
  265.                                             cout<<endl<<"El registro fue dado de baja exitosamente... "<<endl;
  266.                                             }
  267.                                         }
  268.                                         k++;
  269.                                 }while( !encontrado && k<j );
  270.  
  271.  
  272.  
  273.                                         if( !encontrado ) {
  274.                                         cout<<endl<<"No se encontro el registro...! ";
  275.                                         cout<<endl<<endl<<"Presiona una tecla para regresar...";
  276.                                         getch( );
  277.                                                 }
  278.                                     else{
  279.                                         cout<<endl<<endl<<"Presiona una tecla para regresar...";
  280.                                         getch();
  281.                                         }
  282.                             menumedicos();
  283. return;
  284. }
  285. //****************************************************************************
  286. void moduloconsultasm(struct datosmedicos dms[ ]){
  287.  
  288. int t,encontrado2;
  289. char cmc[5];
  290.                                     encabezado();
  291.                                     gotoxy(26,5);
  292.                                     cout<<"MODULO DE CONSULTAS"<<endl<<endl;
  293.                                     cout<<"Escribe el codigo de referencia a consultar: ";
  294.                                     fflush(stdin);gets(cmc);
  295.  
  296.                                     t = 0;
  297.                                     encontrado2 = 0;
  298.                                     do {
  299.                                         if( !encontrado2 && !strcmp( cmc, dms[ t ].cm )) {
  300.                                         cout<<endl<<"Se encontro lo siguiente: "<<endl;
  301.  
  302.                                         cout<<"Codigo de referencia: "<<dms[t].cm ;
  303.                                         cout<<endl<<"Nombre: "<<dms[t].nm;
  304.                                         cout<<endl<<"Medico especialista en: "<<dms[t].esp;
  305.                                         cout<<endl<<"Fecha de Ingreso: ";
  306.                                         cout<<dms[t].fi.dd<<" / "<<dms[t].fi.mm<<" / "<<dms[t].fi.aa;
  307.                                         cout<<"\nstatus: " <<dms[t].statusm<<endl;
  308.                                         cout<<endl;
  309.                                         encontrado2 = 1;
  310.                                         cout<<endl<<endl<<"Presione cualquier tecla para regresar...";
  311.                                         getch();
  312.                                         }
  313.                                         t++;
  314.  
  315.                                         }while( !encontrado2 && t<j );
  316.  
  317.                                         if( !encontrado2 ) {
  318.                                         cout<<endl<<endl<<"No se encontro el registro...! "<<endl;
  319.                                                          cout<<endl<<"Presione cualquier tecla para regresar...";
  320.                                         getch( );
  321.                                             }
  322.                                         menumedicos();
  323. return;
  324. }
  325.  
  326.  
  327. //****************************************************************************
  328. void error (void){
  329.  
  330.     encabezado();
  331.             gotoxy(28.5,8);
  332.             cout<<"Seleccion no Valida...!"<<endl<<endl;
  333.             cout<<endl<<endl<<"Presiona una tecla para regresar...";
  334.             getch();
  335.  
  336.     return;
  337.     }
  338. //****************************************************************************
  339. void moduloreportesm(struct datosmedicos dms[ ],int j){
  340.  
  341. int i;
  342.                         encabezado();
  343.                                 gotoxy(27,5);
  344.                                 cout<<"MODULO REPORTES DE MEDICOS"<<endl<<endl;
  345.                                 cout<<"Se tiene la siguiente informacion reportada: "<<endl<<endl;
  346.  
  347.                                 for(i=0;i<j;i++)
  348.                                     {
  349.                                     cout<<"Codigo de referencia: "<<dms[i].cm ;
  350.                                     cout<<endl<<"Nombre: "<<dms[i].nm;
  351.                                     cout<<endl<<"Medico especialista en: "<<dms[i].esp;
  352.                                     cout<<endl<<"Fecha de Ingreso: ";
  353.                                     cout<<dms[i].fi.dd<<" / "<<dms[i].fi.mm<<" / "<<dms[i].fi.aa;
  354.                                     cout<<"\nstatus: " <<dms[i].statusm<<endl;
  355.                                     cout<<endl;
  356.                                     cout<<"------------------------------------------------------------------------"<<endl;
  357.  
  358.                                     }
  359.                                     cout<<endl<<"FIN DEL REPORTE";
  360.                                     cout<<endl<<endl<<"Presione cualquier tecla para regresar...";
  361.                                     getch();
  362.                                     menumedicos();
  363. return;
  364. }
  365.  
  366.  
  367.  
  368. //*

Última edición por juancarlos3; 28/09/2014 a las 17:09
  #2 (permalink)  
Antiguo 29/09/2014, 00:58
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: funciones y estructuras

Buenas,

Te faltan el hola, el porfavor y el gracias, asi como indicar concretamente en que parte de tu programa tienes problemas.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 29/09/2014, 08:12
 
Fecha de Ingreso: septiembre-2014
Mensajes: 5
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: funciones y estructuras

Hola si perdón mi problema es que no e podido (no se) como mandar llamar a la estructura si me pudieran orientar en como es que lo puedo hacer

de ante mano gracias.
  #4 (permalink)  
Antiguo 29/09/2014, 20:11
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: funciones y estructuras

para llamar una estructura debes crear un objeto de ella y trabajas con su objeto no con la estructura en si.
por ejemplo la estructura fecha:
Código C++:
Ver original
  1. struct fecha{
  2.     int dd;
  3.     int mm;
  4.     int aa;
  5. };

le debes crear su objeto:
Código C++:
Ver original
  1. struct fecha{
  2.     int dd;
  3.     int mm;
  4.     int aa;
  5. };
  6.  
  7. int main (){
  8.    struct fecha mi_fecha;
  9.    
  10.    return 0;
  11. }

Y luego se accede y se modifica así:
Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct fecha {
  5.     int dd;
  6.     int mm;
  7.     int aa;
  8. };
  9.  
  10. int main () {
  11.     //creas un objeto del tipo fecha(estructura)
  12.     struct fecha mi_fecha;
  13.    
  14.     //Para acceder a sus atributos(variables) se hace de la siguiente forma:
  15.     mi_fecha.dd = 17;
  16.     mi_fecha.mm = 11;
  17.     mi_fecha.aa = 2014;
  18.    
  19.     cout << mi_fecha.dd << "/" << mi_fecha.mm << "/" << mi_fecha.aa << endl;
  20.  
  21.     return 0;
  22. }

Es esto lo que quieres?

Te recomiendo que veas esos vídeos:http://v1.minidosis.org/C++/Tuplas/

Y ademas para pasar tablas ya deberías estas afinado en punteros, ya que si pasas una estructura a una función por valor te va costar mucho después guardarla en su lugar.
Sin hablar que pasar datos por valor estas haciendo copias del mismo en mas de un lugar de la memoria. Para eso mejor usar los punteros o referencias que son súper útil en c++.
  #5 (permalink)  
Antiguo 30/09/2014, 09:50
 
Fecha de Ingreso: septiembre-2014
Mensajes: 5
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: funciones y estructuras

hola vangodp gracias esta muy claro tu ejemplo si no es mucho pedir me podrías dar un ejemplo como seria por referencia por que estoy muy confundido en este tema de ante mano gracias.
  #6 (permalink)  
Antiguo 30/09/2014, 19:47
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Pasar estructura por referencia, puntero y por valor en C++

Doy por echo que algo de punteros ya sabes.
para c++ y solo c++, cuando se refiere a referencia no es lo mismo que puntero.

Primero debo explicar que es referencia y que es puntero.

una referencia se crea asi:
int &ref = variable;

y un puntero se crea asi:
int *ptr = &variable;

Pero el puntero tambien lo puedes crear asi:
int *ptr = NULL;
ptr = &variable;


Sin embargo la referencia no puedes hacer:
int &ref = NULL;
ref = variable;


...o:
int &ref = NULL;
ref = &variable;

Nada de eso... solo puedes hacer lo primero:
int &ref = variable;

Tener claro 2 cosas. un puntero no es mas que una variable ¿ok? Es una variable que apunta a una dirección de memoria. Si es variable podemos cambiar a la dirección a la que apunta ¿Correcto?
Sin embargo las referencia no puedes cambiar a lo que apunta. Se define y se inicializa al mismo tiempo, o sea:
1º un puntero es una variable que apunta a otra variable.
2º una referencia es parecido a un puntero pero con la diferencia que no puedes cambiar lo que apunta, y por ese motivo se debe definir a lo que apunta a la hora de criarlo.

Esos son los 2 conceptos que debes acordarte siempre para que no te duela la cabeza ;).
Ahora veamos un par de ejemplos de como pasar una estructura con punteros y como pasarla con referencia.

1ºPuntero.
Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //esta esra nuestra estructura de prueba. Simplemente va guardar una frase o palabra que la distinga de las demas ;)
  5. struct foo{
  6.     string frase;
  7. };
  8.  
  9. //esta es la funcion que usaremos para pasar la estructura por punteros
  10. void bar(struct foo *foobar ){
  11.     //recibimos un puntero que apunta donde esta la estructura en memoria
  12.     cout << "Recibimos en la funcion bar: "<< foobar->frase << endl << endl; // observacion: si paso la estructura por puntero accedo a su variable miembro interna con el operador -> en ves de punto(lo entenderas cuando veas el puntero this de momento no te preucupes entenderlo si aun no llegaste en THIS POINTER).
  13.     //ahora vamos a modificar lo que tiene para provar que estoy modificando el original y no una copia como lo que acontece cuando pasamos una estructura por valor
  14.     foobar->frase = "\"Dale like y suscribete a mi canal XDD\"";
  15.     //al final de todos los ejemplos te dejo un ejemplo al que demostro que si pasas por valor una estructura, estas pasando una copia.
  16.     cout << "La estructura ahora contiene: "<< foobar->frase << endl;
  17.     cout << "Pulse enter para salir de la funcion bar()";
  18.     cin.ignore();
  19. }
  20.  
  21.  
  22. int main () {
  23.     //creamos un objeto de la estructura foo y lo llamamos f
  24.     struct foo f;
  25.    
  26.     //ponemos algo en esa estructura para que la distinga de las demas
  27.     f.frase = "Hola mundo";
  28.    
  29.     //pasamos la estructura a la funcion
  30.     bar(&f);
  31.    
  32.     //de vuelta a main
  33.     cout << "\nYa estamos de vuelta en main! Pulse enter para seguir" << endl;
  34.     cin.ignore();
  35.    
  36.     //Si la frase de la estructura f ha sido modificada realmente imprimira lo que la hemos metido en la funcion bar(), si no es asi imprimirá "hola mundo"
  37.     cout << f.frase << endl;
  38.    
  39.     //si a esta altura ha imprimido "Hola mundo" nuestro trabajo ha salido malo pero si imprimio "Dale like y suscribete a mi canal XDD" pues eso XD "Dale like y suscribete a mi canal XDD"
  40.    
  41.     return 0;
  42. }

2º Referencia
Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //esta esra nuestra estructura de prueba. Simplemente va guardar una frase o palabra que la distinga de las demas ;)
  5. struct foo{
  6.     string frase;
  7. };
  8.  
  9. //esta es la funcion que usaremos para pasar la estructura por referencia
  10. void bar(struct foo &foobar ){ //notese que aqui uso el operador & a la hora de declarar y no * como en los punteros. foobar esta "vinculado" con la estructura f de main y no se puede reasignar otra estructura como en los punteros
  11.    
  12.     //recibimos una referencia a la direccion de la estructura(los cambios se hacen en la misma estructura como los punteros)
  13.     cout << "Recibimos en la funcion bar: "<< foobar.frase << endl << endl; // observacion: no uso -> sino punto normal ;)
  14.    
  15.     //ahora vamos a modificar lo que tiene para provar que estoy modificando el original y no una copia como lo que acontece cuando pasamos una estructura por valor
  16.     foobar.frase = "\"Dale like y suscribete a mi canal XDD\"";
  17.    
  18.     //al final de todos los ejemplos te dejo un ejemplo al que demostro que si pasas por valor una estructura, estas pasando una copia.
  19.     cout << "La estructura ahora contiene: "<< foobar.frase << endl;
  20.    
  21.     cout << "Pulse enter para salir de la funcion bar()";
  22.     cin.ignore();
  23. }
  24.  
  25.  
  26. int main () {
  27.     //creamos un objeto de la estructura foo y lo llamamos f
  28.     struct foo f;
  29.    
  30.     //ponemos algo en esa estructura para que la distinga de las demas
  31.     f.frase = "Hola mundo";
  32.    
  33.     //pasamos la estructura a la funcion (por referencia) NOTA: no debo poner el operador & delante como hago con punteros, la referencia ya espera la direccion asi que no tengo por que poner & ;)
  34.     bar(f);
  35.    
  36.     //de vuelta a main
  37.     cout << "\nYa estamos de vuelta en main! Pulse enter para seguir" << endl;
  38.     cin.ignore();
  39.    
  40.     //Si la frase de la estructura f ha sido modificada realmente imprimira lo que la hemos metido en la funcion bar(), si no es asi imprimirá "hola mundo"
  41.     cout << f.frase << endl;
  42.    
  43.     //si a esta altura ha imprimido "Hola mundo" nuestro trabajo ha salido malo, pero si imprimio "Dale like y suscribete a mi canal XDD" pues eso XD "Dale like y suscribete a mi canal XDD"
  44.    
  45.     return 0;
  46. }

3º paso por valor
"paso de copias" Nada recomendable para estructuras grandes que te pueden llenar rápidamente la memoria.

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //esta esra nuestra estructura de prueba. Simplemente va guardar una frase o palabra que la distinga de las demas ;)
  5. struct foo{
  6.     string frase;
  7. };
  8.  
  9. //esta es la funcion que usaremos para pasar la estructura por valor
  10. void bar(struct foo foobar){
  11.    
  12.     //recibimos una copia, realmente tiene lo mismo que la estructura f de main pero no es ella
  13.     cout << "Recibimos en la funcion bar: "<< foobar.frase << endl << endl; // observacion: no uso -> sino punto normal ;)
  14.    
  15.     //ahora vamos a modificar la copia no la autentica, ya lo demostrare
  16.     foobar.frase = "\"Dale like y suscribete a mi canal XDD\"";
  17.    
  18.     cout << "La estructura de copia contiene: "<< foobar.frase << endl;
  19.    
  20.     cout << "Pulse enter para salir de la funcion bar(). \nEso no producira ningun cambio en la estructura original.";
  21.     cin.ignore();
  22.     //cuando salgamos de la funcion bar la estructura de copia se destruira y la autentica seguirá intacta.
  23. }
  24.  
  25.  
  26. int main () {
  27.     //creamos un objeto de la estructura foo y lo llamamos f
  28.     struct foo f;
  29.    
  30.     //ponemos algo en esa estructura para que la distinga de las demas
  31.     f.frase = "Hola mundo";
  32.    
  33.     //pasamos la estructura a la funcion (por valor) NOTA: lo que va recibir la funcion foo es una copia de la autentica funcion, los cambios realmente no se van a producir en la autentica sino en la copia.
  34.     bar(f);
  35.    
  36.     //de vuelta a main
  37.     cout << "\nYa estamos de vuelta en main! Pulse enter para seguir" << endl;
  38.     cin.ignore();
  39.    
  40.     //Si la frase de la estructura f ha sido modificada realmente imprimira lo que la hemos metido en la funcion bar(), si no es asi imprimirá "hola mundo"
  41.     cout << f.frase << endl;
  42.    
  43.     //si a esta altura ha imprimido "Hola mundo" es que los cambios en la funcion bar no surten efectos en la estructura original. Si imprime"Dale like y suscribete a mi canal XDD" es que la estariamos modificando la original.
  44.    
  45.     return 0;
  46. }

Por ultimo dejo un ejemplo de como lo guardamos la estructura de copia en la original.
Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //esta esra nuestra estructura de prueba. Simplemente va guardar una frase o palabra que la distinga de las demas ;)
  5. struct foo{
  6.     string frase;
  7. };
  8.  
  9. //notese que el tipo de retorno de la funcion es el tipo de la funcion foo:
  10. foo bar(struct foo foobar){  //retornamos una estructura tipo foo ;)
  11.     foobar.frase = "\"Dale like y suscribete a mi canal XDD\""; //modificamos la copia
  12.     return foobar; //retornamos la copia. Debemos guardarla sino se perdera al salir de la funcion bar() y no tendria sentido la funcion en dicho caso
  13. }
  14.  
  15.  
  16. int main () {
  17.     struct foo f;
  18.    
  19.     f.frase = "Hola mundo";
  20.    
  21.     f = bar(f); //guardamos la estructura que retorna la funcion bar
  22.    
  23.     cout << "\nYa estamos de vuelta en main! Pulse enter para seguir" << endl;
  24.     cin.ignore();
  25.    
  26.     //Como ahora guardamos lo que nos retorno la funcion bar imprimira lo que habia alli que es "Dale like y suscribete a mi canal XDD" y no "Hola mundo"
  27.     cout << f.frase << endl;
  28.    
  29.     return 0;
  30. }

Bueno... eso es todo.
Aprenda todo sobre punteros, que no te quede dudas.
Si quieres llegar a ser un buen programador, los punteros son esenciales. Y es por ese motivo que todos se tiran a java a bandadas jajaja ya que según tengo entendido java no necesitas trabajar con ellos aun que si me parece que también se puede o yo que se jaja.

continua abajo jaja...
  #7 (permalink)  
Antiguo 30/09/2014, 19:48
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: funciones y estructuras

....
Pero eso es lo que pasa... en c++ no esta tu mama para ayudarte como dijo pau en el vídeo, todo el trabajo lo haces tu y por eso el lenguaje es potente por que puedes hacer lo que quieras con eso y no que un framework te ponga trabas.

En C++ las estructuras ya son un paso previo a las funciones.
Las estructuras se parecen a clases pero con todos sus atributos y métodos de forma publica.
Las clases se deben restringir el acceso directo a dichas variables. A cambio debes usar funciones que modifiquen dicha variable y no modificar una variable directamente como lo haces con las estructuras.

un ejemplo de una clase con el mismo ejemplo seria:
Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class foo {
  5.     public:
  6.         void   setFrase ( string unaFrase ) { suFrase = unaFrase; }
  7.         string getFrase() { return suFrase; }
  8.         void   imprimeFrase() { cout << suFrase << endl; }
  9.     private:
  10.         string suFrase;
  11. };
  12.  
  13. int main () {
  14.     struct foo f; // creamos un objeto de la clase igual que como hacemos con la estructura
  15.     string str = "Esto es una prueba"; //eso enviaremos a la clase
  16.    
  17.     //No puedo hacer f.suFrase = "Hola"; eso me daria error. A cambio llamo sus funciones para que me hagan el trabajo "sucio" digamos XD
  18.     f.setFrase ( str ); //listo ya hemos guardado str en la frase de la clase.
  19.    
  20.     //ahora imprimimos lo que hay en la clase para ver si realmente los cambios se guardaron. Y recuerde que no puedo imprimir directamente cout<<f.sufrase<<endl; el compilador te dira que f.suFrase es privado y eso no se puede hacer ;)
  21.     //A cambio llamo una funcion que es getFrase que me la retorna para mi.
  22.    
  23.     cout << f.getFrase() << endl;
  24.    
  25.     //modificamos una vez mas la clase:
  26.     f.setFrase ( "Otra prueba" );
  27.    
  28.     //y si realmente no queremos poner el cout << f.getFrase() << endl; nada mas comodo que eso:
  29.     f.imprimeFrase();
  30.    
  31.     return 0;
  32. }

Es muy cómodo las clases cuando trabajas con cantidades de datos insanas ya que te facilitan mucho.

Al principio puede parecer que son desnecesarias por que te complican la vida demasiado pero no es así, realmente los punteros y las clases son lo mas poderoso que puedas encontrar en un lenguaje. Si los llegas a dominar seras como un Dios entro los noobs jajaj

Ya no te complico ma... me piro que tanto no me gusta escribir, y ya me agote por una semana jajaja
  #8 (permalink)  
Antiguo 01/10/2014, 11:37
 
Fecha de Ingreso: septiembre-2014
Mensajes: 5
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: funciones y estructuras

MUCHAS GRACIAS vangodp me ayudo mucho tu explicacion
  #9 (permalink)  
Antiguo 01/10/2014, 17:30
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: funciones y estructuras

No hay de que ;)
para afinarte en el tema mire los vídeos http://v1.minidosis.org/
A mi me sirvieron mucho.

Etiquetas: estructuras, referencia
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 07:42.