Eserciziosuglialgoritmi Max

Post on 07-Dec-2014

3.069 views 4 download

description

come si determina il flowchart per trovare il max di più numeri

Transcript of Eserciziosuglialgoritmi Max

Trovare il numero più grandeLezione del 26 novembre 2008

Prof. Silvano Natalizi

Risolvere il seguente problema

trovare il numero massimo tra una lista di numeri interi e positivi.

Ragionamento mentale intuitivoConfronto i numeri tra di essi.Il confronto è un’operazione di disuguaglianza

(maggiore o minore).Da questa operazione di confronto stabilisco quale è il

maggiore.Quando faccio il confronto vedo (proprio con la vista)

simultaneamente molti numeri e quindi scelgo il maggiore tra di essi, gli altri li scarto perché già li ho usati.

Continuo a confrontare il numero massimo precedentemente scelto con i numeri rimanenti.

Nuovamente, servendomi della vista e dell’operazione di disuguaglianza scelgo il numero più grande

Quando ho esaminato tutti i numeri dati, ho la risposta al problema, ossia il numero più grande selezionato.

Lista di numeriHo una lista di numeri

Per determinare il numero più grande, ne prendo un po’ alla volta e…

1334651138020

Confronto i numeriScelgo il più grande tra quelli che vedo

40100

13

45133465

Scelgo il numero più grandeIn questo caso focalizzo l’attenzione sul

numero 100 che è il maggiore, gli altri tre numeri li posso togliere

133465

100

Confronto il numero più grande con gli altri numeriGuardo i numeri rimanenti e li confronto con il

numero 100, maggiore tra i numeri precedenti:

Si vede che il numero maggiore è 200!

100

25 80

200120

Dobbiamo trasformare il precedente ragionamento mentale per adattarlo al computer invece di confrontare tante cose insieme, ne

confrontiamo solo due alla volta. Scopro il primo numero.

Dal momento che è il primo non posso confrontarlo con nessun numero precedente, pertanto assumo che sia il maggiore.

3465113804013 100

Continuo a confrontare il numero scelto come maggiore con un altro numero della lista Scopro il successivo numero e lo confronto

con il numero maggiore

Scelgo il numero maggiore tra i due e non mi interesso più di quello minore

3465113804013

100

Continuo a confrontare il numero scelto come maggiore con un altro numero della listaConfronto il numero maggiore con il

successivo numero della lista

Scelgo il maggiore dei due e scarto il minore

346511345

40

100

Continuo a confrontare il numero scelto come maggiore con un altro numero della listaConfronto il numero maggiore con il

successivo numero della lista

Scelgo il maggiore dei due e scarto il minore

3465125

45

100

Continuo a confrontare il numero scelto come maggiore con un altro numero della listaConfronto il numero maggiore con il

successivo numero della lista

Scelgo il maggiore dei due e scarto il minore

346580

25

100

Continuo a confrontare il numero scelto come maggiore con un altro numero della listaConfronto il numero maggiore con il

successivo numero della lista

Scelgo il maggiore dei due e scarto il minore

65120

80

100

Continuo a confrontare il numero scelto come maggiore con un altro numero della listaConfronto il numero maggiore con il

successivo numero della lista

Scelgo il maggiore dei due e scarto il minore

200

120

100

Continuo a confrontare il numero scelto come maggiore con un altro numero della listaConfronto il numero maggiore con il

successivo numero della lista

Scelgo il maggiore dei due e scarto il minore

200

120

Non ci sono altri numeri della lista per cui ho terminato il lavoro di confronto tra i numeri. L’unico numero rimasto è il numero

maggiore 200

Questo numero è il risultato del problema.

200

Le variabiliDal momento che confronto due cose tra di

loro, per far fare questo lavoro al computer ho bisogno di due celle di memoria, ossia di due variabili

Nella prima variabile memorizzo il numero correntemente letto

Nella seconda variabile memorizzo la scelta del numero maggiore

I nomi delle variabiliOgni variabile deve avere un tipo datoOgni variabile deve avere un nomeIn questo caso le due variabili sono

entrambre di tipo int (numero intero)I nomi sono una scelta del programmatorechiamiamo

numero (il numero correntemente letto)massimo (il numero scelto massimo)

L’operazione di confrontoL’operazione di confronto la facciamo tra le

due variabili precedentemente definite (numero, massimo)

numero>massimo

Che cosa dobbiamo fare ?Se (numero>massimo) è vero, il numero corrente

è maggiore del numero massimo (massimo tra tutti quelli precedentemente letti); pertanto devo sostituire il valore di massimo con il nuovo numero

Eseguo questa sostituzione assegnando numero a massimo con l’operatore =

numero>massimo

V

massimo=numero

Il lavoro precedente va ripetuto tante volte per quanti sono i numeri della lista“L’operazione di confronto e quando la sua

condizione è verificata l’assegnazione del numero corrente al massimo “ va ripetuta tante volte per quanti sono i numeri della lista

Occorre pertanto una struttura di controllo iterativa di tipo numerata.

La prima cosa da disegnare è la struttura iterativa numerataIl disegno della struttura iterativa non è una

difficoltà di natura concettuale, perché tutte le strutture di controllo sono dei componenti standard.

L’iterazione numerata ha come elementi:Un tipo: crescente o decrescenteUna variabile di controlloUn valore inizialeUn valore finaleUn incremento

La struttura di controllo iterativa numerata

La struttura di selezione all’interno dell’iterazione

Prima della selezione devo inserire la lettura del numero

Infine azzeriamo la variabile “massimo” prima dell’iterazione

Osservazione finale Nella prima iterazione

confrontiamo il primo numero con il valore zero di massimo

Questo algoritmo funziona se i numeri sono maggiori di zero.

Se avessimo numeri anche negativi dovremmo modificare la parte iniziale del flowchart: Leggiamo il primo numero

con l’istruzione di “leggi numero” inserita prima dell’iterazione

e come seconda istruzione assegniamo a massimo numero, sempre prima di entrare nell’iterazione

Per stampare il risultato inserisco la stampa dopo l’iterazione

Ultimo aggiustamentoNel precedente flowchart ho effettuato

l’operazione di lettura dei numeri 9 volte ! Una prima della iterazione, 8 volte dentro l’iterazione. Se i numero sono 8, ho commesso un errore.

Per correggere l’errore è sufficiente modificare la condizione di controllo dell’iterazione da i<=8 a i<8.