Correzione del flowchart: “media voti
per ogni alunno”Welcome, students!
Il testo del problema Data una lista di
studenti con i loro voti, determinare e stampare per ogni studente la media dei suoi voti.
La lista dei voti degli studenti
I dati sono ordinati per codice studente in maniera crescente
Pertanto i voti di ogni studente sono consecutivamente raggruppati tutti insieme
L’ultima riga ha un codice convenzionale 999999 per indicare la fine della lista
Numero matricola studente
voto
1 6
1 7
1 5
2 8
3 4
3 5
4 6
4 6
5 8
5 8
999999
Metodo di lavoro Prendo una soluzione di uno studente Analizzo questa soluzione per vedere quale
è stato il ragionamento Razionalizzo il ragionamento fatto,
semplificandolo Correggo eventuali errori tecnici ed
architetturali
Soluzione di uno studente
Analisi del flowchart Ci sono ben 4 iterazioni ! 2 di queste iterazioni sono interne ad
un’altra iterazione ! Troppo complicato Chiediamoci se c’è bisogno di tutte
queste iterazioni.
Rendiamo soft le spigolosità della nostra mente
(arrotondiamo gli spigoli) Per tenere la materia cerebrale sotto
controllo, semplifichiamo il prodotto grezzo, raffiniamolo. Che cosa possiamo raffinare in questo
caso ?
Reading
Leggendo attentamente il flowchart, ci accorgiamo che ci sono in sequenza due iterazioni numerate quasi identiche
All’interno di ciascuna iterazione numerata c’è una iterazione do while
La logica della soluzione dello studente Bisogna capire la logica della sua
soluzione. Le due strutture iterative, l’una
esterna per scorrere gli studenti e l’altra interna per scorrere I voti di ciascun studente (sembra che questa sia l’idea dello studente)
Tuttavia la ripetizione di questo flusso per una seconda volta in sequenza al precedente sembra incomprensibile, a meno chè abbia voluto correggere la prima parte aggiungendo nuove istruzioni
Inoltre tecnicamente le iterazioni sono errate. Vanno in loop.
Semplifichiamo la soluzione dello studenteeliminando il primo blocco di iterazioni
Correggiamo il precedente flowchart
L’iterazione esterna è numerata sul conteggio degli studenti. Questa soluzione non va bene
La lista termina quando il codice studente è uguale a 999999
Non sappiamo quanti siano le righe della lista.
Pertanto dobbiamo fare un’iterazione controllata da una condizione
La condizione di controllo dell’iterazione è proprio codiceStudente=999999
L’iterazione interna non serve. Non confondere la selezione con
l’iterazione! La seconda iterazione interna controllata dalla
condizione codiceStudente=codiceStudentePrecedente è errata. Questa struttura è in realtà una selezione non un’iterazione.
C’è una sola iterazione perchè c’è una sola lista e quando si scorrono gli studenti simultaneamente si scorrono anche I loro voti!
Floachart modificato e corretto
Let’s Have a Great Year!