Primo Esercizio in Laboratorio: Chiamate Multiple a una Funzione
Argomenti: riutilizzo delle funzioni, chiamate multiple dal Main, parametri attuali differenti, somma dei risultati
In questo laboratorio realizzeremo un algoritmo applicato a un problema reale: il calcolo dell'area totale di un appartamento composto da più stanze, applicando per la prima volta il concetto di riutilizzo delle funzioni e gestione delle chiamate multiple all'interno dello stesso programma principale.
Esercizio:
Progetta un algoritmo per calcolare l'area totale di un appartamento composto da due stanze rettangolari.
L'algoritmo deve:
- Definire un'unica funzione
CalcolaArea(base, altezza)che calcola e restituisce l'area di un rettangolo. - Chiedere all'utente le dimensioni della Prima Stanza (base1, altezza1) e calcolarne l'area richiamando la funzione.
- Chiedere all'utente le dimensioni della Seconda Stanza (base2, altezza2) e calcolarne l'area richiamando la stessa funzione.
- Sommare le due aree e mostrare a schermo l'area totale dell'appartamento.
Perché questo esercizio mostra il potenziale delle Funzioni?
Anziché scrivere due volte la formula della moltiplicazione, definiamo il sottoprogramma CalcolaArea una sola volta. Nel programma principale eseguiamo due chiamate distinte: la prima volta passando b1, h1 e la seconda volta passando b2, h2.
Analisi dei Dati e Tabella delle Variabili
Identificazione dei parametri formali della funzione e delle variabili utilizzate nel programma principale (Main):
| Ambito (Scope) | Nome Variabile | Tipo di Dato | Ruolo / Descrizione |
|---|---|---|---|
| Funzione CalcolaArea |
base |
Reale (Float) | Parametro Formale: Riceve la base della stanza dal Main. |
altezza |
Reale (Float) | Parametro Formale: Riceve l'altezza della stanza dal Main. | |
a |
Reale (Float) | Variabile Locale / Ritorna: Calcola e restituisce l'area (base * altezza). |
|
| Main Programma Principale |
b1 |
Reale (Float) | Input / Parametro Attuale 1: Base della prima stanza. |
h1 |
Reale (Float) | Input / Parametro Attuale 1: Altezza della prima stanza. | |
b2 |
Reale (Float) | Input / Parametro Attuale 2: Base della seconda stanza. | |
h2 |
Reale (Float) | Input / Parametro Attuale 2: Altezza della seconda stanza. | |
area1 |
Reale (Float) | Elaborazione: Memorizza l'area restituita dalla 1ª chiamata. | |
area2 |
Reale (Float) | Elaborazione: Memorizza l'area restituita dalla 2ª chiamata. | |
areaTotale |
Reale (Float) | Output: Somma delle due aree (area1 + area2). |
Algoritmo Risolutivo
Chiamata 2: area2 = CalcolaArea(b2, h2)
Totale: areaTotale = area1 + area2
| 1 | // DEFINIZIONE DELLA FUNZIONE (Scritta 1 sola volta) |
| 2 | Funzione CalcolaArea(Reale base, Reale altezza) : Reale |
| 3 | Reale a |
| 4 | a = base * altezza |
| 5 | Ritorna a |
| 6 | Fine Funzione |
| 7 | |
| 8 | // PROGRAMMA PRINCIPALE (MAIN) |
| 9 | Inizio |
| 10 | Reale b1, h1, b2, h2, area1, area2, areaTotale |
| 11 | |
| 12 | // Input e Prima Chiamata (Stanza 1) |
| 13 | Scrivi "Inserisci base e altezza della prima stanza:" |
| 14 | Leggi b1, h1 |
| 15 | area1 = CalcolaArea(b1, h1) // PRIMA CHIAMATA |
| 16 | |
| 17 | // Input e Seconda Chiamata (Stanza 2) |
| 18 | Scrivi "Inserisci base e altezza della seconda stanza:" |
| 19 | Leggi b2, h2 |
| 20 | area2 = CalcolaArea(b2, h2) // SECONDA CHIAMATA |
| 21 | |
| 22 | // Somma finale delle due aree |
| 23 | areaTotale = area1 + area2 |
| 24 | Scrivi "L'area totale dell'appartamento e': ", areaTotale |
| 25 | Fine |
Analisi delle due chiamate nel programma:
- Prima Chiamata (riga 15): La funzione riceve i parametri attuali
b1eh1, li assegna abaseealtezza, calcola il risultato e lo salva inarea1. - Seconda Chiamata (riga 20): La stessa funzione riceve ora i nuovi parametri attuali
b2eh2, esegue nuovamente il calcolo e salva il nuovo risultato inarea2.
Tabella di Traccia dell'Esecuzione (Trace Table)
Simulazione passo-passo dell'algoritmo con Stanza 1 (5m × 4m) e Stanza 2 (3m × 3m).
| Passo / Riga | Azione / Istruzione | Input / Dati | Parametri Attuali ➔ Formali | Valore Restituito | Stato Variabili (Main) |
|---|---|---|---|---|---|
| Riga 10-14 | Inizio e Input Stanza 1 | b1 = 5, h1 = 4 | - | - | b1 = 5, h1 = 4 |
| Riga 15 (Chiamata 1) | Invocazione CalcolaArea(5, 4) |
- | b1, h1 ➔ base=5, altezza=4 | 20.0 (5 × 4) | area1 = 20.0 |
| Riga 18-19 | Input Stanza 2 | b2 = 3, h2 = 3 | - | - | b2 = 3, h2 = 3 |
| Riga 20 (Chiamata 2) | Invocazione CalcolaArea(3, 3) |
- | b2, h2 ➔ base=3, altezza=3 | 9.0 (3 × 3) | area2 = 9.0 |
| Riga 23-24 | Calcolo Somma ed Output | - | - | - | areaTotale = 29.0 |
Osservazione
Notate come la funzione CalcolaArea sia completamente "cieca" rispetto a quante stanze stiamo calcolando: essa sa solo moltiplicare due valori ricevuti in ingresso. È il programma principale (Main) che decide quante volte invocarla e cosa fare con i risultati ottenuti!
La Sfida: Area di un Appartamento con N Stanze
Ora che hai capito come richiamare la funzione per 2 stanze, accetti la sfida?
Modifica l'algoritmo visto in laboratorio per calcolare l'area totale di un appartamento con un numero generico di stanze scelto dall'utente:
- Chiedi all'utente di inserire il numero totale di stanze (N).
- Utilizza un ciclo Mentre (o un ciclo contato Per) che si ripete N volte.
- Ad ogni iterazione del ciclo, chiedi base ed altezza della stanza corrente, invoca la funzione
CalcolaArea(base, altezza)e cumula l'area restituita in una variabile accumulatore (areaTotale = areaTotale + areaStanza). - Al termine del ciclo, mostra a schermo l'area totale dell'intero immobile.
Suggerimento: La funzione CalcolaArea non deve subire alcuna modifica! Cambia soltanto la logica all'interno del programma principale (Main) introducendo la variabile accumulatore azzerata prima del ciclo.
In sintesi
Argomenti: concetti principali, riepilogo, competenze
- Applicazione reale: calcolo dell'area totale di due stanze o rettangoli differenti.
- Dimostrazione del riutilizzo: la funzione CalcolaArea viene definita una sola volta e invocata due volte con dati diversi.
- Comprendere che una funzione può essere richiamata N volte all'interno del programma principale.
- Osservare come i parametri attuali (b1, h1 e b2, h2) vengono copiati negli stessi parametri formali (base, altezza).
- Calcolare la somma dei risultati restituiti dalle due chiamate distinte.