Exercício - Construa uma estrutura de loop aninhada para cálculos de notas dos alunos

Concluído

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:

  1. Criar matriz de nomes: crie uma matriz de nomes de alunos.

  2. Criar loop externo: crie um foreach loop que itere pelos nomes dos alunos.

  3. 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".

  4. 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.

  1. Verifique se você tem o arquivo Program.cs aberto no Editor de Códigos do Visual Studio.

  2. 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.

  3. 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.

  4. Para criar uma matriz de cadeia de caracteres chamada studentNames que 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.

  5. Para criar uma foreach instrução que você pode usar para iterar através dos nomes dos alunos, digite o seguinte código:

    foreach (string name in studentNames)
    {
    }
    
  6. Para verificar se o foreachstudentNames loop está iterando pela matriz conforme pretendido, atualize o foreach bloco de código da instrução da seguinte maneira:

    foreach (string name in studentNames)
    {
        Console.WriteLine($"{name}");
    
    }
    
  7. 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 foreach loop 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 studentNames sua 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.

  8. No menu "Arquivo" do Visual Studio Code, clique em "Salvar".

  9. 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.

  10. No prompt de comando do Terminal, digite dotnet build e pressione Enter.

    O dotnet build comando instrui o compilador a compilar o aplicativo. Se algum erro for detetado, ele será relatado.

  11. Se você vir mensagens de erro ou aviso, você precisa corrigi-los antes de continuar.

  12. No prompt de comando do Terminal, digite dotnet run e pressione Enter.

  13. 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 continue
    

    Nota

    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.

  14. No painel TERMINAL, para parar o aplicativo em execução, pressione a tecla Enter.

  15. 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".

  1. 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". foreach

  2. Use 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". foreach

    Se você não tiver certeza de como cortar e colar no Visual Studio Code, tente a abordagem descrita nas seguintes etapas:

    1. Selecione o código usado para calcular e relatar a nota de Sophia.

      Você pode clicar e arrastar para selecionar linhas de código.

    2. No menu Editar código do Visual Studio, selecione Recortar.

    3. 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}");

    4. No menu Editar código do Visual Studio, selecione Colar.

  3. Atualize seu código para exibir o recuo de linha de código adequado.

    Gorjeta

    Visual Studio Code fornece um Format Document comando 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.

  4. 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 name pontuação de Sophia, independentemente do aluno atual. Você abordará isso em breve.

  5. Exclua o seguinte código:

    Console.WriteLine($"{name}");
    
  6. Na linha de código em branco que você acabou de criar, digite o seguinte código:

    if (name == "Sophia")
    {    
    
  7. Crie uma linha de código em branco após o código que é usado para escrever a nota de Sophia no console.

  8. Para fechar o bloco de código da if instrução, digite o seguinte código:

    }    
    
  9. 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 Document có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.

  10. 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 if limita foreach qual nota do aluno é calculada e relatada. Isso não é exatamente o que você precisa, mas é um passo na direção certa.

  11. No menu "Arquivo" do Visual Studio Code, clique em "Salvar".

  12. 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.

  13. No prompt de comando do Terminal, digite dotnet build e pressione Enter.

    O dotnet build comando instrui o compilador a compilar o aplicativo. Se algum erro for detetado, ele será relatado.

  14. Se você vir mensagens de erro ou aviso, você precisa corrigi-los antes de continuar.

  15. No prompt de comando do Terminal, digite dotnet run e pressione Enter.

  16. 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.

  17. No painel TERMINAL, para parar o aplicativo em execução, pressione a tecla Enter.

  18. 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.

  1. Crie uma linha de código em branco abaixo da declaração da studentNames matriz.

    A linha em branco deve estar acima da instrução externa foreach .

  2. 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.

  3. 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 foreach código e acima da instrução que avalia if se name é igual a Sophia.

  4. 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 name para rastrear o nome do aluno atual à medida que itera pela matriz de nomes, mas usar currentStudent facilitará a compreensão da lógica do código à medida que você cria seu aplicativo nas próximas etapas.

  5. Para substituir currentStudentname na if instrução que avalia se name é igual a Sophia, atualize seu código da seguinte maneira:

    if (currentStudent == "Sophia")
    
  6. 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.

  7. Verifique se o código no bloco de código externo foreach corresponde 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-");
    
    }
    
  8. Para atribuir a matriz a sophiaScores quando studentScores, atualize o currentStudent == "Sophia" código da if instruçã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 if código.

  9. Para adicionar uma else if instrução que atribui a andrewScores matriz a studentScores quando currentStudent == "Andrew", digite o seguinte código:

    else if (currentStudent == "Andrew")
        studentScores = andrewScores;
    
    
  10. Crie outra else if instrução para atribuir a emmaScores matriz a studentScores quando currentStudent == "Emma".

  11. Crie uma else if instrução para atribuir a loganScores matriz a studentScores quando currentStudent == "Logan".

  12. Certifique-se de que o foreach bloco 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 foreach para usar studentScores e "despersonalizar" as variáveis que você usa em seus cálculos.

  13. Para substituir studentScoressophiaScores no foreach loop que itera através da matriz de pontuações, atualize seu código da seguinte maneira:

    foreach (int score in studentScores)
    
  14. 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;
    
  15. 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 foreach da seguinte maneira:

    foreach (int score in studentScores)
    {
        // add the exam score to the sum
        sumAssignmentScores += score;
    }
    
  16. 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;
    
  17. 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 foreach agora 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.

  18. Para imprimir o nome do aluno e a pontuação calculada no console, atualize a segunda Console.WriteLine instruçã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.

  19. Mova a Console.WriteLine instrução usada para escrever os rótulos de coluna do relatório de pontuação para o local logo acima do loop externo foreach .

    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 .

  20. No menu "Arquivo" do Visual Studio Code, clique em "Salvar".

  21. 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.

  1. Certifique-se de que guardou as alterações no ficheiro Program.cs.

  2. 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.

  3. No prompt de comando do Terminal, digite dotnet build e pressione Enter.

  4. Se você vir mensagens de erro ou aviso, você precisa corrigi-los antes de continuar.

  5. No prompt de comando do Terminal, digite dotnet run e pressione Enter.

  6. 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 continue
    
  7. No painel TERMINAL, para parar o aplicativo em execução, pressione a tecla Enter.

  8. 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.