En que estoy mal?, al momento de ejecutar, omite el ultimo for y se queda congelado



   AUTOR PREGUNTA

Publicado 26 agosto 2023 - 11:08

#include <iostream>
#include <string>
using namespace std;

struct Cnt_empl
{
char nombre[32];
int desemp_nota;
};

int main()
{
int num_empl,mejor_asist,i,j,k;

Cnt_empl *empleado = new Cnt_empl[num_empl];

//Meru------------------------------------------------------------------------
cout << " CNT                           ©Copyright-Derechos reservados." << endl;
cout << "----------------------------------------------------------------" << endl;
cout << "          Desempeño de Asistencia de empleados              " << endl;
cout << "----------------------------------------------------------------" << endl;
cout << " [Consola]: !Bienvenid@ al sistema!                           " << endl;
cout << " [Consola]: Ingrese el numero de empleados a evaluar          " << endl;
cout << " [Usuario]: ";
cin >> num_empl;
cout << "----------------------------------------------------------------" << endl;
//puedes pasar de este menu--------------------------------------------------

for (i = 1; i <= num_empl; i++)
{
cout << " [Consola]: Ingrese el nombre del empleado #" << i << endl;
cout << " [Usuario]: ";
cin >> empleado[i].nombre;
 
 
cout << " [Consola]: Ingrese el desempeño de asistencia del empleado " << empleado[i].nombre << endl;
cout << " [Usuario]: ";
cin >> empleado[i].desemp_nota;
 
cout << "----------------------------------------------------------------" << endl;
}

for (i = 1; i <= num_empl; i++)
{
if (empleado[i].desemp_nota >= 7)
{
 cout << " [Consola]: El empleado " << empleado[i].nombre << endl;
 cout << " [Consola]: Tiene un desempeño de asistencia aceptable" << endl;
 cout << "----------------------------------------------------------------" << endl;
}
 
else
{
 cout << " [Consola]: El empleado " << empleado[i].nombre << endl;
 cout << " [Consola]: se encuentra en periodo de prueba" << endl;
 cout << "----------------------------------------------------------------" << endl;
}
}

for (i = 1; i <= num_empl; i++)
{
j = i+1;
k = i-1;
 
if (i >= num_empl){ j = num_empl; }
if (i = 1){ k = i; }
 
if ((empleado[i].desemp_nota >= empleado[j].desemp_nota) && (empleado[i].desemp_nota >= empleado[k].desemp_nota))
{
 mejor_asist = i;
   }
}

cout << " [Consola]: El empleado "<< empleado[mejor_asist].nombre << endl;
cout << " [Consola]: tiene el mejor desempeño de asistencia fue de "<< empleado[mejor_asist].desemp_nota << endl;

}




¿Tienes la misma pregunta? Yo también

 

Publicado 26 agosto 2023 - 14:21

Al revisar tu código, he detectado varios problemas que podrían ser el motivo de esos errores que te salen y no te termina de ejecutar bien.

 

1. Inicialización del array de empleados: El puntero `empleado` se inicializa con un tamaño `num_empl` que no ha sido inicializado antes. Es decir, estás creando un arreglo con un tamaño desconocido. Debes inicializar el arreglo después de haber obtenido el valor para `num_empl`.

 

 ```cpp

 int num_empl;

 cin >> num_empl;

 Cnt_empl *empleado = new Cnt_empl[num_empl];

 ```

 

2. Los arrays en C++ comienzan en 0, no en 1. Si tienes un arreglo de tamaño `num_empl`, entonces el último elemento del arreglo tiene el índice `num_empl-1`.

 

 Por lo tanto, tus bucles for deberían ser algo como:

 ```cpp

 for (i = 0; i < num_empl; i++)

 ```

 

3. Lógica para encontrar el mejor desempeño**: Tu lógica para encontrar el empleado con el mejor desempeño es inadecuada. Deberías inicializar `mejor_asist` a `0` antes del bucle y luego, dentro del bucle, simplemente comparar cada `desemp_nota` con la del `mejor_asist` para ver si es mayor.

 

 Ejemplo:

 

 ```cpp

 mejor_asist = 0;

 for (i = 1; i < num_empl; i++) {

     if (empleado[i].desemp_nota > empleado[mejor_asist].desemp_nota) {

         mejor_asist = i;

     }

 }

 ```

 

4. **Problema con el bucle de comparación**: La línea `if (i = 1)` está asignando el valor 1 a `i`. Debería ser `if (i == 1)` para hacer una comparación.

Tras corregir estos problemas, tu programa debería funcionar correctamente. Espero te sirva de ayuda.