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
Scarica

Controllo del flusso