Area Docenti

Percorso di recupero sui fondamenti della programmazione

Traccia per un lavoro con gli studenti della terza classe ad indirizzo informatico in 6 settimane


Prima settimana

Cominciamo con un esercizio semplice:

Problema
Conoscendo il risultato di una partita di calcio ad eliminazione diretta (non è consentito il pareggio), si vuole visualizzare il nome della squadra vincente.

Provo a descrivere il ragionamento che dobbiamo fare e quali passi dobbiamo compiere:

1) individuare i dati
il risultato è dato di gol segnati dalle due squadre; poiché dobbiamo visualizzare il nome della squadra vincente, mi servono anche i nomi delle due squadre.
Possiamo indicare le due squadre in ordine, prima squadra + gol, seconda squadra + gol.

2) individuare le azioni
Poiché non è consentito il pareggio (vincolo del problema), la squadra vincente è quella con il numero di gol maggiore.
Dovremo quindi fare un controllo (un test, un confronto, una selezione) confrontando i valori dei gol delle due squadre.
Useremo quindi la struttura di selezione binaria (se.., allora … altrimenti …)

N.B.
Poiché il problema parla solo di una partita, qui non abbiamo ripetizione.

Passiamo ora alla formalizzazione di tutto il ragionamento.

Dati di input:
nome della prima squadra (Nome1), gol della prima squadra (Gol1)
nome della seconda squadra (Nome2), gol della seconda squadra (Gol2).

Dati di output:
nome della squadra vincente

Algoritmo

Ingresso dei dati
Confronto
Uscita del risultato

In dettaglio

Inizio
-------- Ingresso dati -----------------------
Chiedi (Nome prima squadra)
Leggi (Nome1)
Chiedi (Gol prima squadra)
Leggi(Gol1)
Chiedi (Nome seconda squadra)
Leggi (Nome2)
Chiedi (Gol seconda squadra)
Leggi(Gol2)
------- Controllo ------------------------
Se Gol1 > Gol2
Allora
Vincente = Nome1
Altrimenti
Vincente = Nome2
------- Uscita del risultato -------------
Scrivi (Vincente)
Fine


Sulla base della traccia precedente, dovete ora fare:

a) la codifica di questo algoritmo, provandolo sul computer
Attenzione ai tipi di dati: stringhe e interi

b) Risolvere in modo completo (analisi, algoritmo, codifica) il seguente problema analogo:
Problema
Su un reddito si paga l'imposta del 35% se il reddito è superiore a 60.000 euro, altrimenti il 23%.
Quanto si deve pagare?


Seconda settimana

Un passo avanti: la struttura di ripetizione

La tipologia di problemi che vogliamo trattare ora riguarda i casi in cui dobbiamo esaminare molti dati inseriti da tastiera e fare su di essi alcune elaborazioni (controlli, selezioni, somme, conteggi, stampe, ecc.).
I dati naturalmente vengono fatti entrare ed esaminati ad uno ad uno: si tratta di stabilire quanto terminare questa attività, cioè stabilire un controllo di fine ripetizione (o fine ciclo), nell'ipotesi che non sappiamo a priori il numero esatto di dati da esaminare.

La soluzione consiste nello stabilire una condizione che consenta di determinare la fine della lista di dati: per esempio, se faccio entrare nomi (o stringhe di caratteri in generale) posso stabilire che la ripetizione termina quando l'utente, anziché inserire un nome, inserisce un carattere *.
Oppure se faccio entrare numeri, la ripetizione termina quando l'utente inserisce 0 oppure -1.

La struttura generale dell'algoritmo di ripetizione è la seguente:

scrivi (inserisci il primo nome)
leggi (nome)
MENTRE nome diverso da * ESEGUI
Inizio
---------------
---------------
--------------
scrivi (inserisci un altro nome)
leggi (nome)
Fine

La struttura MENTRE rappresenta la ripetizione: il primo inserimento, prima del MENTRE, serve a far partire il ciclo; le righe con i trattini rappresentano altri dati di input e le attività di elaborazione; prima di tornare all'inizio della ripetizione, si fa l'inserimento di un altro dato.
L'uscita dalla ripetizione avviene quando si inserisce un * come nome.

Sulla base della traccia precedente, l'esercitazione prevede:

1) un primo esercizio semplice:

PROBLEMA 1
Costruire un algoritmo che accetta da tastiera un elenco di nomi e man mano li visualizza.

2) un secondo esercizio leggermente più difficile

PROBLEMA 2
Costruire un algoritmo che accetta da tastiera un elenco di nomi e li conta. Alla fine fornisce il numero dei nomi inseriti.

(per contare: usare una variabile contatore che all'inizio è posta uguale a 0; ogni volta che entra un nome si incrementa di 1
contatore := contatore +1
Alla fine, fuori dal ciclo MENTRE, scrive il valore del contatore)

2) un terzo esercizio ancora un po' più difficile

PROBLEMA 3
Dato un elenco di nomi con le rispettive città, conta quanti sono quelli di Milano.

Di ciascun problema dobbiamo fare l'analisi dei dati di input e di output, scrivere l'algoritmo in pseudocodifica e poi codificare nel linguaggio di programmazione validando il programma con la prova sul computer.


Terza settimana

Un altro tipo di ripetizione: la struttura di ripetizione con contatore

La tipologia di problemi nei quali si usa questa struttura riguarda i casi in cui sappiamo già a priori quanti sono i dati da esaminare e da elaborare.
Questi casi sono molto frequenti: si pensi ai dati degli studenti di una classe, oppure a dati riferiti ai 12 mesi dell'anno.
Anche in questi casi i dati vengono fatti entrare ed esaminati ad uno ad uno: il controllo sulla ripetizione è fatto con un contatore che all'inizio assume il valore 1 e che si incrementa di 1 ad ogni ripetizione finché viene raggiunto il numero complessivo prestabilito.

La struttura generale dell'algoritmo di ripetizione è la seguente:

scrivi (quanti sono i dati da esaminare)
leggi (N)
PER K da 1 a N ESEGUI
Inizio
---------------
---------------
--------------
Fine


Sulla base della traccia precedente, l'esercitazione prevede due esercizi simili a quelli visti con la ripetizione MENTRE:

1) un primo esercizio semplice:

PROBLEMA 1
Costruire un algoritmo che accetta da tastiera un elenco di N città e man mano le visualizza.

2) un secondo esercizio leggermente più difficile

PROBLEMA 2
Costruire un algoritmo che accetta da tastiera un elenco di N prezzi e li somma. Alla fine fornisce il totale dei prezzi inseriti.

(per sommare: usare una variabile somma che all'inizio è posta uguale a 0; ogni volta che entra un prezzo si incrementa del prezzo
somma := somma + prezzo
Alla fine, fuori dal ciclo, scrive il valore della somma)

2) un terzo esercizio ancora un po' più difficile

PROBLEMA 3
Dato un elenco di prodotti con i rispettivi prezzi, conta quanti sono quelli che hanno il prezzo superiore a 100 euro.

(Attenzione a non confondere il contatore del ciclo con il contatore dei prodotti selezionati).
Di ciascun problema dobbiamo fare l'analisi dei dati di input e di output, scrivere l'algoritmo in pseudocodifica e poi codificare nel linguaggio di programmazione validando il programma con la prova sul computer.


Quarta settimana

Organizzare gli algoritmi: uso delle procedure

Nei procedimenti risolutivi, soprattutto di problemi complessi, è possibile identificare le parti di cui si compongono per poter meglio tenere sotto controllo la complessità del problema.
Si usa cioè una metodologia top-down, che vuol dire procedere da una visione "alla grande" del problema per arrivare al dettaglio delle singole parti.

In un problema standard possiamo sempre distinguere tre parti principali:
- ingresso dati
- elaborazione
- uscita risultati.

L'algoritmo principale è formato dai nomi di queste parti: lo sviluppo di ciascuna parte viene fatto nei sottoalgoritmi che dettagliano le cose da fare.
Nella codifica, il programma risulta formato dal programma principale che richiama l'esecuzione dei sottoprogrammi, detti procedure.

Si consideri per esempio il problema del calcolo della media dei voti di N studenti. Il procedimento risolutivo si compone di tre parti:
1. ingresso dei nomi e dei voti di ciascun studente (con una ripetizione con contatore): man mano i voti vengono sommati
2. calcolo della media
3. visualizzazione della media.

Sviluppiamo ciascuno dei tre punti con un sottoprogramma (procedura): il programma principale è la chiamata alle tre procedure. Si osservi che, per questo problema semplice, le istruzioni della seconda e terza parte sono una, al massimo due.

Sulla base della traccia precedente, l'esercitazione prevede la costruzione dei procedimenti usando le procedure. Per questi primi esercizi non usiamo il passaggio di parametri, lasciando quasi tutte le variabili (ad esclusione dei contatori dei cicli) come variabili globali.

1) un primo esercizio semplice:

PROBLEMA 1
Da un elenco di automobili conta quante sono quelle che appartengono ad una marca fornita all'inizio del programma.
(le parti sono: (1) ingresso marca da controllare, (2) ingresso dati automobili, (3) visualizzazione risultato).

2) un secondo esercizio leggermente più difficile

PROBLEMA 2
Dato da tastiera un numero, calcolare l'area di un quadrato e l'area del cerchio aventi rispettivamente il numero come lato e come raggio.

3) un terzo esercizio ancora un po' più difficile

PROBLEMA 3
Il programma principale consente all'utente (con una selezione multipla) di scegliere tra tre figure diverse: quadrato, rettangolo, trapezio. A seconda della scelta, le singole procedure di calcolo chiedono i dati necessari e visualizzano il valore dell'area di ciascuna figura.


Quinta settimana

Organizzare gli algoritmi 2.a parte: uso delle procedure con i parametri

Nell'esercitazione della quarta settimana abbiamo usato procedure senza parametri.
L'uso dei parametri però è importante perché consente non soltanto di organizzare gli algoritmi suddividendoli in sottoproblemi, ma soprattutto di poter usare la stessa procedura più volte con dati diversi e anche all'interno di programmi diversi.

In sostanza i parametri sono variabili che vengono usate all'interno della procedura e che ricevono i valori dal programma principale.
I parametri sono indicati nell'intestazione della procedura:

Procedure Calcolo (a, b : integer); nel passaggio per valore
Procedure Calcolo (Var a, b : integer); nel passaggio per indirizzo
(si riveda nel libro di testo la distinzione tra i due diversi tipi di passaggio di parametri)

Nel programma principale la chiamata della procedura deve contenere anche l'indicazione dei valori da passare ai parametri:

Calcolo (x, y);

L'esercitazione prevede la costruzione dei procedimenti usando le procedure con parametri. È anche opportuno usare laddove è possibile molte variabili locali e poche variabili globali, per rendere la procedura un'unità di elaborazione che può essere riusata in contesti diversi.

1) un primo esercizio semplice:

PROBLEMA 1
Il programma principale passa a una procedura di stampa un nome e un numero: la procedura stampa sulla carta il nome e il numero su due righe una sotto l'altra e poi una riga formata da 30 trattini.

2) un secondo esercizio:

PROBLEMA 2
Calcolo della statura media delle persone. Il programma acquisisce da tastiera il numero delle persone (variabile globale) e lo passa come parametro alla procedura di ingresso dati. Questa procedura con un ciclo fa entrare le stature e ne calcola la somma (variabile globale). Una seconda procedura riceve la somma delle stature e il numero delle persone come parametri e calcola la media visualizzando il risultato.



Sesta settimana

Organizzare gli algoritmi (terza parte): uso delle funzioni

L'uso delle funzioni consente di costruire sottoprogramma che non soltanto organizzano meglio gli algoritmi suddividendoli in sottoproblemi (come le procedure), ma che restituiscono sempre un valore calcolato e quindi possono essere usate nel programma come se fossero variabili nelle istruzioni di assegnazione, di controllo o di stampa.

La struttura generale di una funzione è:

Function NomeFunzione (parametri: tipo) : tipo;
Begin
………
………
………
End;

è importante notare la differente sintassi dell'intestazione perché occorre specificare il tipo del risultato restituito dalla funzione.
Importante inoltre ricordare che, poiché la funzione deve restituire qualcosa al programma principale, prima di uscire nel corpo della funzione ci dovrà essere per forza un'istruzione che assegna un valore alla funzione (cioè il nome della funzione compare a sinistra nell'istruzione di assegnazione).

Nel programma principale la chiamata della funzione è di questo tipo, per esempio:

Calcolo = NomeFunzione (x, y);


1) un primo esercizio semplice:

PROBLEMA 1
Il programma principale contiene 4 funzioni per il calcolo delle 4 operazioni aritmetiche; esse ricevono come parametro i due operandi.

2) un secondo esercizio:

PROBLEMA 2
Riscrivere il problema 2 della precedente esercitazione, usando una funzione per il calcolo della media.

torna all'inizio