Ya estoy otra vez por aquí, primero un par de cosas que ya te dije ayer:
- No usar <system("pause")>. Cambiarlo por <getchar()>.
- No usar <fflush(stdin)>. AlbertoBSD te dejó un par de enlaces para solucionar ese y otros problemas básicos.
Cosas nuevas de este programa:
- <scanf_s> y <gets_s> son funciones muy fáciles de usar y que quitan trabajo a quien las usa... sin embargo, no son estándar, es decir que yo que compilo los programas en GNU/Linux no puedo compilar un programa con esas instrucciones.
- No es recomendable declarar tantas variables globales. Lo normal es declararlas en el <main> si las vas a usar durante el programa o en la propia función si son de uso temporal.
- Tus dos funciones reciben como primer parámetro un entero <int> pero tú lo que quieres es mandar un array de enteros (o un puntero al comienzo del array
).
- Tu función de ordenar los sueldos has puesto que devuelva un entero pero no devuelve nada. Y no entiendo muy bien qué entero vas a devolver. Me equivocaba, sí devuelve algo, devuelve el primer sueldo que está desordenado y se sale por lo que no ordena más.
- Tu otra función además de cambiar el primer parámetro que no está del todo bien, imagino que compara todos los sueldos con el promedio para ver cuántos están por encima de la media. Y en el <for> recorres los 10 primeros sueldos sólo.
- No validas que no existan sueldos negativos. Eso se puede hacer un filtro de toda la vida con un <do while>.
- Y luego para repetir el programa, haces una comparación, si la comparación es 0, pones <w = 1> y si la comparación es distinta de 0, pones <w = 0>. Usa directamente el resultado de la comparación en el <do while> y no le des tantas vueltas a una variable (esto lo vi hace poco en otro programa, no recuerdo si también era tuyo...)
Mis recomendaciones para que trabajes con funciones:
- Una función que te vaya pidiendo los datos y compruebe que los sueldos son positivos. Como valor de retorno un entero con la cantidad de sueldos registrados y como parámetros de entrada un array de <float> para los sueldos y el máximo de sueldos a guardar. En esta función puedes crear las variables <fin> y <final> ya que sólo se usan para repetir la entrada de datos.
- Una función que te ordene los sueldos. Sin valor de retorno y como parámetros de entrada un array de enteros y un entero de cuántos sueldos se han introducido (date cuenta que justo eso es lo que devuelve la función anterior).
- Una función que calcule el total de sueldos. Recibe como entradas un array de <float> y la cantidad de sueldos introducidos. Devuelve un <float> con la suma total.
- Una función que calcule cuántos empleados están por encima de la media. Recibe como entradas un array de <float>, la cantidad de sueldos introducidos y el promedio. Devuelve un entero con la cantidad de ellos que están por encima de la media.
Con estas recomendaciones, las cuales ya sé que son ineficientes ya que recorremos el array más veces de las necesarias, pero que es con fines educativos y para practicar, el programa principal quedaría algo así:
const int MAX_SUELDOS = 100; // O con #define si te gusta más
int main(){
float sueldos[MAX_SUELDOS];
float sumaSueldos, sueldoMedio;
int cantidadSueldosFinal, cantidadSueldosSuperior;
cantidadSueldosFinal = pedirSueldos(sueldos, MAX_SUELDOS); // el segundo parametro no es necesario ya que la variable es global
sumaSueldos = sumarSueldos(sueldos, cantidadSueldosFinal);
sueldoMedio = totalSueldos / cantidadSueldosFinal;
cantidadSueldosSuperiores = superiorMedia(sueldos, cantidadSueldosFinal);
ordenarSueldos(sueldos, cantidadSueldosFinal);
for(int i = 0; i < cantidadSueldosFinal; i++) // mostramos los sueldos que se vea que estan ordenados
// aqui muestras todos los resultados que has ido obteniendo
}
Esto es muy mejorable, piensa por ejemplo que si primero ordenas los sueldos luego es más eficiente calcular cuántos están por encima de la media. Pero eso y como implementar cada función te lo dejo a ti. Lo he intentado hacer lo más sencillo posible para que se entienda bien. Ahora ya te toca trabajar a ti. Suerte
PD: Te dejo aquí la función <sumarSueldos()> para que veas como se pasan los arrays como parámetros.
float sumarSueldos(float sueldos[], int cantidadSueldos){
float suma = 0;
for(int i = 0; i < cantidadSueldos; i++)
suma += sueldos[i];
return suma;
}