Exercício – Formatar a saída decimal

Concluído

Neste exercício, você calculará o GPA final e modificará a saída do console para obter o formato de relatório desejado. O GPA é igual à soma do total de pontos de nota divididos pela soma do total de horas de crédito.

Calcular o GPA final

  1. No Editor do .NET, localize as instruções Console.WriteLine() usadas para exibir as informações do curso.

  2. Remova o seguinte código do exercício anterior:

    Console.WriteLine($"{totalGradePoints} {totalCreditHours}");
    

    Como você já verificou que seus valores estão corretos, essa linha não é mais necessária.

  3. Crie uma linha de código em branco acima das instruções Console.WriteLine().

  4. Na linha de código em branco que você criou, insira o seguinte código para inicializar uma variável que armazenará o GPA final:

    decimal gradePointAverage = totalGradePoints/totalCreditHours;
    
    
  5. Reserve um momento para pensar sobre os tipos de dados que você está dividindo.

    Quando você deseja que o resultado de um cálculo de divisão seja um valor decimal, o dividendo ou o divisor (ou ambos) deve ser do tipo decimal. Se usar variáveis interger no cálculo, será necessário usar o operador de conversão para converter temporariamente o inteiro em decimal.

  6. Para obter um valor decimal na divisão, atualize seu código da seguinte maneira:

    decimal gradePointAverage = (decimal) totalGradePoints/totalCreditHours;
    
    
  7. Navegue até a última instrução Console.WriteLine() e crie uma linha de código em branco após a última instrução.

  8. Para exibir o GPA final, insira o seguinte código:

    Console.WriteLine($"Final GPA: {gradePointAverage}");
    
  9. Para ver os resultados, selecione Executar.

    Compare a saída do seu aplicativo com a seguinte saída:

    English 101 4 3
    Algebra 101 3 3
    Biology 101 3 4
    Computer Science I 3 4
    Psychology 101 4 3
    Final GPA: 3.3529411764705882352941176471
    

Formatar a saída decimal

Você deve ter notado que o resultado decimal contém muito mais dígitos do que um GPA padrão. Nesta tarefa, você manipulará o valor de GPA decimal para que apenas três dígitos sejam exibidos.

Por fim, você deseja exibir o primeiro dígito do GPA, o separador decimal, seguido pelos dois primeiros dígitos após o separador decimal. Você pode obter esse formato usando variáveis para armazenar os dígitos à esquerda e à direita, respectivamente, e imprimi-los juntos usando Console.WriteLine(). Você pode usar as operações matemáticas que aprendeu para extrair os dígitos à esquerda e à direita.

Observação

Ao continuar sua jornada de desenvolvedor, você descobrirá operações internas que podem aplicar automaticamente a formatação aos seus dados. Por enquanto, esta é uma grande oportunidade para solidificar o que você aprendeu até agora.

  1. Navegue até a parte superior das instruções Console.WriteLine().

  2. Crie uma linha de código em branco acima das instruções Console.WriteLine().

  3. Na linha de código em branco que você criou, insira o seguinte código para inicializar uma variável que armazenará o dígito inicial do GPA:

    int leadingDigit = (int) gradePointAverage;
    
    

    Observe que, para extrair o dígito à esquerda do decimal, você o está convertendo em um valor inteiro. Esse é um método simples e confiável porque a conversão de um valor fracionário nunca arredondará o resultado. Ou seja, se o GPA for 2,99, converter o valor decimal para int resultará em 2.

  4. Para inicializar uma variável que armazenará os dois primeiros dígitos após o separador decimal, insira o seguinte código:

    int firstDigit = (int) (gradePointAverage * 10) % 10;
    

    Na primeira metade desta operação, você move o decimal uma posição para a direita e converte-o em um inteiro. No segundo semestre, você usa o operador restante, ou módulo, para obter o restante da divisão por 10, o que isola o último dígito no inteiro. Veja um exemplo:

    Suponha que gradePointAverage = 2.994573; em seguida, executar a operação nesses valores resultaria nas seguintes etapas:

    int firstDigit = (int) (2.994573 * 10) % 10;
    int firstDigit = 29 % 10;
    int firstDigit = 9;
    

    E o valor resultante de firstDigit é 9.

    Em seguida, você aplicará a mesma operação para recuperar o segundo dígito.

  5. Em uma nova linha de código em branco, insira o seguinte código:

    int secondDigit = (int) (gradePointAverage * 100 ) % 10;
    

    Nessa linha, você move as duas casas decimais e usa o operador de módulo para recuperar o último dígito.

  6. Para corrigir a saída do GPA final, atualize a última instrução Console.WriteLine() da seguinte maneira:

    Console.WriteLine($"Final GPA: {leadingDigit}.{firstDigit}{secondDigit}");
    

Verificar seu trabalho

Nesta tarefa, você executará o código e verificará se a saída está correta.

  1. Verifique se o código é semelhante ao seguinte:

    string studentName = "Sophia Johnson";
    string course1Name = "English 101";
    string course2Name = "Algebra 101";
    string course3Name = "Biology 101";
    string course4Name = "Computer Science I";
    string course5Name = "Psychology 101";
    
    int course1Credit = 3;
    int course2Credit = 3;
    int course3Credit = 4;
    int course4Credit = 4;
    int course5Credit = 3;
    
    int gradeA = 4;
    int gradeB = 3;
    
    int course1Grade = gradeA;
    int course2Grade = gradeB;
    int course3Grade = gradeB;
    int course4Grade = gradeB;
    int course5Grade = gradeA;
    
    int totalCreditHours = 0;
    totalCreditHours += course1Credit;
    totalCreditHours += course2Credit;
    totalCreditHours += course3Credit;
    totalCreditHours += course4Credit;
    totalCreditHours += course5Credit;
    
    int totalGradePoints = 0;
    totalGradePoints += course1Credit * course1Grade;
    totalGradePoints += course2Credit * course2Grade;
    totalGradePoints += course3Credit * course3Grade;
    totalGradePoints += course4Credit * course4Grade;
    totalGradePoints += course5Credit * course5Grade;
    
    decimal gradePointAverage = (decimal) totalGradePoints/totalCreditHours;
    
    int leadingDigit = (int) gradePointAverage;
    int firstDigit = (int) (gradePointAverage * 10 ) % 10;
    int secondDigit = (int) (gradePointAverage * 100 ) % 10;
    
    Console.WriteLine($"{course1Name} {course1Grade} {course1Credit}");
    Console.WriteLine($"{course2Name} {course2Grade} {course2Credit}");
    Console.WriteLine($"{course3Name} {course3Grade} {course3Credit}");
    Console.WriteLine($"{course4Name} {course4Grade} {course4Credit}");
    Console.WriteLine($"{course5Name} {course5Grade} {course5Credit}");
    
    Console.WriteLine($"Final GPA: {leadingDigit}.{firstDigit}{secondDigit}");
    
  2. Para executar o código e exibir a saída formatada, selecione Executar.

  3. Para verificar se o código está funcionando conforme o esperado, compare a saída do aplicativo com a seguinte saída:

    English 101 4 3
    Algebra 101 3 3
    Biology 101 3 4
    Computer Science I 3 4
    Psychology 101 4 3
    Final GPA: 3.35
    

    Se o código exibir resultados diferentes, você precisará examinar o código para encontrar o erro e fazer atualizações. Execute o código novamente para ver se você corrigiu o problema. Continue atualizando e executando o código até que ele produza os resultados esperados.

Importante

Não exclua nenhuma parte do código que você escreveu até agora. Você trabalhar com base nesse código no próximo exercício.