Esercizio Svolto: Ricerca di Massimo, Minimo e loro Posizione
Argomenti: ricerca estremi, variabili di posizione (indici), tracciamento contatore, selezione annidata
Traccia dell'Esercizio:
In una gara di atletica leggera vengono registrati i tempi di corsa (in secondi) di N atleti.
Progetta un algoritmo che acquisisca i tempi degli N corridori e determini non solo il tempo migliore (minimo) e il tempo peggiore (massimo), ma indichi anche a quale atleta (es. 1° atleta, 2° atleta, ecc.) appartengono tali record.
1. Analisi dei Dati e delle Posizioni
Oltre alle classiche variabili per i valori di max e min, introduciamo due variabili d'indice:
| Variabile | Tipo di Dato | Ruolo |
|---|---|---|
tempo |
Reale (Float) | Input: Tempo di corsa in secondi letto ad ogni ciclo. |
max, min |
Reale (Float) | Estremi: Tempo peggiore (max) e tempo migliore (min). |
posMax, posMin |
Intero (Integer) | Indici: Memorizzano il valore del contatore i nel momento in cui max o min vengono aggiornati. |
2. Pseudocodice con Numerazione di Riga
Aggiornamento Indice: Se tempo < min ➔ min = tempo, posMin = i
Output Finale: Scrivi tempo record e numero dell'atleta
| 1 | Inizio |
| 2 | // Dichiarazione delle variabili |
| 3 | Reale tempo, max, min |
| 4 | Intero N, i, posMax, posMin |
| 5 | |
| 6 | Scrivi "Inserisci il numero di atleti:" |
| 7 | Leggi N |
| 8 | |
| 9 | // Lettura del 1° Atleta e inizializzazione posizioni |
| 10 | Scrivi "Inserisci il tempo dell'atleta 1:" |
| 11 | Leggi tempo |
| 12 | max = tempo |
| 13 | min = tempo |
| 14 | posMax = 1 |
| 15 | posMin = 1 |
| 16 | |
| 17 | // Ciclo dal 2° atleta fino ad N |
| 18 | i = 2 |
| 19 | Mentre i <= N Fai |
| 20 | Scrivi "Inserisci il tempo dell'atleta ", i, ":" |
| 21 | Leggi tempo |
| 22 | |
| 23 | // Controllo per il tempo MINIMO (Record migliore) |
| 24 | Se tempo < min Allora |
| 25 | min = tempo |
| 26 | posMin = i |
| 27 | Fine Se |
| 28 | |
| 29 | // Controllo per il tempo MASSIMO (Tempo peggiore) |
| 30 | Se tempo > max Allora |
| 31 | max = tempo |
| 32 | posMax = i |
| 33 | Fine Se |
| 34 | |
| 35 | i = i + 1 |
| 36 | Fine Mentre |
| 37 | |
| 38 | Scrivi "Miglior tempo: ", min, "s fatto dall'Atleta n° ", posMin |
| 39 | Scrivi "Peggiore tempo: ", max, "s fatto dall'Atleta n° ", posMax |
| 40 | Fine |
3. Tabella di Traccia dell'Esecuzione
Simulazione con 3 atleti (N = 3) e tempi letti: 10.5s, 9.8s e 11.2s:
| Atleta (i) | tempo (s) | min (Migliore) | posMin | max (Peggiore) | posMax |
|---|---|---|---|---|---|
| 1 (r. 11-15) | 10.5 | 10.5 | 1 | 10.5 | 1 |
| 2 (r. 21-26) | 9.8 | 9.8 (9.8 < 10.5) | 2 | 10.5 | 1 |
| 3 (r. 30-33) | 11.2 | 9.8 | 2 | 11.2 (11.2 > 10.5) | 3 |
Dettaglio Logico: L'aggiornamento simultaneo dell'Indice
Alle righe 26 e 32, l'istruzione posMin = i dev'essere posizionata **all'interno del blocco `Se`**, subito dopo aver aggiornato il valore numerico del minimo! Se la metessimo fuori dal `Se`, la variabile `posMin` verrebbe sovrascritta ad ogni ciclo perdendo l'indice corretto.
Quiz di Verifica
Rispondi alle domande per verificare la tua comprensione sul tracciamento degli indici.
In sintesi
Argomenti: concetti principali, riepilogo, competenze
- Applicazione reale: identificazione del valore record e del relativo numero di tentativo o atleta.
- Utilizzo di variabili d'indice (posMax e posMin) aggiornate insieme ai valori di max e min.
- Salvare il valore del contatore i quando viene superato un valore massimo o minimo.
- Distinguere il valore numerico registrato (es. 9.58) dalla sua posizione d'ingresso nella sequenza (es. tentativo 3).
- Analizzare lo scivolamento e l'aggiornamento degli indici tramite la tabella di traccia.