domingo, 27 de noviembre de 2011

Paso de Estructuras a Funciones en C++

Para pasar datos tipo struct a funciones en C++ es posible hacerlo de dos diferentes maneras:

1) Invocando la función con el nombre del tipo creado como struct. La función invocada recibe la dirección de la estructura y usa un alias para referirse a ella.

2) Invocando la función con el nombre del tipo creado como struct. La función invocada recibe como parámetro un dato del tipo creado como struct.

Pasar estructuras a funciones es muy parecido a pasar un arreglo.

En el siguiente ejemplo se usan los dos casos mencionados.

 #include <iostream>
 using namespace::std;

 struct Datos
 {
 // Estos datos no se pueden 
 // inicializar
 int anio;
 int mes;
 int dia;
 };

 // Prototipos de funcion
 void Recibe( Datos &s);
 void Imprime1( Datos &t);
 void Imprime2( Datos Nacimiento);

 /////////////////////////////////////////////////////////////
 // MAIN
 /////////////////////////////////////////////////////////////

 int main()
 {      // Abre main
 // Declaracion de Elisa como tipo Datos
 Datos Elisa;

 // Se reciben los datos de Elisa mediante la funcion Recibe
 Recibe(Elisa);

 // Se imprimen los datos de Elisa desde la funcion Imprime1
 cout <<"\nLa fecha de nacimiento de Elisa desde Imprime1: "<<endl;
 Imprime1(Elisa);
 // Se imprimen los datos de Elisa desde la funcion Imprime2
 cout <<"\nLa fecha de nacimiento de Elisa desde Imprime2:" <<endl;
 Imprime2(Elisa);
 // Se imprimen los datos de Elisa desde main 
 cout <<"\nLa fecha de nacimiento de Elisa desde main." <<endl;
 cout <<Elisa.dia<<"/" <<Elisa.mes<< "/" << Elisa.anio << endl << endl; 

 return 0;
 }      // Cierra main

 /////////////////////////////////////////////////////////////////
 // RECIBE
 ////////////////////////////////////////////////////////////////

 void Recibe( Datos &s)
 {      // Abre funcion Recibe
 cout << "\nIntroduzca el anio de nacimiento: " <<endl;
 cin >> s.anio;
 cout << "\nIntroduzca el mes de nacimiento: " <<endl;
 cin >> s.mes;
 cout <<"\nIntroduzca el dia de nacimiento: " <<endl; 
 cin >> s.dia;
 }      // Cierra funcion Recibe

 ////////////////////////////////////////////////////////////////
 // IMPRIME1
 ////////////////////////////////////////////////////////////////

 void Imprime1( Datos &t)

 {    // Abre Imprime
 cout <<t.dia <<"/"<<t.mes<<"/"<<t.anio<<endl;
 return;
 }    // Cierra Imprime

 ////////////////////////////////////////////////////////////////
 // IMPRIME2
 ////////////////////////////////////////////////////////////////

 void Imprime2( Datos Nacimiento)
 { // Abre 
 cout << Nacimiento.dia <<"/" <<Nacimiento.mes<<"/"<< Nacimiento.anio << endl;
 return;
 }


Una ejecución de este programa es la siguiente:

21 comentarios:

  1. Me ha servido, gracias

    ResponderEliminar
  2. please necesito qee me ayuden hacer un programa qee lea desde el teclado un arreglo please

    ResponderEliminar
  3. Hola. Tendrías qué decir que tipo de datos quieres recibir y cual es el lenguaje en el cual lo quieres (supongo que c++). Si quieres recibir números pues te dejo este programa

    #include iostream
    using namespace::std;

    #define Tamano 10

    int main()
    { // Abre main
    int Arreglo[Tamano] = {0, 0, 0};

    for (int i = 0; i < Tamano; i++ )
    { // Abre for
    cout <<"\nPor favor introduzca un numero: "<< endl;
    cin >> Arreglo[i];
    } // Cierra for

    cout <<"\nLos numeros:"<< endl;
    for ( int j = 1; j < Tamano; j++ )
    cout <<"\t"<< Arreglo[j];

    cout << endl;
    return 0;
    } // Cierra main

    Si quieres echarle un ojo a este programa en c es un poco más ilustrativo: Kernighan-Ritchie1.17
    Esto es demasiado vago, tendrías que decirme qué quieres exactamente para poder ayudarte mejor.
    Saludos.

    ResponderEliminar
  4. ummmmm..... cuando corro el programa de la fecha de nacimiento no pausa y no sale lo que se imprime
    no crees q deberia tener un getch()?

    ResponderEliminar
  5. y tbm falta imprimir la funcion main(Datos Nacimiento)

    ResponderEliminar
  6. Sí. Mira, es cierto, necesitas ponerle getch() para que haga una pausa porque compilas con turbo C++.La razón por la que no le pongo esa función, es porque getch() no es estandar en el lenguaje, sino sólo parte de ese compilador. Yo uso g++ y ejecuto desde una consola y no tengo problema. También puedes hacer una llamada al sistema escribiendo
    system("PAUSE");
    system es una instrucción del lenguaje; PAUSE es una instrucción de windows y lo que hace es detener la ejecución hasta que le das un enter.
    Espero que te funcione el programa. Saludos.

    ResponderEliminar
  7. Podrian ayudarme a crear un programa con los siguientes datos:
    Un medico almacena informacion de sus pacientes: nombre, direccion, telefono, fecha ultima visita, si es o no privado, si tiene alergias, y un campo de observaciones.Se desea un programa con las sgts opciones:
    A.- Intr. de registros interactivamente.
    B.- Imprimir en pantalla toda la informacion del paciente
    C.- Dado un nombre de un paciente encontrar lka fecha de la ultima visita
    D.- Listar todos los pacientes con alergia
    E.-listar alfabeticamente todos los pacientes privados
    F.- Imprimir todo el listado completo de paciente

    ResponderEliminar
    Respuestas
    1. Hola, anonimo. Lamento no poder ayudarte, pero estoy bastante ocupado. Si puedo en una semana, trato de hacer algo con tu problema.
      Saludos.

      Eliminar
  8. ayuudaaa con este ejercicio porfavor.. me he quedado atascado en la utilizacion del switch para el menu!!!

    Realizar un programa que incluya: funciones, arreglos. Usted escogerá una opción entre las
    Siguientes: Panadería, Farmacia, Zapatería, Carnicería, Charcutería, Concesionaria de Vehículos.
    Una vez que haya seleccionado alguno de los anteriores desarrollará un programa que muestre un
    menú que permite ingresar elementos (como por ejemplo clientes, precios, artículo) y debe
    Permitir mostrar en pantalla los elementos de los arreglos.
    De igual forma permitirá, a través de funciones, realizar operaciones entre los valores numéricos,
    Así como también debe crear estructuras para los elementos de los arreglos que va a ingresar.
    Lo ideal es que el usuario seleccione a través del menú las operaciones a realizar

    ResponderEliminar
    Respuestas
    1. ¿Por qué no escribes el código que tienes, y así lo revisamos juntos?

      Eliminar
  9. Ayudaa, necesito que me colaboren haciendo este programa.
    elaborar un algoritmo que pida la hora militar al usuario y me la muestre en hora normal. ayuda plis

    ResponderEliminar
    Respuestas
    1. Mmmm. ¡Hola! ¿Te estarás refirendo a el programa que viene en el libro de Deitel? Aquí no tengo algo así, pero está en los libros de Deitel, cuando empieza a ver clases y objetos. No dices en qué lenguaje lo quieres, pero ese es un ejemplo de todos los libros de Deitel. Chécalos ahí, y si tienes una duda en concreto, pues me dices.
      Saludos, Lorena.

      Eliminar
  10. Que tal buenas noches, se nota que saben mucho sobre c++, pudiera pedirles un favor, estoy estudiando en linea c++ pero es algo complicado pues no es lo mismo que estudiar en un aula.
    Me pideron crear un programa, poco a poco y cree uno con el uso de for e if y una estructura, pero ahora me piden pasar ese mismo programa como funcion o funciones segun considere.

    He intentado hacerlo pero no corre el programa mi programa original es este:
    El cual debe permitir ingresar los datos de los alumnos de un aula y asignandoles una clave por default y depsues de guardar sus datos permite con un menu de opciones ingresar otro alumno o ingresar las calificaciones de dicho alumno usando la clave que se asigno antes.
    Por ultimo mostrara en pantalla los datos junto con las calificaciones y el promedio.


    #include
    #include
    #include
    #include
    #define TAM 3

    main()
    {

    struct alumnos
    {
    char nombre[20];
    char apellido[30];
    char materia[10];
    int edad;
    int prom;
    }
    alumnos [15];
    int c=1, opc;

    int calif[TAM];
    int i=1;

    int clave;

    double prom=0;
    do
    {
    system("color 9f");
    printf( "\n......:::::Bienvenido:::::......\n\n");
    printf( "Programa para ingresar datos de alumnos, y calificaciones\n\n" );
    printf( "1) Registrar un alumno \n" );
    printf( "2) Ingresar calificaciones \n" );
    printf( "3) Buscar alumnos \n" );
    printf( "4) Salir \n" );
    printf( "Elige una opcion: \n");
    scanf("%d2",&opc);
    switch (opc)
    {
    case 1:
    if (c>=15)
    printf("el registro esta lleno\n");
    else
    {
    printf("clave: %2d\n",c);
    printf("ingresa los datos del alumno\n\n");
    printf( "Por favor introduce: \n\n");
    gets( alumnos[c].nombre);
    printf("El nombre del alumno:\n");
    gets( alumnos[c].nombre);
    printf("El apellido del alumno:\n");
    gets( alumnos[c].apellido);
    printf("La materia alumno:\n");
    gets( alumnos[c].materia);
    printf("La edad:\n");
    scanf("%d", &alumnos[c].edad);
    c++;
    }


    break;
    case 2:
    for(i=0; i < TAM; i++)
    {
    printf("Proporciona la calificacion %d: ",i+1);
    scanf("%d", &calif[i]);
    prom = prom + calif[i];
    }

    prom = prom/TAM;

    printf("\nLas calificaciones ingresadas fueron: \n");
    for(i=0; i < TAM; i++)
    printf("\nCalificacion %d: %d",i+1, calif[i]);
    printf("\n\n\tPromedio = %.2f\n\n", prom);

    break;
    case 3: printf( "\n Clave: \n");
    scanf("%d",&clave);
    while (clave<=15 and clave>=1)
    {
    printf("nombre:%s\n",alumnos[clave].nombre);
    printf("apellido: %s\n",alumnos[clave].apellido);
    printf("materia: %s\n",alumnos[clave].materia);
    printf("edad: %d años\n",alumnos[clave].edad);
    printf("promedio %.2f \n",prom);

    prom=0;
    break;
    }
    break;
    case 4: printf("\n\nAdios\n");
    system("pause");
    break;
    break;
    printf("\n\n Opcion Invalida");

    }

    }while (opc!=4);

    }

    PD: me tarde algo realizandolo pues soy principiante en esto y como mencione antes se me complico algo el estudiar en linea y trabajar.

    Quisiera pedirles de favor me pudieran ayudar a saber como puedo pasarlo a funciones.

    Creo aun tiene algunos errores, pues es mi primer programa, pero creo que hace lo que queria que hiciera.

    Gracias.
    buenas noches.

    ResponderEliminar
    Respuestas
    1. //Editado y compilado y probado en Borland C++// Estudiante de Ing. Walfer Alvarez*/

      #include
      #include
      #include //funciones toupper e isalpha
      #include //funciones ofstream e ifstream
      #include //funciones como gotoxy, textcolor
      #include //para colocar pausa en ciertas partes del programa

      #define TAM 3

      main()
      {

      struct alumnos
      {
      char nombre[20];
      char apellido[30];
      char materia[10];
      int edad;
      int prom;
      }
      alumnos [15];
      int c=1, opc;

      int calif[TAM];
      int i=1;

      int clave;

      double prom=0;
      do
      {
      system("color 9f");
      printf( "\n......:::::Bienvenido:::::......\n\n");
      printf( "Programa para ingresar datos de alumnos, y calificaciones\n\n" );
      printf( "1) Registrar un alumno \n" );
      printf( "2) Ingresar calificaciones \n" );
      printf( "3) Buscar alumnos \n" );
      printf( "4) Salir \n" );
      printf( "Elige una opcion: \n");
      scanf("%d2",&opc);
      switch (opc)
      {
      case 1:
      if (c>=15)
      printf("el registro esta lleno\n");
      else
      {
      printf("clave: %2d\n",c);
      printf("ingresa los datos del alumno\n\n");
      printf( "Por favor introduce: \n\n");
      gets( alumnos[c].nombre);
      printf("El nombre del alumno:\n");
      gets( alumnos[c].nombre);
      printf("El apellido del alumno:\n");
      gets( alumnos[c].apellido);
      printf("La materia alumno:\n");
      gets( alumnos[c].materia);
      printf("La edad:\n");
      scanf("%d", &alumnos[c].edad);
      c++;
      }


      break;
      case 2:
      for(i=0; i < TAM; i++)
      {
      printf("Proporciona la calificacion %d: ",i+1);
      scanf("%d", &calif[i]);
      prom = prom + calif[i];
      }

      prom = prom/TAM;

      printf("\nLas calificaciones ingresadas fueron: \n");
      for(i=0; i < TAM; i++)
      printf("\nCalificacion %d: %d",i+1, calif[i]);
      printf("\n\n\tPromedio = %.2f\n\n", prom);

      break;
      case 3: printf( "\n Clave: \n");
      scanf("%d",&clave);
      while ( clave>=1);
      {
      printf("nombre:%s\n",alumnos[clave].nombre);
      printf("apellido: %s\n",alumnos[clave].apellido);
      printf("materia: %s\n",alumnos[clave].materia);
      printf("edad: %d años\n",alumnos[clave].edad);
      printf("promedio %.2f \n",prom);

      prom=0;
      break;
      }
      break;
      case 4: printf("\n\nAdios\n");
      system("pause");
      break;
      break;
      printf("\n\n Opcion Invalida");

      }

      }while (opc!=4);

      }

      Eliminar
  11. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
    Respuestas
    1. ¡Hola!, la verdad tu problema es un programa un poco tedioso y ahora estoy ocupado como para poder analizarlo.
      Lamento no poder ayudarte. Muchos saludos.

      Eliminar
    2. necesito ayuda tengo q entregarlo mañana temprano

      Eliminar
  12. ayuda necesito realizar este programa en devc++Un Empresario cuenta con solo 3 departamentos ventas, producción y administración. Necesita adquirir 5 nuevos empleados (1ventas, 3 producción y 1 administrativo) por lo tanto solo contratará bajo los siguientes criterios: Edad (20-60 años), que sea de alguna de las 3 áreas, que cuente con experiencia de 6 meses mínimo al área que requiere ingresar y que esté dispuesto a recibir de pago de acuerdo con:
    a) Ventas de 3,000 a 4,000 mensuales
    b) Producción 3,500 a 4,500 mensuales
    c) Administración 4,000 a 5,000 mensuales

    ResponderEliminar
  13. Escriba una aplicación que muestre en la ventana de comandos los múltiplos del entero 2 (es decir, 2, 4, 8, 16, 32, 64, etc.). Su ciclo no debe terminar (es decir, debe crear un ciclo infinito). ¿Qué ocurre cuando ejecuta éste programa?

    ResponderEliminar
  14. Van a crear un proyecto y lo guardan como structsysuapellido
    Miembros de la estructura:
    Materia
    Primer parcial
    Segundo parcial
    Tercer parcial
    Definitiva
    Estado.
    Se deben de leer las notas y calcular la definitiva y se almacena en los respectivos miembros de la
    estructura. En el estado se visualiza si se gano o no la materia
    Los porcentajes son primer parcial 30%, segundo parcial 30%, tercer parcial 40%

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...