SlideShare a Scribd company logo
Istruzioni del
Linguaggio C/C++
Istruzione di assegnamento




Programmazione - Paolo Valente, 2008/2009   2
Istruzione di assegnamento
 • Denotata mediante il simbolo =
      (l’operatore relazionale di uguaglianza è denotata con il simbolo == )

      nome_variabile = espressione ;

 • Viene utilizzata per assegnare ad una variabile (non ad
   una costante!) il valore di un’espressione
 • L'identificatore a sinistra rappresenta l'indirizzo della
   variabile di cui vogliamo modificare il valore
    – tale indirizzo è detto lvalue
 • Il valore dell'espressione che compare a destra
   rappresenta il nuovo valore
    – tale valore è detto rvalue

Programmazione - Paolo Valente, 2008/2009                                      3
Istruzione di assegnamento

 Esempio
   int N;
                                                                L’esecuzione di
                                                          ...
                                                                una definizione
                        simbolo        indirizzo                provoca l’allocazione
                                                                di uno spazio in
                                                          ?
                                                   1600
                            N               1600                memoria pari
                                                                a quello necessario a
                                                          ...
                                                                contenere un dato del
                                                                tipo specificato

       N = 150;

                                                                L’esecuzione di un
                                                          ...
                        simbolo        indirizzo                assegnamento
                                                                provoca l’inserimento
                                                          150
                                                   1600
                            N               1600                nello spazio relativo
                                                                alla variabile del valore
                                                                indicato a destra
                                                          ...
                                                                del simbolo =
Programmazione - Paolo Valente, 2008/2009                                             4
Istruzione di assegnamento (cont.)
 •    L’esecuzione di un’istruzione di assegnamento comporta innanzitutto
      la valutazione di tutta l’espressione a destra dell’assegnamento.
      Es.,               int      c, d;
                         c=       2;
                         d=       (c+5)/3 - c;
                         d=       (d+c)/2;
 •    Solo dopo si inserisce il valore risultante (rvalue) nella locazione di
      memoria relativa alla variabile (posta a sinistra dell’assegnamento)
       – Risultato espressione assegnamento: indirizzo della variabile




Programmazione - Paolo Valente, 2008/2009                                       5
Esercizio 1 (Specifica)

 • Inverti l’ordine delle cifre che formano un intero
   positivo non multiplo di 10 che sia compreso fra
   101 e 999.

 • Per esempio: 103                             301
                                            
                234                             432
                                            
                350                             53
                                            




Programmazione - Paolo Valente, 2008/2009               6
Esercizio 1 (Algoritmo)

 Idea!: Utilizzare le operazioni di modulo e di
   divisione fra numeri interi.
 Dato un numero, valgono le seguenti relazioni:
 • Unita = (numero/10^0)%10;
       – Es., (234/1)%10 = 4

 •     Decine = (numero/10^1)%10;
       – Es., (234/10)%10 = 3


 •     Centinaia = (numero/10^2)%10;
       – Es., (234/100)%10 = 2


Programmazione - Paolo Valente, 2008/2009           7
Esercizio 1 (Programma)
       main()
       {
         int numero;
         int unita, decine, centinaia, risultato;
        
         cin>>numero;
        
         unita = (numero)%10;
         decine = (numero/10)%10;
         centinaia = (numero/100)%10;

           risultato =unità*100+decine*10+centinaia;
           cout<<risultato;
       }
Programmazione - Paolo Valente, 2008/2009              8
Esercizi da svolgere

 Esercizio 1bis
  
   Si risolva lo stesso problema posto nell’Esercizio 1
   accettando in input un qualsiasi numero intero (anche
   divisibile per 10) compreso fra 100 e 999.
   Esempio: 100 va ristampato come 001
  
 Esercizio 1ter (servirà conoscere le istruzioni cicliche)
  
   Si risolva lo stesso problema posto nell’Esercizio 1
   accettando in input un qualsiasi numero intero positivo (si
   richieda in input sia il numero sia il numero di cifre che lo
   compongono).

Programmazione - Paolo Valente, 2008/2009                          9
Tipo booleano




Programmazione - Paolo Valente, 2008/2009    10
Tipo booleano
 • Disponibile solo in C++

 • Nome del tipo: bool

 • Valori possibili: vero (true), falso (false)
       – true e false sono due letterali booleani
 • Esempio di definizione:
      bool u, v = true ; // la seconda variabile
                         // è inizializzata a vero

 • Operazioni possibili: ...


Programmazione - Paolo Valente, 2008/2009           11
Operatori logici

                   operatore logico         operatore    C/C++


                                             unario
               not logico                                    !
               (negazione)                              (prefisso)

                                             binario
               and logico                                  &&
               (congiunzione)                           (infisso)

                                             binario
               or logico                                    ||
               (disgiunzione)                           (infisso)




Programmazione - Paolo Valente, 2008/2009                            12
Tabella di verità degli operatori

           AND            Ris.                      OR       Ris.       NOT   Ris.


                                                                     
       V   &&      V        V                   V   ||   V    V         !V    F
       V   &&      F        F                   V   ||   F    V         !F    V
       F   &&      V        F                   F   ||   V    V
       F   &&      F        F                   F   ||   F    F




Programmazione - Paolo Valente, 2008/2009                                            13
Tipo booleano e tipi numerici
 • Se un oggetto di tipo booleano è usato dove è
   atteso un valore numerico

       – true è convertito a 1
       – false è convertito a 0
 • Viceversa, se un oggetto di tipo numerabile è
   utilizzato dove è atteso un booleano
       – ogni valore diverso da 0 è convertito a true
       – il valore 0 è convertito a false

Programmazione - Paolo Valente, 2008/2009               14
Tipo booleano e linguaggio C

In C, non esistendo il tipo bool, gli operatori logici operano
su interi
e restituiscono un intero:
• il valore 0 viene considerato falso
• ogni valore diverso da 0 viene considerato vero
• il risultato è 0 o 1
  Esempi
            5 && 7               0 || 33    !5




Programmazione - Paolo Valente, 2008/2009                        15
Operatori di confronto




Programmazione - Paolo Valente, 2008/2009   16
Operatori di confronto
 ==          Operatore di confronto di uguaglianza
             (simbolo = denota l’operazione di assegnamento!)

 !=          Operatore di confronto di diversità

 >           Operatore di confronto di maggiore stretto
 <           Operatore di confronto di minore stretto
 >=          Operatore di confronto di maggiore-uguale
 <=          Operatore di confronto di minore-uguale

  Restituiscono un valore di tipo booleano:
  falso o vero
Programmazione - Paolo Valente, 2008/2009                       17
Sintassi del C++




Programmazione - Paolo Valente, 2008/2009    18
Sintassi del C/C++ 1/2
 • Ora che abbiamo più familiarità col linguaggio, fissiamo un
   po' meglio la sintassi ...

 • Programma C/C++: sequenze di parole (token) delimitate
   da spazi bianchi (whitespaces)

       – Spazio bianco: carattere spazio, tabulazione, a capo

 • Token possibili: identificatori, parole chiave, espressioni
   letterali, operatori, separatori

       – Operatore: denota una operazione nel calcolo delle
         espressioni

       – Separatore: ( ) , ; : { }

Programmazione - Paolo Valente, 2008/2009                        19
Sintassi del C/C++ 2/2
IDENTIFICATORI
   <Identificatore> ::= <Lettera> { <Lettera> | <Cifra> }

•   Lettera include tutte le lettere, maiuscole e minuscole, e l’underscore
    “_”
•   La notazione { A | B } indica una sequenza indefinita di elementi A o B
•   Maiuscole e minuscole sono diverse (linguaggio C è case-sensitive)

PAROLE RISERVATE
• int, float, double, char, if, for, do, while, switch, break, continue, ...
  { } delimitatore di blocco

COMMENTI
  // commento, su una sola riga
  /* commento, anche su più righe */        (non possono essere innestati)



Programmazione - Paolo Valente, 2008/2009                                  20
Uso degli spazi bianchi
• Una parola chiave ed un identificatore vanno
  separati da spazi bianchi
     – Es:
       int a; // inta sarebbe un
              // identificatore !

• In tutti gli altri casi gli spazi bianchi non sono
  necessari




Programmazione - Paolo Valente, 2008/2009              21
Espressioni




Programmazione - Paolo Valente, 2008/2009      22
Espressioni
 • Costrutto sintattico formato da letterali, identificatori,
   operatori, parentesi tonde, ...

 • Operatori binari
       o Moltiplicativi: * / %

       o Additivi: + -

       o Traslazione: << >>

       o Relazione (confronto): < > <= >=

       o Eguaglianza (confronto): == !=

       o Logici: && ||

 • Abbiamo già visto quasi tutti questi operatori
   parlando del tipo int e del tipo bool
Programmazione - Paolo Valente, 2008/2009                       23
Altri operatori
 • Assegnamento abbreviato: +=, -=, *=, /=, ...
   a += b ; <==>       a=a+b;

 • Incremento e decremento: ++ --
       – Prefisso: prima si effettua l'incremento/decremento, poi
         si usa la variabile. Restituisce un lvalue
         int a = 3; cout<<++a; // stampa 4
         (++a) = 4; // valido
       – Postfisso: prima si usa il valore della variabile, poi si
         effettua l'incremento/decremento. Restituisce un rvalue
         int a = 3; cout<<a++; // stampa 3
         (a++) = 4; // ERRORE !!!


Programmazione - Paolo Valente, 2008/2009                        24
Espressioni aritmetiche e logiche
 • Un'espressione si definisce
    – aritmetica: produce un risultato di tipo aritmetico
    – logica: produce un risultato di tipo booleano

 • Esempi:

     Espressioni aritmetiche
                                               4>2
          2+3
                                               true || (2 > 5)
          (2 + 3) * 5
                                            Espressioni logiche


Programmazione - Paolo Valente, 2008/2009                         25
Proprietà operatori
 • Posizione rispetto ai suoi operandi (o argomenti):
   prefisso, postfisso, infisso
 • Numero di operandi (arietà)
 • Precedenza (o priorità) nell'ordine di esecuzione

       – Es: 1 + 2 * 3 è valutato come 1 + (2 * 3)
             k<b+3 è valutato come k<(b+3), e non (k<b) +3
 • Associatività: ordine con cui vengono valutati due
   operatori con la stessa precedenza.
       – Associativi a sinistra: valutati da sinistra a destra
          o Es: / è associativo a sinistra, quindi 6/3/2  (6/3)/2
       – Associativi a destra: valutati da destra a sinistra
          o Es: = è associativo a destra ...
Programmazione - Paolo Valente, 2008/2009                            26
Associatività dell’assegnamento
 • L’operatore di assegnamento può comparire più volte in
   un’istruzione.
 • L’associatività dell’operatore di assegnamento è a destra
   Es.,
                      k = j = 5;
      equivale a                    j = 5;
                                    k = j;


                                    k = j+2 = 5;   NON SI PUO’ FARE!




Programmazione - Paolo Valente, 2008/2009                          27
Ordine valutazione espressioni
 • Ordine
    – Fattori: dalle espressioni letterali e calcolo delle
      funzioni e degli operatori unari
    – Termini: dal calcolo degli operatori binari
       o Moltiplicativi: * / %

       o Additivi: + -

       o Traslazione: << >>

       o Relazione: < > <= >=

       o Eguaglianza: == !=

       o Logici: && ||

 • Con le parentesi possiamo modificare l'ordine di
   valutazione dei termini
Programmazione - Paolo Valente, 2008/2009                28
Sintesi priorità degli operatori
              Fattori                           !            ++           --
                                                *        /            %
                                                     +            -
                                            >       >=            <            <=
             Termini                                ==            !=
                                                         &&
                                                             ||
                                                         ?:
Assegnamento                                                 =
Programmazione - Paolo Valente, 2008/2009                                           29
Espressioni
 • Esempi:
                          Espressioni aritmetiche

       2+3                                         (2 + 3) * 5
                                      Fattori


       4>2
                                                Termini
       true || (2 > 5)

        Espressioni logiche
Programmazione - Paolo Valente, 2008/2009                        30
Programmazione strutturata




Programmazione - Paolo Valente, 2008/2009   31
Programmazione “strutturata”
 • Si parla di programmazione strutturata se si utilizzano
   solo le seguenti strutture per alterare il flusso di
   controllo [Dijkstra, 1969]:
       – concatenazione (o composizione)
         legata al concetto di enumerazione (sequenza)
       – selezione o (istruzione condizionale)
         ramifica il flusso di controllo in base al valore vero o falso di una
         espressione detta “condizione di scelta”
       – iterazione
         dà luogo all’esecuzione ripetuta di un’istruzione (semplice o
         composta) finché permane vera una espressione detta
         “condizione di iterazione”


 • OBIETTIVO: rendere i programmi più leggibili,
   modificabili e manutenibili

Programmazione - Paolo Valente, 2008/2009                                        32
Teorema di Jacopini-Böem
      Le strutture di concatenazione, iterazione e selezione
      costituiscono un insieme completo
      in grado di esprimere tutte le funzioni calcolabili
 • Dunque, l’uso di queste sole strutture di controllo
   non limita il potere espressivo.
   P.es., un linguaggio con i seguenti
        Tipi di dato: Naturali con l’operazione di somma (+)
        Istruzioni:   assegnamento
                      istruzione composta
                      istruzione condizionale
                      istruzione di iterazione
   è un linguaggio completo, cioè è un linguaggio in grado
   di esprimere tutte le funzioni calcolabili.

Programmazione - Paolo Valente, 2008/2009                      33
Programmazione “strutturata” in
                   C/C++
 • Istruzioni composte
       – concatenazione di istruzioni “semplici” all'interno di un
         blocco  { }
  
 • Istruzioni espressione
       – esempio: assegnamento  =
  
 • Istruzioni condizionali
       – alternativa  if (), if () else
       – selezione  switch ()
  
 • Istruzioni di iterazione
       – ciclo  while (), do while (), for ( ; ; )

Programmazione - Paolo Valente, 2008/2009                            34
Istruzioni Condizionali




Programmazione - Paolo Valente, 2008/2009   35
Istruzioni condizionali
 Solitamente vengono rese disponibili due tipi di istruzioni condizionali:

 •    Istruzione di SCELTA (semplice) o ALTERNATIVA
 •    Istruzione di SCELTA MULTIPLA (questa non è essenziale, ma
      migliora l’espressività del linguaggio)




Programmazione - Paolo Valente, 2008/2009                                    36
Istruzione di scelta semplice (o Alternativa)
 • Consente di scegliere fra due istruzioni alternative in
   base al verificarsi di una particolare condizione
                         <istruzione-di-scelta> ::=
                                if (condizione) < istruzione1>
                                    [   else < istruzione2> ]   Opzionale

 •    Condizione è un’espressione logica che viene valutata al momento
      dell’esecuzione dell’istruzione if
 •    Se condizione risulta vera si esegue <istruzione1>, altrimenti si
      esegue <istruzione2>
      In entrambi i casi l’esecuzione continua poi con l’istruzione che segue
 •
      l’istruzione if.
      NOTA: Se condizione è falsa e la parte else (opzionale)
      è omessa, si passa subito all’istruzione che segue l’istruzione if
Programmazione - Paolo Valente, 2008/2009                                   37
Le due istruzioni di scelta semplice
             if (condizione) istruzione1;

             if (condizione)
                       istruzione1;

             if (condizione) istruzione1;
             else istruzione2;

             if (condizione) istruzione1;
             else
                   istruzione2;

Programmazione - Paolo Valente, 2008/2009    38
Esempio
             int a=3, n=-6, b=0;
             if (n > 0)
                    a = b + 5;
             else
                    n = b*5;

 ------------------
 a?
 b?
 n?
Programmazione - Paolo Valente, 2008/2009             39
Problema
 • E se vogliamo eseguire più di una istruzione in
   uno dei due rami o in entrambi?
 • Esempio:

             if (condizione)
                   <varie istruzioni>
             else
                   <varie istruzioni>




Programmazione - Paolo Valente, 2008/2009              40
Istruzioni Composte




Programmazione - Paolo Valente, 2008/2009   41
Istruzione composta
 • Sequenza di istruzioni racchiuse tra parentesi graffe
      {
             <istruzione1>
             <istruzione2>
             ...
      }
 • E' un caso particolare di blocco
 • Ovunque la sintassi preveda una istruzione si può inserire
   una istruzione composta
 • Ai fini della sintassi e della semantica è trattata come una
   istruzione singola
 • L'esecuzione di una istruzione composta implica
   l'esecuzione ordinata di tutte le istruzioni della sequenza

Programmazione - Paolo Valente, 2008/2009                         42
Istruzioni Condizionali
                     Seconda parte




Programmazione - Paolo Valente, 2008/2009   43
Forma completa
             if (condizione)
                   <istruzione-ramo-if>
             [else <istruzione-ramo-else>]

 • istruzione può essere qualsiasi istruzione, ovvero
   espressione, condizionale, iterativa, composta
   (blocco di istruzioni)
 • Le istruzioni da eseguire sono spesso chiamate
   anche corpo del ramo if o corpo del ramo else,
   rispettivamente


Programmazione - Paolo Valente, 2008/2009           44
Esempio
 • Qualora occorra specificare più istruzioni, si dovrà quindi
   utilizzare un blocco

             if (n > 0)
                 {                               /* inizio blocco */
                     a = b + 5;
                     c = x + a - b;
                 }                               /* fine blocco */
             else n = b*5;




Programmazione - Paolo Valente, 2008/2009                              45
Osservazione 2
 Istruzioni if annidate
 • Come caso particolare, <istruzione-ramo-if> o
   <istruzione-ramo-else> potrebbero essere un’altra
   <istruzione-di-scelta>
 • In questo caso occorre attenzione ad associare i
   rami else (che sono opzionali) all’if corretto

      In base alla sintassi del linguaggio C/C++, il un
      ramo else è sempre associato all’if più interno
      (vicino)
      Se questa non è l'associazione desiderata,
      occorre inserire esplicitamente un blocco { }

Programmazione - Paolo Valente, 2008/2009             46
Osservazione 2 (cont.)
             if (n > 0)
   ?             if (a>b) n = a;
               else n = b*5; /* else riferito a if (a>b) */
       Per far sì che l’else si riferisca al primo if:
         if (n > 0)
              { if (a>b) n = a; }
         else n = b*5;
       Per leggibilità, si possono usare le parentesi anche
       nell'altro caso:
         if (n > 0)
               { if (a>b) n = a;
                   else n = b*5; }
Programmazione - Paolo Valente, 2008/2009                     47
Istruzione di scelta multipla: switch
 • Consente di scegliere fra molti casi in base
   al valore di un’espressione di selezione




Programmazione - Paolo Valente, 2008/2009     48
Istruzione di scelta multipla
           (sintassi e semantica) 1/2
 <istruzione-di-scelta-multipla> ::=
    switch (espressione di selezione)
        {
          case <etichetta1> : <sequenza_istruzioni1> [ break; ]
          case <etichetta2> : <sequenza_istruzioni2> [ break; ]
                 …
          [ default : < sequenza_istruzioniN> ]
        }
 espressione di selezione è un’espressione che
 restituisce un valore numerabile (intero, carattere,
 enumerato, …), e viene valutata al momento dell’esecuzione
 dell’istruzione switch
  
  Le etichette <etichetta1>, <etichetta2> ... devono essere
  delle costanti dello stesso tipo dell'espressione di
  selezione
Programmazione - Paolo Valente, 2008/2009                   49
Istruzione di scelta multipla
                 (sintassi e semantica) 2/2
 • Definiamo corpo dell'istruzione switch, la parte del
   costrutto compresa tra le parentesi graffe
 • Il valore dell'espressione di selezione viene confrontato
   con le costanti che etichettano i vari casi: l’esecuzione
   salta al ramo dell’etichetta corrispondente (se esiste)
    – L'esecuzione prosegue poi sequenzialmente fino alla
       fine del corpo dell'istruzione switch
    – A meno che non si incontri un'istruzione break, nel qual
       caso si esce dal blocco
 • Se nessuna etichetta corrisponde al valore
   dell’espressione, si salta al ramo default (se specificato)
    – Se non esiste, l’esecuzione prosegue con l’istruzione
      successiva all’istruzione switch
Programmazione - Paolo Valente, 2008/2009                        50
Diagramma di flusso

                                    espressione
                                    di selezione

                                       caso A                           break
                                                 sequenza_istruzioni1

                                                                        break
                                       caso B
                                                 sequenza_istruzioni2

                                                                        break
                                                           …

                                       default
                                                 sequenza_istruzioniN




Programmazione - Paolo Valente, 2008/2009                                       51
Esempio
 int a, n;
 cin>>a>>n;
 switch (n)
           {
                         case 1:
                            cout<<”Ramo A”<<endl;
                            break;
                         case 2:
                            cout<<”Ramo B”<<endl;
                            a = a*a;
                            break;
                         case 3:
                            cout<<”Ramo C”<<endl;
                            a = a*a*a;
                            break;
                         default: a=1;
         }
 cout<<a<<endl;
Programmazione - Paolo Valente, 2008/2009             52
Osservazioni
 • <sequenza_istruzioni> denota una sequenza di
   istruzioni per cui non è necessario un blocco per
   specificare più istruzioni
 • I vari rami non sono mutuamente esclusivi: una
   volta imboccato un ramo, l’esecuzione prosegue
   in generale con le istruzioni dei rami successivi
       – Per avere rami mutuamente esclusivi occorre forzare
         esplicitamente l’uscita mediante l’istruzione break




Programmazione - Paolo Valente, 2008/2009                      53
Esempio
 int a, n, b = 1;
 cin>>a>>n;
 switch (2 - n)
    {
                 case 0:
                     b *= a;
                       case 1:
                           b *= a;
                       case 2:
                          break;
                       default:
                           cout<<”Valore non valido per nn” ;
         }
 cout<<b<<endl;

Programmazione - Paolo Valente, 2008/2009                        54
Pro e contro della scelta multipla
 • L’istruzione switch garantisce maggiore leggibilità
   rispetto all'if quando c'è da scegliere tra più di due
   alternative
 • Altrimenti è ovviamente un costrutto più
   ingombrante
 • Limitazioni:
       – è utilizzabile solo con espressioni ed etichette di tipo
         numerabile (intero, carattere, enumerato, ...)
       – non è utilizzabile con numeri reali (float, double) o con
         tipi strutturati (stringhe, vettori, strutture...)

Programmazione - Paolo Valente, 2008/2009                           55

More Related Content

What's hot

Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...
Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...
Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...
Odinot Stanislas
 
Embedded C - Lecture 1
Embedded C - Lecture 1Embedded C - Lecture 1
Embedded C - Lecture 1
Mohamed Abdallah
 
Getting started with AMD GPUs
Getting started with AMD GPUsGetting started with AMD GPUs
Getting started with AMD GPUs
George Markomanolis
 
Real Time Operating Systems for Embedded Systems
Real Time Operating Systems for Embedded SystemsReal Time Operating Systems for Embedded Systems
Real Time Operating Systems for Embedded Systems
Aditya Vichare
 
Unit 1 computer architecture (1)
Unit 1   computer architecture (1)Unit 1   computer architecture (1)
Unit 1 computer architecture (1)
DevaKumari Vijay
 
ARM Processor architecture
ARM Processor  architectureARM Processor  architecture
ARM Processor architecture
rajkciitr
 
SOC Power Estimation
SOC Power EstimationSOC Power Estimation
SOC Power Estimation
Mahesh Dananjaya
 
Writing c code for the 8051
Writing c code for the 8051Writing c code for the 8051
Writing c code for the 8051Quản Minh Tú
 
Memory Organization
Memory OrganizationMemory Organization
Memory Organization
Acad
 
Timer programming for 8051 using embedded c
Timer programming for 8051 using embedded cTimer programming for 8051 using embedded c
Timer programming for 8051 using embedded c
Vikas Dongre
 
IRQs: the Hard, the Soft, the Threaded and the Preemptible
IRQs: the Hard, the Soft, the Threaded and the PreemptibleIRQs: the Hard, the Soft, the Threaded and the Preemptible
IRQs: the Hard, the Soft, the Threaded and the Preemptible
Alison Chaiken
 
Pic 18 microcontroller
Pic 18 microcontrollerPic 18 microcontroller
Pic 18 microcontroller
Ashish Ranjan
 
Synthesis & optimization of digital circuits
Synthesis & optimization of digital circuitsSynthesis & optimization of digital circuits
Synthesis & optimization of digital circuits
Stutorials S
 
LPC 1768 A study on Real Time clock features
LPC 1768 A study on Real Time clock featuresLPC 1768 A study on Real Time clock features
LPC 1768 A study on Real Time clock features
Omkar Rane
 
Original Opto TLP701 P701 701 SOP-6 New Toshiba
Original Opto TLP701 P701 701 SOP-6 New ToshibaOriginal Opto TLP701 P701 701 SOP-6 New Toshiba
Original Opto TLP701 P701 701 SOP-6 New Toshiba
authelectroniccom
 
UVM ARCHITECTURE FOR VERIFICATION
UVM ARCHITECTURE FOR VERIFICATIONUVM ARCHITECTURE FOR VERIFICATION
UVM ARCHITECTURE FOR VERIFICATION
IAEME Publication
 
ARM CORTEX M3 PPT
ARM CORTEX M3 PPTARM CORTEX M3 PPT
ARM CORTEX M3 PPT
Gaurav Verma
 
Jtag presentation
Jtag presentationJtag presentation
Jtag presentationklinetik
 
Timer & Interrupt Atmega16
Timer & Interrupt Atmega16Timer & Interrupt Atmega16
Timer & Interrupt Atmega16
Ramadan Ramadan
 

What's hot (20)

Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...
Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...
Hands-on Lab: How to Unleash Your Storage Performance by Using NVM Express™ B...
 
Embedded C - Lecture 1
Embedded C - Lecture 1Embedded C - Lecture 1
Embedded C - Lecture 1
 
Getting started with AMD GPUs
Getting started with AMD GPUsGetting started with AMD GPUs
Getting started with AMD GPUs
 
Real Time Operating Systems for Embedded Systems
Real Time Operating Systems for Embedded SystemsReal Time Operating Systems for Embedded Systems
Real Time Operating Systems for Embedded Systems
 
Unit 1 computer architecture (1)
Unit 1   computer architecture (1)Unit 1   computer architecture (1)
Unit 1 computer architecture (1)
 
dft
dftdft
dft
 
ARM Processor architecture
ARM Processor  architectureARM Processor  architecture
ARM Processor architecture
 
SOC Power Estimation
SOC Power EstimationSOC Power Estimation
SOC Power Estimation
 
Writing c code for the 8051
Writing c code for the 8051Writing c code for the 8051
Writing c code for the 8051
 
Memory Organization
Memory OrganizationMemory Organization
Memory Organization
 
Timer programming for 8051 using embedded c
Timer programming for 8051 using embedded cTimer programming for 8051 using embedded c
Timer programming for 8051 using embedded c
 
IRQs: the Hard, the Soft, the Threaded and the Preemptible
IRQs: the Hard, the Soft, the Threaded and the PreemptibleIRQs: the Hard, the Soft, the Threaded and the Preemptible
IRQs: the Hard, the Soft, the Threaded and the Preemptible
 
Pic 18 microcontroller
Pic 18 microcontrollerPic 18 microcontroller
Pic 18 microcontroller
 
Synthesis & optimization of digital circuits
Synthesis & optimization of digital circuitsSynthesis & optimization of digital circuits
Synthesis & optimization of digital circuits
 
LPC 1768 A study on Real Time clock features
LPC 1768 A study on Real Time clock featuresLPC 1768 A study on Real Time clock features
LPC 1768 A study on Real Time clock features
 
Original Opto TLP701 P701 701 SOP-6 New Toshiba
Original Opto TLP701 P701 701 SOP-6 New ToshibaOriginal Opto TLP701 P701 701 SOP-6 New Toshiba
Original Opto TLP701 P701 701 SOP-6 New Toshiba
 
UVM ARCHITECTURE FOR VERIFICATION
UVM ARCHITECTURE FOR VERIFICATIONUVM ARCHITECTURE FOR VERIFICATION
UVM ARCHITECTURE FOR VERIFICATION
 
ARM CORTEX M3 PPT
ARM CORTEX M3 PPTARM CORTEX M3 PPT
ARM CORTEX M3 PPT
 
Jtag presentation
Jtag presentationJtag presentation
Jtag presentation
 
Timer & Interrupt Atmega16
Timer & Interrupt Atmega16Timer & Interrupt Atmega16
Timer & Interrupt Atmega16
 

More from Majong DevJfu

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA CloudMajong DevJfu
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processesMajong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product lineMajong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformationMajong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven ArchitectureMajong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture PortfolioMajong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural stylesMajong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architectureMajong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a productMajong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural stylesMajong DevJfu
 

More from Majong DevJfu (20)

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 

03 - Programmazione: Istruzioni C++

  • 2. Istruzione di assegnamento Programmazione - Paolo Valente, 2008/2009 2
  • 3. Istruzione di assegnamento • Denotata mediante il simbolo = (l’operatore relazionale di uguaglianza è denotata con il simbolo == ) nome_variabile = espressione ; • Viene utilizzata per assegnare ad una variabile (non ad una costante!) il valore di un’espressione • L'identificatore a sinistra rappresenta l'indirizzo della variabile di cui vogliamo modificare il valore – tale indirizzo è detto lvalue • Il valore dell'espressione che compare a destra rappresenta il nuovo valore – tale valore è detto rvalue Programmazione - Paolo Valente, 2008/2009 3
  • 4. Istruzione di assegnamento Esempio int N; L’esecuzione di ... una definizione simbolo indirizzo provoca l’allocazione di uno spazio in ? 1600 N 1600 memoria pari a quello necessario a ... contenere un dato del tipo specificato N = 150; L’esecuzione di un ... simbolo indirizzo assegnamento provoca l’inserimento 150 1600 N 1600 nello spazio relativo alla variabile del valore indicato a destra ... del simbolo = Programmazione - Paolo Valente, 2008/2009 4
  • 5. Istruzione di assegnamento (cont.) • L’esecuzione di un’istruzione di assegnamento comporta innanzitutto la valutazione di tutta l’espressione a destra dell’assegnamento. Es., int c, d; c= 2; d= (c+5)/3 - c; d= (d+c)/2; • Solo dopo si inserisce il valore risultante (rvalue) nella locazione di memoria relativa alla variabile (posta a sinistra dell’assegnamento) – Risultato espressione assegnamento: indirizzo della variabile Programmazione - Paolo Valente, 2008/2009 5
  • 6. Esercizio 1 (Specifica) • Inverti l’ordine delle cifre che formano un intero positivo non multiplo di 10 che sia compreso fra 101 e 999. • Per esempio: 103 301  234 432  350 53  Programmazione - Paolo Valente, 2008/2009 6
  • 7. Esercizio 1 (Algoritmo) Idea!: Utilizzare le operazioni di modulo e di divisione fra numeri interi. Dato un numero, valgono le seguenti relazioni: • Unita = (numero/10^0)%10; – Es., (234/1)%10 = 4 • Decine = (numero/10^1)%10; – Es., (234/10)%10 = 3 • Centinaia = (numero/10^2)%10; – Es., (234/100)%10 = 2 Programmazione - Paolo Valente, 2008/2009 7
  • 8. Esercizio 1 (Programma) main() { int numero; int unita, decine, centinaia, risultato;   cin>>numero;   unita = (numero)%10; decine = (numero/10)%10; centinaia = (numero/100)%10; risultato =unità*100+decine*10+centinaia; cout<<risultato; } Programmazione - Paolo Valente, 2008/2009 8
  • 9. Esercizi da svolgere Esercizio 1bis   Si risolva lo stesso problema posto nell’Esercizio 1 accettando in input un qualsiasi numero intero (anche divisibile per 10) compreso fra 100 e 999. Esempio: 100 va ristampato come 001   Esercizio 1ter (servirà conoscere le istruzioni cicliche)   Si risolva lo stesso problema posto nell’Esercizio 1 accettando in input un qualsiasi numero intero positivo (si richieda in input sia il numero sia il numero di cifre che lo compongono). Programmazione - Paolo Valente, 2008/2009 9
  • 10. Tipo booleano Programmazione - Paolo Valente, 2008/2009 10
  • 11. Tipo booleano • Disponibile solo in C++ • Nome del tipo: bool • Valori possibili: vero (true), falso (false) – true e false sono due letterali booleani • Esempio di definizione: bool u, v = true ; // la seconda variabile // è inizializzata a vero • Operazioni possibili: ... Programmazione - Paolo Valente, 2008/2009 11
  • 12. Operatori logici operatore logico operatore C/C++ unario not logico ! (negazione) (prefisso) binario and logico && (congiunzione) (infisso) binario or logico || (disgiunzione) (infisso) Programmazione - Paolo Valente, 2008/2009 12
  • 13. Tabella di verità degli operatori AND Ris. OR Ris. NOT Ris.       V && V V V || V V !V F V && F F V || F V !F V F && V F F || V V F && F F F || F F Programmazione - Paolo Valente, 2008/2009 13
  • 14. Tipo booleano e tipi numerici • Se un oggetto di tipo booleano è usato dove è atteso un valore numerico – true è convertito a 1 – false è convertito a 0 • Viceversa, se un oggetto di tipo numerabile è utilizzato dove è atteso un booleano – ogni valore diverso da 0 è convertito a true – il valore 0 è convertito a false Programmazione - Paolo Valente, 2008/2009 14
  • 15. Tipo booleano e linguaggio C In C, non esistendo il tipo bool, gli operatori logici operano su interi e restituiscono un intero: • il valore 0 viene considerato falso • ogni valore diverso da 0 viene considerato vero • il risultato è 0 o 1 Esempi 5 && 7 0 || 33 !5 Programmazione - Paolo Valente, 2008/2009 15
  • 16. Operatori di confronto Programmazione - Paolo Valente, 2008/2009 16
  • 17. Operatori di confronto == Operatore di confronto di uguaglianza (simbolo = denota l’operazione di assegnamento!) != Operatore di confronto di diversità > Operatore di confronto di maggiore stretto < Operatore di confronto di minore stretto >= Operatore di confronto di maggiore-uguale <= Operatore di confronto di minore-uguale Restituiscono un valore di tipo booleano: falso o vero Programmazione - Paolo Valente, 2008/2009 17
  • 18. Sintassi del C++ Programmazione - Paolo Valente, 2008/2009 18
  • 19. Sintassi del C/C++ 1/2 • Ora che abbiamo più familiarità col linguaggio, fissiamo un po' meglio la sintassi ... • Programma C/C++: sequenze di parole (token) delimitate da spazi bianchi (whitespaces) – Spazio bianco: carattere spazio, tabulazione, a capo • Token possibili: identificatori, parole chiave, espressioni letterali, operatori, separatori – Operatore: denota una operazione nel calcolo delle espressioni – Separatore: ( ) , ; : { } Programmazione - Paolo Valente, 2008/2009 19
  • 20. Sintassi del C/C++ 2/2 IDENTIFICATORI <Identificatore> ::= <Lettera> { <Lettera> | <Cifra> } • Lettera include tutte le lettere, maiuscole e minuscole, e l’underscore “_” • La notazione { A | B } indica una sequenza indefinita di elementi A o B • Maiuscole e minuscole sono diverse (linguaggio C è case-sensitive) PAROLE RISERVATE • int, float, double, char, if, for, do, while, switch, break, continue, ... { } delimitatore di blocco COMMENTI // commento, su una sola riga /* commento, anche su più righe */ (non possono essere innestati) Programmazione - Paolo Valente, 2008/2009 20
  • 21. Uso degli spazi bianchi • Una parola chiave ed un identificatore vanno separati da spazi bianchi – Es: int a; // inta sarebbe un // identificatore ! • In tutti gli altri casi gli spazi bianchi non sono necessari Programmazione - Paolo Valente, 2008/2009 21
  • 22. Espressioni Programmazione - Paolo Valente, 2008/2009 22
  • 23. Espressioni • Costrutto sintattico formato da letterali, identificatori, operatori, parentesi tonde, ... • Operatori binari o Moltiplicativi: * / % o Additivi: + - o Traslazione: << >> o Relazione (confronto): < > <= >= o Eguaglianza (confronto): == != o Logici: && || • Abbiamo già visto quasi tutti questi operatori parlando del tipo int e del tipo bool Programmazione - Paolo Valente, 2008/2009 23
  • 24. Altri operatori • Assegnamento abbreviato: +=, -=, *=, /=, ... a += b ; <==> a=a+b; • Incremento e decremento: ++ -- – Prefisso: prima si effettua l'incremento/decremento, poi si usa la variabile. Restituisce un lvalue int a = 3; cout<<++a; // stampa 4 (++a) = 4; // valido – Postfisso: prima si usa il valore della variabile, poi si effettua l'incremento/decremento. Restituisce un rvalue int a = 3; cout<<a++; // stampa 3 (a++) = 4; // ERRORE !!! Programmazione - Paolo Valente, 2008/2009 24
  • 25. Espressioni aritmetiche e logiche • Un'espressione si definisce – aritmetica: produce un risultato di tipo aritmetico – logica: produce un risultato di tipo booleano • Esempi: Espressioni aritmetiche 4>2 2+3 true || (2 > 5) (2 + 3) * 5 Espressioni logiche Programmazione - Paolo Valente, 2008/2009 25
  • 26. Proprietà operatori • Posizione rispetto ai suoi operandi (o argomenti): prefisso, postfisso, infisso • Numero di operandi (arietà) • Precedenza (o priorità) nell'ordine di esecuzione – Es: 1 + 2 * 3 è valutato come 1 + (2 * 3) k<b+3 è valutato come k<(b+3), e non (k<b) +3 • Associatività: ordine con cui vengono valutati due operatori con la stessa precedenza. – Associativi a sinistra: valutati da sinistra a destra o Es: / è associativo a sinistra, quindi 6/3/2  (6/3)/2 – Associativi a destra: valutati da destra a sinistra o Es: = è associativo a destra ... Programmazione - Paolo Valente, 2008/2009 26
  • 27. Associatività dell’assegnamento • L’operatore di assegnamento può comparire più volte in un’istruzione. • L’associatività dell’operatore di assegnamento è a destra Es., k = j = 5; equivale a j = 5; k = j; k = j+2 = 5; NON SI PUO’ FARE! Programmazione - Paolo Valente, 2008/2009 27
  • 28. Ordine valutazione espressioni • Ordine – Fattori: dalle espressioni letterali e calcolo delle funzioni e degli operatori unari – Termini: dal calcolo degli operatori binari o Moltiplicativi: * / % o Additivi: + - o Traslazione: << >> o Relazione: < > <= >= o Eguaglianza: == != o Logici: && || • Con le parentesi possiamo modificare l'ordine di valutazione dei termini Programmazione - Paolo Valente, 2008/2009 28
  • 29. Sintesi priorità degli operatori Fattori ! ++ -- * / % + - > >= < <= Termini == != && || ?: Assegnamento = Programmazione - Paolo Valente, 2008/2009 29
  • 30. Espressioni • Esempi: Espressioni aritmetiche 2+3 (2 + 3) * 5 Fattori 4>2 Termini true || (2 > 5) Espressioni logiche Programmazione - Paolo Valente, 2008/2009 30
  • 31. Programmazione strutturata Programmazione - Paolo Valente, 2008/2009 31
  • 32. Programmazione “strutturata” • Si parla di programmazione strutturata se si utilizzano solo le seguenti strutture per alterare il flusso di controllo [Dijkstra, 1969]: – concatenazione (o composizione) legata al concetto di enumerazione (sequenza) – selezione o (istruzione condizionale) ramifica il flusso di controllo in base al valore vero o falso di una espressione detta “condizione di scelta” – iterazione dà luogo all’esecuzione ripetuta di un’istruzione (semplice o composta) finché permane vera una espressione detta “condizione di iterazione” • OBIETTIVO: rendere i programmi più leggibili, modificabili e manutenibili Programmazione - Paolo Valente, 2008/2009 32
  • 33. Teorema di Jacopini-Böem Le strutture di concatenazione, iterazione e selezione costituiscono un insieme completo in grado di esprimere tutte le funzioni calcolabili • Dunque, l’uso di queste sole strutture di controllo non limita il potere espressivo. P.es., un linguaggio con i seguenti Tipi di dato: Naturali con l’operazione di somma (+) Istruzioni: assegnamento istruzione composta istruzione condizionale istruzione di iterazione è un linguaggio completo, cioè è un linguaggio in grado di esprimere tutte le funzioni calcolabili. Programmazione - Paolo Valente, 2008/2009 33
  • 34. Programmazione “strutturata” in C/C++ • Istruzioni composte – concatenazione di istruzioni “semplici” all'interno di un blocco  { }   • Istruzioni espressione – esempio: assegnamento  =   • Istruzioni condizionali – alternativa  if (), if () else – selezione  switch ()   • Istruzioni di iterazione – ciclo  while (), do while (), for ( ; ; ) Programmazione - Paolo Valente, 2008/2009 34
  • 35. Istruzioni Condizionali Programmazione - Paolo Valente, 2008/2009 35
  • 36. Istruzioni condizionali Solitamente vengono rese disponibili due tipi di istruzioni condizionali: • Istruzione di SCELTA (semplice) o ALTERNATIVA • Istruzione di SCELTA MULTIPLA (questa non è essenziale, ma migliora l’espressività del linguaggio) Programmazione - Paolo Valente, 2008/2009 36
  • 37. Istruzione di scelta semplice (o Alternativa) • Consente di scegliere fra due istruzioni alternative in base al verificarsi di una particolare condizione <istruzione-di-scelta> ::= if (condizione) < istruzione1> [ else < istruzione2> ] Opzionale • Condizione è un’espressione logica che viene valutata al momento dell’esecuzione dell’istruzione if • Se condizione risulta vera si esegue <istruzione1>, altrimenti si esegue <istruzione2> In entrambi i casi l’esecuzione continua poi con l’istruzione che segue • l’istruzione if. NOTA: Se condizione è falsa e la parte else (opzionale) è omessa, si passa subito all’istruzione che segue l’istruzione if Programmazione - Paolo Valente, 2008/2009 37
  • 38. Le due istruzioni di scelta semplice if (condizione) istruzione1; if (condizione) istruzione1; if (condizione) istruzione1; else istruzione2; if (condizione) istruzione1; else istruzione2; Programmazione - Paolo Valente, 2008/2009 38
  • 39. Esempio int a=3, n=-6, b=0; if (n > 0) a = b + 5; else n = b*5; ------------------ a? b? n? Programmazione - Paolo Valente, 2008/2009 39
  • 40. Problema • E se vogliamo eseguire più di una istruzione in uno dei due rami o in entrambi? • Esempio: if (condizione) <varie istruzioni> else <varie istruzioni> Programmazione - Paolo Valente, 2008/2009 40
  • 41. Istruzioni Composte Programmazione - Paolo Valente, 2008/2009 41
  • 42. Istruzione composta • Sequenza di istruzioni racchiuse tra parentesi graffe { <istruzione1> <istruzione2> ... } • E' un caso particolare di blocco • Ovunque la sintassi preveda una istruzione si può inserire una istruzione composta • Ai fini della sintassi e della semantica è trattata come una istruzione singola • L'esecuzione di una istruzione composta implica l'esecuzione ordinata di tutte le istruzioni della sequenza Programmazione - Paolo Valente, 2008/2009 42
  • 43. Istruzioni Condizionali Seconda parte Programmazione - Paolo Valente, 2008/2009 43
  • 44. Forma completa if (condizione) <istruzione-ramo-if> [else <istruzione-ramo-else>] • istruzione può essere qualsiasi istruzione, ovvero espressione, condizionale, iterativa, composta (blocco di istruzioni) • Le istruzioni da eseguire sono spesso chiamate anche corpo del ramo if o corpo del ramo else, rispettivamente Programmazione - Paolo Valente, 2008/2009 44
  • 45. Esempio • Qualora occorra specificare più istruzioni, si dovrà quindi utilizzare un blocco if (n > 0) { /* inizio blocco */ a = b + 5; c = x + a - b; } /* fine blocco */ else n = b*5; Programmazione - Paolo Valente, 2008/2009 45
  • 46. Osservazione 2 Istruzioni if annidate • Come caso particolare, <istruzione-ramo-if> o <istruzione-ramo-else> potrebbero essere un’altra <istruzione-di-scelta> • In questo caso occorre attenzione ad associare i rami else (che sono opzionali) all’if corretto In base alla sintassi del linguaggio C/C++, il un ramo else è sempre associato all’if più interno (vicino) Se questa non è l'associazione desiderata, occorre inserire esplicitamente un blocco { } Programmazione - Paolo Valente, 2008/2009 46
  • 47. Osservazione 2 (cont.) if (n > 0) ? if (a>b) n = a; else n = b*5; /* else riferito a if (a>b) */ Per far sì che l’else si riferisca al primo if: if (n > 0) { if (a>b) n = a; } else n = b*5; Per leggibilità, si possono usare le parentesi anche nell'altro caso: if (n > 0) { if (a>b) n = a; else n = b*5; } Programmazione - Paolo Valente, 2008/2009 47
  • 48. Istruzione di scelta multipla: switch • Consente di scegliere fra molti casi in base al valore di un’espressione di selezione Programmazione - Paolo Valente, 2008/2009 48
  • 49. Istruzione di scelta multipla (sintassi e semantica) 1/2 <istruzione-di-scelta-multipla> ::= switch (espressione di selezione) { case <etichetta1> : <sequenza_istruzioni1> [ break; ] case <etichetta2> : <sequenza_istruzioni2> [ break; ] … [ default : < sequenza_istruzioniN> ] } espressione di selezione è un’espressione che restituisce un valore numerabile (intero, carattere, enumerato, …), e viene valutata al momento dell’esecuzione dell’istruzione switch   Le etichette <etichetta1>, <etichetta2> ... devono essere delle costanti dello stesso tipo dell'espressione di selezione Programmazione - Paolo Valente, 2008/2009 49
  • 50. Istruzione di scelta multipla (sintassi e semantica) 2/2 • Definiamo corpo dell'istruzione switch, la parte del costrutto compresa tra le parentesi graffe • Il valore dell'espressione di selezione viene confrontato con le costanti che etichettano i vari casi: l’esecuzione salta al ramo dell’etichetta corrispondente (se esiste) – L'esecuzione prosegue poi sequenzialmente fino alla fine del corpo dell'istruzione switch – A meno che non si incontri un'istruzione break, nel qual caso si esce dal blocco • Se nessuna etichetta corrisponde al valore dell’espressione, si salta al ramo default (se specificato) – Se non esiste, l’esecuzione prosegue con l’istruzione successiva all’istruzione switch Programmazione - Paolo Valente, 2008/2009 50
  • 51. Diagramma di flusso espressione di selezione caso A break sequenza_istruzioni1 break caso B sequenza_istruzioni2 break … default sequenza_istruzioniN Programmazione - Paolo Valente, 2008/2009 51
  • 52. Esempio int a, n; cin>>a>>n; switch (n) { case 1: cout<<”Ramo A”<<endl; break; case 2: cout<<”Ramo B”<<endl; a = a*a; break; case 3: cout<<”Ramo C”<<endl; a = a*a*a; break; default: a=1; } cout<<a<<endl; Programmazione - Paolo Valente, 2008/2009 52
  • 53. Osservazioni • <sequenza_istruzioni> denota una sequenza di istruzioni per cui non è necessario un blocco per specificare più istruzioni • I vari rami non sono mutuamente esclusivi: una volta imboccato un ramo, l’esecuzione prosegue in generale con le istruzioni dei rami successivi – Per avere rami mutuamente esclusivi occorre forzare esplicitamente l’uscita mediante l’istruzione break Programmazione - Paolo Valente, 2008/2009 53
  • 54. Esempio int a, n, b = 1; cin>>a>>n; switch (2 - n) { case 0: b *= a; case 1: b *= a; case 2: break; default: cout<<”Valore non valido per nn” ; } cout<<b<<endl; Programmazione - Paolo Valente, 2008/2009 54
  • 55. Pro e contro della scelta multipla • L’istruzione switch garantisce maggiore leggibilità rispetto all'if quando c'è da scegliere tra più di due alternative • Altrimenti è ovviamente un costrutto più ingombrante • Limitazioni: – è utilizzabile solo con espressioni ed etichette di tipo numerabile (intero, carattere, enumerato, ...) – non è utilizzabile con numeri reali (float, double) o con tipi strutturati (stringhe, vettori, strutture...) Programmazione - Paolo Valente, 2008/2009 55