Esercizio - Formattare l'output decimale

Completato

In questo esercizio si calcola il voto GPA finale e si modifica l'output della console per ottenere il formato di report desiderato. Il voto GPA equivale alla somma dei punti dei voti totali suddivisi in base alla somma delle ore di credito totali.

Calcolare il voto GPA finale

  1. Nell'editor .NET individuare le istruzioni Console.WriteLine() usate per visualizzare le informazioni sul corso.

  2. Rimuovere il codice seguente dall'esercizio precedente:

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

    Poiché si è verificato che i valori sono corretti, questa riga non è più necessaria.

  3. Creare una riga di codice vuota sopra le istruzioni Console.WriteLine().

  4. Nella riga di codice vuota creata per inizializzare una variabile che archivierà il voto GPA finale, immettere il codice seguente:

    decimal gradePointAverage = totalGradePoints/totalCreditHours;
    
    
  5. Prendere in considerazione i tipi di dati in fase di divisione.

    Quando si desidera che il risultato di un calcolo di divisione sia un valore decimale, il dividendo o il divisore deve essere di tipo decimale (o entrambi). Quando si usano variabili integer nel calcolo, è necessario usare l'operatore cast per convertire temporaneamente un integer in un decimale.

  6. Per recuperare un valore decimale dalla divisione, aggiornare il codice come segue:

    decimal gradePointAverage = (decimal) totalGradePoints/totalCreditHours;
    
    
  7. Passare all'ultima istruzione Console.WriteLine() e creare una nuova riga di codice vuota dopo l'ultima istruzione.

  8. Per visualizzare il voto GPA finale, immettere il codice seguente:

    Console.WriteLine($"Final GPA: {gradePointAverage}");
    
  9. Per visualizzare i risultati, selezionare Esegui.

    Confrontare l'output dell'applicazione con quello seguente:

    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
    

Formattare l'output decimale

Potrebbe essere stato notato che il risultato decimale contiene molte più cifre di un oggetto Criteri di gruppo standard. In questa attività verrà modificato il valore del voto GPA in modo che vengano visualizzate solo tre cifre.

In definitiva, si vuole visualizzare la prima cifra del voto GPA, un punto decimale, seguito dalle prime due cifre dopo il decimale. È possibile ottenere questo formato usando le variabili per archiviare rispettivamente le cifre iniziali e finali e quindi stamparle insieme usando Console.WriteLine(). È possibile usare le operazioni matematiche apprese per estrarre le cifre iniziali e finali.

Nota

Continuando il percorso di sviluppatori, si scopriranno operazioni predefinite con cui è possibile applicare automaticamente la formattazione ai dati. Per il momento, questa è una grande opportunità per consolidare ciò che si è appreso finora.

  1. Passare all'inizio delle istruzioni Console.WriteLine().

  2. Creare una riga di codice vuota sopra le istruzioni Console.WriteLine().

  3. Nella riga di codice vuota creata per inizializzare una variabile che archivierà la cifra iniziale del voto GPA, immettere il codice seguente:

    int leadingDigit = (int) gradePointAverage;
    
    

    Si noti che per estrarre la cifra iniziale dal decimale si esegue il cast in un valore integer. Si tratta di un metodo semplice e affidabile perché il cast di un valore frazionario non arrotonderà mai il risultato. In altre parole, se il voto GPA è 2,99, il cast del valore decimale in un oggetto int darà 2 come risultato.

  4. Per inizializzare una variabile che archivierà le prime due cifre dopo il decimale, immettere il codice seguente:

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

    Nella prima metà di questa operazione, si sposta il decimale di una posizione a destra e si esegue così il cast a un numero intero. Nella seconda metà si usa il resto, o operatore modulo, per ottenere il resto della divisione per 10, che isola l'ultima cifra del numero intero. Ecco un esempio:

    Si supponga di avere gradePointAverage = 2.994573. Eseguire l'operazione su questi valori comporterebbe la procedura seguente:

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

    E il valore risultante di firstDigit è 9.

    Successivamente, si applicherà la stessa operazione per ottenere la seconda cifra.

  5. In una nuova riga di codice vuota, immettere il codice seguente:

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

    In questa riga si sposta il decimale di due posizioni e si usa l'operatore modulo per ottenere l'ultima cifra.

  6. Per correggere l'output dell'oggetto Criteri di gruppo finale, aggiornare l'ultima istruzione Console.WriteLine() come indicato di seguito:

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

Controllare il lavoro svolto

In questa attività si eseguirà il codice e si verificherà che l'output sia corretto.

  1. Verificare che il codice sia simile al seguente:

    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. Per eseguire il codice e visualizzare l'output formattato, selezionare Esegui.

  3. Per verificare che il codice funzioni come previsto, confrontare l'output dell'applicazione con l'output seguente:

    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 il codice visualizza risultati diversi, è necessario esaminarlo per trovare l'errore e apportare aggiornamenti. Eseguire di nuovo il codice per verificare se il problema è stato risolto. Continuare ad aggiornare ed eseguire il codice fino a quando non produce i risultati previsti.

Importante

Assicurati di non eliminare il codice scritto finora. Userai questo codice come base nell'esercizio successivo.