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

[C++] Pasar array de registros a función

Estas en el tema de [C++] Pasar array de registros a función en el foro de C/C++ en Foros del Web. Buenas, tengo un pequeña duda. Soy estudiante de 1º de teleco en Málaga y apenas nos han explicado mucho sobre C++, mi única duda sobre ...
  #1 (permalink)  
Antiguo 20/01/2010, 16:30
 
Fecha de Ingreso: enero-2010
Mensajes: 21
Antigüedad: 14 años, 3 meses
Puntos: 0
[C++] Pasar array de registros a función

Buenas, tengo un pequeña duda. Soy estudiante de 1º de teleco en Málaga y apenas nos han explicado mucho sobre C++, mi única duda sobre un práctica que nos han mandado es la siguiente.

Tengo definido un tipo registro:
Código c++:
Ver original
  1. typedef struct
  2. {
  3.     char nombre[70];
  4.     char apodo[40];
  5.     char pais[30];
  6.     int codigo[5];
  7.     bool enuso;
  8. } TAgente;

Prototipos de las funciones:
Código c++:
Ver original
  1. //PROTOTIPOS
  2. void Agencia( ¿? );
  3. int Menu();
  4. void IniciarAg( ¿? );
  5. int NumAgente( ¿? );
  6. void InsertAgente( ¿? );
  7. ......

Y en el main defino un array con el tipo anterior. Luego quiero definir y llamar a las funciones (Por ejemplo Agencia) con ese array, pero quiero que las modificaciones que dentro de la función se realicen, permanezcan cuando la función termine:
Código c++:
Ver original
  1. int main()
  2. {
  3.     TAgente agente[10]; //Definir a los agentes de la agencia
  4.     Agencia( ¿? );
  5. ....
  6. }
  7.  
  8. void Agencia ( ¿? );
  9. {
  10.    ....
  11. }

Lo que en elementos de programación nos dijeron que es de entrada/salida y en pseudocódigo es facilísimo, pero a la hora de implementarlo en C++ se me atraganta.

Agradezco mucho la ayuda que me puedan facilitar, un saludo.


PD: No hemos visto punteros, pero si hay que usarlos me informaré algo sobre ellos, ya que sólo quiero saber que debo poner en los paréntesis.

Última edición por Bullete; 21/01/2010 a las 11:53 Razón: highlight
  #2 (permalink)  
Antiguo 21/01/2010, 01:25
 
Fecha de Ingreso: enero-2010
Mensajes: 24
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: [C++] Pasar array de registros a función

Buenas

1) Metodo cutre:

Declara la variable como global

Código C:
Ver original
  1. TAgente agente[10];
  2.  
  3. int main()
  4. {
  5.   Agencia();
  6. }
  7.  
  8. void Agencia (void)
  9. {
  10.  
  11. }


2) Usando punteros

Código C:
Ver original
  1. int main()
  2. {
  3.   TAgente agente[10];
  4.  
  5.   Agencia(&agente);
  6. }
  7.  
  8. void Agencia (TAgente *agente)
  9. {
  10.  
  11. }
  #3 (permalink)  
Antiguo 21/01/2010, 11:48
 
Fecha de Ingreso: enero-2010
Mensajes: 21
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: [C++] Pasar array de registros a función

@Megamouse, muchas gracias por contestar. No nos dejan usar variables globales, de modo que me decanto por los punteros, pero al ponerlo tal y como tú dices, me da error al compilar:

Código c++:
Ver original
  1. int main()
  2. {
  3.     TAgente agente[10]; //Definir a los agentes de la agencia
  4.     Agencia(&agente); // <--- Error en esta linea
  5.  
  6.     ...
  7. }
  8.  
  9. void Agencia (TAgente *agente)
  10. {
  11.     ...
  12. }

y el compilador dice:
"Cannot convert 'TAgente(*)[10]' to 'TAgente*' for argument '1' to 'void Agencia(TAgente*)'"

Ese error se repite cada vez que llamo a una función, he intentado cosas, pero apenas sé nada sobre punteros:



Gracias.

Última edición por Bullete; 21/01/2010 a las 11:52 Razón: highlight
  #4 (permalink)  
Antiguo 21/01/2010, 17:11
 
Fecha de Ingreso: agosto-2009
Ubicación: Cartagena, Colombia
Mensajes: 516
Antigüedad: 14 años, 8 meses
Puntos: 13
Respuesta: [C++] Pasar array de registros a función

Intenta esto:
Código C++:
Ver original
  1. int main()
  2. {
  3.     TAgente agente[10]; //Definir a los agentes de la agencia
  4.     Agencia(agente);
  5.  
  6.     ...
  7. }
  8.  
  9. void Agencia (TAgente ag)
  10. {
  11.     ...
  12. }

Saludos.
__________________
Un camino de mil millas comienza por el primer paso. Lao Tse
  #5 (permalink)  
Antiguo 22/01/2010, 02:50
 
Fecha de Ingreso: enero-2010
Mensajes: 24
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: [C++] Pasar array de registros a función

Se me olvido que la variable es un array de estructuras

Aqui tienes para pasar solo un elemento o todo el array:

Código C:
Ver original
  1. int main(int argc, char *argv[])
  2. {
  3.   int i;
  4.   TAgente agente[10];
  5.  
  6.   memset (agente, 0, sizeof(agente));
  7.  
  8.   Agencia (&agente[0]);
  9.   Agencia (&agente[5]);
  10.  
  11.   for (i=0; i<10; i++)
  12.     fprintf (stderr, "Nombre Agente[%d]: [%s]\n", i, agente[i].nombre);
  13.  
  14.   memset (agente, 0, sizeof(agente));
  15.  
  16.   Agencia2 (agente);
  17.  
  18.   for (i=0; i<10; i++)
  19.     fprintf (stderr, "Nombre Agente2[%d]: [%s]\n", i, agente[i].nombre);
  20.  
  21.   return 0;
  22. }
  23.  
  24. void Agencia (TAgente *agente)
  25. {
  26.   strcpy (agente->nombre, "prueba");
  27. }
  28.  
  29. void Agencia2 (TAgente *agente)
  30. {
  31.   int i;
  32.  
  33.   for (i=0;i<10;i++)
  34.     sprintf ((&agente[i])->nombre, "prueba2_%d", i);
  35. }

Y queda de salida:

Nombre Agente[0]: [prueba]
Nombre Agente[1]: []
Nombre Agente[2]: []
Nombre Agente[3]: []
Nombre Agente[4]: []
Nombre Agente[5]: [prueba]
Nombre Agente[6]: []
Nombre Agente[7]: []
Nombre Agente[8]: []
Nombre Agente[9]: []
Nombre Agente2[0]: [prueba2_0]
Nombre Agente2[1]: [prueba2_1]
Nombre Agente2[2]: [prueba2_2]
Nombre Agente2[3]: [prueba2_3]
Nombre Agente2[4]: [prueba2_4]
Nombre Agente2[5]: [prueba2_5]
Nombre Agente2[6]: [prueba2_6]
Nombre Agente2[7]: [prueba2_7]
Nombre Agente2[8]: [prueba2_8]
Nombre Agente2[9]: [prueba2_9]
  #6 (permalink)  
Antiguo 22/01/2010, 09:58
 
Fecha de Ingreso: enero-2010
Mensajes: 21
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: [C++] Pasar array de registros a función

Muchísimas gracias por la ayuda, ahora funciona perfectamente.
¡Un saludo!

Etiquetas: pasar, registros
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 11:34.