IF-ELSE L’istruzione IF-ELSE prevede un secondo blocco di istruzioni da eseguire in alternativa al primo nel caso la condizione sia falsa if (condizione){ blocco1 di istruzioni } else { blocco2 di istruzioni } Viene valutata la condizione. Se questa è VERA (espressione non zero, oppure stringa non vuota) vengono eseguite le istruzioni del blocco1. Se la condizione è FALSA viene eseguito il blocco2 di istruzioni. BIOINFO3 - Lezione 22 1 IF-ELSE Esercizio. Se la variabile $nome contiene una stringa non vuota allora assegnare a $messaggio la stringa “NOME=$nome”, altrimenti assegnare a $messaggio la stringa “NOME SCONOSCIUTO” Forma compatta. Anche in questo caso particolare (si fa in entrambi i casi solo un assegnamento alla stessa variabile) esiste una versione compatta. Ve la mostro solo per farvi vedere la compattezza, non preoccupatevi di ricordarla! variabile = condizione? valore1: valore2; Nell’esercizio: $messaggio = $nome? “NOME=$nome” : “NOME INDEFINITO”; BIOINFO3 - Lezione 22 2 ESERCIZI Stampare la frase “Inserire un numero, prego : ”. Assegnare alla variabile $numero un numero letto dall’input. Se il numero è positivo stampare “Numero positivo” altrimenti stampare “Numero nullo o negativo”. BIOINFO3 - Lezione 22 3 IL CICLO WHILE Si utilizza quando si deve eseguire un certo blocco di istruzioni fintanto che una certa condizione rimane vera while (condizione){ blocco di istruzioni } Viene valutata la condizione. Se FALSA si passa all’istruzione che segue il ciclo while. Se VERA si eseguono le istruzioni del blocco racchiuse tra parentesi graffe e si ritorna a valutare la condizione. Ovviamente è essenziale che il blocco di istruzioni abbia una qualche influenza sulla condizione, altrimenti si rischia di entrare in un loop infinito e di non far teminare mai il programma. Per uccidere un programma inloopato si premono contemporaneamente i tasti CTRLC oppure si usa il comando kill di UNIX dopo aver identificato con il comando ps di UNIX il pid del processo da uccidere BIOINFO3 - Lezione 22 4 IL CICLO WHILE Esempio. Loop infinito while (1){ ……… } Esercizio. (provare su carta) Si supponga la variabile $i non definita. Il seguente programma quali numeri stamperà? while ($i++ < 10){ print “$i\n”; } Da 1 a 10. Nel primo ciclo $i=0, $i++=0 ma $i diventa 1 e viene stampato. Quando $i=9 $i++=9 <10, $i diventa 10 e viene stampato BIOINFO3 - Lezione 22 5 IL CICLO WHILE Esercizio. Stampare (una per riga) le potenze di 2 da 20 fino a 220 210 è 1 Kilo; 220 è 1 Mega; 230 è 1 Giga ) BIOINFO3 - Lezione 22 6 ESERCIZIO Esercizio. Scrivere un programma che continui a leggere dei numeri da input e per ogni numero letto stampi il doppio del numero La stringa vuota in un contesto numerico diventa 0 Ovviamente l’espressione $n = <> (che restituisce il valore restituito da <>) non sarà mai falsa, poiché in ogni riga di input viene fornito almeno il carattere di “vai a capo”. Per far terminare il programma si deve quindi ricorrere al CTRL-C! BIOINFO3 - Lezione 22 7 IL CICLO DO E’ simile al ciclo while con la differenza che la condizione è valutata alla fine del ciclo , che quindi sarà eseguito almeno una volta do { blocco di istruzioni } while (condizione); Si esegue il blocco di istruzioni. Viene successivamente valutata la condizione. Se FALSA si passa all’istruzione che segue il ciclo do. Se VERA si ritorna ad eseguire il blocco di istruzioni. BIOINFO3 - Lezione 22 8 ESERCIZIO Esercizio. Scrivere un programma che legga dei numeri (che sappiamo con certezza essere numeri e non negativi) dall’input. Stampare dopo ogni numero letto la somma progressiva dei numeri. Terminare il programma quando si incontra un numero nullo BIOINFO3 - Lezione 22 9 IL CICLO FOR Normalmente i cicli while e do si eseguono quando prima di iniziare il ciclo non è noto il numero di volte in cui verrà eseguito. Se invece il numero di iterazioni da eseguire è noto si opterà per un ciclo for. for (istruz. iniziale; condizione; istruz. finale) { blocco di istruzioni } Si esegue una sola volta l’istruzione iniziale. Viene successivamente valutata la condizione. Se FALSA si passa all’istruzione che segue il ciclo for. Se VERA si esegue il blocco di istruzioni e quindi l’istruzione finale. Si ritorna poi a valutare la condizione. BIOINFO3 - Lezione 22 10 IL CICLO FOR Esempio. (provare su carta) for ( $i=0; $i < 10; $i++){ print “$i\n”; } Il programma effettua 10 iterazioni, controllate dalla variabile $i che varia da 0 a 9. Sono stampati i numeri da 0 a 9. Esercizio. Stampare le potenze di 2, una per riga, in ordine decrescente da 220 fino a 20 BIOINFO3 - Lezione 22 11 ESERCIZIO PER CASA Esercizio 13. Leggere un numero $n da input. Effettuare $n cicli. Ad ogni ciclo stampare la frase “Inserire il nome numero “ seguito dal numero di ciclo. Leggere ogni volta da tastiera un nome. Alla fine del ciclo stampare il nome più grande (alfabeticamente). BIOINFO3 - Lezione 22 12 RIEPILOGO •If-else •While •Do •For •Redirezione input e output BIOINFO3 - Lezione 22 13