pip8.gif (3042 bytes)

Un pò di logica!

Per programmare abbiamo bisogno essenzialmente di cicli (while) e di diramazioni (if ...else); tutte le altre costruzioni si ottengono da queste due.

While :

La struttura di un ciclo while è la seguente:

while(Cdzne) {
    istruzioni
    }
next command

quando incontra un ciclo while il computer verifica la condizione Cdzne se Cdzne è falsa, il blocco di istruzioni tra { e } viene saltato e il computer passa a l'istruzione next command; se Cdzne è vera, vengono eseguite le istruzioni tra { e }; dopodichè il computer torna a verificare la condizione Cdzne ecc... In altri termini le istruzioni tra { e } saranno eseguite finchè Cdzne è vera.

Esempio:

int n = 1;
while(n < 3){
    System.out.println(n);
    n +=1;
    }
System.out.println("Fine");

La variabile n è inizializzata col valore 1. Il computer valuta l'espressione n < 3 , l'espressione è vera, il computer esegue le istruzioni tra le parentesi: stampa "1" e aggiunge 1 a n; adesso n vale 2 (NB: n +=1; è la stessa cosa che n = n+1;). Il computer torna a valutare l'espressione n < 3 , l'espressione è vera, il computer esegue le istruzioi tra le parentesi: stampa "2" e aggiunge 1 a n; adesso n vale 3. Il computer torna a valutare l'espressione n < 3 , l'espressione è falsa, il computer salta il blocco tra le parentesi e va all'istruzione successiva: stampa "Fine" (osservare che a questo punto n vale 3).

if :

La struttura di un if è:

if(Cdze) {
    istruzioni
    }
next command;

Se l'espressione Cdze è vera, il computer esegue le istruzioni tra le parentesi, altrimenti (se Cdze è falsa) il computer salta il blocco tra le parentesi e passa direttamente a l'istruzione next command.

if ... else :

Un if può venire con un else, questo serve a creare una diramazione.

if(Cdze) {
    istr.1
    }
else{
    istr.2
    }
next command

Il computer esamina Cdze, se Cdze è vera esegue istr.1 e dopo passa a l'istruzione next command (istr.2 non vengono eseguite); se Cdze è falsa, il computer salta il primo blocco tra le parentesi, passa al secondo blocco (quello dell'else) ed esegue istr.2, dopodichè passa a next command. In conclusione uno ed uno solo dei blocchi istr.1 , istr.2 viene eseguito.

Più diramazioni :

Un else può contenere un if, per esempio:

if(Cdze) {
    istr.1
    }
else{
    if(Cdze2){
    istr.2
    }
    else{
    istr.3
    }
}
next command

Con un pò di attenzione si vede che uno ed uno solo dei tre blocchi istr.1, istr.2, istr.3 verrà eseguito.

Attenzione: non è indispensabile scrivere il codice usando le parentesi, il compilatore non guarda le parentesi, pertanto si può anche scrivere:

if(Cdze) {
    istr.1
    }
else
    if(Cdze2){
    istr.2
    }
    else{
    istr.3
    }
next command

o ancora:

if(Cdze) {
    istr.1
    }
else if(Cdze2){
    istr.2
    }
    else{
    istr.3
    }
next command

o (peggio) ancora:

if(Cdze)
    istr.1
else if(Cdze2)
    istr.2
    else
    istr.3
next command

Inutile dire che la scrittura con le parentesi e il codice rientrante aiuta molto a capire (e a non fare errori!)

Naturalmente si può generalizzare:

if(Cdze){
    istr.1
    }
else if(Cdze2){
    istr.2
    }
else if(Cdze3){
    istr.3
    }
...........
else if(Cdzen){
    istr.n
    }
else{
    istr.(n+1)
    }

Uno ed uno solo dei blocchi istr.i sarà eseguito. L'ultimo else può essere ommesso.

Operatori relazionali :

Per testare se valori sono uguali abbiamo a disposizione i seguenti operatori:

= = (uguaglianza)  > (strettamente maggiore)  >= (maggiore o uguale); idem con minore:  <  <= 

!= (non uguale)

Attenzione: x = a; significa assegnare a x il valore di a, pertanto se si scrive:
if(x = 0) {....
sorge un problema. Bisogna invece usare il segno = = che significa "uguale a", quindi
if(x = = 0){...    è corretto.

Invece per confrontare delle stringhe bisogna usare .equals per esempio: if(Str.equals(Str2)){...    dove Str e Str2 sono delle stringhe.

Operatori booleani:

&& è il connettore logico "e", mentre || è il connettore logico "o"; la negazione logica si indica con !

fleche_retour.gif (1377 bytes)avanti02.gif (9574 bytes)