Autor Tema: Array unidimensional [C] lenguajeC calcular nomina media trabajadores empresa  (Leído 5436 veces)

Darklexis312

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Hola a todos estoy haciendo un programa para la escuela, pide que calcule la nomina total de una empresa entre otras cosas que describo abajo pero tengo unos problemas, explicare brevemente que hace mi programa:

Con el if pongo el rango de que solo se permiten valores mayores de 0 hasta 100,
luego dentro de un ciclo do-while pongo un ciclo for que se repetirá n veces
dependiendo de los sueldos que se quiera ingresar, por cada sueldo ingresado se
nos preguntara si queremos ingresar otro sueldo aquí es donde ya surgen mis
problemas:

1) Si por ejemplo elegí ingresar dos sueldos y solo ingreso uno, y elijo que no
quiero ingresar otro sueldo me imprime el sueldo ingresado y después números al
azar como si hubiera ingresado un segundo sueldo, como puedo arreglar eso?

2) Si por ejemplo elijo de nuevo ingresar 2 sueldos, me pide que ingrese el sueldo
del empleado 1 después me pregunta que si quiero ingresar otro sueldo elijo que
si, ingreso el sueldo del empleado 2 y despues me vuelve a preguntar si quiero
ingresar otro sueldo y no quiero que haga eso el programa quiero que imprima
directamente después de ingresar el segundo sueldo.

3) Como puedo saber cuantos empleados tienen un sueldo superior al promedio?

De antemano muchas gracias, espero que puedan ayudarme a avanzar...

Código: [Seleccionar]
/*Elaborar un programa que capte un grupo de sueldos de los empleados de una
empresa(nómina),
tomando en cuenta que el programa debe pedir sueldos mientras el usuario elija la
opción de continuar.
Al finalizar la captura de la nómina, el programa deberá generar un reporte con lo
siguiente :

* Total de nómina de la empresa
* Los sueldos ordenados de menor a mayor
* Cantidad de empleados capturados
* Promedio de sueldo de la nómina
* Cantidad de empleados con un sueldo superior al promedio

El programa debe usar funciones y considerar un grupo máximo de 100 empleados.

Validar que no
existan sueldos negativos.*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

void main() {
int sueldo[100];
char op;
int i,j, D, arc, empleados=0;
float promedio, suma=0;

printf("\nCuantos sueldos desea ingresar?: ");
scanf_s("%i", &D);

if (D > 0 && D <= 100) {
do {
for (i = 0; i < D; i++) {

system("cls");

printf("Ingresa el sueldo del empleado %i: ", i + 1);
scanf_s("%i", &sueldo[i]);
suma += sueldo[i];

printf("\nDesea introducir un sueldo? [s/n]: ");
fflush(stdin);
while (getchar() != '\n');
scanf_s("%c", &op);
if (op == 'n' || op == 'N') {
break;
}

}

} while (op == 's'||op == 'S');

system("cls");

//-------------------------Total de nómina de la empresa-----------------------
printf("\nTOTAL DE NOMINA: %.2f", suma);
//-----------------------------------------------------------------------------

//------------------------Sueldos ordenados de menor a mayor------------------
for (i = 0; i < D; i++)
for(j = i + 1; j < D; j++)
if (sueldo[i] > sueldo[j]) {
arc = sueldo[i];
sueldo[i] = sueldo[j];
sueldo[j] = sueldo[i];
}

printf("\nLISTA ORDENADA DE SUELDOS");
for (i = 0; i < D; i++) {
printf("\n%i", sueldo[i]);
}
//-----------------------------------------------------------------------------

//-----------------------Cantidad de empleados capturados----------------------
empleados = empleados + i;
printf("\nCANTIDAD DE EMPLEADOS: %i", empleados);
//-----------------------------------------------------------------------------

//---------------------Promedio de sueldo de la nómina-------------------------
promedio = suma / D;
printf("\nPROMEDIO DE SUELDO: %.2f", promedio);
//-----------------------------------------------------------------------------

//----------Cantidad de empleados con un sueldo superior al promedio--------
if (sueldo[i] > promedio) {
printf("\nCANTIDAD DE EMPLEADOS CON SUELDO SUPERIOR AL PROMEDIO: %i", sueldo[i]);
}
//-----------------------------------------------------------------------------

}
else {
printf("\nNumero de sueldos a ingresar no valido.\n\nSolo se permite ingresar hasta 100 sueldos.");
}

system("pause>null");
}
« Última modificación: 28 de Junio 2018, 19:39 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas, he adaptado el código al compilador e ide que uso (Codeblocks) cambiando scanf_s por scanf y otros pequeños cambios

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main()
{
int sueldo[100];
char op;
int i,j, D, arc, empleados=0;
float promedio, suma=0;

printf("\nCuantos sueldos desea ingresar?: ");
scanf("%i", &D);

if (D > 0 && D <= 100) {
do {
for (i = 0; i < D; i++) {

system("cls");

printf("Ingresa el sueldo del empleado %i: ", i + 1);
scanf("%i", &sueldo[i]);
suma += sueldo[i];

printf("\nDesea introducir un sueldo? [s/n]: ");
fflush(stdin);
while (getchar() != '\n');
scanf("%c", &op);
if (op == 'n' || op == 'N') {
break;
}

}

} while (op == 's'||op == 'S');

system("cls");

//-------------------------Total de nómina de la empresa-----------------------
printf("\nTOTAL DE NOMINA: %.2f", suma);
//-----------------------------------------------------------------------------

//------------------------Sueldos ordenados de menor a mayor------------------
for (i = 0; i < D; i++)
for(j = i + 1; j < D; j++)
if (sueldo[i] > sueldo[j]) {
arc = sueldo[i];
sueldo[i] = sueldo[j];
sueldo[j] = sueldo[i];
}

printf("\nLISTA ORDENADA DE SUELDOS");
for (i = 0; i < D; i++) {
printf("\n%i", sueldo[i]);
}
//-----------------------------------------------------------------------------

//-----------------------Cantidad de empleados capturados----------------------
empleados = empleados + i;
printf("\nCANTIDAD DE EMPLEADOS: %i", empleados);
//-----------------------------------------------------------------------------

//---------------------Promedio de sueldo de la nómina-------------------------
promedio = suma / D;
printf("\nPROMEDIO DE SUELDO: %.2f", promedio);
//-----------------------------------------------------------------------------

//----------Cantidad de empleados con un sueldo superior al promedio--------
if (sueldo[i] > promedio) {
printf("\nCANTIDAD DE EMPLEADOS CON SUELDO SUPERIOR AL PROMEDIO: %i", sueldo[i]);
}
//-----------------------------------------------------------------------------

}
else {
printf("\nNumero de sueldos a ingresar no valido.\n\nSolo se permite ingresar hasta 100 sueldos.");
}

system("pause>null");
return 0;
}

Al ejecutar obtengo:


¿Cuántos sueldos desea ingresar? 2
Ingresa el sueldo del empleado 1: 100

¿Desea introducir un sueldo? [s/n]: s
Ingresa el sueldo del empleado 2: 200

¿Desea introducir un sueldo? [s/n]: n

TOTAL DE NOMINA: 300.00
LISTA ORDENADA DE SUELDOS
100
200
CANTIDAD DE EMPLEADOS: 2
PROMEDIO DE SUELDO: 150.00
CANTIDAD DE EMPLEADOS CON SUELDO SUPERIOR AL PROMEDIO: 318767123

Lo primero que parece ocurrir es que el programa no está bien planteado desde el punto de vista de la algoritmia. Si le digo que quiero introducir dos sueldos, lo lógico es que me pida dos sueldos sin preguntarme en cada ocasión si deseo introducir un sueldo otra vez (ya que ya le he dicho antes cuántos quería introducir).

Tener el for dentro del while (op == 's'||op == 'S'); con la pregunta de si se quiere introducir un sueldo en cada ocasión no parece un buen planteamiento.

El problema de por qué te aparecen esos números extraños habría que estudiarlo, pero puede estar relacionado con que no estés usando adecuadamente los tipos de datos. Por ejemplo sueldo son valores int mientras que suma lo defines como float. Posiblemente haya que definirlo como int, o bien realizar una conversión de tipos. Si no se manejan bien los tipos pueden ocurrir "cosas raras".

Para ver planteamientos de algoritmia, diagramas de flujo, etc. está disponible el curso "Bases de la programación nivel I" en https://aprenderaprogramar.com/index.php?option=com_content&view=category&id=28&Itemid=59

Los fundamentos del lenguaje C están explicados en el curso "Curso básico de programación lenguaje C desde cero" disponible en https://aprenderaprogramar.com/index.php?option=com_content&view=category&id=82&Itemid=210

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".