Calcolatrice Modulare a Più Funzioni
Argomenti: funzioni multiple, combinazione di procedure e funzioni, selezione del flusso, architettura modulare
In questo laboratorio faremo un salto di qualità: costruiremo un'applicazione completa articolata su più funzioni indipendenti. Realizzeremo una Calcolatrice Modulare dove ciascun calcolo matematico (Somma, Moltiplicazione, Potenza) è affidato a una funzione specifica, coordinate da una procedura per la stampa del menu.
Traccia dell'Esercizio:
Progetta un algoritmo per una calcolatrice che consenta all'utente di scegliere quale operazione eseguire su due numeri reali inseriti.
L'algoritmo deve includere:
- La procedura
MostraMenu()per stampare le opzioni (1. Somma, 2. Moltiplicazione, 3. Potenza). - La funzione
CalcolaSomma(a, b)che restituisce la somma dei due numeri. - La funzione
CalcolaProdotto(a, b)che restituisce il prodotto dei due numeri. - La funzione
CalcolaPotenza(base, esponente)che calcola e restituisce $ ext{base}^{ ext{esponente}}$. - Nel programma principale (Main): mostrare il menu, leggere la scelta e i due numeri, e chiamare la funzione corrispondente mostrando il risultato finale.
1. Tabella delle Variabili e Dominio dei Dati
Memoria: Identificazione delle componenti e delle variabili nei vari ambiti
| Ambito (Scope) | Nome Variabile / Parametro | Tipo di Dato | Ruolo / Descrizione |
|---|---|---|---|
| Procedura MostraMenu |
Nessuno | Void | Stampa a schermo il menu con le 3 opzioni disponibili. |
| Funzione CalcolaSomma |
a, b |
Reale | Parametri Formali: I due addendi da sommare. |
s |
Reale | Ritorna: Il risultato dell'operazione a + b. |
|
| Funzione CalcolaProdotto |
a, b |
Reale | Parametri Formali: I due fattori da moltiplicare. |
p |
Reale | Ritorna: Il risultato dell'operazione a * b. |
|
| Funzione CalcolaPotenza |
base, esp |
Reale | Parametri Formali: La base e l'esponente. |
pot |
Reale | Ritorna: Il risultato dell'elevamento a potenza. | |
| Main Programma Principale |
opzione |
Intero | Input: Scelta dell'operazione dal menu (1, 2 o 3). |
n1, n2 |
Reale | Input: I due valori numerici inseriti dall'utente. | |
risultato |
Reale | Elaborazione: Memorizza il valore restituito dalla funzione chiamata. |
2. Algoritmo Risolutivo e Diagramma di Flusso
Rappresentazione: Flowchart e Pseudocodice affiancati
Selezione: In base all'opzione chiama la funzione specifica
Output: Stampa il risultato calcolato
| 1 | // PROCEDURA MENU |
| 2 | Procedura MostraMenu() |
| 3 | Scrivi "1. Somma | 2. Prodotto | 3. Potenza" |
| 4 | Fine Procedura |
| 5 | |
| 6 | // FUNZIONI DI CALCOLO |
| 7 | Funzione CalcolaSomma(Reale a, Reale b) : Reale |
| 8 | Ritorna (a + b) |
| 9 | Fine Funzione |
| 10 | |
| 11 | Funzione CalcolaProdotto(Reale a, Reale b) : Reale |
| 12 | Ritorna (a * b) |
| 13 | Fine Funzione |
| 14 | |
| 15 | Funzione CalcolaPotenza(Reale base, Reale esp) : Reale |
| 16 | Ritorna (base ^ esp) |
| 17 | Fine Funzione |
| 18 | |
| 19 | // PROGRAMMA PRINCIPALE (MAIN) |
| 20 | Inizio |
| 21 | Intero opzione |
| 22 | Reale n1, n2, risultato |
| 23 | MostraMenu() |
| 24 | Leggi opzione |
| 25 | Scrivi "Inserisci due numeri:" |
| 26 | Leggi n1, n2 |
| 27 | Se (opzione == 1) Allora |
| 28 | risultato = CalcolaSomma(n1, n2) |
| 29 | Altrimenti Se (opzione == 2) Allora |
| 30 | risultato = CalcolaProdotto(n1, n2) |
| 31 | Altrimenti |
| 32 | risultato = CalcolaPotenza(n1, n2) |
| 33 | Fine Se |
| 34 | Scrivi "Risultato: ", risultato |
| 35 | Fine |
3. Tabella di Traccia dell'Esecuzione (Trace Table)
Simulazione: Scelta opzione = 2 (Prodotto) con n1 = 4 e n2 = 3
| Passo / Riga | Ambito (Scope) | Istruzione Eseguita | Parametri Attuali ➔ Formali | Valore Restituito | Stato Variabili (Main) |
|---|---|---|---|---|---|
| Righe 23-26 | Main | Mostra menu e leggi opzione, n1, n2 | - | - | opzione = 2, n1 = 4, n2 = 3 |
| Riga 30 | Funzione CalcolaProdotto |
Invocazione e calcolo prodotto | n1, n2 ➔ a = 4, b = 3 | 12.0 (4 * 3) | opzione = 2, n1 = 4, n2 = 3 |
| Righe 30-34 | Main | Assegnazione a risultato e Stampa | - | - | risultato = 12.0 |
Osservazione
Nota come le variabili a e b definite dentro CalcolaSomma siano del tutto distinte e indipendenti dalle variabili a e b di CalcolaProdotto. Ogni sottoprogramma gestisce le proprie variabili in un'area riservata della memoria (ambito locale)!
La Sfida: Aggiunta della Divisione con Controllo dello Zero
Ora che hai capito come affiancare più funzioni nello stesso progetto, accetti la sfida?
Estendi la calcolatrice aggiungendo la **quarta operazione**: la Divisione.
- Aggiungi al menu l'opzione
4. Divisione. - Crea la nuova funzione
CalcolaDivisione(dividendo, divisore). - Gestisci il caso limite: Se il divisore è uguale a zero, la funzione deve mostrare un messaggio di errore ed evitare la divisione per zero restituendo
0. - Aggiorna il Main per gestire la nuova opzione del menu.
Suggerimento: All'interno della funzione CalcolaDivisione inserisci un'istruzione Se (divisore == 0) prima di eseguire l'operazione di divisione!
In sintesi
Argomenti: concetti principali, riepilogo, competenze
- Scomposizione avanzata: un singolo programma principale coordina l'uso di più funzioni e procedure.
- Specializzazione delle funzioni: ciascuna funzione svolge un'unica operazione aritmetica sui parametri ricevuti.
- Creare e gestire un progetto contenente più di una funzione nello stesso file.
- Utilizzare una procedura per mostrare il menu ed invocare la funzione di calcolo corretta in base alla scelta dell'utente.
- Comprendere l'isolamento delle variabili tra funzioni distinte.