Cita de: arkangel2006 en 8 Marzo 2015, 09:51 AMahora compila y ejecuta pero cuando tecleo la Opcion 1 y preciono ENTER simplemente regresa al menu y asi con las otras OpcionesEso sucede porque en la sentencia condicional switch:
Código (cpp) [Seleccionar]
switch (opc)
{
case 1:
{
void lectura_datos(float *apun_trabajadores[10]);
break;
}
case 2:
{
void calcular_salarioTotal(float *apun_trabajadores[10]);
break;
}
case 3:
{
void imprimir_datos(float *apun_trabajadores[10]);
break;
}
}
Lo que estas haciendo es declarar las funciones.
Para llamar a (ejecutar, invocar) una función debes indicar el nombre de esta seguido de sus argumentos (delimitados por paréntesis), de esta forma:
Código (cpp) [Seleccionar]
switch (opc){
case 1:
lectura_datos(apun_trabajadores);
break;
case 2:
calcular_salarioTotal(apun_trabajadores);
break;
case 3:
imprimir_datos(apun_trabajadores);
break;
}
Cita de: arkangel2006 en 8 Marzo 2015, 09:51 AM¿Por qué el arreglo bidimensional es declarado con un solo índice (solo se especifican las filas y no las columnas)?Porque "apun_trabajadores" es un array de punteros, esto es, no almacena los valores directamente, en su lugar almacena las direcciones de las filas cada una con un tamaño fijo de seis elementos (las columnas) de tipo float.
float *apun_trabajadores[10];
¿Por qué se debe reservar espacio para las columnas? (malloc)
for(fila=0; fila<10; fila++) apun_trabajadores[fila]=(float*) malloc(6*sizeof(float));
Por eso primero reservas la memoria necesaria para cada fila guardando esta (la dirección) en el array.
En tu caso se puede utilizar un array de arrays (por ejemplo "float trab[10][6]") sin problemas, el porque se utiliza en su lugar un array de punteros mas reserva dinámica de memoria vía malloc se debe, supongo, al enunciado.
Un saludo