Ejercicio: Creación de una estructura de bucle anidada para el cálculo de calificaciones de los alumnos
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:
Crear una matriz de nombres: cree una matriz de nombres de alumnos.
Crear un bucle externo: cree un bucle
foreachque se itera a través de los nombres de los alumnos.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".
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.
Asegúrese de que el archivo Program.cs esté abierto en el Editor de Visual Studio Code.
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.
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.Para crear una matriz de cadenas denominada
studentNamesque 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.
Para crear una instrucción
foreachque puede usar para iterar a través de los nombres de los alumnos, escriba el código siguiente:foreach (string name in studentNames) { }Para comprobar que el bucle
foreachse itera a través de la matrizstudentNamessegún lo previsto, actualice el bloque de código de la instrucciónforeachcomo se indica a continuación:foreach (string name in studentNames) { Console.WriteLine($"{name}"); }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
foreachcomo 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.
En el menú Archivo de Visual Studio Code, haga clic en Guardar.
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.
En el símbolo del sistema del terminal, escriba dotnet build y presione Entrar.
El comando
dotnet buildindica al compilador que genere la aplicación. Si se detectan errores, se notificarán.Si ve mensajes de error o de advertencia, debe corregirlos antes de continuar.
En el símbolo del sistema del terminal, escriba dotnet run y presione Entrar.
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 continueNota
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.
En el panel TERMINAL, presione la tecla Entrar para detener la aplicación en ejecución.
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".
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".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:
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.
En el menú Edición de Visual Studio Code, seleccione Cortar.
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}");En el menú Edición de Visual Studio Code, seleccione Pegar.
Actualice el código para mostrar la sangría adecuada de línea de código.
Sugerencia
Visual Studio Code proporciona un comando
Format Documentque 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.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
namedel alumno actual. Lo abordarás en breve.Elimine el código siguiente:
Console.WriteLine($"{name}");En la línea de código en blanco que acaba de crear, escriba el código siguiente:
if (name == "Sophia") {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.
Para cerrar el bloque de código de la instrucción
if, escriba el código siguiente:}Actualice el código para mostrar la sangría adecuada de línea de código.
Sugerencia
Use el comando
Format Documentpara 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.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
ifdentro del bloque de códigoforeachexterno 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.En el menú Archivo de Visual Studio Code, haga clic en Guardar.
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.
En el símbolo del sistema del terminal, escriba dotnet build y presione Entrar.
El comando
dotnet buildindica al compilador que genere la aplicación. Si se detectan errores, se notificarán.Si ve mensajes de error o de advertencia, debe corregirlos antes de continuar.
En el símbolo del sistema del terminal, escriba dotnet run y presione Entrar.
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.
En el panel TERMINAL, presione la tecla Entrar para detener la aplicación en ejecución.
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.
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
foreachexterna.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.
Cree una línea de código en blanco en la parte superior del bloque de código
foreachexterno.La línea en blanco debe estar dentro del bloque de código
foreachy encima de la instrucciónifque evalúa sinamees igual a Sophia.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
namepara hacer un seguimiento del nombre del alumno actual a medida que itere a través de la matriz de nombres, pero usarcurrentStudentfacilitará la comprensión de la lógica del código a medida que genere la aplicación en los próximos pasos.Para sustituir
currentStudentpornameen la instrucciónifque evalúa sinamees igual a Sophia, actualice el código de la siguiente manera:if (currentStudent == "Sophia")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.
Compruebe que el código del bloque de código
foreachexterno 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-"); }Para asignar la matriz
sophiaScoresastudentScorescuandocurrentStudent == "Sophia", actualice el código de instrucciónifcomo 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
ifdurante esta actualización de código.Para agregar una instrucción
else ifque asigne la matrizandrewScoresastudentScorescuandocurrentStudent == "Andrew", escriba el código siguiente:else if (currentStudent == "Andrew") studentScores = andrewScores;Cree otra instrucción
else ifpara asignar la matrizemmaScoresastudentScorescuandocurrentStudent == "Emma".Cree una instrucción
else ifpara asignar la matrizloganScoresastudentScorescuandocurrentStudent == "Logan".Asegúrese de que el bloque de código
foreachcoincida 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
foreachinterno para que usestudentScoresy "despersonalizar" las variables que use en los cálculos.Para sustituir
studentScoresconsophiaScoresen el bucleforeachque se itera a través de la matriz de puntuaciones, actualice el código de la siguiente manera:foreach (int score in studentScores)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;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
foreachinterno de la siguiente manera:foreach (int score in studentScores) { // add the exam score to the sum sumAssignmentScores += score; }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;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
foreachanidados 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.Para imprimir el nombre del alumno y la puntuación calculada en la consola, actualice la segunda instrucción
Console.WriteLinede 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.
Mueva la instrucción
Console.WriteLineque se usa para escribir las etiquetas de columna del informe de puntuación en la ubicación justo encima del bucleforeachexterno.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
foreachexterno.En el menú Archivo de Visual Studio Code, seleccione Guardar.
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.
Asegúrese de haber guardado los cambios en el archivo Program.cs.
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.
En el símbolo del sistema del terminal, escriba dotnet build y presione Entrar.
Si ve mensajes de error o de advertencia, debe corregirlos antes de continuar.
En el símbolo del sistema del terminal, escriba dotnet run y presione Entrar.
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 continueEn el panel TERMINAL, presione la tecla Entrar para detener la aplicación en ejecución.
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.