prof. Nunzio Brugaletta Programmazione e linguaggio C

EnneBi - Programmazione
Avanti Indietro Inizio


3.5 La scelta multipla: istruzione else-if

Può essere necessario, nel corso di un programma, variare l’elaborazione in seguito a più condizioni. In questi casi il linguaggio C fornisce la struttura:

if(espressione)
  istruzione
else if(espressione)
  istruzione
  ...
else
  istruzione

In questo caso le espressioni vengono valutate nell’ordine in cui sono scritte: se è vera la prima espressione si esegue l’istruzione specificata e poi si passa all’istruzione successiva alla chiusura della struttura. Se la prima condizione non è vera si passa ad esaminare la seconda e così via. Si tenga presente che:

Al fine di mostrare un esempio di alcune delle istruzioni esposte ultimamente si propone un programma che, data una espressione algebrica, calcoli quante parentesi graffe, quadre e tonde sono contenute nella espressione stessa. Le righe più significative sono etichettate per permettere un commento successivo:

/*
  Conta i vari tipi di parentesi contenute in una espressione algebrica 
  (non fa distinzione fra parentesi aperte e chiuse)
*/

#include <stdio.h>
main(){
  char espress[30];      	/*1*/
  int pargraf,parquad,partond;
  int c;

  printf("\nEspressione algebrica ");
  gets(espress);         	/*2*/
  pargraf=parquad=partond=0;
  for(c=0;c<30 && espress[c]!=‘\0’;c++) {  	/*3*/
    if(espress[c]==‘{’ || espress[c]==‘}’)   	/*4*/
      pargraf++;
    else if(espress[c]==‘[’ || espress[c]==‘]’)	/*4*/
      parquad++;
    else if(espress[c]==‘(’ || espress[c]==‘)’)	/*4*/
      partond++;
  };
  printf("\nGraffe = %d",pargraf); 
  printf("\nQuadre = %d",parquad);
  printf("\nTonde = %d",partond);
}

Nella riga con etichetta 1 si dichiara un vettore di tipo char e di lunghezza massima di 30 caratteri, cioè una stringa di 30 caratteri.

Nella 2 si acquisisce dall’input la stringa (cioè l’espressione algebrica da elaborare).

Nella 3 c’è l’inizio di un ciclo a contatore che servirà per la scansione della stringa: i caratteri verranno esaminati uno per volta per verificare se sono parentesi. Nella gets la stringa è vista nel suo complesso, qui si esaminano i singoli elementi del vettore cioè i caratteri che compongono la stringa. Si noti il controllo di fine ciclo: il contatore del ciclo, che qui assume il compito di indice del vettore, non può superare 29 (l’array ha 30 elementi al massimo) ed inoltre il carattere esaminato non può essere null (qualora lo fosse, la stringa sarebbe terminata). Le due condizioni devono essere verificate contemporaneamente. Se una delle due non è verificata (superamento dei limiti fissati o fine stringa) l’elaborazione passa all’istruzione immediatamente dopo la chiusura del ciclo: la printf dopo la chiusura della parentesi (qui le parentesi sono state aggiunte per aumentare la leggibilità infatti, contenendo il ciclo una sola istruzione, non sarebbero indispensabili).

Nelle righe etichettate con 4 si esaminano i vari casi possibili (i tre tipi di parentesi). Il carattere esaminato può essere indifferentemente la parentesi aperta o quella chiusa e, a seconda del tipo, viene conteggiato nell’apposito contatore. Se il carattere esaminato non è una parentesi, mancando la clausola else, non viene preso in considerazione.



Avanti Indietro Inizio

http://ennebi.solira.org ennebi@solira.org