# Istruzioni Programmazione Octave (superiori)
## Istruzioni di scelta e di ripetizione in Octave

Per poter scrivere dei programmi spesso non basta eseguirli in ordine sequenziale (uno dopo l'altro), ma c'è la necessità di eseguire certe istruzioni quando si verifica una particolare condizione. Se ad esempio si deve risolvere una equazione di secondo grado, solo se il discriminante è maggiore o uguale a zero è possibile calcolare le due radici (soluzioni del problema), altrimenti non ci sono soluzioni. Altro esempio: quando si deve calcolare la matrice inversa, questa esiste solo se il determinante è diverso da zero; altre volte c'è la necessità di ripetere un comando un certo numero di volte e non è agevole scriverlo all'interno del codice e in alcuni casi nemmeno possibile, ad esempio se si vuole trovare il numero massimo contenuto in un vettore bisogna analizzare ciascun elemento del vettore e confrontarlo con il valore massimo temporaneo trovato fino a quel momento. Se volete vedere la guida di riferimento che descrive i comandi base disponibili in Octave la trovate qui
Per poter eseguire dei comandi in funzione di una o più condizioni si usano le istruzioni if o l'istruzione switch, mentre per ripetere una o più istruzioni si può usare l'istruzione for, l'istruzione while e l'istruzione repeat-until. Analizziamo ciascuna istruzione, scrivendone la sintassi (cioe' la regola grammaticale con cui si impartisce l'ordine ) e alcuni esempi. Prima di questo si ricorda che una condizione (logica) è una qualsiasi espressione che valutata da come risultato vero o falso (true /false, 1/0), quindi se scrivo
| a>5 | |
| c==4 | Testo della cella |
| z<=3 | Testo della cella |
| (a>=4) && (a<23) | la condizione complessiva è data dall'unione ,tramite operatore AND chiamato operatore di congiunzione con simbolo && , di due condizioni più semplici (a>=4) e (a<23) , in questo caso la condizione complessiva è vera solo se entrambe le condizioni che l'operatore AND congiunge sono vere |
| !(a<3) | il ! esclamativo scritto davanti a una condizione logica la nega , quindi nel nostro caso la condizione è "non sia a minore di 3", l'operatore NOT simbolo detto operatore di negazione simbolo ! , inverte il valore logico della condizione che nega, quindi se (a<3) fosse vera allora !(a<3) diventa falsa e viceversa se (a<3) fosse falsa la sua negata !(a<3) assume il valore vero |
| (a<3) || (a>=50) | la condizione complessiva è data dalla'unione ,tramite operatore OR chiamato anche operatore di disgiunzione con simbolo || , di due condizioni più semplici (a<3) e (a>=50) , in questo caso la condizione complessiva è vera solo se almeno una delle condizioni che l'operatore OR disgiunge è vera |
sono tutte condizioni, mentre se parlo di una espressione intera, intendo una espressione che valutata mi da come risultato un numero intero, ad esempio
una istruzione è invece un qualsiasi comando una costante intera è un numero del tipo 5 , 453 ,0 , -3

## Istruzione IF

sintassi if semplice (e' il caso più semplice)
l'istruzione if valuta la condizione logica, e se questa è vera esegue la sequenza di istruzioni fino all'end, per passare poi l'esecuzione al comando successivo (scritto dopo l'end), altrimenti se la condizione è falsa non fa niente e passa l'esecuzione al comando successivo (quello scritto dopo l'end). Detto in altro modo le istruzioni del caso vero vengono eseguite solo se la condizione risulta vera.
Ad esempio posso scrivere:
Quindi solo se la condizione a>5 è verificata le istruzioni b=3; k=a-2*7; e B=inv(A) vengono eseguite.
Esiste una seconda forma dell'if , detta if a due vie. La sintassi e'
In questo caso l'if valuta la condizione e se questa è vera esegue le istruzioni del caso vero, altrimenti esegue le istruzioni del caso falso (quelle scritte dopo la parola else). In questo caso esistono 2 blocchi di istruzioni che vengono eseguite in alternativa a seconda del valore logico assunto dalla condizione. Ad esempio scrivo
In questo caso se a>3 vengono eseguite le istruzioni k=7; r=8; altrimenti vengono eseguite le istruzioni k=9; r=2; p=678;
Nel caso di più condizioni (mutuamente esclusive), che magari riguardano la stessa variabile, si usa il costrutto if-elseif
ad esempio
questa istruzione if else if è in realtà un particolare caso di if in cui nel blocco else si è inserita una istruzione if (quindi abbiamo un if con un if al suo interno e si parla allora di if annidato)
la sintassi è

## Istruzione switch

Questa istruzione serve per eseguire uno dei tanti blocchi di istruzioni che la compongono, parametrizzati mediante un valore intero. Detto in altro modo in base al valore assunto da una espressione numerica (ridotta molto spesso a una singola variabile) si esegue solo il blocco di istruzioni del corrispondente case, cioe' quello con costante numerica uguale al valore assunto dall'espressione intera. Se nessun case soddisfa la corrispondenza viene eseguito il blocco di istruzioni associate al otherwise.
Vediamo la sintassi
ad esempio
viene valutata l'espressione ( è costituita dalla sola variabile n): se vale tre si eseguono le istruzioni del primo case, se vale dodici si eseguono le istruzioni del secondo case, se vale tredici si eseguono le istruzioni del terzo case, se non è nè 3 nè 12 nè 13 vengono eseguite le istruzioni associate all'otherwise.

## Istruzione FOR

L'istruzione for serve per ripetere un blocco di istruzioni un numero prefissato di volte; alla variabile contatore ad ogni ciclo viene associato uno dei valori contenuti in un vettore. Vediamo la sintassi:
ad esempio scrivo
il contatore è k , i valori che assume sono i valori da 1 a 15 con passo 2 cioè 1 3 5 7 9 11 13 15 (nel primo ciclo k vale 1 nel secondo ciclo 3 nel terzo ciclo 5 e così via). Le istruzioni ripetute ad ogni ciclo sono z=k+z;vv printf("ciao");
Se si omette di scrivere esplicitamente il passoincrementale viene usato il valore 1
quindi 1:10 genera la sequenza 1 2 3 4 5 6 7 8 9 10

## Istruzione WHILE

L'istruzione while è una istruzione di ripetizione , il blocco di codice viene rieseguito finche' la condizione è vera, visto che il controllo della condizione avviene prima dell'esecuzione del blocco di codice , se la condizione è immediatamente falsa , il blocco di codice non viene mai eseguito. Si dice che la condizione è in testa.
Vediamo la sintassi
passiamo all'esempio:
finché il valore di a è minore di dieci vengono ripetute le istruzioni z=z+23; a=a+1; Da notare che se non si vuole avere infiniti cicli le variabili coinvolte nella condizione devono assumere valori diversi e quindi nelle istruzioni da ripetere ce n'è almeno una che modifica la valutazione della condizione stessa.

## Istruzione do-until

L'istruzione do-until è una istruzione di ripetizione, il blocco di codice viene rieseguito finché la condizione è falsa. Visto che il controllo della condizione avviene dopo l'esecuzione del blocco di codice , il blocco di codice viene sempre eseguito almeno una volta. Si dice che la condizione è in coda.
Vediamo la sintassi
passiamo all'esempio:
finché il valore di a non è maggiore di dieci vengono ripetute le istruzioni z=z+23; a=a+1; Da notare che se non si vuole avere infiniti cicli le variabili coinvolte nella condizione devono assumere valori diversi e quindi nelle istruzioni da ripetere ce n'è almeno una che modifica la valutazione della condizione stessa.