Sei sulla pagina 1di 10

Problemi di massimo e di minimo

Prof. Michele Caceffo


L.S. “Tron”
2015/2016
Trovare Max e Min di una sequenza?

I problemi di massimo e di minimo sono un esempio classico


di utilizzo intelligente delle variabili e dei costrutti di ciclo.

Sono problemi che possono apparire in varie forme,


ma la metodologia per la loro risoluzione non cambia.
Qual è l’idea risolutiva?
 Supponiamo di avere davanti un mazzo di carte da gioco.
 Possiamo tenere in mano solamente due carte, una per mano.
 Vogliamo trovare la carta con il valore più alto tra 5
 Dopo le prime pescate, la situazione è la seguente:

 Quale delle due carte devo tenere?


Qual è l’idea risolutiva?
 Tra le due, tengo quella con il valore più alto.
 La carta successiva verrà poi confrontata con questa.

 Al termine delle carte, nella mano sinistra avrò la carta con il valore più alto.
Nel codice:

cin >> valore_carta;


if (valore_carta > valore_carta_max)
{
valore_carta_max = valore_carta;
}
E il minimo?

 Per trovare il minimo si applica lo stesso principio:

cin >> valore_carta;


if (valore_carta < valore_carta_min)
{
valore_carta_min = valore_carta;
}
E per la prima carta?

 Quando peschiamo la prima carta non abbiamo nulla con cui confrontare il valore:
Soluzioni

 Possiamo decidere un  Possiamo ricordarci che


valore iniziale “Al primo giro qualunque
 Funziona solo in valore è il massimo (o il
determinati casi minimo), proprio perché è
 Più immediato/intuitivo il primo”
 Funziona sempre
 Più elaborato
Scegliere il valore iniziale a priori

 Dipende dalla situazione  Massimo:


 A volte alcuni valori  0, se so che sono valori
sono inverosimili nel positivi
contesto del programma  In generale, il più piccolo
tra i possibili
 Possiamo usare uno di
 Minimo:
questi valori come punto
 Il più grande tra i possibili,
di partenza
se è possibile identificarlo
(altezze, pesi, età…)
Prendere il primo valore
 Se usiamo un ciclo for,  Nel caso generale,
il primo sarà quando il possiamo usare una
nostro contatore vale variabile bool:
come il valore iniziale: bool primo = true;
for (int i=1; i<20; i++) while (condizione)
{ {
if (i == 1) { if (primo) {
… …;
} primo = false;
… }
} …
}