[ Foro de C ]
La prueba va a consistir en arreglar un programa para que sea funcional y comentarlo, solucioné todos los errores sintáxicos y lógicos del programa, pero a la hora de que me muestre la cantidad de sueldos es mayor a 5000 (Cinco mil) cualquier sueldo ingresado es mayor a ese :( y la verdad es que hasta donde sé no tengo errores...
este es el programa en cuestión todo comentado:
#include <stdio.h>
#include<string.h>
//declaracion de variables
int l, i, doc=0, cont=0, mayores=0;
float sumasueldo=0;
float promedio (int x, float t){
return x/t;
}
struct datos{
int edad;
char nom[30],ape[30],profesion[30];
float sueldo;
};
typedef datos personal;
//acá se ingresa la longitud de el vector
void longi(){
printf("ingrese cantidad de personas:");
scanf("%d",&l);
};
//Estructura de selección, si la profesión es "docente" incrementa el valor del contador
void docentes(char a[30]){
if (strcmp(a,"docente")==0)
doc++;
}
int mayores5mil(float s){
if(s<5000);
cont++;
return(cont);
}
//Aca se cargan los datos que el usuario ingresará por pantalla
void carga(){
//se hace una llamada a la función longitud, para que todos los datos a ingresar se realicen en función a la cantidad de personas ingresadas
// guardandolas así en la variable "L"
longi();
personal personall[l];
for(i=0;i<l;i++){
printf("\n ingrese edad:");
scanf("%d", &personall[i].edad);
printf("\n ingrese nombre:");
scanf("%s", &personall[i].nom);
printf("\n ingrese apellido:");
scanf("%s",&personall[i].ape);
printf("\n ingrese profesion: ");
scanf("%s", &personall[i].profesion);
printf("\n Ingrese sueldo: ");
scanf("%f", &personall[i].sueldo);
docentes(personall[i].profesion);
sumasueldo+=personall[i].sueldo;
mayores=mayores5mil(personall[i].sueldo);
}
};
//al estar el programa completamente modulado, aquí se realiza una función que llame a las demas funciones, imprimiendo así todos los
// datos que aún no han sido mostrados por pantalla
void final(){
carga();
printf("\n El promedio de sueldos es: %.2f", promedio(sumasueldo, l));
printf("la cantidad de docentes ingresados es: %d ", doc);
printf("\n La cantidad de personas con sueldo maayor a 5000: %d", mayores);
}
//en la función main, se llama a la función que integra a todas las demas funciones, para mostrar el programa de manera ordenada.
main (){
final();
}
Te paso el código corregido la verdad es que era un fallo de esos tontos y me he tenido que leer varias veces tu enunciado hasta darme cuenta.
Tu función:
int mayores5mil(float s){
if(s<5000);
cont++;
return(cont);
}
La corrección:
int mayores5mil(float s) {
if (s < 5000) {
cont++;
}
return(cont);
}
Fíjate que has puesto un ; al final del if y siempre aunmentabas el contador.
Además he visto otro error en el que deberías haber creado memoria dinámica ya que no se puede crear un array de objetos con una variable.
Échale un vistazo y ya me dirás.
#include <stdio.h>
#include<string.h>
//declaracion de variables
int l, i, doc = 0, cont = 0, mayores = 0;
float sumasueldo = 0;
float promedio(int x, float t) {
return x / t;
}
struct datos {
int edad;
char nom[30], ape[30], profesion[30];
float sueldo;
};
typedef datos personal;
personal* personall;
//acá se ingresa la longitud de el vector
void longi() {
printf("ingrese cantidad de personas:");
scanf("%d", &l);
};
//Estructura de selección, si la profesión es "docente" incrementa el valor del contador
void docentes(char a[30]) {
if (strcmp(a, "docente") == 0)
doc++;
}
int mayores5mil(float s) {
if (s < 5000) {
cont++;
}
return(cont);
}
//Aca se cargan los datos que el usuario ingresará por pantalla
void carga() {
//se hace una llamada a la función longitud, para que todos los datos a ingresar se realicen en función a la cantidad de personas ingresadas
// guardandolas así en la variable "L"
longi();
personall = new personal[l];
for (i = 0; i<l; i++) {
printf("\n ingrese edad:");
scanf("%d", &personall[i].edad);
printf("\n ingrese nombre:");
scanf("%s", &personall[i].nom);
printf("\n ingrese apellido:");
scanf("%s", &personall[i].ape);
printf("\n ingrese profesion: ");
scanf("%s", &personall[i].profesion);
printf("\n Ingrese sueldo: ");
scanf("%f", &personall[i].sueldo);
docentes(personall[i].profesion);
sumasueldo += personall[i].sueldo;
mayores = mayores5mil(personall[i].sueldo);
}
};
//al estar el programa completamente modulado, aquí se realiza una función que llame a las demas funciones, imprimiendo así todos los
// datos que aún no han sido mostrados por pantalla
void final() {
carga();
printf("\n El promedio de sueldos es: %.2f", promedio(sumasueldo, l));
printf("la cantidad de docentes ingresados es: %d ", doc);
printf("\n La cantidad de personas con sueldo maayor a 5000: %d", mayores);
printf("\n");
}
//en la función main, se llama a la función que integra a todas las demas funciones, para mostrar el programa de manera ordenada.
int main() {
final();
delete[] personall;
return 0;
}
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)