Anda di halaman 1dari 4

UIS * Escuela de Estudios Industriales y Proyecto I - Calificación de un test

Empresariales
23016 Estructuras Computacionales B1 Fecha: mayo 31 de 2017
2162335 Luis Felipe Muñoz Vesga

PROYECYO I

Elabore un programa en C++ para calificar un examen que tiene 10 preguntas de selección
Falso/Verdadero, para un grupo de 10 estudiantes. Se tiene un vector de enteros cortos,
Claves[10] (almacena las respuestas correctas; 1 significa Verdadero y 0 significa Falso),
y una matriz R[10][10] de enteros cortos; cada fila de la matriz R contiene las respuestas
de un estudiante, y cada columna contiene las respuestas del grupo a una pregunta. Toda
pregunta debe estar respondida en la siguiente forma: marcada con 1 si cree que la respuesta
a la pregunta es verdadero; marcada con cero si cree que la respuesta a la pregunta es falso,
marcada con -1 si no sabe.
Su programa debe:
A. Calificar a cada estudiante calculando los siguientes valores: Número de repuestas Buenas,
Malas, NoRespondidas, y la nota; la nota se calcula con la fórmula:
NOTA = (BUENAS - 0.5 * MALAS)/2 (8 -2)
B. Calcular la media aritmética y la desviación estándar para la lista de notas de los
estudiantes.
C. Calificar al grupo en cada pregunta, calculando los siguientes valores: número de
respuestas Buenas, Malas, NoRespondidas y la nota del grupo (usando la fórmula 8-2).
D. Informar al usuario sobre el avance de la ejecución del programa y presentar en pantalla
adecuadamente los datos y resultados haciendo pausas controlables por el usuario.
E. Usar la interfaz de usuario que se ilustra en la figura 2, la cual contiene:
a. Encabezado que identifica el problema que se resuelve (agregue el nombre del autor);
b. El vector de claves y la matriz de respuestas de los estudiantes. Para formatear la
matriz utilice el manipulador setw(n) para controlar el espaciamiento de los datos
(ver sección 7.7.3.3 y el ejemplo 3.5.2).
c. Los resultados para cada estudiante (Buenas, Malas, NoRespondidas, y la Nota); las
notas, se imprimen con un decimal1.
d. Los resultados por pregunta para el grupo (Buenas, Malas, NoRespondidas, y la Nota).
e. La media y la desviación estándar de las notas individuales.
f.
SOLUCIÓN

Para dar solución al anterior problema se propone el siguiente programa

#include <iostream>
#include <iomanip>
#include <windows.h> // da acceso a recursos de Windows
#include <fstream> // da acceso a los recursos de C++
para E/S en disco
using namespace std;
ifstream entrada;
ofstream salida;
int main()
{
SetConsoleTitleA(" UIS * EISI * Visual C++ * Program\xA2 LFMzV
");
setlocale(LC_ALL, "spanish");

// Definición de variables
const int D = 10, C = 4, U = 1;
float Nota[D][D], Claves[D], Rtas[C][D], Rxpreg[D][C], BE[D], ME[D], NRE[D],
NE[D], BG[D], MG[D], NRG[D], NotG[D], media, desviacion, suma;
int i, j;

// Apertura del archivo de


claves y respuestas de los
estudiantes en el equipo
entrada.open("D:\\LFMzV\\fisica.txt");
// Verificación de correcta
apertura del archivo
if (entrada.is_open() == false)
{
cout << "\n\t Imposible abrir el archivo fisica.txt";
cout << "\n\n \t\t\t Para terminar pulse Enter \n"; cin.get();
exit(1);
}
else cout << " \t\t\t\t\t apertura exitosa \n\n";
cout << "\t\t\t TEST DE FISICA (V/F)\n";
cout << "\t\t\t\t\t\t Resultados por alumno\n\n\n";

// Lectura del Vector Clave


en el archivo Fisica
for (i = 0; i < D; i++)
entrada >> Claves[i];

// Lectura de la Matriz de
respuestas dadas por los
estudiantes
for (i = 0; i < D; i++)
for (j = 0; j < D; j++)
entrada >> Nota[i][j];

// Obtención de datos
individuales y la media
aritmética
for (i = 0; i < D; i++)
{
BE[i] = 0; ME[i] = 0; NRE[i] = 0;
for (j = 0; j < D; j++)
if (Nota[i][j] == Claves[j]) BE[i]++;
else if (Nota[i][j] == -1) NRE[i]++;
else ME[i]++;
NE[i] = 0.5*(BE[i] - 0.5* ME[i]);
media = media + NE[i];
}
media = media / 10;

// Obtención de datos grupales


for (i = 0; i < D; i++)
{
BG[i] = 0; MG[i] = 0; NRG[i] = 0;
for (j = 0; j < D; j++)
if (Nota[j][i] == Claves[i]) BG[i]++;
else if (Nota[j][i] == -1) NRG[i]++;
else MG[i]++;
NotG[i] = 0.5*(BG[i] - 0.5* MG[i]);
}

// Calculo de la desviación
suma = 0;
for (i = 0; i < D; i++) { suma = suma + (NE[i] - (media))*(NE[i] - (media)); }
desviacion = pow((suma / 10), (0.5));

// Impresión en pantalla de
Clave y Matriz con
respuestas individuales
cout << "Clave\t";
for (i = 0; i < D; i++) cout << setw(5) << Claves[i];
cout << fixed << setprecision(0) << setw(5) << "BE" << setw(5) << " ME" << setw(5)
<< "NRE " << setw(5) << " NOTA\n\n\t";
for (i = 0; i < D; i++)
{
for (j = 0; j < D; j++)
cout << setw(5) << Nota[i][j];
cout << setw(5) << BE[i] << setw(5) << ME[i] << setw(5) << NRE[i] <<
setw(5) << setprecision(1) << NE[i] << setprecision(0);
cout << endl << "\t";
}

// Impresión en pantalla de
resultados grupales
cout << "\n resultados para el grupo por pregunta\n\n"; cout << "BG\t";
for (i = 0; i < D; i++) cout << setw(5) << BG[i]; cout << "\nMG\t";
for (i = 0; i < D; i++) cout << setw(5) << MG[i]; cout << "\nNRG\t";
for (i = 0; i < D; i++) cout << setw(5) << NRG[i]; cout << setprecision(1) <<
"\nNotG\t";
for (i = 0; i < D; i++) cout << setw(5) << NotG[i];

// Impresión de la media
y la desviación
cout << "\n\nla media es " << media << "\t La desviacion es " << setprecision(5)
<< desviacion;

// Impresión de resultados
completos en el archivo
refisica exportable
salida.open("D:\\LFMzV\\refisica.txt");
salida << "\t\t\t TEST DE FISICA (V/F)\n";
salida << "\t\t\t\t\t\t Resultados por alumno\n\n\n";
salida << "Clave\t";
for (i = 0; i < D; i++) salida << setw(5) << Claves[i];
salida << fixed << setprecision(0) << setw(5) << "BE" << setw(5) << " ME" <<
setw(5) << "NRE " << setw(5) << " NOTA\n\n\t";
for (i = 0; i < D; i++)
{
for (j = 0; j < D; j++)
salida << setw(5) << Nota[i][j];
salida << setw(5) << BE[i] << setw(5) << ME[i] << setw(5) << NRE[i] <<
setw(5) << setprecision(1) << NE[i] << setprecision(0);
salida << endl << "\t";
}
salida << "\n resultados para el grupo por pregunta\n\n"; salida << "BG\t";
for (i = 0; i < D; i++) salida << setw(5) << BG[i]; salida << "\nMG○\t";
for (i = 0; i < D; i++) salida << setw(5) << MG[i]; salida << "\nNRG\t";
for (i = 0; i < D; i++) salida << setw(5) << NRG[i];salida << setprecision(1) <<
"\nNotG\t";
for (i = 0; i < D; i++) salida << setw(5) << NotG[i];
for (i = 0; i < D; i++) suma = suma + (NE[i] - (media))*(NE[i] - (media));
salida << "\n\nla media es " << media << "\t La desviacion es " << setprecision(5)
<< desviacion;

// Cierra los archivos utilizados


entrada.close();
salida.close();

// Anuncia el fin del programa


cout << "\n\n\t\t\t Para terminar pulse una letra y Enter ";
cin >> ws; cin.get();

Las siguientes imágenes muestran el resultado de la ejecución del programa

Anda mungkin juga menyukai