Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D La Corte in Rete
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Valeria Vittorini » 10.Programmazione: Istruzioni semplici


Sommario

  • Tassonomia
    • Istruzioni semplici
    • Istruzioni strutturate
  • Istruzioni di Ingresso
  • Istruzioni di uscita
  • Istruzioni di calcolo e assegnazione
  • Istruzioni di salto incondizionato

Tassonomia delle Istruzioni

In generale le istruzioni si dividono in due classi:

  • Istruzioni che modificano il valore di una o più variabili o coinvolgono le unità periferiche (tastiera, video, etc…)
  • Istruzioni che per il controllo di sequenza che definiscono l’ordinamento dinamico delle istruzioni del programma

Istruzioni semplici

  • Le istruzioni semplici esprimono azioni elaborative elementari. Sono classificate come segue:
    • Istruzioni di ingresso
    • Istruzioni di uscita
    • Istruzioni di calcolo ed assegnazione
    • Istruzioni di salto incondizionato
    • Istruzioni di chiamata a sottoprogramma
  • Appartengono tutte alla prima classe tranne le istruzioni di salto che fanno parte della classe di istruzioni per il controllo di sequenza

Istruzioni strutturate

  • Le istruzioni strutturate sono realizzate componendo istruzioni semplici mediante determinate strutture. Sono classificate come segue:
    • Istruzione sequenza (o istruzione composta, o blocco)
    • Istruzioni condizionali
    • Istruzioni iterative
  • Appartengono tutte alla classe di istruzioni per il controllo di sequenza

Istruzioni di ingresso

“Leggono” da una unità di ingresso e “scrivono” su una variabile, il cui stato viene pertanto alterato. Hanno la forma:

read nome_variabile

  • Esempi:
    • Lettura di dati da tastiera
    • Lettura di dati da file su disco
  • Le istruzioni di ingresso specificano (tipicamente):
    • L’unità d’ingresso
    • Il formato dei dati
    • La/e variabile/i su cui operano

Esempio di istruzione di ingresso in C++

  • In C++ le istruzioni di ingresso sono realizzate mediante strutture dati e funzioni di libreria
  • Per effettuare una istruzione di ingresso bisogna pertanto specificare nel programma la libreria che si intende utilizzare

Esempio: lettura di un valore intero da tastiera:

cin >> num;

Dove:

  • cin è una struttura dati cui viene associata di default lo standard input, cioà la tastiera
  • >> è un operatore che produce lo spostamento del valore dalla tastiera alla variabile num

Per entrambi la libreria (che deve essere specificata) è iostream

Istruzioni di uscita

“Leggono” un valore (costante o risultato della valutazione di una espressione) e “scrivono” su una unità di uscita.

Hanno la forma:

write valore

Come caso particolare l’espressione può essere costituita da una sola variabile, il cui valore NON viene modificato ma valutato e scritto sull’unità periferica.

  • Esempi:
    • Scrittura di un file su disco
    • Scrittura di un valore su terminale video
  • Specificano (tipicamente):
    • L’unità d’uscita
    • Il formato dei dati
    • La/e variabile/i su cui operano

Esempio di istruzione di uscita in C++

In C++ anche le istruzioni di uscita sono realizzate mediante strutture dati e funzioni di libreria

Esempi: scrittura di un valore intero su terminale video:

cout << num;

cout << 4;

cout << 3+2;

cout << num1 * num2;

Dove:

  • cout è una struttura dati cui viene associata di default lo standard output, cioè il video
  • << è un operatore che produce lo spostamento del valore verso il video

Per entrambi la libreria (che deve essere specificata) è iostream

Istruzioni di Calcolo e Assegnazione

Portano il valore corrente di una variabile al valore di una costante o al risultato di un’espressione

variabile:=espressione

Le regole per la specifica e la valutazione dell’espressione sono definite dal linguaggio e dipendono da diversi elementi, tra cui:

  • Gli operandi presenti nell’espressione ed il loro tipo;
  • gli operatori previsti e utilizzati per ciascun tipo;
  • la precedenza degli operatori.

Assegnazione

variabile:=espressione

A sinistra di una assegnazione deve esserci il nome di una variabile il cui stato viene alterato.

In altre parole l’elemento a sinistra di una assegnazione (left value) deve essere un indirizzo di memoria ed il suo contenuto verrà modificato dall’istruzione di assegnazione.

L’elemento a destra (right value) di una assegnazione è invece valutato, ed il valore ottenuto è assegnato al left value. Il right value NON è modificato da una istruzione di assegnazione.

Istruzioni di Calcolo e Assegnazione in C++

  • variabile = espressione
  • operatori di incremento e decremento:
    • i++ sta per i=i+1 notazione postfissa
    • ++i sta per i=i+1 notazione prefissa
    • i– sta per i=I-1 notazione postfissa
    • –i sta per i=I-1 notazione prefissa
  • operatori di assegnazione composta
    • a<op>=b sta per a=a<op>b
    • esempi: a+=b sta per a=a+b
    • a*=b sta per a=a*b

Esempi di istruzioni di calcolo e assegnazione in C++

Esempio 1: int a, b;

  1. a=3;
  2. b=a;
  3. b++;
  1. Il valore costante 3 viene assegnato alla variabile intera a, che pertanto, dopo l’esecuzione dell’istruzione di assegnazione vale 3.
  2. Il valore della variabile a viene valutato ed assegnato alla variabile b, la variabile b pertanto dopo l’esecuzione dell’assegnazione vale a sua volta 3.
  3. La variabile b viene incrementata utilizzando l’operatore di incremento unitario. Ciò significa che viene valutata l’espressione b+1 ed il suo risultato viene assegnato a b che pertanto dopo l’esecuzione dell’istruzione vale 4.

Type Checking

Il “type checking” (controllo dei tipi) è l’operazione che consiste nel verificare che il tipo di un valore sia compatibile con il tipo della variabile a cui il valore deve essere assegnato.

Il type checking può essere effettuato:

  • a tempo di compilazione o “compile time” (type checking statico). In questo caso nell’impossibilità di far corrispondere il tipo del valore al tipo della variabile il compilatore produce un errore (type mismatch);
  • a tempo di esecuzione o a”run time” (type checking dinamico).

Nel seguito ci riferiamo al type checking statico.

Conversione di Tipo

Nel caso in cui il tipo degli operandi di una espressione non si corrispondano, un linguaggio di programmazione tipizzato prevede delle regole per determinare se una conversione di tipo (type casting) è possibile, prima di produrre un errore di type mismatch

Se è possibile, a fronte di tali regole, convertire il valore di un tipo T1 ad un tipo T2, viene effettuata dal compilatore una conversione implicita (coercion).

Attenzione: alcune conversioni implicite possono provocare una perdita di informazione – come nell’esempio riportato- e provocare al massimo un messaggio di warning.

Esempio:

int i; float f=32.456;

i=f; // Produce come effetto l’assegnazione del valore intero 32 alla variabile i senza generare errori in compilazione, al massimo un warning

Conversione di Tipo

Alcuni linguaggi di programamzione forniscono anche opportuni operatori che consentono al programmatore di forzare la conversione da un tipo di dato a ad un altro.

Si parla in questo caso di conversione esplicita.

In C++ sono disponibili diversi operatori per il type casting esplicito. Uno di essi è utilizzato nell’esempio qui riportato, che produce la stampa del valore reale 11.25, dove viene esplicitamente richiesta la conversione al tipo float del valore intero contenuto nella variabile intera somma.

int n=4, somma=45;
float media;
media= (float)somma / n;
cout << media;

Espressioni Miste

  • In generale gli operandi presenti in espressioni che richiedono la valutazione di uno o più operazioni possono essere disomogenei rispetto al loro tipo (espressioni miste)
  • In C++ molti operatori provocano conversioni implicite allo scopo di ridurre gli operandi ad un tipo comune, che è anche il tipo del risultato. Ad esempio, nel caso di un operatore binario:
    • In presenza di un operando di tipo double l’altro l’operando viene convertito al tipo double
    • In presenza di un operando di tipo float l’altro l’operando viene convertito al tipo float

Istruzioni di salto

  • A differenza delle altre istruzioni semplici, le istruzioni di salto incondizionato consentono di controllare la sequenza di esecuzione del programma
  • Trasferiscono il controllo in modo incondizionato
  • Devono essere utilizzate nel rispetto dei principi di programmazione strutturata, enunciati in una prossima lezione
  • Istruzioni di salto in C/C++:
    • goto identificatore;
    • break;
    • continue;
    • return espressione; (oppure: return;)

Istruzioni di salto

  • goto identificatore;
    • L’identificatore deve essere una etichetta associata ad una istruzione. Il controllo viene trasferito all’istruzione associata all’etichetta
  • break;
    • Causa la terminazione della struttura di controllo che la contiene. Può comparire solo in un’istruzione di iterazione o in uno switch. Il controllo passa all’istruzione che segue quella appena terminata
  • continue;
    • Può comparire solo all’interno di un costrutto di iterazione: provoca l’immediata esecuzione di una nuova iterazione
  • return espressione; (oppure: return;)
    • Utilizzata all’interno di una funzione per ritornare al programma chiamante

Prossima lezione

  • Programmazione strutturata
  • Istruzioni strutturate

I materiali di supporto della lezione

Fadini, C. Savy, Fondamenti di Informatica I, Napoli, Liguori Ed., 1997 Parte 2, cap. IV, par. da 1 a 7 e da 10 a 11

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion

Fatal error: Call to undefined function federicaDebug() in /usr/local/apache/htdocs/html/footer.php on line 93