Informatica 2 Liceo Scientifico Scienze Applicate/Altre Istruzioni di Scelta o Diramazione

Indice del libro

Operatore ? e istruzioni goto

modifica

Le istruzioni di scelta/diramazione sono 4, due sono state analizzate if e switch, mancano il famoso operatore ternario ? (si proprio il punto di domanda) e l'istruzione goto.

Vediamo la sintassi dell'operatore ternario ?

(condizionelogica)?(espressionecasovero):(espressionecasofalso)

in pratica l'operatore ? restituisce a seconda che la condizione sia true o false il valore del risultato dell'espressionecasovero o dell'espressionecasofalso.

z=(a>3)?7:9;

  • se a>3 e' true allora ? restituisce il numero 7 che viene trasferito nella variabile z, altrimenti
  • se a<3 e' false allora ? restituisce il numero 9 che viene trasferito nella variabile z,

nulla vieta che il comando possa assumere la forma parola=(a>3)?"Luca":"Marco"; oppure k=(a%2)?-a:a*a; pensiamo a e k di tipo intero, valutiamo la condizione a%2 cioe' il resto della divisione a/2, il resto se vale zero viene interpretato come falso, se invece il resto vale 1 viene interpretato coe vero, ora se la condizione vale true(numero a dispari) carico in z il valore -a, se la condizione vale false(numero a pari) carico in z il valore a*a.

il ? e' una forma compatta per scrivere un if a due vie in cui viene dato a una stessa variabile due possibili valori. quindi z=(a>3)?7:9; poteva (in modo sicuramente piu' comprensibile) essere scritto come

if(a>3)
  z=7;
else
  z=9;


il vantaggio del ? e' la compattezza del comando e la possibilita' di non dover dichiarare la variabile z se il ? viene combinato in una espressione di calcolo .

Ricordatevi comunque che ? e' il solo operatore ternario

Istruzione goto

modifica

L'istruzione goto e' bellissima e internamente al programma che si scrive utilizzata spessisimo, ha il brutto difetto/vantaggio di consentire un salto incondizionato nell'ordine di esecuzione delle istruzioni.Nel passato era utilizzata molto spesso dai programmatori ma tende a rendere difficile lo studio del codice (cioe' capire come si evolve l'esecuzione delle istruzioni in un programma) destrutturando il codice, per questo motivo e' stata messa al bando (specie durante i corsi di programmazione).Si puo' scrivere un qualsiasi programma senza utilizzarla direttamente (sotto il cofano del programma il goto continua a ruggire) mantenendo semplice e chiara la struttura del programma.

Naturalmente puo' capitare per questioni di velocità nella scrittura dei programmi (specie durante le Olimpiadi Informatica) di doverla usare, vediamo come funziona:

Ho omesso quando ho parlato delle istruzioni in C che davanti ad ogni istruzione e' possibile scrivere una label (etichetta /fermaposto), una volta queste label erano solo numeriche ma poi sono diventate alfanumeriche, posso scrivere allora:


nome1label: istruzionedaeseguire ;


non e' detto che si debba mettere una etichetta davanti a ogni istruzione, va fatto quando serve.Le etichette da sole al pari dei commenti non influenzano il programma.

facciamo un esempio

          k=1;
saltaqua: cout<<"ciao";


ora queste istruzioni impostano la variabile k a 1 e stampano la scritta ciao una volta,l'etichetta saltaqua e' per ora ininfluente, io ora vorrei stampare la scritta ciao per 10 volte, modifico il codice in questo modo

          k=1;
saltaqua: cout<<"ciao";
          k=k+1;
          if(k<=10) 
            goto saltaqua;
          
          istruzionesuccessiva;   


l'istruzione goto saltaqua; quando eseguita sposta l'esecuzione delle istruzioni a quella scritta in corrispondenza dell'etichetta saltaqua.Nel nostro caso prima pongo k=1, poi stampo ciao, incremento k di uno (passa a 2), poi eseguo l'if la condizione e' verificata e allora l'istruzione goto saltaqua fa proseguire l'esecuzione dall'istruzione cout (che e' in corrispondenza dell'etichetta saltaqua), stampo per la 2^ volta la scritta ciao e la cosa si ripete .... dopo aver stampato per 10 volte la scritta ciao (nel frattempo l'istruzione goto ha spostato per 9 volte l'esecuzione a saltaqua) k assume il valore 11, la condizione del if diventa false, l'istruzione goto non viene eseguita e si passa all'istruzionesuccessiva;

Il goto e' una istruzione di salto incondizionato che sebbene utile e potente noi non useremo nei nostri programmi (a meno che non siate alle olimpiadi).