Esercizio - Eseguire operazioni matematiche
Ora che si conoscono i concetti di base delle addizioni e, ancora più importante, della conversione implicita tra tipi di dati numerici e stringa, verranno esaminate varie altre operazioni matematiche comuni su dati numerici.
Eseguire operazioni matematiche di base
Scrivere il codice per eseguire addizione, sottrazione, moltiplicazione e divisione con numeri interi
Selezionare tutto il codice nell'editor .NET e quindi premere Canc o BACKSPACE per eliminarlo.
Immettere il codice seguente nell'editor .NET:
int sum = 7 + 5; int difference = 7 - 5; int product = 7 * 5; int quotient = 7 / 5; Console.WriteLine("Sum: " + sum); Console.WriteLine("Difference: " + difference); Console.WriteLine("Product: " + product); Console.WriteLine("Quotient: " + quotient);
Eseguire il codice. Verrà visualizzato l'output seguente:
Sum: 12 Difference: 2 Product: 35 Quotient: 1
Come si può notare:
+
è l'operatore di addizione-
è l'operatore di sottrazione*
è l'operatore di moltiplicazione/
è l'operatore di divisione
Tuttavia, il quoziente risultante dell'esempio di divisione potrebbe non essere quello previsto. I valori dopo il separatore decimale vengono troncati da quotient
perché è definito come int
e i tipi int
non possono contenere valori dopo il separatore decimale.
Aggiungere il codice per eseguire la divisione usando dati decimali letterali
Per verificare il corretto funzionamento della divisione, è necessario usare un tipo di dati che supporti le cifre frazionarie dopo il separatore decimale, ad esempio decimal
.
Eliminare il codice dei passaggi precedenti e immettere il codice seguente nell'editor .NET:
decimal decimalQuotient = 7.0m / 5; Console.WriteLine($"Decimal quotient: {decimalQuotient}");
Eseguire il codice. Verrà visualizzato l'output seguente:
Decimal quotient: 1.4
Per il funzionamento, il quoziente (a sinistra dell'operatore di assegnazione) deve essere di tipo decimal
e almeno uno dei numeri da dividere deve essere anche di tipo decimal
(entrambi i numeri possono essere un tipo decimal
).
Ecco due esempi aggiuntivi che funzionano ugualmente bene:
decimal decimalQuotient = 7 / 5.0m;
decimal decimalQuotient = 7.0m / 5.0m;
Tuttavia, le righe di codice seguenti non funzioneranno o restituiranno risultati non accurati:
int decimalQuotient = 7 / 5.0m;
int decimalQuotient = 7.0m / 5;
int decimalQuotient = 7.0m / 5.0m;
decimal decimalQuotient = 7 / 5;
Aggiungere codice per eseguire il cast dei risultati della divisione di interi
Cosa accade se non si usano valori letterali? In altre parole, come si procede se è necessario dividere due variabili di tipo int
, ma non si vuole troncare il risultato? In tal caso, è necessario eseguire un cast del tipo di dati da int
a decimal
. Il cast è un tipo di conversione dei dati che indica al compilatore di gestire temporaneamente un valore come se si trattasse di un tipo di dati diverso.
Per eseguire il cast di int
a decimal
, è necessario aggiungere l'operatore di cast prima del valore. Si userà il nome del tipo di dati racchiuso tra parentesi prima del valore per eseguirne il cast. In questo caso, si aggiungerà (decimal)
prima delle variabili first
e second
.
Eliminare il codice dei passaggi precedenti e immettere il codice seguente nell'editor .NET:
int first = 7; int second = 5; decimal quotient = (decimal)first / (decimal)second; Console.WriteLine(quotient);
Eseguire il codice. Verrà visualizzato l'output seguente:
1.4
Nota
Sono stati presentati tre diversi usi, o overload, dell'operatore parentesi, ovvero chiamata di metodo, ordine delle operazioni e cast.
Passaggio 4 - Scrivere il codice per determinare il resto dopo la divisione di numeri interi
L'operatore modulo %
indica il resto della divisione di int
. Quello che si appura in effetti da questa operazione è se un numero è divisibile per un altro. Questa informazione può essere utile durante operazioni di lunga durata quando si scorrono ciclicamente centinaia o migliaia di record di dati e si vuole fornire un riscontro all'utente finale al termine dell'elaborazione di ogni 100 di record di dati.
Eliminare il codice dei passaggi precedenti e immettere il codice seguente nell'editor .NET:
Console.WriteLine($"Modulus of 200 / 5 : {200 % 5}"); Console.WriteLine($"Modulus of 7 / 5 : {7 % 5}");
Eseguire il codice. Verrà visualizzato l'output seguente:
Modulus of 200 / 5 : 0 Modulus of 7 / 5 : 2
Quando il modulo è 0, significa che il dividendo è divisibile per il divisore.
Ordine delle operazioni
Come appreso nell'esercizio precedente, è possibile usare i simboli ()
come operatori di ordine delle operazioni. Tuttavia, questo non è l'unico modo in cui viene determinato l'ordine delle operazioni.
In matematica, PEMDAS è un acronimo usato dagli studenti per ricordare l'ordine delle operazioni. L'ordine è:
- Parentesi (tutte le operazioni all'interno delle parentesi vengono eseguite per prime)
- Elevamenti a potenza
- Moltiplicazione e Divisione (da sinistra a destra)
- Addizione e Sottrazione (da sinistra a destra)
C# segue lo stesso ordine di PEMDAS, con l'eccezione dell'elevamento a potenza. Sebbene non esista alcun operatore di elevamento a potenza in C#, è possibile usare il metodo System.Math.Pow. Questo metodo e altri sono l'argomento del modulo "Chiamare i metodi dalla libreria di classi .NET usando C#".
Scrivere codice per fare pratica con l'ordine delle operazioni di C#
Eliminare il codice dei passaggi precedenti e immettere il codice seguente nell'editor .NET:
int value1 = 3 + 4 * 5; int value2 = (3 + 4) * 5; Console.WriteLine(value1); Console.WriteLine(value2);
Qui vengono indicate le differenze relative all'esecuzione delle stesse operazioni in un ordine diverso.
Eseguire il codice. Verrà visualizzato l'output seguente:
23 35
Riepilogo
Ecco quanto appreso finora sulle operazioni matematiche in C#:
- Usare operatori come
+
,-
,*
e/
per eseguire le operazioni matematiche di base. - La divisione di due valori
int
causerà il troncamento di qualsiasi valore dopo il separatore decimale. Per mantenere i valori dopo il separatore decimale, è prima di tutto necessario eseguire il cast del divisore o del dividendo (o di entrambi) daint
a un numero a virgola mobile comedecimal
, quindi il quoziente deve essere dello stesso tipo a virgola mobile per evitare il troncamento. - Eseguire un'operazione cast per gestire temporaneamente un valore come se si trattasse di un tipo di dati diverso.
- Usare l'operatore
%
per acquisire il resto dopo la divisione. - L'ordine delle operazioni seguirà le regole dell'acronimo PEMDAS.