elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error en codigo Ayuda!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error en codigo Ayuda!!!  (Leído 1,977 veces)
arkangel2006

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Error en codigo Ayuda!!!
« en: 8 Marzo 2015, 07:22 am »

Hola a me dejaron un trabajo de la escuela  crear un programa en dev c++ y pues ya  hice todo solo que tengo un pequeño problema  tengo unos errores que no logro detectar.. les dejo el codigo y espero y puedan corregirmelo que ya me canse de investigar y por eso recurro a ustedes:

Código:

#include<stdio.h>
#include<iostream.h>
void lectura_datos(float*apun_trabajadores[10]);
void imprimir_datos(float*apun_trabajadores[10]);
void calcular_salarioTotal(float*apun_trabajadores[10]);
main()
{
float*apun_trabajadores[10];
int opc;
do
{
printf("*******MENU*******\n");
printf("1.-LECTURA DE CLAVE Y SALARIO \n");
printf("2.-APLICAR DESCUENTOS \n");
printf("3.-IMPRIMIR TABLA \n");
printf("4.-SALIR DEL PROGRAMA \n");
printf("SELECCIONE LA OPCION DESEADA \n");
scanf("%d",&opc);
switch(opc)
{
case 1:
{
lectura_datos(*apun_trabajadores[10]);
break;
}
case 2:
{
calcular_salarioTotal(float*apun_trabajadores[10]);
break;
}
case 3:
{
imprimir_datos(float*apun_trabajadores[10]);
break;
}
}
}
while(opc!=4);
}
void lectura_datos(float*apun_trabajadores[10])
{
int fila,columna;

for(fila=0;fila<10;fila++)
apun_trabajadores[fila]=(float*)malloc(6*sizeof(float));
for(fila=0;fila<10;fila++)
{
printf("CLAVE DEL TRABAJADOR %d= ", fila);
scanf("%f,(apun_trabajadores[fila]+0));
printf("SALARIO DEL TRABAJADOR %d= ", fila);
scanf("%f",(apun_trabajadores[fila]+1));
}
}
void imprimir_datos(float*apun_trabajadores[10])
{
int fila,columna;
printf("LOS ELEMENTOS DEL ARREGLO SON \n");
printf("CLAVE\tSAL_B\tIMSS\tINAS\tHRS EXT\tTOTAL\t");
for(fila=0;fila<10;fila++)
{
printf("\n");
for (columna=0;columna<6;columna++)
{
printf("%.2f\t",*(apun_trabajadores[fila]+columna));

}
}
printf("\n");
}
void calcular_salarioTotal(float*apun_trabajadores[10])
{
int fila;
float s_neto,descuento_inasistencia,bono_horaextra;
for(fila=0;fila<10;fila++)
{
printf("DESCUENTO IMSS %d= ",fila);
scanf("%f",(apun_trabajadores[fila]+2));
printf("NUMERO DE FALTAS %d= ",fila);
scanf("%f",(apun_trabajadores[fila]+3));
printf("HORAS EXTRAS %d= ",fila);
scanf("%f",(apun_trabajadores[fila]+4));

printf("%.2f ",*(apun_trabajadores[fila]+1));
descuento_inasistencia=*(apun_trabajadores[fila]+1)/7* *(apun_trabajadores[fila]+3);
bono_horaextra=(*(apun_trabajadores[fila]+1)/7)/4* *(apun_trabajadores[fila]+4);
s_neto=*(apun_trabajadores[fila]+1)-*(apun_trabajadores[fila]+2)- descuento_inasistencia+bono_horaextra;
*(apun_trabajadores[fila]+5)=s_neto;
}
}


y ademas tengo dos dudas preguntas que necesito que me despejen con claridad porfa.. ya que quiero queme quede bien claro todo :D


   ¿Por qué el arreglo bidimensional es declarado con un solo índice (solo se especifican las filas y no las columnas)?
        float *apun_trabajadores[10];

    ¿Por qué se debe reservar espacio para las columnas?
         for(fila=0; fila<10; fila++) apun_trabajadores[fila]=(float*) malloc(6*sizeof(float));


« Última modificación: 8 Marzo 2015, 09:52 am por arkangel2006 » En línea

arkangel2006

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Error en codigo Ayuda!!!
« Respuesta #1 en: 8 Marzo 2015, 09:51 am »

Me respondo a mi mismo ya  arregle los errores, compila el programa pero sigo necesitando de su ayuda, ahora  compila y ejecuta pero cuando  tecleo la Opcion 1 y preciono ENTER  simplemente regresa al menu y asi con las otras Opciones

Este es el codigo corregido y "funcional" aun que con un problemita....

Código:

#include<stdio.h>
#include<iostream>
void lectura_datos(float*apun_trabajadores[10]);
void imprimir_datos(float*apun_trabajadores[10]);
void calcular_salarioTotal(float*apun_trabajadores[10]);
main()
{
float*apun_trabajadores[10];
int opc;
do
{
printf("*******MENU*******\n");
printf("1.-LECTURA DE CLAVE Y SALARIO \n");
printf("2.-APLICAR DESCUENTOS \n");
printf("3.-IMPRIMIR TABLA \n");
printf("4.-SALIR DEL PROGRAMA \n");
printf("SELECCIONE LA OPCION DESEADA \n");
scanf("%d",&opc);
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;
}
}
}
while(opc!=4);
}
void lectura_datos(float*apun_trabajadores[10])
{
          
int fila, columna;

for(fila=0;fila<10;fila++)
apun_trabajadores[fila]=(float*)malloc(6*sizeof(float));
for(fila=0;fila<10;fila++)
{
printf("CLAVE DEL TRABAJADOR %d= ", fila);
scanf("%f",(apun_trabajadores[fila]+0));
 printf("SALARIO DEL TRABAJADOR %d= ", fila);
scanf("%f",(apun_trabajadores[fila]+1));
}
}
void imprimir_datos(float*apun_trabajadores[10])
{
int fila,columna;
printf("LOS ELEMENTOS DEL ARREGLO SON \n");
printf("CLAVE\tSAL_B\tIMSS\tINAS\tHRS EXT\tTOTAL\t");
for(fila=0;fila<10;fila++)
{
printf("\n");
for (columna=0;columna<6;columna++)
{
printf("%.2f\t",*(apun_trabajadores[fila]+columna));

}
}
printf("\n");
}
void calcular_salarioTotal(float*apun_trabajadores[10])
{
int fila;
float s_neto,descuento_inasistencia,bono_horaextra;
for(fila=0;fila<10;fila++)
{
printf("DESCUENTO IMSS %d= ",fila);
scanf("%f",(apun_trabajadores[fila]+2));
printf("NUMERO DE FALTAS %d= ",fila);
scanf("%f",(apun_trabajadores[fila]+3));
printf("HORAS EXTRAS %d= ",fila);
scanf("%f",(apun_trabajadores[fila]+4));

printf("%.2f ",*(apun_trabajadores[fila]+1));
descuento_inasistencia=*(apun_trabajadores[fila]+1)/7* *(apun_trabajadores[fila]+3);
bono_horaextra=(*(apun_trabajadores[fila]+1)/7)/4* *(apun_trabajadores[fila]+4);
s_neto=*(apun_trabajadores[fila]+1)-*(apun_trabajadores[fila]+2)- descuento_inasistencia+bono_horaextra;
*(apun_trabajadores[fila]+5)=s_neto;
}
}




y necesito que me aclaren estas dos preguntas dudas:


   ¿Por qué el arreglo bidimensional es declarado con un solo índice (solo se especifican las filas y no las columnas)?

        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));


« Última modificación: 8 Marzo 2015, 10:39 am por arkangel2006 » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Error en codigo Ayuda!!!
« Respuesta #2 en: 10 Marzo 2015, 04:02 am »

ahora  compila y ejecuta pero cuando  tecleo la Opcion 1 y preciono ENTER  simplemente regresa al menu y asi con las otras Opciones
Eso sucede porque en la sentencia condicional switch:
Código
  1. switch (opc)
  2. {
  3. case 1:
  4. {
  5.   void lectura_datos(float *apun_trabajadores[10]);
  6.   break;
  7. }
  8. case 2:
  9. {
  10.   void calcular_salarioTotal(float *apun_trabajadores[10]);
  11.   break;
  12. }
  13. case 3:
  14. {
  15.   void imprimir_datos(float *apun_trabajadores[10]);
  16.   break;
  17. }
  18. }
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
  1. switch (opc){
  2. case 1:
  3.   lectura_datos(apun_trabajadores);
  4.   break;
  5. case 2:
  6.   calcular_salarioTotal(apun_trabajadores);
  7.   break;
  8. case 3:
  9.   imprimir_datos(apun_trabajadores);
  10.   break;
  11. }

¿Por qué el arreglo bidimensional es declarado con un solo índice (solo se especifican las filas y no las columnas)?
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));
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.

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
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con el primer .exe!!! Error en el codigo???
Programación Visual Basic
Gleper 8 2,737 Último mensaje 29 Septiembre 2007, 11:20 am
por Gleper
error en codigo ayuda
Programación Visual Basic
eszzes 4 1,857 Último mensaje 16 Julio 2008, 02:08 am
por eszzes
Ayuda error en codigo simple
Programación C/C++
Milde 9 3,006 Último mensaje 2 Mayo 2013, 14:13 pm
por Blaster
[AYUDA] Error con codigo
Programación C/C++
VintageChanel 2 1,834 Último mensaje 30 Enero 2015, 03:45 am
por vangodp
Ayuda error en codigo
Programación C/C++
enzopaez14 2 1,651 Último mensaje 5 Septiembre 2016, 02:41 am
por deadpool-x
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines