The Information School of the University of Washington Controlli di flusso INFO/CSE 100, Spring 2005 Fluency in Information Technology http://www.cs.washington.edu/100 10/11/11 10/11/11 fit100-13-control © 2004 University of 1 The Information School of the University of Washington Letture e approfondimenti • Letture 10/11/11 10/11/11 fit100-13-control © 2004 University of 2 The Information School of the University of Washington Blocco if nell'interfaccia GUI <script type="text/javascript"> function daiRisultati(stringaRisultato) { var stringaTemp = stringaRisultato; if (document.getElementById("radioLC").checked) { stringaTemp = stringaTemp.toLowerCase(); } else if (document.getElementById("radioUC").checked) { stringaTemp = stringaTemp.toUpperCase(); } document.getElementById("campoRisultato").value = stringaTemp; } </script> La funzione daiRisultati(stringa) è chiamata da diversi eventi • In ogni caso, prende una stringa in ingresso, decide se si desidera il maiuscolo o il minuscolo, e setta resultField in maniera corrispondente 10/11/11 10/11/11 fit100-13-control © 2004 University of 3 The Information School of the University of Washington Il blocco if / else Il blocco if è un istruzione condizionale » Una espressione condizionale è valutata vera o falsa • L'espressione è una bespressione booleana (restituisce vero o falso) » Se la condizione è vera, allota un insieme di sitruzioni viene eseguito » Se la condizione è falsa, allora è eseguito un altro insieme di istruzioni if (<espressione booleana>) { <istruzioni> } else { <altre istruzioni> } 10/11/11 10/11/11 fit100-13-control © 2004 University of 4 The Information School of the University of Washington Esempi if (contatore == 0) { Qial'è l'espressione condizionale? ready = falso; Quali istruzioni sono parte del blocco vero? } else { Quali istruzioni sono parte del blocco falso? ready = vero; Che succede quanto il contatore è 21? 0? -1? contatore = contatore-1; } if (contaPagine >= 100) { alert("Ci vuole qualche minuto."); } Qial'è l'espressione condizionale? Quali istruzioni sono parte del blocco vero? 10/11/11 Quali istruzioni sono parte del blocco falso? Che succede quanto il contatore è 21? 100? 200? 10/11/11 fit100-13-control © 2004 University of 5 scratch.html W3Schools TryIt Editor The Information School of the University of Washington A Fancier Example of a GUI program Crazy Italians 10/11/11 10/11/11 fit100-13-control © 2004 University of 8 The Information School of the University of Washington Un'istruzione If da bean.html <html> <head> <title>calcolatore interattivo del distributore automatico</title> <script type="text/javascript"> function refresh() { var shotCount; var cupSize; var drink; // numero di tazzine Espresso // dimensioni della tazzina // nome della bevanda richiesta var price; // prezzo calcolato della bevanda var taxRate = 0.087; // percentuale dell'Iva var elemento; // elemento corrente (radio button) for (var i=0; i<document.getElementById("shotForm").elements.length; i++) { elemento = document.getElementById("shotForm").elements[i]; if (element.checked) { shotCount = parseInt(element.value,10); } } ... 10/11/11 10/11/11 fit100-13-control © 2004 University of 9 The Information School of the University of Washington Iterazioni • Iterazioni o cicli sono un modo per eseguire più di una volta un blocco di istruzioni • Useremo il blocco FOR per creare un cliclo Il ciclo for è generalmente controllato da un contatore » C'è una variabile di conteggio che incrementa o decrementa durante l'esecuzione del blocco for » Quando il contatore raggiunge le condizioni limite, il ciclo continua e viene ripetuto 10/11/11 10/11/11 fit100-13-control © 2004 University of 10 The Information School of the University of Washington Perchè abbiamo bisogno di cicli? • Si esegue qualcosa per tutti gli elementi di una collezione » » » » Per ogni pulsante discelta, controlla se è selezionato Per ogni mese, segna 100€ Calcolal a somma di tutti i numeri in una lista etc. • Molti colci sono cicli di conteggio » Fanno qualcosa per un certo numero di volte 10/11/11 10/11/11 fit100-13-control © 2004 University of 11 The Information School of the University of Washington Il ciclo for Un ciclo di conteggio è di solito implementato con for inizializza Abbreviazione per l'aggiornamento del contattore i=i+1 Controlla il vincolo for (var i=0; i < count; i++) { document.writeln("<br>il valore indice : "+i); } Una o più istruzioni nel corpo del ciclo 10/11/11 10/11/11 fit100-13-control © 2004 University of 12 Esempi di for The Information School of the University of Washington i++ è un'abbreviazione • for (i=0; i < contatore; i++) • Alla fine di ogni passaggio per il ciclo for esegui le seguenti istruzioni: » restituisci il valore di i » incrementa i » Immagazzina il valore ottenuto • Questpo equivale a scrivere »i = i + 1 10/11/11 10/11/11 fit100-13-control © 2004 University of 14 The Information School of the University of Washington Il corpo del ciclo potrebbe non essere mai eseguito! • A seconda dei valori della variabile di controllo, è possibile che il ciclo non venga affatto eseguito Controllo delle condizioni del vincolo itemCount is 0 quando si arriva, allora i<itemCount è falsa e il clcilo viene completamente iignorato var itemCount = 0; ... for (var i=0; i < itemCount; i++) { document.writeln("<br>..processing item "+i); } 10/11/11 10/11/11 fit100-13-control © 2004 University of 15 The Information School of the University of Washington Ciclo for ignorato 10/11/11 10/11/11 fit100-13-control © 2004 University of 16 The Information School of the University of Washington L'errore “spiazzamento di 1” • Quando di lavora con i cicli, l'errore più comune è lo spiazzamento di 1 » Nessuno evita questo errore » Cio si sbaglia nel determinare le volte in cui il ciclo deve girare » Basta inserire un contatore for ( i=0; i<n; <lista istruzioni> } 10/11/11 i++) { Numero di iterazioni 10/11/11 fit100-13-control © 2004 University of 17 The Information School of the University of Washington Un altro esempio dal iCCC Quanto è buono il Cappuccio di pomeriggio 10/11/11 10/11/11 fit100-13-control © 2004 University of 18 The Information School of the University of Washington Un ciclo for da bean.html <html> <head> <title>Interactive Coffee Cost Calculator</title> <script type="text/javascript"> function refresh() { var shotCount; var cupSize; var drink; // number of espresso shots // size of the cup in ounces // name of the requested drink var price; // calculated price of the drink var taxRate = 0.087; // Seattle retail tax var element; // the current gui element (radio button) for (var i=0; i<document.getElementById("shotForm").elements.length; i++) { element = document.getElementById("shotForm").elements[i]; if (element.checked) { shotCount = parseInt(element.value,10); } } ... 10/11/11 10/11/11 fit100-13-control © 2004 University of 19 The Information School of the University of Washington Vettori • Finora, abbiamo selezionato un elemento da una collezione • Questa collezione è un Vettore chiamato elements » Una cella per ciascuno elemento nel modulo shotForm » È disponibile la lunghezza -dimensione.- del vettore document.getElementById("shotForm").elements.length » Estraiamo un elemento con la variabile indice element = document.getElementById("shotForm").elements[i]; » The index of the first element is 0 10/11/11 10/11/11 fit100-13-control © 2004 University of 20