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.
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. 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 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
Scarica

bioinfo3-22 - CRIBI Genomics group