• Non ci sono risultati.

Programmazione Procedurale in Linguaggio C++

N/A
N/A
Protected

Academic year: 2021

Condividi "Programmazione Procedurale in Linguaggio C++"

Copied!
20
0
0

Testo completo

(1)

G. Mecca – Università della Basilicata – mecca@unibas.it

Programmazione Procedurale in Linguaggio C++

Sottoprogrammi Parte 2

Sintassi e Semantica

versione 2.1

Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Sommario

m

Introduzione

m

Definizione di Funzioni

m

Definizione di Procedure

m

Utilizzo di Sottoprogrammi

ðSintassi per la Chiamata di Funzioni ðSintassi per la Chiamata di Procedure ðSemantica

Sottoprogrammi: Sintassi e Semantica >> Sommario

(2)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 3

Introduzione

m

Sottoprogrammi

ðmoduli in cui è possibile dividere un programma complesso

ðne esistono due forme

m

Funzioni

ðblocchi di istruzioni per calcolare un valore

m

Procedure

ðblocchi di istruzioni per realizzare operazioni complesse

Sottoprogrammi: Sintassi e Semantica >> Introduzione

G. Mecca - Programmazione Procedurale in Linguaggio C++ 4

Introduzione

m

Sottoprogrammi definiti dall’utente

ðdel tutto analoghi dal punto di vista

dell’utilizzo ai sottoprogrammi predefiniti

m

Sottoprogrammi predefiniti

ðfunzioni predefinite (es: sin())

ðprocedure predefinite (es: getline())

m

Differenza fondamentale

ðin più, è necessario definire il

sottoprogramma

Sottoprogrammi: Sintassi e Semantica >> Introduzione

(3)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 5

Introduzione

m

Programmazione modulare

ðun programma è fatto di vari moduli

m

Modulo

ðsottoprogramma o programma principale

m

Funzionamento

ði moduli si “chiamano” a vicenda

ðe comunicano attraverso il “passaggio dei parametri”

Sottoprogrammi: Sintassi e Semantica >> Introduzione

Introduzione

m Parametro

ðdato “generico” utilizzato nel sottoprogramma ðal momento della chiamata gli viene associato un

argomento (dato “specifico”)

m Parametri standard

ðnon possono essere utilizzati per modificare il valore del corrispondente argomento

m Parametri per riferimento

ðpossono essere utilizzati per modificare il corrispondente argomento

Sottoprogrammi: Sintassi e Semantica >> Introduzione

(4)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 7

Introduzione

m

Nota

ðesistono terminologie alternative utilizzate sui libri

m

In particolare

ðparametro -> parametro formale ðargomento -> parametro attuale

ðparametro standard -> parametro per valore ðparametro per riferimento -> par per variabile

Sottoprogrammi: Sintassi e Semantica >> Introduzione

ATTENZIONE allo terminologia

utilizzata

G. Mecca - Programmazione Procedurale in Linguaggio C++ 8

Definizione di Funzioni

m

Definizione di una funzione

ðfatta di due parti

m

Intestazione (o “Prototipo”)

ðfornisce le informazioni necessarie per poter chiamare la funzione in altri moduli

m

Corpo

ðfornisce le informazioni necessarie per poter eseguire la funzione quando viene chiamata

Sottoprogrammi: Sintassi e Semantica >> Definizione di Funzioni

(5)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 9

Definizione di Funzioni

m

Funzione predefinita; es: sin()

m

Per poterla utilizzare devo conoscere

ðil nome della funzione (sin)

ðil numero e il tipo degli argomenti (1 argomento di tipo double) >> parametri ðil tipo del risultato restituito (double)

m

Intestazione di una funzione

ðcontiene esattamente queste informazioni

Sottoprogrammi: Sintassi e Semantica >> Definizione di Funzioni

Definizione di Funzioni

m

Rispetto ad una funzione predefinita

ðè necessario specificare altre informazioni

per poter eseguire la funzione

m

In particolare

ðistruzioni da eseguire per calcolare il valore ðvalore da restituire al termine dell’esecuzione

m

Corpo

ðserve a specificare queste altre informazioni

Sottoprogrammi: Sintassi e Semantica >> Definizione di Funzioni

(6)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 11

Esempio: discriminante

float discriminante (float a, float b, float c) {

float d;

d = b * b – 4 * a * c;

return d;

}

Sottoprogrammi: Sintassi e Semantica >> Definizione di Funzioni

nome della funzione

tipo del risultato parametri

intestazione corpo operazioni da eseguire

per calcolare il valore istruzione di ritorno

e valore da restituire

G. Mecca - Programmazione Procedurale in Linguaggio C++ 12

Esempio: giocata

string giocata (int numero) {

string s;

if (numero == 1) { s = "carta";

} else if (numero == 2) { s = "forbici";

} else if (numero == 3) { s = "sasso";

}

return s;

}

Sottoprogrammi: Sintassi e Semantica >> Definizione di Funzioni

nome della funzione

tipo del risultato parametri

intestazione corpo operazioni da eseguire

per calcolare il valore valore

da restituire

(7)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 13

Definizione di Funzioni

m

Sintassi

<tipoRisultato> <nome> (<parametri>)

<corpo>

m

Dove

ð<tipoRisultato> è un tipo di dato ð<nome> è un identificatore

ð<corpo> è un blocco di istruzioni ð<parametri> è l’elenco dei parametri

Sottoprogrammi: Sintassi e Semantica >> Definizione di Funzioni

Definizione di Funzioni

m

Elenco dei parametri

<tipoP1> <nomeP1>, <tipoP2> <nomeP2>...

m

Dove

ð<tipoP1>, <tipoP2> ... sono tipi di dato

ð<nomeP1>, <nomeP2> ... sono identificatori

m

Nota

ðci sono sottoprogrammi che NON hanno parametri (casi rari); in questo caso si utilizzano le parentesi vuote ()

Sottoprogrammi: Sintassi e Semantica >> Definizione di Funzioni

(8)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 15

Definizione di Funzioni

m

Istruzione return

ðil corpo deve contenerne almeno una

m

Sintassi

return <espressione>;

m

Dove

ð<espressione> deve restituire un valore compatibile con il tipo del risultato

Sottoprogrammi: Sintassi e Semantica >> Definizione di Funzioni

NOTA: è consentito specificare una espressione

generica

G. Mecca - Programmazione Procedurale in Linguaggio C++ 16

Definizione di Funzioni

m

Semantica

ðl’esecuzione dell’istruzione return interrompe l’esecuzione della funzione

ðviene calcolato il valore dell’espressione ðil valore viene restituito al modulo chiamante

m

Nota

ðpuò esserci anche più di un’istruzione return ðin punti diversi del sottoprogramma

Sottoprogrammi: Sintassi e Semantica >> Definizione di Funzioni

(9)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 17

Definizione di Procedure

m

Definizione di una procedura

ðanche in questo caso fatta di intestazione e corpo

m

Differenze rispetto alle funzioni

ðnon viene restituito alcun valore

ðpuò essere necessario modificare gli argomenti attraverso i parametri

m

Parametri per riferimento

ðsintassi opportuna per segnalarli

Sottoprogrammi: Sintassi e Semantica >> Definizione di Procedure

Definizione di Procedure

m

Procedura predefinita; es: getline()

m

Per poterla utilizzare devo conoscere

ðil nome della procedura (getline)

ðil numero e il tipo degli argomenti (1

argomento di tipo istream, 1 argomento di tipo string) >> parametri

ðil fatto che il secondo arg. viene modificato

m

Intestazione di una procedura

ðcontiene esattamente queste informazioni

Sottoprogrammi: Sintassi e Semantica >> Definizione di Procedure

(10)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 19

void leggiEquazione (float &a, float &b, float &c) {

cout << "Inserisci i coefficienti dell'equazione \n";

cin >> a;

cin >> b;

cin >> c;

return;

}

Esempio: leggiEquazione

Sottoprogrammi: Sintassi e Semantica >> Definizione di Procedure

nome della procedura

non c’è risultato parametri per riferimento

intestazione corpo operazioni da eseguire

istruzione di ritorno

G. Mecca - Programmazione Procedurale in Linguaggio C++ 20

void nuovaMano( string nome, int& punteggioComputer, int& punteggioGiocatore, int& pareggi ) {

int giocataComputer;

int giocataGiocatore;

int esito;

giocataComputer = generaGiocataComputer();

giocataGiocatore = schermoMenuMano(nome);

esito = controllaEsito(giocataComputer, giocataGiocatore);

schermoEsitoMano(nome,esito,giocataComputer,giocataGiocatore);

if (esito == 1) {

punteggioComputer++;

} else if (esito == 2) { punteggioGiocatore++;

} else { pareggi++;

} return;

}

Esempio: nuovaMano

Sottoprogrammi: Sintassi e Semantica >> Definizione di Procedure

(11)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 21

Definizione di Procedure

m

Sintassi

void <nome> (<parametri>)

<corpo>

m

Dove

ð<tipoRisultato> è un tipo di dato ð<nome> è un identificatore

ð<corpo> è un blocco di istruzioni ð<parametri> l’elenco dei parametri

Sottoprogrammi: Sintassi e Semantica >> Definizione di Procedure

Definizione di Procedure

m

Parametri standard (o “per valore”)

<tipoPar> <nomePar>

m

Parametri per riferimento

<tipoPar>& <nomePar>

m

Semantica

ði parametri per riferimento possono essere utilizzati per modificare i corrispondenti argomenti

ði parametri standard no

Sottoprogrammi: Sintassi e Semantica >> Definizione di Procedure

ATTENZIONE:

omettere la & è un errore logico molto frequente

(12)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 23

Definizione di Procedure

m

In sintesi

ðle funzioni sono utilizzate per calcolare un valore (non modificano gli argomenti)

ðnormalmente hanno solo parametri standard ðle procedure sono utilizzate per effettuare

operazioni (tra cui modifiche agli argomenti) ðpossono avere sia parametri standard che

per riferimento

Sottoprogrammi: Sintassi e Semantica >> Definizione di Procedure

G. Mecca - Programmazione Procedurale in Linguaggio C++ 24

Definizione di Procedure

m

Nota

ðil corpo deve contenere un’istruzione return ðpuò essercene più di una

m

Sintassi dell’istruzione return nelle proc.

return;

m

Infatti

ðin questo caso non è necessario restituire nessun valore (differenza con le funzioni)

Sottoprogrammi: Sintassi e Semantica >> Definizione di Procedure

(13)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 25

Utilizzo dei Sottoprogrammi

m

Una volta definiti i sottoprogrammi

ðpossono essere “chiamati” da altri moduli

m

Terminologia

ðmodulo “chiamante”

ðmodulo “chiamato”

m

Analogo

ðil chiamante chiede un servizio al chiamato ðil chiamato fornisce un servizio al chiamante

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

ATTENZIONE alla differenza tra definire e utilizzare un sottoprogramma

Utilizzo dei Sottoprogrammi

m

Utilizzo delle funzioni

ðesclusivamente all’interno di espressioni, per calcolare valori

m

Utilizzo delle procedure

ðsotto forma di nuove istruzioni

m

In entrambi i casi

ðè necessario specificare gli argomenti

ðche devono corrispondere in numero e tipo ai parametri

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

ATTENZIONE alla differenza tra l’utilizzo delle funzioni

e delle procedure

(14)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 27

Esempio: discriminante

float discriminante (float a, float b, float c) { float d;

d = b*b-4*a*c;

return d;

}

void main() {

float a1, b1, c1;

float a2, b2, c2;

...

if ( discriminante( a1, b1, c1 ) >= 0 ...

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

chiamata della funzione espressione

G. Mecca - Programmazione Procedurale in Linguaggio C++ 28

Esempio: leggiEquazione

void leggiEquazione (float &a, float &b, float &c) { cout << "Inserisci i coefficienti dell'equazione \n";

cin >> a;

cin >> b;

cin >> c;

return;

}

void main() {

float a1, b1, c1;

float a2, b2, c2;

leggiEquazione( a1, b1, c1 );

leggiEquazione( a2, b2, c2 );

...

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

chiamata

(15)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 29

Chiamata di Funzioni

m Sintassi

<nomeFunzione>(<arg1>, <arg2>,...<argn>) m Dove

ð<nomeFunzione> è il nome della funzione ð<arg1>, <arg2>, ...<argn> sono gli argomenti

ðse la funzione non ha parametri si possono omettere le parentesi vuote

m Nota

ðchiamata ammessa solo in un’espressione

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

Espressione:

-istruzione di assegnazione -istruzione di stampa (cout <<) -struttura di controllo (cond.) -istruzioni di ritorno delle funzioni

Chiamata di Funzioni

m

Argomenti

ðespressioni generiche

ðin particolare costanti simboliche o numeriche (es: pigreco oppure 3.14) ðoppure variabili (es: a1)

ðdevono corrispondere in numero e ordinatamente in tipo con i parametri

m

In realtà

ðpossono anche essere a loro volta parametri

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

(16)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 31

Chiamata di Funzioni

m

Infatti

ðil modulo chiamante può essere un altro sottoprogramma

m

Esempio

float primaRadice (float a, float b, float c) { float x;

x = (-b + sqrt(discriminante(a, b, c)))/(2*a);

return x;

}

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

a, b e c sono i parametri di “primaRadice”

e vengono usati come argomenti per “discriminante”

G. Mecca - Programmazione Procedurale in Linguaggio C++ 32

Chiamata di Funzioni

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

if (discriminante(a1, b1, c1)>= 0) ...

float discriminante(float a, float b, float c) { return b*b-4*a*c;

}

void main() {

float a1, b1, c1, d;

a1 = 2;

b1 = 6;

c1 = 1;

d = discriminante(a1, b1, c1);

cout << discriminante(2, b1 - 1, c1 * 2);

d = discriminante(1,1,discriminante(a1,b1-1,c1*2));

valore: 28 valore: 28 valore: 9

valore: -35 cout << discriminante(‘a’, b1);

discriminante(a1, b1, c1);

(17)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 33

Chiamata di Procedure

m

Sintassi

<nomeProcedura>(<arg1>,<arg2>,...<argn>);

m

Dove

ð<nomeProcedura> è il nome della procedura ð<arg1>, <arg2>, ...<argn> sono gli argomenti

m

Nota

ðla chiamata deve essere un’istruzione a sè stante terminata da ;

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

ATTENZIONE alla differenza con la chiamata

di funzione

Chiamata di Procedure

m

Argomenti da modificare

ðassociati a parametri per riferimento ðdevono essere effettivamente valori

modificabili

ðovvero devono corrispondere ad uno spazio di memoria il cui valore sia modificabile

ðnon possono essere costanti numeriche ðnon possono essere costanti simboliche ðnon possono essere espressioni complesse

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

(18)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 35

Chiamata di Procedure

m

Argomenti da modificare

ðsolo due opzioni ammissibili

m

Prima opzione

ðl’argomento è una variabile del modulo chiamante

m

Seconda opzione

ðl’argomento è un parametro del sottoprogramma chiamante

ðsi tratta di uno spazio nella memoria (>>)

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

G. Mecca - Programmazione Procedurale in Linguaggio C++ 36

Chiamata di Procedure

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

leggi (a1, b1, c1);

void leggiEquazione(float& a,float& b,float& c){...}

float a1, b1, c1, x, y;

leggi (a1, x, y);

leggi (a1 * 2, 3, y);

void main() { leggi (y, z, w);

float y, z, w;

leggi (x, y, z);

void prova (float x) {

a1 = leggi(x, y, c1) }

(19)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 37

Chiamata di Procedure

m

ATTENZIONE: Errore frequente

ðnon è necessario specificare il tipo degli argomenti nella chiamata

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

if (discriminante(a1, b1, c1) >= 0 ...

if (discriminante(float a1, float b1, float c1 )>=0...

leggiEquazione(a1, b1, c1);

leggiEquazione(float a1, float b1, float c1);

Chiamata di Sottoprogramma

m

Semantica

ðsi interrompe il modulo chiamante

ðavviene il “passaggio dei parametri” (>>) ðcomincia l’esecuzione del corpo del

sottoprogramma

ðquando viene incontrata l’istruzione return, l’esecuzione del corpo termina

ðtermina l’effetto del passaggio dei parametri ðriprende l’esecuzione del modulo chiamante

Sottoprogrammi: Sintassi e Semantica >> Utilizzo dei Sottoprogrammi

(20)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 39

Riassumendo

m

Sottoprogrammi

ðDichiarazione e utilizzo

m

Dichiarazione

ðIntestazione ðCorpo

m

Utilizzo (Chiamata)

ðChiamata di funzione ðChiamata di procedura

Sottoprogrammi: Sintassi e Semantica >> Sommario

G. Mecca - Programmazione Procedurale in Linguaggio C++ 40

Termini della Licenza

m This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit

http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Termini della Licenza

m Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare

http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Riferimenti

Documenti correlati

Sottoprogrammi: Metodologia di Sviluppo &gt;&gt; Tecniche di Test e

ðDefinizione di Funzioni ðDefinizione di Procedure ðChiamata di Funzioni ðChiamata di Procedure ðPassaggio dei Parametri ðProgrammazione Modulare. Termini

ði riferimenti sono “tipati”: ogni riferimento può essere intermediario per dati di un solo tipo ðes: riferimento a intero, riferimento a

Strutture di Dati: Lista &gt;&gt; Rappresentazione con Record e Array. ATTENZIONE ai

Strutture di Dati: Lista &gt;&gt; Inserimenti e Cancellazioni. Mecca - Programmazione Procedurale in Linguaggio

Strutture di Dati: La Matrice &gt;&gt; Il Problema delle Matrici Sparse.. Mecca - Programmazione Procedurale in Linguaggio

Strutture di Dati: Lista &gt;&gt; Gestione dei File. i conta il numero di valori prelevati dal

sintetizzare  il  significato  di  una  parte  del  testo  in  un’informazione  (“la  caccia  di  Melisenda  è  un  modo  per  realizzare  un  sogno”)  che