CODIFICA
Da flow-chart a C++
1
Il modello dei dati
Il modello dei dati specifica le variabili che si vogliono utilizzare
ed il tipo delle variabili.
Elenchiamo senza pretesa di completezza i tipi di dato primitivi
del linguaggio C++, così da poter scegliere il più appropriato in
fase di codifica.
Approfondimenti sulle conversioni tra tipi (cast) saranno
affrontati successivamente.
2
Tipi del C/C++
Il C contempla cinque tipi dati di base: void, int, float, double,
and char.
Oltre a questi il C++ ne definisce altri due: bool e wchar_t.
3
Tipi del C/C++ (modificatori)
Alcuni di questi tipi di dati
possono essere modificati
usando le parole riservate:
signed, unsigned,
short e long.
Ecco una lista di possibili
data-type (tipi equivalenti
vengono mostrati sulla
stessa riga)
4
Tipo dati, dimensioni e range di valori
La dimensione e il range di valori di qualsiasi tipo di dati è
dipendente dall'architettura della macchina e dal compilatore.
Potete usare l'operatore sizeof per determinare la dimensione
di qualsiasi tipo di dati (spesso espresso come numero di byte).
Molte architetture tuttavia implementano dati con un
dimensione standard. Spesso variabili dichiarate come int o
float sono a 32 bit, i char sono a 8 bit e double sono a 64 bit.
L'header “cfloat” (o “float.h”) definisce i range per i numeri in
virgola mobile, mentre “climits” (o “limits.h”) defisce il range per
gli interi.
I limite dei valori numerici sono nell'header <limits>.
5
ISTRUZIONI
Le istruzioni sono frasi proprie del linguaggio di
programmazione delimitate dal simbolo “;” senza il simbolo
terminatore, il compilatore non capirebbe dove termina
l’istruzione
Molte volte è necessario che sequenze di istruzioni vengano
eseguite sequenzialmente:
Corpo del programma, corpo di una funzione, corpo di un ciclo
Una lista di istruzioni è delimitata dai simboli “{“ e “}”:
- “{“ inizia una lista di istruzioni
- “}” termina la lista
E’ possibile innestare più liste di comandi
6
ISTRUZIONI
7
STRUTTURA DI UN SEMPLICE
PROGRAMMA
Un programma è organizzato in maniera sequenziale
La prima parte è l’intestazione, ovvero una etichetta
seguita da una coppia di parentesi tonde ()
A seguire inizia una lista di istruzioni, delimitate
quindi da { e }
Ma che tipo di istruzioni prevede un linguaggio?
8
Blocco di istruzioni
9
ISTRUZIONE DI ASSEGNAMENTO
Questa istruzione fondamentale viene utilizzata per
assegnare a una variabile il valore di una
espressione:
• Consiste nel simbolo = preceduto dal nome
della variabile a cui deve essere assegnato il
valore
• Alla destra del simbolo = viene specificate
l’espressione che genera il risultato da
assegnare alla variabile
10
ISTRUZIONE DI ASSEGNAMENTO
L’espressione può essere costituita da un valore
costante (numero) , identificatori di altre variabili,
espressioni aritmetico/logiche di combinazioni di
valori e variabili e funzioni:
x =23
w=‘a’
y =z
alfa = x + y
r3=(alfa * 43 – xgg)*(delta-32*i*j)
x=x+1
11
Operatori aritmetici
Gli operatori aritmetici già noti: +, -, *, /, %
aggiungiamo per il C++ i seguenti:
++Incremento unitario
giri ++; giri = giri+1;
--Decremento unitario
giri --;
giri = giri-1;
+=Incremento del valore specificato alla destra dell'espressione
Km += 37; Km=Km+37; a += (b/2); = a=a+(b/2);
-=Decremento del valore specificato alla destra dell'espressione
attesa -= 6;
attesa=attesa-6;
…e così per gli altri…
*=
/=
%=
lanci *= 2;
torta /= 3;
carte %= 5;
lanci=lanci*2;
torta=torta/3;
carte=carte%5;
12
Operatori relazionali e logici
>, <, <=, >= sono identici in C++
Flow chart
<>
= (nel rombo)
AND
OR
NOT
C++
!= (diverso da)
== (confronto) fai attenzione a non confondere con
l’assegnamento (= del rettangolo) !!!
&&
||
!
13
ISTRUZIONE DI ASSEGNAMENTO
14
ISTRUZIONE DI ASSEGNAMENTO
L’esecuzione di una istruzione di assegnamento
comporta la valutazione della espressione a destra
del simbolo = e la sostituzione del valore nella
cella di memoria individuata dal nome della
variabile a sinistra del simbolo =.
Si noti che un valore costante può essere un
numero ma anche un carattere:
- Nell’esempio w=‘a’, assegna il carattere ‘a’ alla
variabile w
15
CONTROLLO DEL FLUSSO
Il flusso delle istruzioni può cambiare a seconda della
valutazione di una espressione:
- Può essere necessario per esempio effettuare una
lista di operazioni L1 se una condizione è vera, una
lista L2 altrimenti
- Oppure può essere necessario ripetere una lista di
istruzioni fino a che non è verificata una condizione
Le istruzioni che permettono queste scelte sono dette
di controllo del flusso e come si evince dai due esempi
qui sopra sono divise in due gruppi:
Istruzioni condizionali
Istruzioni iterative
16
CONTROLLO DEL FLUSSO
Istruzioni condizionali:
•
se a una via (if)
•
se a due vie(if-else)
•
se annidati (if-else-if,if-if-else,etc)
•
se a più vie (switch)
Istruzioni iterative
•
iterazione con controllo in testa (while)
•
iterazione con controllo in coda (do-while)
•
iterazione definita (for)
17
SE A UNA VIA
If (cond)
{
blocco-istr;
}
18
SE A UNA VIA (esempio)
con singola istruzione
if (x >0)
x = -x;
cout <<“valore assoluto: “<< x;
19
SE A UNA VIA (esempio)
con blocco di istruzioni
if (x >0)
{
app = x;
x = y;
y = app;
}
cout << x <<“ ,“<<y;
20
SE A DUE VIE
if (cond)
{
blocco-istr;
}
else
{
blocco-istr;
}
21
SE A DUE VIE (esempio)
if ( x > y)
mass = x;
else
mass = y;
cout<<“Massimo: “<<mass;
22
SE A DUE VIE (esempio2)
if ( x > y) {
mass = x;
cout<<“Massimo: “<<mass;
}
else {
mass = y;
cout<<“Massimo: “<<mass;
}
23
SE ANNIDATO
if (cond)
{blocco-istr;}
else
if (cond)
{blocco-istr;}
else
{blocco-istr;}
24
SE ANNIDATO (esempio)
if ( x > y)
cout<<“x magg di y”;
else
if (x < y)
“y magg di x”;
else
cout<<“x e y uguali”;
25
SE ANNIDATO
Il SE annidato può trovarsi sul ramo vero o falso e sono possibili tutte le
combinazioni. Esempi:
if ( ( voto>=18 ) && (voto<=30 ) )
if ( voto>=24 )
cout<<"Il risultato e' buono";
else
cout<<"Il risultato e' sufficiente");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if ( voto>=24 )
if ( voto<=30 )
cout<<"Il risultato e' buono";
else
if ( voto>=18 )
cout<<"Il risultato e' sufficiente";
}
26
STRUTTURA CONDIZIONALE DERIVATA
(SELEZIONE MULTIPLA)
Per evitare enormi castelli di SE annidati,
si può utilizzare una struttura derivata che
è la SELEZIONE MULTIPLA (SE A PIU’ VIE).
I costrutti derivati non sono fondamentali
ma comodi in alcuni particolare
situazioni, come rendere più compatto in
questo caso un SE annidato con molte
condizioni.
27
SE A PIU’ VIE
(SELEZIONE MULTIPLA)
switch (Espressione)
{
case val1:
blocco-istr1;
break;
case val2 :
blocco-istr2;
break;
…
Default:
istruzioneDiDefault;
}
28
SE A PIU’ VIE
(SELEZIONE MULTIPLA)
switch ( day)
{
case 1: cout<< ”lun"; break;
case 2: cout<< ”mart"; break;
case 3: cout<< ”merc"; break;
case 4: ……
case 5: …..
case 6: …...
case 7:
default: cout<< “giorno inesistente”;
}
29
SWITCH
• L’istruzione switch costituisce un’abbreviazione
per una sequenza di “if” annidati.
• Essa valuta un’espressione e ne confronta il
risultato con i diversi casi elencati
• Ogni caso contiene un valore e una lista di
istruzioni da eseguire.
• Il flusso di controllo è trasferito alla lista associata
con il primo valore uguale all’espressione
30
SWITCH
(L’istruzione break)
•
•
•
L’istruzione break passa il controllo alla fine
dell’istruzione switch.
Se non si usa l’istruzione break, il flusso di controllo
continua ai casi successivi.
Qualche volta questo è utile, ma di solito i valori dei
diversi casi sono mutuamente esclusivi e al più un caso
corrisponde al valore dell’espressione.
– In generale, non si deve mai dimenticare il comando break tra un
caso e l'altro.
31
SWITCH
(la clausola default)
•
•
•
•
Un’istruzione switch può avere un caso di default.
Il caso di default non ha un valore associato ma usa
semplicemente la parola riservata default.
Se è presente il caso di default, il controllo è
trasferito all’istruzione associata se non ci sono altri
casi
Se non è presente il caso di default e nessun valore
corrisponde, il controllo passa all’istruzione
successiva all’istruzione switch
32
SWITCH
limiti
• L’espressione di un’istruzione switch deve
produrre un valore intero o carattere.
• Non può essere un valore in virgola mobile o
una stringa.
• La condizione nell’istruzione switch è sempre
un’uguaglianza.
•
Non si possono utilizzare altri operatori relazionali.
33
RIPETIZIONE PRECONDIZIONALE
(CONTROLLO IN TESTA)
while ( cond )
{
blocco-istr;
}
34
RIPETIZIONE PRECONDIZIONALE
(esempio)
byte cont = 0;
while ( cont < 10 )
{
cout<<“Dammi un numero”;
cin>>x;
cout<<“Il doppio è: “<<x*2;
cont++;
}
35
COSTRUTTO DI RIPETIZIONE DERIVATO:
controllo in coda
I costrutti derivati sono costrutti appunto derivati dai
costrutti principali e comodi in alcune situazioni. In
alcune situazioni (vedremo più avanti) è più comodo
utilizzare un controllo in coda invece che in testa.
La ripetizione con controllo in coda è derivata dalla
ripetizione con controllo in testa.
Ogni costrutto con controllo in coda può essere
scritto in modo equivalente utilizzando un costrutto
con controllo in testa.
36
RIPETIZIONE POSTCONDIZIONALE
(CONTROLLO IN CODA)
do
{
blocco-istr;
} while (cond)
37
RIPETIZIONE POSTCONDIZIONALE
(esempio)
unsigned int cont = 0;
do
{
cout<<“Dammi un numero”;
cin>>x;
cout<<“Il doppio è: “<<x*2;
cont++;
} while (cont <10)
38
DIFFERENZA TRA
CONTROLLO IN TESTA E IN CODA
(while e do-while)
La differenza fra while e do-while consiste nel
fatto che:
• il corpo del ciclo nel do-while viene sempre
eseguito almeno una volta (cioè la prima
volta);
• nel while invece se la condizione booleana è
falsa il corpo del ciclo non viene mai eseguito.
39
RIPETIZIONE DEFINITA
Un costrutto di ripetizione si dice definito quando
è noto il numero di iterazioni da eseguire.
Esempio: stampa “ciao” 10 volte; stampa i primi N
numeri naturali (N noto o letto da input).
Un costrutto di ripetizione si dice indefinito
quando non è noto il numero di iterazioni da
eseguire. Esempio: leggi una sequenza di numeri
terminata dallo zero; lancia un dado finché non
esce 6.
40
COSTRUTTO DI ITERAZIONE DERIVATO: FOR
Molti linguaggi (e anche in C/C++) mettono
a disposizione un costrutto per l’iterazione
definita.
Tale costrutto è il FOR. L’istruzione for
sostituisce un costrutto con controllo
intesta e numero definito di iterazioni
41
COSTRUTTO DI ITERAZIONE DERIVATO: FOR
i=0;
while (i<N) {
L1;
i=i+1;
}
dove N è conosciuto
for (i == 0; i<N; i++)
L1;
dove N è conosciuto
Come si vede bene il costrutto FOR è più compatto.
42
Regole per la stesura del codice
•
•
•
•
•
•
Utilizzate i commenti per spiegare le parti del codice
Utilizzate quando possibile le costanti
Nomi significativi per le variabili
Nomi delle variabili né troppo lunghi nè troppo corti
Allineare e indentare il codice
Notazione a Cammello per i nomi delle variabili
(InizialiMaiuscolePerNomiComposti)
• TUTTO MAIUSCOLO PER LE COSTANTI
• Sui caratteri non consentiti per i nomi vedi appunti
precedenti
43
Scarica

CODIFICA Da flow-chart a C++