Ejercicio: Creación de una estructura de bucle anidada para el cálculo de calificaciones de los alumnos

Completado

En este ejercicio, agregará una matriz de cadenas para contener los nombres de los alumnos y, a continuación, implementará una estructura anidada foreach que recorre en iteración los nombres de los alumnos en un bucle externo y las puntuaciones de los alumnos en el bucle interno. Empiece por construir la studentNames matriz y un foreach bucle que recorre en iteración los elementos de la matriz. A continuación, mueva el código que se usa para calcular las calificaciones de Sophia en el bloque de código del bucle "names". Por último, implemente la lógica de código que usa el nombre del alumno para acceder a su matriz de puntuaciones, calcular su puntuación media y escribir su grado en la consola. Las tareas detalladas que ha completado durante este ejercicio son:

  1. Crear una matriz de nombres: cree una matriz de nombres de alumnos.

  2. Crear un bucle externo: cree un bucle foreach que se itera a través de los nombres de los alumnos.

  3. Desarrollar un bloque de código de bucle externo: reubique el código que calcula y notifica la puntuación de Sophia, colocándolo en el bloque de código del bucle "names".

  4. Actualizar los cálculos e informes: actualice el código que hace los cálculos de la puntuación de los alumnos mediante una nueva matriz de puntuaciones.

Importante

Antes de comenzar este ejercicio, debe haber completado el anterior, "Creación de matrices y bucles foreach".

Creación de una matriz de nombres de alumno y un bucle foreach externo

En esta tarea, creará una matriz de nombres de alumnos y un bucle foreach que se itera a través de los nombres de los alumnos.

  1. Asegúrese de que el archivo Program.cs esté abierto en el Editor de Visual Studio Code.

  2. Desplácese hasta la parte superior del archivo de código y busque las líneas de código que se usan para declarar las matrices de puntuaciones.

  3. Cree una línea de código en blanco debajo de la declaración de las matrices de puntuaciones.

    La línea de código en blanco debe ubicarse entre las líneas usadas para declarar las matrices de puntuaciones y la línea usada para declarar sophiaSum.

  4. Para crear una matriz de cadenas denominada studentNames que mantiene los nombres de los alumnos, escriba el código siguiente:

    // Student names
    string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };
    

    Observe que ha especificado los nombres de los alumnos como parte de la declaración.

  5. Para crear una instrucción foreach que puede usar para iterar a través de los nombres de los alumnos, escriba el código siguiente:

    foreach (string name in studentNames)
    {
    }
    
  6. Para comprobar que el bucle foreach se itera a través de la matriz studentNames según lo previsto, actualice el bloque de código de la instrucción foreach como se indica a continuación:

    foreach (string name in studentNames)
    {
        Console.WriteLine($"{name}");
    
    }
    
  7. Dedique un minuto a revisar el código que ha creado.

    // Student names
    string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };
    
    foreach (string name in studentNames)
    {
        Console.WriteLine($"{name}");
    
    }
    

    El código usará el bucle foreach como bucle externo de la aplicación. Durante este ejercicio, implementará la siguiente lógica en la aplicación:

    Para cada uno de los alumnos de la matriz studentNames, la aplicación hará lo siguiente:

    • determinar el alumno actual
    • obtener acceso a las puntuaciones del alumno actual
    • calcular la calificación del alumno actual (suma y promedio)
    • escriba la calificación del alumno actual en la consola

    Por ahora, sin embargo, solo escribirá los nombres de los alumnos en la consola.

  8. En el menú Archivo de Visual Studio Code, haga clic en Guardar.

  9. En la vista EXPLORADOR de Visual Studio Code, haga clic con el botón derecho en Starter y, a continuación, seleccione Abrir en terminal integrado.

    Importante

    El símbolo del sistema del terminal debe mostrar la ruta de acceso de la carpeta del archivo Program.cs.

  10. En el símbolo del sistema del terminal, escriba dotnet build y presione Entrar.

    El comando dotnet build indica al compilador que genere la aplicación. Si se detectan errores, se notificarán.

  11. Si ve mensajes de error o de advertencia, debe corregirlos antes de continuar.

  12. En el símbolo del sistema del terminal, escriba dotnet run y presione Entrar.

  13. Compruebe que el código haya generado la siguiente salida:

    Sophia
    Andrew
    Emma
    Logan
    Student         Grade
    
    Sophia:         92.2    A-
    Press the Enter key to continue
    

    Nota

    Si no ve la lista de nombres de alumnos encima del informe de puntuación de Sophia, vuelva y compruebe que ha escrito el código correctamente.

  14. En el panel TERMINAL, presione la tecla Entrar para detener la aplicación en ejecución.

  15. Cierre el panel del terminal.

Calcular la puntuación de Sophia dentro del bucle de nombres externos

En esta tarea, reubicará el código que calcula y notifica la puntuación de Sophia, colocándolo en el bloque de código del bucle "names".

  1. En el editor de Visual Studio Code, busque las líneas de código que se usan para calcular y notificar la calificación de Sophia.

    int sophiaSum = 0;
    
    decimal sophiaScore;
    
    foreach (int score in sophiaScores)
    {
        // add the exam score to the sum
        sophiaSum += score;
    
    }
    
    sophiaScore = (decimal)sophiaSum / currentAssignments;
    
    Console.WriteLine("Student\t\tGrade\n");
    Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");
    

    Nota

    El siguiente paso será mover este código de su ubicación actual al bloque de código del bucle foreach "names".

  2. Use una operación de corte y pegado para mover el código que calcula y notifica la calificación de Sophia al bloque de código del bucle foreach "names".

    Si no está seguro de cómo cortar y pegar en Visual Studio Code, pruebe el enfoque descrito en los pasos siguientes:

    1. Seleccione el código que se usa para calcular y notificar la calificación de Sofia.

      Puede hacer clic y arrastrar para seleccionar líneas de código.

    2. En el menú Edición de Visual Studio Code, seleccione Cortar.

    3. En el editor de Visual Studio Code, coloque el cursor en la línea de código en blanco debajo del código siguiente: Console.WriteLine($"{name}");

    4. En el menú Edición de Visual Studio Code, seleccione Pegar.

  3. Actualice el código para mostrar la sangría adecuada de línea de código.

    Sugerencia

    Visual Studio Code proporciona un comando Format Document que se puede usar para mantener actualizado el formato de código. Haga clic con el botón derecho en el editor de Visual Studio Code y seleccione Dar formato al documento en el menú emergente. En los equipos Windows, el método abreviado de teclado para este comando es: Shift + Alt + F. Los equipos Linux y macOS usan métodos abreviados alternativos cuando es necesario para evitar conflictos con los métodos abreviados que proporciona el sistema operativo.

  4. Asegúrese de que las actualizaciones coincidan con el código siguiente:

    // Student names
    string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };
    
    foreach (string name in studentNames)
    {
        Console.WriteLine($"{name}");
        int sophiaSum = 0;
    
        decimal sophiaScore;
    
        foreach (int score in sophiaScores)
        {
            // add the exam score to the sum
            sophiaSum += score;
    
        }
    
        sophiaScore = (decimal)sophiaSum / currentAssignments;
    
        Console.WriteLine("Student\t\tGrade\n");
        Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");
    }
    
    Console.WriteLine("Press the Enter key to continue");
    Console.ReadLine();
    

    Tenga en cuenta que, en este momento, el código calculará y notificará la puntuación de Sophia independientemente de name del alumno actual. Lo abordarás en breve.

  5. Elimine el código siguiente:

    Console.WriteLine($"{name}");
    
  6. En la línea de código en blanco que acaba de crear, escriba el código siguiente:

    if (name == "Sophia")
    {    
    
  7. Cree una línea de código en blanco después del código que se usa para escribir la calificación de Sophia en la consola.

  8. Para cerrar el bloque de código de la instrucción if, escriba el código siguiente:

    }    
    
  9. Actualice el código para mostrar la sangría adecuada de línea de código.

    Sugerencia

    Use el comando Format Document para mantener actualizado el formato del código. Haga clic con el botón derecho en el panel Editor de Visual Studio Code y seleccione Dar formato al documento en el menú emergente.

  10. Tómese un minuto para examinar el código.

    El código debería coincidir con el siguiente:

    // initialize variables - graded assignments 
    int currentAssignments = 5;
    
    int[] sophiaScores = new int[] { 90, 86, 87, 98, 100 };
    int[] andrewScores = new int[] { 92, 89, 81, 96, 90 };
    int[] emmaScores = new int[] { 90, 85, 87, 98, 68 };
    int[] loganScores = new int[] { 90, 95, 87, 88, 96 };
    
    // Student names
    string[] studentNames = new string[] {"Sophia", "Andrew", "Emma", "Logan"};
    
    foreach (string name in studentNames)
    {
        if (name == "Sophia")
        {
            int sophiaSum = 0;
            decimal sophiaScore;
    
            foreach (int score in sophiaScores)
            {
                // add the exam score to the sum
                sophiaSum += score;
            }
    
            sophiaScore = (decimal)(sophiaSum) / currentAssignments;
    
            Console.WriteLine("Student\t\tGrade\n");
            Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");
        }
    }
    
    Console.WriteLine("Press the Enter key to continue");
    Console.ReadLine();
    

    Observe que la instrucción if dentro del bloque de código foreach externo limita la calificación del alumno que se calcula y notifica. Esto no es exactamente lo que necesita, pero es un paso en la dirección correcta.

  11. En el menú Archivo de Visual Studio Code, haga clic en Guardar.

  12. En la vista EXPLORADOR de Visual Studio Code, haga clic con el botón derecho en Starter y, a continuación, seleccione Abrir en terminal integrado.

    Importante

    El símbolo del sistema del terminal debe mostrar la ruta de acceso de la carpeta del archivo Program.cs.

  13. En el símbolo del sistema del terminal, escriba dotnet build y presione Entrar.

    El comando dotnet build indica al compilador que genere la aplicación. Si se detectan errores, se notificarán.

  14. Si ve mensajes de error o de advertencia, debe corregirlos antes de continuar.

  15. En el símbolo del sistema del terminal, escriba dotnet run y presione Entrar.

  16. Compruebe que el código haya generado la siguiente salida:

    Student         Grade
    
    Sophia:         92.2    A-
    

    Nota

    Si sigue viendo la lista de nombres de alumnos mostrados encima del informe de puntuación de Sophia, asegúrese de guardar las actualizaciones.

  17. En el panel TERMINAL, presione la tecla Entrar para detener la aplicación en ejecución.

  18. Cierre el panel del terminal.

Actualización del bucle anidado para calcular todas las puntuaciones de los alumnos

En esta tarea, actualizará el código que calcula la puntuación de los alumnos mediante una nueva matriz de puntuaciones. Para empezar, creará una matriz denominada studentScores que se puede usar para mantener las puntuaciones de cualquier alumno. A continuación, creará una estructura if .. elseif que usa el nombre del alumno actual para asignar su matriz de puntuaciones a studentScores. Por último, actualizará el código que calcula y notifica las calificaciones del alumno. Cuando haya terminado, el informe debería incluir el nombre y la puntuación numérica de todos los alumnos.

  1. Cree una línea de código en blanco debajo de la declaración de la matriz studentNames.

    La línea en blanco debe estar por encima de la instrucción foreach externa.

  2. Si desea crear una matriz de enteros que pueda usar para mantener las puntuaciones del alumno actual, escriba el código siguiente:

    int[] studentScores = new int[10];
    
    

    Tenga en cuenta que este código no asignará ningún valor a la matriz en este momento. Especifique únicamente que la matriz puede incluir 10 elementos.

  3. Cree una línea de código en blanco en la parte superior del bloque de código foreach externo.

    La línea en blanco debe estar dentro del bloque de código foreach y encima de la instrucción if que evalúa si name es igual a Sophia.

  4. Para crear una variable de cadena que se use para mantener el nombre del alumno actual, escriba el código siguiente:

    string currentStudent = name;
    
    

    Nota

    Puede seguir usando name para hacer un seguimiento del nombre del alumno actual a medida que itere a través de la matriz de nombres, pero usar currentStudent facilitará la comprensión de la lógica del código a medida que genere la aplicación en los próximos pasos.

  5. Para sustituir currentStudent por name en la instrucción if que evalúa si name es igual a Sophia, actualice el código de la siguiente manera:

    if (currentStudent == "Sophia")
    
  6. Mueva el código que calcula y notifica la puntuación de Sophia a una ubicación situada debajo del bloque de código.

    Va a mover todo el código que se encuentra en el bloque de código a una ubicación situada debajo de ese bloque de código. El motivo para proceder de esta forma se evidenciará en los pasos siguientes.

  7. Compruebe que el código del bloque de código foreach externo coincida con el código siguiente:

    {
        string currentStudent = name;
    
        if (currentStudent == "Sophia")
        {
        }
    
        int sophiaSum = 0;
        decimal sophiaScore;
    
        foreach (int score in sophiaScores)
        {
            // add the exam score to the sum
            sophiaSum += score;
    
        }
    
        sophiaScore = (decimal)sophiaSum / currentAssignments;
    
        Console.WriteLine("Student\t\tGrade\n");
        Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");
    
    }
    
  8. Para asignar la matriz sophiaScores a studentScores cuando currentStudent == "Sophia", actualice el código de instrucción if como se indica a continuación:

    if (currentStudent == "Sophia")
        studentScores = sophiaScores;
    
    

    Tenga en cuenta que ha quitado las llaves del bloque de código de instrucción if durante esta actualización de código.

  9. Para agregar una instrucción else if que asigne la matriz andrewScores a studentScores cuando currentStudent == "Andrew", escriba el código siguiente:

    else if (currentStudent == "Andrew")
        studentScores = andrewScores;
    
    
  10. Cree otra instrucción else if para asignar la matriz emmaScores a studentScores cuando currentStudent == "Emma".

  11. Cree una instrucción else if para asignar la matriz loganScores a studentScores cuando currentStudent == "Logan".

  12. Asegúrese de que el bloque de código foreach coincida con el código siguiente:

    foreach (string name in studentNames)
    {
        string currentStudent = name;
    
        if (currentStudent == "Sophia")
            studentScores = sophiaScores;
    
        else if (currentStudent == "Andrew")
            studentScores = andrewScores;
    
        else if (currentStudent == "Emma")
            studentScores = emmaScores;
    
        else if (currentStudent == "Logan")
            studentScores = loganScores;
    
        int sophiaSum = 0;
    
        decimal sophiaScore;
    
        foreach (int score in sophiaScores)
        {
            // add the exam score to the sum
            sophiaSum += score;
    
        }
    
        sophiaScore = (decimal)sophiaSum / currentAssignments;
    
        Console.WriteLine("Student\t\tGrade\n");
        Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");
    
    }
    

    A continuación, debe actualizar el bucle foreach interno para que use studentScores y "despersonalizar" las variables que use en los cálculos.

  13. Para sustituir studentScores con sophiaScores en el bucle foreach que se itera a través de la matriz de puntuaciones, actualice el código de la siguiente manera:

    foreach (int score in studentScores)
    
  14. Para reemplazar las declaraciones de variables específicas de Sophia por nombres más genéricos, actualice el código de la siguiente manera:

    int sumAssignmentScores = 0;
    
    decimal currentStudentGrade = 0;
    

    Estas dos declaraciones de variables pretenden reemplazar las siguientes declaraciones de variables específicas de Sofia:

    int sophiaSum = 0;
    
    decimal sophiaScore;
    
  15. Para aplicar el nuevo nombre de variable a la ecuación que se usa para sumar las puntuaciones de los alumnos, actualice el bloque de código foreach interno de la siguiente manera:

    foreach (int score in studentScores)
    {
        // add the exam score to the sum
        sumAssignmentScores += score;
    }
    
  16. Para aplicar el nuevo nombre de variable a la ecuación utilizada para calcular la puntuación media, actualice el código de la siguiente manera:

    currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;
    
  17. Dedique un minuto a revisar el código.

    int[] studentScores = new int[10];
    
    foreach (string name in studentNames)
    {
        string currentStudent = name;
    
        if (currentStudent == "Sophia")
            studentScores = sophiaScores;
    
        else if (currentStudent == "Andrew")
            studentScores = andrewScores;
    
        else if (currentStudent == "Emma")
            studentScores = emmaScores;
    
        else if (currentStudent == "Logan")
            studentScores = loganScores;
    
        // initialize/reset the sum of scored assignments
        int sumAssignmentScores = 0;
    
        // initialize/reset the calculated average of exam + extra credit scores
        decimal currentStudentGrade = 0;
    
        foreach (int score in studentScores)
        {
            // add the exam score to the sum
            sumAssignmentScores += score;
        }
    
        currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;
    
        Console.WriteLine("Student\t\tGrade\n");
        Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");
    
    }
    

    Los bucles foreach anidados ahora iterarán a través de los nombres de los alumnos y usarán las puntuaciones del alumno para calcular sus calificaciones, pero todavía deberá actualizar el código usado para generar el informe de puntuación.

  18. Para imprimir el nombre del alumno y la puntuación calculada en la consola, actualice la segunda instrucción Console.WriteLine de la siguiente manera:

    Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?");
    

    Observe que este código ha reemplazado la asignación de letras de calificación por "?". Trabajarás en la automatización de la asignación de notas en el ejercicio siguiente.

  19. Mueva la instrucción Console.WriteLine que se usa para escribir las etiquetas de columna del informe de puntuación en la ubicación justo encima del bucle foreach externo.

    Dado que no quiere repetir los encabezados de columna para cada puntuación de alumno, debe mover este código a un punto por encima del bucle foreach externo.

  20. En el menú Archivo de Visual Studio Code, seleccione Guardar.

  21. Dedique un minuto a revisar el código.

    La aplicación completa debe coincidir ahora con el código siguiente:

    // initialize variables - graded assignments 
    int currentAssignments = 5;
    
    int[] sophiaScores = new int[] { 90, 86, 87, 98, 100 };
    int[] andrewScores = new int[] { 92, 89, 81, 96, 90 };
    int[] emmaScores = new int[] { 90, 85, 87, 98, 68 };
    int[] loganScores = new int[] { 90, 95, 87, 88, 96 };
    
    // Student names
    string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };
    
    int[] studentScores = new int[10];
    
    // Write the Report Header to the console
    Console.WriteLine("Student\t\tGrade\n");
    
    foreach (string name in studentNames)
    {
        string currentStudent = name;
    
        if (currentStudent == "Sophia")
            studentScores = sophiaScores;
    
        else if (currentStudent == "Andrew")
            studentScores = andrewScores;
    
        else if (currentStudent == "Emma")
            studentScores = emmaScores;
    
        else if (currentStudent == "Logan")
            studentScores = loganScores;
    
        // initialize/reset the sum of scored assignments
        int sumAssignmentScores = 0;
    
        // initialize/reset the calculated average of exam + extra credit scores
        decimal currentStudentGrade = 0;
    
        foreach (int score in studentScores)
        {
            // add the exam score to the sum
            sumAssignmentScores += score;
        }
    
        currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;
    
        Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?");
    }
    

    Con el código que genera el informe de puntuación del alumno actualizado; parece que está listo para comprobar el trabajo que ha realizado.

Compruebe su trabajo

En esta tarea, ejecutará la aplicación para comprobar que la lógica de código funciona según lo previsto.

  1. Asegúrese de haber guardado los cambios en el archivo Program.cs.

  2. En la vista EXPLORADOR de Visual Studio Code, haga clic con el botón derecho en Starter y, a continuación, seleccione Abrir en terminal integrado.

  3. En el símbolo del sistema del terminal, escriba dotnet build y presione Entrar.

  4. Si ve mensajes de error o de advertencia, debe corregirlos antes de continuar.

  5. En el símbolo del sistema del terminal, escriba dotnet run y presione Entrar.

  6. Compruebe que el código haya generado la siguiente salida:

    Student         Grade
    
    Sophia          92.2    ?
    Andrew          89.6    ?
    Emma            85.6    ?
    Logan           91.2    ?
    Press the Enter key to continue
    
  7. En el panel TERMINAL, presione la tecla Entrar para detener la aplicación en ejecución.

  8. Cierre el panel del terminal.

Enhorabuena, la aplicación ha llegado muy lejos de donde comenzó. Está haciendo un uso eficaz de matrices e foreach iteraciones, y ha integrado una if instrucción que permite al código seleccionar la matriz de puntuaciones correcta.