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

Funcion planilla C++

Estas en el tema de Funcion planilla C++ en el foro de C/C++ en Foros del Web. Hola chicos! Tengo un problema con este ejercicio que tengo que realizar. Principalmente soy nuevo en esto de C++, soy estudiante de universidad y agradecería ...
  #1 (permalink)  
Antiguo 01/09/2015, 10:22
 
Fecha de Ingreso: septiembre-2015
Mensajes: 3
Antigüedad: 9 años, 3 meses
Puntos: 0
Funcion planilla C++

Hola chicos! Tengo un problema con este ejercicio que tengo que realizar. Principalmente soy nuevo en esto de C++, soy estudiante de universidad y agradecería si alguien pudiera ayudarme a corregir mi código. El problema menciona de que tengo que ingresar el sueldo de "n" empleados y después calcular algunas operaciones (descuentos, etc), el número de empleados pueden ser los que sean (10, 100, 1000), al final el programa pregunta si quiero continuar o no ingresando empleados, y al terminar realiza los procesos dependiendo de cuántos empleados fueron ingresados. Esto lo tengo que realizar con una función. Les comparto mi código, aparentemente compila y se ejecuta pero las opciones 1 y 2 no funcionan a como yo quiero, y en la impresión de resultados no calcula para nada, comparto el código y una imagen del programa ejecutandose:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <windows.h>
  4. using namespace std;
  5.  
  6. //FUNCION PLANILLA
  7. void planilla(int a){
  8.  
  9. float contador;
  10. float liquido;
  11. float descuentoTotal;
  12. float igss;
  13. int i;
  14.  
  15. //CONTAMOS CUANTOS EMPLEADOS FUERON INGRESADOS
  16.     for (i=0; i<=a; i++);{
  17.     contador = i;
  18.    }
  19.  
  20. //REALIZO LOS PROCESOS
  21.    descuentoTotal = 500+a*0.0983;
  22.    igss = 500+a*0.0483;
  23.    liquido = 500-descuentoTotal;
  24.  
  25.  
  26. //IMPRIMO LOS RESULTADOS DE LOS PROCESOS
  27.  
  28.     textcolor(15);
  29.     gotoxy(24,11); cprintf("Ingresados: "); cout << contador; cprintf(" Empleados");
  30.    textcolor(15);
  31.     gotoxy(24,13); cprintf("Liquido total: "); cout << liquido;
  32.    textcolor(15);
  33.     gotoxy(24,15); cprintf("Descuentos total: "); cout << descuentoTotal;
  34.    textcolor(15);
  35.     gotoxy(24,17); cprintf("IGSS total: "); cout << igss;
  36.  
  37. }
  38.  
  39. int sueldo;    //VARIABLES GLOBALES DE TIPO ENTERO
  40. int opcion;
  41. int sueldoNuevo;
  42.  
  43. int main(){
  44.  
  45. gotoxy(24,4); cprintf("Acumulo las planillas para ti");
  46. textcolor(15);
  47. gotoxy(24,6); cprintf("Ingresa el sueldo nominal: ");
  48. cin >> sueldo;
  49. textcolor(15);
  50. gotoxy(24,8); cprintf("Todo listo, quieres ingresar otro empleado?");
  51. textcolor(15);
  52. gotoxy(24,9); cprintf("1 = Si, 2 = No ");
  53. cin >> opcion;
  54. if (opcion == 1){
  55. while (opcion != 1){
  56. clrscr();
  57. //VUELVO A IMPRIMIR EL ENCABEZADO CON UN WHILE
  58. gotoxy(24,4); cprintf("Acumulo las planillas para ti");
  59. textcolor(15);
  60. gotoxy(24,6); cprintf("Ingresa el sueldo nominal: ");
  61. cin >> sueldoNuevo;
  62. sueldo = sueldo+sueldoNuevo;
  63. planilla (sueldo);
  64. textcolor(15);
  65. gotoxy(24,8); cprintf("Todo listo, quieres ingresar otro empleado?");
  66. textcolor(15);
  67. gotoxy(24,9); cprintf("1 = Si, 2 = No ");
  68. cin >> opcion;
  69. }
  70. }
  71.  
  72. //LLAMO A LA FUNCION PLANILLA
  73. planilla (sueldo);
  74.  
  75. return 0;
  76. }

Programa:


Como pueden ver en la parte de Si, No, ingresé 1 y en vez de preguntar el sueldo nuevamente, imprime los resultados, pero aun asi no los calculó de manera correcta no se porque, ojala me puedan ayudar con la solución del código, gracias!
  #2 (permalink)  
Antiguo 01/09/2015, 11:05
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Funcion planilla C++

¿Por qué mezclas cprintf y cout??? usa cout directamente y tendrás un código más claro:

Código C++:
Ver original
  1. // original
  2. gotoxy(24,11); cprintf("Ingresados: "); cout << contador; cprintf(" Empleados");
  3.  
  4. // propuesta
  5. gotoxy(24,11); cout << "Ingresados: " << contador << " Empleados";

ahora, si te fijas en estas dos líneas:

Código C++:
Ver original
  1. if (opcion == 1){
  2.     while (opcion != 1){

Tienes una incoherencia: si eliges la opción 1 entrarás en el if pero no se ejecutará el while, mientras que si eliges la opción 0 no entrarás en el if... por lo que el while tampoco se ejecutará. Ese '!=' del while debería ser un '=='.

A modo de bonus te diré que el if sobra, es totalmente redundante y lo puedes borrar sin ningún miedo.

Y bueno, podrías hacer que el código luciese un poco mejor eliminando las variables globales y el código repetido.

Un saludo.
  #3 (permalink)  
Antiguo 01/09/2015, 11:38
 
Fecha de Ingreso: septiembre-2015
Mensajes: 3
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Funcion planilla C++

Es que mezclo cprintf y cout para colorear "Ingresados" y "Empleados" de otro color, pero si, dejare de hacerlo de ese modo porque tienes razón.

Excelente, me ayudaste con lo de la opción, pero ahora no entiendo porque el programa no calcula bien los procesos de la función?
  #4 (permalink)  
Antiguo 02/09/2015, 02:49
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Funcion planilla C++

Pues ahí ya no te puedo ayudar mucho porque no se de dónde salen los números que pones ni si los mismos son correctos... te toca depurar el código y comparar los resultados con los que calcules tu con papel y lapiz.

Sin embargo hay una cosa que me ha llamado la atención:

Código C++:
Ver original
  1. descuentoTotal = 500+a*0.0983;
  2.    igss = 500+a*0.0483;
  3.    liquido = 500-descuentoTotal;

si liquido = 500 - descuento = 500 - 500 - a*0.0983 = -a*0.0983. Es decir, si recoloco los cálculos:

Código C++:
Ver original
  1. liquido = -a*0.0983;
  2. descuentoTotal = 500-liquido;

No soy muy amigo de los cálculos innecesarios ya que pueden ofuscar el origen del problema. En este caso sumar 500 para anular lo sumado anteriormente, para mi, sobra.

Por otro lado, estás aplicando dos coeficientes diferentes en descuentoTotal (0.0983) e igss (0.0483), imagino que no es un error porque si no ambas variables obtendrían el mismo resultado.

Un saludo
  #5 (permalink)  
Antiguo 02/09/2015, 09:47
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: Funcion planilla C++

Otra parte que no tiene ningún sentido es esta:

Código C++:
Ver original
  1. //CONTAMOS CUANTOS EMPLEADOS FUERON INGRESADOS
  2.     for (i=0; i<=a; i++);{
  3.     contador = i;

Ya que el dato es "a" y lo tienes de primeras. Es el parámetro que le pasas a la función.
Y además asignas el valor a un float.
__________________
Mi calculadora en Qt
  #6 (permalink)  
Antiguo 02/09/2015, 10:02
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Funcion planilla C++

Cita:
Iniciado por dehm Ver Mensaje
Otra parte que no tiene ningún sentido es esta:

Código C++:
Ver original
  1. //CONTAMOS CUANTOS EMPLEADOS FUERON INGRESADOS
  2.     for (i=0; i<=a; i++);{
  3.     contador = i;

Ya que el dato es "a" y lo tienes de primeras. Es el parámetro que le pasas a la función.
Y además asignas el valor a un float.
¿Y no notas nada más que sea raro en ese for?

Al final contador=a+1 y en una sola asignación

Última edición por eferion; 02/09/2015 a las 10:14
  #7 (permalink)  
Antiguo 02/09/2015, 10:23
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: Funcion planilla C++

Si que lo había visto...es una forma un tanto atípica de llegar a un valor que ya se tiene de primeras y además mal
Pero vamos, cuando yo empecé seguro que hacía cosas mucho peores
__________________
Mi calculadora en Qt
  #8 (permalink)  
Antiguo 03/09/2015, 00:45
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Funcion planilla C++

Cita:
Iniciado por dehm Ver Mensaje
Si que lo había visto...es una forma un tanto atípica de llegar a un valor que ya se tiene de primeras y además mal
Pero vamos, cuando yo empecé seguro que hacía cosas mucho peores
Todos hemos hecho auténticas burradas en nuestros inicios. Antes como Internet estaba en pañales se notaba menos, ahora con foros como este en cuanto alguien mete la pata queda registrado hasta el fin de los tiempos jejejeje.
  #9 (permalink)  
Antiguo 03/09/2015, 03:57
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: Funcion planilla C++

De todas formas @thespecialjoseph no te tomes a mal ningún comentario.
Hay otros foros donde castigan mucho a la gente que está empezando, y es verdad que a veces se le quitan a uno las ganas de participar, pero no es este el caso.
A mi siempre me han ayudado y me han tratado fenomenal, incluso cuando al principio venía con dudas disparatadas que se merecían peores respuestas que las que me dieron.
Animo y a seguir preguntando dudas!
__________________
Mi calculadora en Qt
  #10 (permalink)  
Antiguo 03/09/2015, 04:29
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Funcion planilla C++

Cita:
Iniciado por dehm Ver Mensaje
Hay otros foros donde castigan mucho a la gente que está empezando, y es verdad que a veces se le quitan a uno las ganas de participar, pero no es este el caso.
En este punto hay que matizar un poco: En muchos foros se da caña... y mucha cuando alguien va de listillo o pide que le den algo funcional sin aportar nada a cambio. Yo por ejemplo he vacilado a más de uno por comportarse así y no, no siento ningún remordimiento.

Hay que entender que una cosa es que haya infinidad de recursos de programación disponibles y eso hace que cualquier persona, con tiempo y ganas, pueda aprender a programar y otra cosa es despreciar al que programa. Llegar a un foro exigiendo que te resuelvan un ejercicio es poco menos que un insulto.

Yo no tengo demasiados problemas en hacerle a cualquiera los ejercicios de clase... si me paga, claro. Yo creo que no es el camino correcto para esa persona que está aprendiendo, pero es su decisión y no la mía.

Sin embargo la participación en un foro de libre acceso y gratuíto es diferente. En este caso, la persona que hace una consulta espera recibir respuestas de forma gratuíta. El único pago que se le suele exigir es que se vea que lo ha intentado por sus medios y que demuestre humildad.

A nadie le gusta equivocarse, eso está claro. Pero hay que saber aceptar las críticas constructivas de quien te está ayudando desinteresadamente... si tu pones un código y yo lo pongo a parir explicándote los motivos tu respuesta no debe ser darte por ofendido. También, dado que la ayuda te la están brindando de forma gratuíta, tienes que entender que no eres tu el que decide cuánta ayuda vas a recibir... eso sólo lo puedes hacer cuando hay una contraprestación. No se, son reglas que se ve que para algunos son complicadas de entender.

Con esto no digo que en todos los foros pase esto, también te encuentras con gente que, pese a saber muchísimo, son unos auténticos energúmenos salidos de una cueva o de un agujero en el suelo... como en cualquier otro campo, hay de todo.
  #11 (permalink)  
Antiguo 11/09/2015, 15:11
 
Fecha de Ingreso: septiembre-2015
Mensajes: 3
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Funcion planilla C++

Hola! Ofrezco una disculpa por no haber respondido lo más antes posible, no disponia de mi PC y tampoco de internet, y muchas gracias a los dos! Por supuesto que no vengo simplemente a pedir de una vez un trabajo que yo mismo tendria que hacer, al contrario, estare por aqui preguntando mis dudas y creo que fue un error haber pedido la solucion del codigo xD por lo menos debo decir la proxima vez que me den un indicio o la manera de realizarlo. Gracias! El programa ya lo pude realizar y tengo que entregarlo mañana. Por cierto, puedo hacer otra pregunta sobre otro codigo ya hecho que tengo en este mismo tema o tengo que crear otro? Saludos!
  #12 (permalink)  
Antiguo 11/09/2015, 15:31
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Funcion planilla C++

Si la nueva pregunta va en línea con el tema del hilo... siéntete libre de reutilizarlo :)

Etiquetas: funcion, int, planilla, programa
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 04:28.