Exercício - Construa uma estrutura de loop aninhada para cálculos de notas dos alunos
Neste exercício, adiciona um array de strings para armazenar os nomes dos alunos e, em seguida, implementa uma estrutura aninhada que itera pelos nomes dos alunos no loop externo e as pontuações dos alunos no loop interno foreach. Você começa construindo a studentNames matriz e um foreach loop que itera através dos elementos da matriz. Em seguida, você move o código usado para calcular as notas de Sophia para o bloco de código do loop de "nomes". Finalmente, você implementa a lógica de código que usa o nome do aluno para acessar sua matriz de pontuações, calcular sua pontuação média e escrever sua nota no console. As tarefas detalhadas que você conclui durante este exercício são:
Criar matriz de nomes: crie uma matriz de nomes de alunos.
Criar loop externo: crie um
foreachloop que itere pelos nomes dos alunos.Desenvolver bloco de código de loop externo: realoque o código que calcula e relata a pontuação de Sophia, colocando-o no bloco de código do loop de "nomes".
Atualizar cálculos e relatórios: atualize o código que executa os cálculos de pontuação dos alunos usando uma nova matriz de pontuações.
Importante
Você precisa ter concluído o Exercício anterior deste módulo, "Criar matrizes e loops foreach", antes de começar este Exercício.
Criar uma matriz de nomes de alunos e um loop foreach externo
Nesta tarefa, você criará uma matriz de nomes de alunos e um foreach loop que itera pelos nomes dos alunos.
Verifique se você tem o arquivo Program.cs aberto no Editor de Códigos do Visual Studio.
Desloque-se para a parte superior do ficheiro de código e, em seguida, localize as linhas de código que são utilizadas para declarar as matrizes de pontuações.
Crie uma linha de código em branco abaixo da declaração das matrizes de pontuação.
Sua linha de código em branco deve estar localizada entre as linhas usadas para declarar as matrizes de pontuações e a linha usada para declarar
sophiaSum.Para criar uma matriz de cadeia de caracteres chamada
studentNamesque contém os nomes dos alunos, digite o seguinte código:// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };Observe que você especificou os nomes dos alunos como parte da declaração.
Para criar uma
foreachinstrução que você pode usar para iterar através dos nomes dos alunos, digite o seguinte código:foreach (string name in studentNames) { }Para verificar se o
foreachstudentNamesloop está iterando pela matriz conforme pretendido, atualize oforeachbloco de código da instrução da seguinte maneira:foreach (string name in studentNames) { Console.WriteLine($"{name}"); }Reserve um minuto para revisar o código que você criou.
// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" }; foreach (string name in studentNames) { Console.WriteLine($"{name}"); }Seu código usará esse
foreachloop como o loop externo do seu aplicativo. Durante este exercício, você implementará a seguinte lógica em seu aplicativo:Para cada um dos alunos da matriz, a
studentNamessua candidatura irá:- determinar o aluno atual.
- Acesse as pontuações atuais do aluno.
- Calcule a nota do aluno atual (soma e média).
- Escreva a nota do aluno atual no console.
Por enquanto, no entanto, você apenas escreverá os nomes dos alunos no console.
No menu "Arquivo" do Visual Studio Code, clique em "Salvar".
No modo de exibição Visual Studio Code EXPLORER, clique com o botão direito do mouse em Iniciador e selecione Abrir no Terminal Integrado.
Importante
O prompt de comando do Terminal deve estar exibindo o caminho da pasta para o arquivo Program.cs.
No prompt de comando do Terminal, digite dotnet build e pressione Enter.
O
dotnet buildcomando instrui o compilador a compilar o aplicativo. Se algum erro for detetado, ele será relatado.Se você vir mensagens de erro ou aviso, você precisa corrigi-los antes de continuar.
No prompt de comando do Terminal, digite dotnet run e pressione Enter.
Verifique se o código produziu a seguinte saída:
Sophia Andrew Emma Logan Student Grade Sophia: 92.2 A- Press the Enter key to continueNota
Se você não vir a lista de nomes de alunos acima do relatório de pontuação de Sophia, volte e verifique se você inseriu seu código corretamente.
No painel TERMINAL, para parar o aplicativo em execução, pressione a tecla Enter.
Feche o painel Terminal.
Calcular a pontuação de Sophia dentro do loop de nomes externos
Nesta tarefa, você realocará o código que calcula e relata a pontuação de Sophia, colocando-o no bloco de código do loop de "nomes".
No Editor de Códigos do Visual Studio, localize as linhas de código usadas para calcular e relatar a nota 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
Seu próximo passo será mover esse código de seu local atual para o bloco de código do loop "names".
foreachUse uma operação de cortar e colar para mover o código que calcula e relata a nota de Sophia para o bloco de código do loop "names".
foreachSe você não tiver certeza de como cortar e colar no Visual Studio Code, tente a abordagem descrita nas seguintes etapas:
Selecione o código usado para calcular e relatar a nota de Sophia.
Você pode clicar e arrastar para selecionar linhas de código.
No menu Editar código do Visual Studio, selecione Recortar.
No Editor de código do Visual Studio, posicione o cursor na linha de código em branco abaixo do seguinte código:
Console.WriteLine($"{name}");No menu Editar código do Visual Studio, selecione Colar.
Atualize seu código para exibir o recuo de linha de código adequado.
Gorjeta
Visual Studio Code fornece um
Format Documentcomando que pode ser usado para manter a formatação do código atualizado. Clique com o botão direito do mouse dentro do Editor de Códigos do Visual Studio e selecione Formatar Documento no menu pop-up. Em computadores Windows, o atalho de teclado para este comando é:Shift + Alt + F. Os computadores Linux e macOS usam atalhos alternativos quando necessário para evitar conflitos com os atalhos fornecidos pelo sistema operacional.Certifique-se de que suas atualizações correspondam ao seguinte código:
// 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();Observe que, neste momento, seu código calculará e relatará a
namepontuação de Sophia, independentemente do aluno atual. Você abordará isso em breve.Exclua o seguinte código:
Console.WriteLine($"{name}");Na linha de código em branco que você acabou de criar, digite o seguinte código:
if (name == "Sophia") {Crie uma linha de código em branco após o código que é usado para escrever a nota de Sophia no console.
Para fechar o bloco de código da
ifinstrução, digite o seguinte código:}Atualize seu código para exibir o recuo de linha de código adequado.
Gorjeta
Use o comando para manter a formatação do
Format Documentcódigo atualizada. Clique com o botão direito do mouse dentro do painel Editor de Códigos do Visual Studio e selecione Formatar Documento no menu pop-up.Reserve um minuto para rever o seu código.
Seu código deve corresponder ao seguinte código:
// 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 a instrução dentro do seu bloco de código externo
iflimitaforeachqual nota do aluno é calculada e relatada. Isso não é exatamente o que você precisa, mas é um passo na direção certa.No menu "Arquivo" do Visual Studio Code, clique em "Salvar".
No modo de exibição Visual Studio Code EXPLORER, clique com o botão direito do mouse em Iniciador e selecione Abrir no Terminal Integrado.
Importante
O prompt de comando do Terminal deve estar exibindo o caminho da pasta para o arquivo Program.cs.
No prompt de comando do Terminal, digite dotnet build e pressione Enter.
O
dotnet buildcomando instrui o compilador a compilar o aplicativo. Se algum erro for detetado, ele será relatado.Se você vir mensagens de erro ou aviso, você precisa corrigi-los antes de continuar.
No prompt de comando do Terminal, digite dotnet run e pressione Enter.
Verifique se o código produziu a seguinte saída:
Student Grade Sophia: 92.2 A-Nota
Se você ainda vir a lista de nomes de alunos exibida acima do relatório de pontuação de Sophia, certifique-se de salvar suas atualizações.
No painel TERMINAL, para parar o aplicativo em execução, pressione a tecla Enter.
Feche o painel Terminal.
Atualize o loop aninhado para calcular todas as pontuações dos alunos
Nesta tarefa, você atualizará o código que executa os cálculos de pontuação dos alunos usando uma nova matriz de pontuações. Você começará criando uma matriz chamada studentScores que pode ser usada para manter as pontuações de qualquer aluno. Em seguida, você criará uma if .. elseif construção que usa o nome do aluno atual para atribuir sua matriz de pontuações ao studentScores. Finalmente, você atualizará o código que calcula e relata as notas do aluno. Quando terminar, o relatório deve incluir o nome e a pontuação numérica de todos os alunos.
Crie uma linha de código em branco abaixo da declaração da
studentNamesmatriz.A linha em branco deve estar acima da instrução externa
foreach.Para criar uma matriz inteira que você pode usar para manter as pontuações do aluno atual, digite o seguinte código:
int[] studentScores = new int[10];Observe que esse código não atribui nenhum valor à matriz neste momento. Basta especificar que a matriz pode conter 10 elementos.
Crie uma linha de código em branco na parte superior do bloco de código externo
foreach.A linha em branco deve estar dentro do bloco de
foreachcódigo e acima da instrução que avaliaifsenameé igual a Sophia.Para criar uma variável de cadeia de caracteres que será usada para manter o nome do aluno atual, digite o seguinte código:
string currentStudent = name;Nota
Você pode continuar a usar
namepara rastrear o nome do aluno atual à medida que itera pela matriz de nomes, mas usarcurrentStudentfacilitará a compreensão da lógica do código à medida que você cria seu aplicativo nas próximas etapas.Para substituir
currentStudentnamenaifinstrução que avalia senameé igual a Sophia, atualize seu código da seguinte maneira:if (currentStudent == "Sophia")Mova o código que calcula e relata a pontuação de Sophia para um local abaixo do bloco de código.
Você está movendo todo o código que está no bloco de código para um local abaixo do bloco de código. A razão para fazer isso se tornará evidente durante as próximas etapas.
Verifique se o código no bloco de código externo
foreachcorresponde ao seguinte código:{ 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 atribuir a matriz a
sophiaScoresquandostudentScores, atualize ocurrentStudent == "Sophia"código daifinstrução da seguinte maneira:if (currentStudent == "Sophia") studentScores = sophiaScores;Observe que você removeu as chaves do bloco de código da instrução durante esta atualização de
ifcódigo.Para adicionar uma
else ifinstrução que atribui aandrewScoresmatriz astudentScoresquandocurrentStudent == "Andrew", digite o seguinte código:else if (currentStudent == "Andrew") studentScores = andrewScores;Crie outra
else ifinstrução para atribuir aemmaScoresmatriz astudentScoresquandocurrentStudent == "Emma".Crie uma
else ifinstrução para atribuir aloganScoresmatriz astudentScoresquandocurrentStudent == "Logan".Certifique-se de que o
foreachbloco de código corresponde ao seguinte código: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-"); }Em seguida, você precisa atualizar o loop interno
foreachpara usarstudentScorese "despersonalizar" as variáveis que você usa em seus cálculos.Para substituir
studentScoressophiaScoresnoforeachloop que itera através da matriz de pontuações, atualize seu código da seguinte maneira:foreach (int score in studentScores)Para substituir as declarações de variáveis específicas de Sophia por nomes mais genéricos, atualize seu código da seguinte maneira:
int sumAssignmentScores = 0; decimal currentStudentGrade = 0;Estas duas declarações de variáveis destinam-se a substituir as seguintes declarações de variáveis específicas de Sophia:
int sophiaSum = 0; decimal sophiaScore;Para aplicar o novo nome da variável à equação usada para somar as pontuações dos alunos, atualize o bloco de código interno
foreachda seguinte maneira:foreach (int score in studentScores) { // add the exam score to the sum sumAssignmentScores += score; }Para aplicar o novo nome da variável à equação usada para calcular a pontuação média, atualize o código da seguinte maneira:
currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;Reserve um minuto para rever o seu 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-"); }Seus loops aninhados
foreachagora irão iterar pelos nomes dos alunos e usar as pontuações dos alunos para calcular suas notas, mas você ainda precisa atualizar o código usado para gerar o relatório de pontuação.Para imprimir o nome do aluno e a pontuação calculada no console, atualize a segunda
Console.WriteLineinstrução da seguinte maneira:Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?");Observe que este código substituiu a atribuição de nota de letra por um "?". Você irá trabalhar na automatização da atribuição de classificações por letras no próximo exercício.
Mova a
Console.WriteLineinstrução usada para escrever os rótulos de coluna do relatório de pontuação para o local logo acima do loop externoforeach.Você não deseja repetir os cabeçalhos de coluna para cada pontuação do aluno, então mova esse código para um ponto acima do loop externo
foreach.No menu "Arquivo" do Visual Studio Code, clique em "Salvar".
Reserve um minuto para revisar o código do aplicativo.
A sua candidatura completa deve agora corresponder ao seguinte código:
// 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?"); }Com o código que gera o relatório de pontuação do aluno atualizado; Parece que você está pronto para verificar seu trabalho.
Verifique o seu trabalho
Nesta tarefa, você executará o aplicativo para verificar se a lógica de código está funcionando conforme o esperado.
Certifique-se de que guardou as alterações no ficheiro Program.cs.
No modo de exibição Visual Studio Code EXPLORER, clique com o botão direito do mouse em Iniciador e selecione Abrir no Terminal Integrado.
No prompt de comando do Terminal, digite dotnet build e pressione Enter.
Se você vir mensagens de erro ou aviso, você precisa corrigi-los antes de continuar.
No prompt de comando do Terminal, digite dotnet run e pressione Enter.
Verifique se o código produziu a seguinte saída:
Student Grade Sophia 92.2 ? Andrew 89.6 ? Emma 85.6 ? Logan 91.2 ? Press the Enter key to continueNo painel TERMINAL, para parar o aplicativo em execução, pressione a tecla Enter.
Feche o painel Terminal.
Parabéns, a sua aplicação percorreu um longo caminho desde o início. Está a fazer um uso eficiente de matrizes e foreach iterações, e integrou uma if declaração que permite ao seu código selecionar a matriz de pontuações correta.