Codifica
Download
1 / 43

CODIFICA - PowerPoint PPT Presentation


  • 134 Views
  • Uploaded on

CODIFICA. Da flow-chart a C++. Il modello dei dati. Il modello dei dati specifica le variabili che si vogliono utilizzare ed il tipo delle variabili.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' CODIFICA' - kagami


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Codifica

CODIFICA

Da flow-chart a C++


Il modello dei dati

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.


Tipi del c c

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.


Tipi del c c modificatori

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)


Tipo dati dimensioni e range di valori

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>.


Istruzioni

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



Struttura di un semplice programma

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?



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

ISTRUZIONE DI ASSEGNAMENTO


Istruzione di assegnamento1

ISTRUZIONE DI ASSEGNAMENTO


Operatori aritmetici

Gli operatori aritmetici già noti: +, -, *, /, % (numero) , identificatori di altre variabili, espressioni aritmetico/logiche di combinazioni di valori e variabili e funzioni:

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;           lanci=lanci*2;

/= torta /= 3;           torta=torta/3;

%= carte %= 5;         carte=carte%5;

Operatori aritmetici


Operatori relazionali e logici

>, <, <=, >= sono identici in C++ (numero) , identificatori di altre variabili, espressioni aritmetico/logiche di combinazioni di valori e variabili e funzioni:

Flow chart C++

<> != (diverso da)

= (nel rombo) == (confronto) fai attenzione a non confondere con l’assegnamento (= del rettangolo) !!!

AND &&

OR ||

NOT !

Operatori relazionali e logici


Istruzione di assegnamento2

ISTRUZIONE DI ASSEGNAMENTO (numero) , identificatori di altre variabili, espressioni aritmetico/logiche di combinazioni di valori e variabili e funzioni:


Istruzione di assegnamento3

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

ISTRUZIONE DI ASSEGNAMENTO


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

CONTROLLO DEL FLUSSO


Controllo del flusso1

CONTROLLO DEL FLUSSO valutazione di una espressione:

  • 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)


Se a una via

SE A UNA VIA valutazione di una espressione:

If (cond)

{

blocco-istr;

}


Se a una via esempio con singola istruzione

SE A UNA VIA (esempio) valutazione di una espressione:con singola istruzione

if (x >0)

x = -x;

cout <<“valore assoluto: “<< x;


Se a una via esempio con blocco di istruzioni

SE A UNA VIA (esempio) valutazione di una espressione:con blocco di istruzioni

if (x >0)

{

app = x;

x = y;

y = app;

}

cout << x <<“ ,“<<y;


Se a due vie

SE A DUE VIE valutazione di una espressione:

if (cond)

{

blocco-istr;

}

else

{

blocco-istr;

}


Se a due vie esempio

SE A DUE VIE (esempio) valutazione di una espressione:

if ( x > y)

mass = x;

else

mass = y;

cout<<“Massimo: “<<mass;


Se a due vie esempio2

SE A DUE VIE (esempio2) valutazione di una espressione:

if ( x > y) {

mass = x;

cout<<“Massimo: “<<mass;

}

else {

mass = y;

cout<<“Massimo: “<<mass;

}


Se annidato

SE ANNIDATO valutazione di una espressione:

if (cond)

{blocco-istr;}

else

if (cond)

{blocco-istr;}

else

{blocco-istr;}


Se annidato esempio

SE ANNIDATO (esempio) valutazione di una espressione:

if ( x > y)

cout<<“x magg di y”;

else

if (x < y)

“y magg di x”;

else

cout<<“x e y uguali”;


Se annidato1

SE ANNIDATO valutazione di una espressione:

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";                 }


Struttura condizionale derivata selezione multipla

STRUTTURA CONDIZIONALE DERIVATA valutazione di una espressione:(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.


Se a piu vie selezione multipla

SE A PIU’ VIE valutazione di una espressione:(SELEZIONE MULTIPLA)

switch (Espressione)

{

case val1:

blocco-istr1;

break;

case val2 :

blocco-istr2;

break;

Default: istruzioneDiDefault;

}


Se a piu vie selezione multipla1

SE A PIU’ VIE valutazione di una espressione:(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”;

}


Switch

SWITCH valutazione di una espressione:

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


Switch l istruzione break

SWITCH valutazione di una espressione:(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.


Switch la clausola default

SWITCH valutazione di una espressione:(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


Switch limiti

SWITCH valutazione di una espressione: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.


Ripetizione precondizionale controllo in testa

RIPETIZIONE PRECONDIZIONALE valutazione di una espressione:(CONTROLLO IN TESTA)

while ( cond )

{

blocco-istr;

}


Ripetizione precondizionale esempio

RIPETIZIONE PRECONDIZIONALE valutazione di una espressione:(esempio)

byte cont = 0;

while ( cont < 10 )

{

cout<<“Dammi un numero”;

cin>>x;

cout<<“Il doppio è: “<<x*2;

cont++;

}


Costrutto di ripetizione derivato controllo in coda

COSTRUTTO DI RIPETIZIONE DERIVATO: controllo in coda valutazione di una espressione:

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.


Ripetizione postcondizionale controllo in coda

RIPETIZIONE POSTCONDIZIONALE valutazione di una espressione:(CONTROLLO IN CODA)

do

{

blocco-istr;

} while (cond)


Ripetizione postcondizionale esempio

RIPETIZIONE POSTCONDIZIONALE valutazione di una espressione:(esempio)

unsigned int cont = 0;

do

{

cout<<“Dammi un numero”;

cin>>x;

cout<<“Il doppio è: “<<x*2;

cont++;

} while (cont <10)


Differenza tra controllo in testa e in coda while e do while

DIFFERENZA TRA valutazione di una espressione: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.


Ripetizione definita

RIPETIZIONE DEFINITA valutazione di una espressione:

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.


Costrutto di iterazione derivato for

COSTRUTTO DI ITERAZIONE DERIVATO: FOR valutazione di una espressione:

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


Costrutto di iterazione derivato for1

for valutazione di una espressione: (i == 0; i<N; i++)

L1;

dove N è conosciuto

COSTRUTTO DI ITERAZIONE DERIVATO: FOR

i=0;

while (i<N) {

L1;

i=i+1;

}

dove N è conosciuto

Come si vede bene il costrutto FOR è più compatto.


Regole per la stesura del codice

Regole per la stesura del codice valutazione di una espressione:

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


ad