1. Lezione
Scomposizione di programmi
e approccio in C++
A cura del prof. Giuseppe Sportelli
Versione 3.0
Sito Web
https://www.corsi-on-line.it/moodle
2. COS’È UN SOTTO PROGRAMMA ?
Un’unità logica indipendente composta di
istruzioni, che assolve ad un compito
specifico.
Un sottoprogramma può essere pensato
come un compito specifico o funzione
specifico, nell’ambito di un programma con
molteplici funzionalità o funzioni
3. Metodologia Top-down
• Scomposizione del problema in sottoproblemi
per:
– Semplificazione programma
– Riuso di codice riprodurre senza ripetere il codice
nello stesso programma
– Portabilità riuso stesso codice in altri programmi
Per gli ultimi due punti è necessario l’utilizzo di
scomposizione in sottoprogrammi con parametri.
5. Chiamata a sottoprogramma
• Avviene quando nel programma principale
richiama una serie di istruzioni locate in
altro punto della codifica per assolvere ad
una funzione specifica del programma.
• All’atto della chiamata possono essere
scambiati fra programma principale e
sottoprogramma valori o variabili
7. Tipi di chiamate a sottoprogrammi
• Non parametriche ovvero non vi è scambio
dati diretto fra programma chiamante e
sottoprogramma ma solo dati in comune
fra tutte le unità di programma
• Parametriche sono passati dati in valore o
per variabili dal programma chiamante al
sottoprogramma
8. Tipologia di dati utilizzati
• Variabili e costanti globali: Visibili nel
programma e nei sottoprogrammi in C++
si dichiarano dopo la direttiva #include
• Variabili locali: Visibili solo nei
sottoprogrammi ove sono dichiarati in C++
si dichiarano all’interno delle funzioni.
9. Tipologia di dati utilizzati
• Parametri formali variabili e costanti
simboliche utilizzate nei sottoprogrammi
per la scrittura di codice che sia
indipendente dal programma principale
contesto;
• Parametri attuali valori o variabili e/o
costanti globali che si sostituiscono all’atto
della chiamata nel sottoprogramma ove
sono utilizzati;
10. Tipologia di chiamate parametriche
• Esiste la chiamata a sottoprogramma per
indirizzo o referenza o riferimento quando viene
passata l’indirizzo della memoria della variabile
globale. In questo caso se nel sottoprogramma
cambia la variabili globale la modifica si propaga
nel programma principale
• Nella chiamata per valore si passa il valore che
in quel momento assume la variabile globale nel
programma principale senza alterare quindi la
variabile globale nel programma principale.
11. Chiamata per valore in C++
Analizziamo lo spezzone di codice
#include <iostream>
using namespace std;
int a,b,s;
void somma (int x,int y , int z)
{z=x+y;}
Int main ()
{a=3;
b=5;
somma(4,5,s);
a=b-2;
cout << s<<end;
return 0;
}
Int x, int y, int z indica tre parametri passati
per valore, mentre void indica che non è
previsto un valore di ritorno.
Il valore calcolato di z nella funzione, non
Ritorna alla variabile globale s, che continua
a mantenere il suo valore definito nel main.
12. Chiamata per referenza in C++
Analizziamo la stessa porzione di codice
#include <iostrem>
using namespace std;
int a,b,s;
void somma (int& x,int& y, int &z)
{ x=1;
z=x+y;}
Int main ()
{a=3;
b=5;
somma(a,b,s);
a=b-2;
cout << s<<end;
return 0;}
La dichiarazione nell’intestazione int& x, … passa le
variabili globali per referenza ora inizialmente a e b
valevano 3 e 5, ma nel sottoprogramma a x viene
assegnato il valore 1 ed equivale ad assegnare alla
variabile. a il valore 1 e quindi il risultato cambia
perché nel sottoprogramma è cambiato la variabile
globale associata a x.
13. Procedure e Funzioni
In tutti i linguaggi di programmazione esiste la
possibilità di dichiarare e usare procedure ovvero
sottoprogrammi che eseguono dei compiti specifici
ma possono non restituire dei risultati e delle
funzioni ovvero particolari tipi di programma che
permettono di essere richiamati all’interno di un
istruzione di calcolo o assegnazione e quindi
restituiscono obbligatoriamente un risultato.
14. Funzione in C++
Supponiamo di voler realizzare una funzione
in C++ che mi permetta di calcolare il cubo di un numero.
Scriveremo un codice del tipo
#include <iostream>
using namespace std;
float n,r;
float cubo(float x ){
float c=x*x*x;
return c}
int main()
cout <<‘’inserisci il numero di cui vuoi calcolare il cubot’’;
cin >> n;
r=cubo(n);
cout <<“nIl cubo è:t”<<r;
return 0;
}
15. Considerazioni sulla codifica
• In entrambi i casi di procedure e funzioni si sono
dichiarati sottoprogrammi a livello di modulo e quindi di
validità generale
• int main nel in C++ indica l’inizio di un eventuale
programma principale. Il sottoprogramma o oggetto GUI
che deve essere avviato per primo può essere
specificato nelle proprietà del progetto.
• Le strutture dati sono passate al C++ per indirizzo in
modo implicito senza indicare il simbolo &.senza
indicare dimensione, per le matrici è necessaria la
seconda dimensione.
Ad esempio void carica(int x, int vet[])
indica il passaggio di un array alla funzione con
dimensioni non indicate, sarà all’atto della chiamata che
il programma chiamante sostituisce la struttura dati array
con la dimensione opportuna.
16. Esercitazione
Scrivere un programma che ricevuti in input
cognomi e i voti di N alunni calcoli e visualizzi
il cognome e il voto degli alunni insufficienti
(voto <=5), mediocre (voto >=5 e voto <6), e
dei sufficienti (voto >=6). Inoltre calcoli e
visualizzi la la media dei voti.
17. ELENCO DELLE FUNZIONI
Inserimento dei dati
Visualizzazione delle persone insufficienti,
mediocri e sufficienti;
Calcolo della media
22. Esercitazione
Realizzare un programma che permetta di
calcolare la somma degli elementi di due
vettori di uguale dimensione, dopo aver
inserito gli elementi.
24. Il programma principale
Questo è il programma principale
che richiama due volte la procedura
carica con variabili globali diverse.
La chiamata è per riferimento.
Le variabili inserite come argomento
della chiamata vanno nominate nell’ordine
in cui sono state dichiarate nelle
intestazioni delle procedure.
26. Considerazioni sulle procedure
• La carica serve per inserire gli elementi un
vettore X di M elementi
• La somma effettua la somma di due vettori
di pari dimensione e il risultato è in output
in un parametro formale T.
• Abbiamo generalizzato delle procedure
che possiamo riciclare in altri programmi
che coinvolgono i vettori.
27. Sorgente C++ - Main
int main(){
cout << "inserisci le dimensioni del
vettore"<<endl;
cin>>N;
cout << "primo arrayn";
carica(a,N);
cout<< "secondo arrayn";
carica(b,N);
somma(a,b,N,s);
cout<< "la somma èt"<<s<<endl;
return 0;}
Le funzioni in C++
Sono lasciate al
lettore
28. Per Concludere
• Svolgere il seguente esercizio realizzare
un programma che carichi e calcoli la
somma di due vettori di dimensione N e P
diverse.
Grazie per l’attenzione
Prof. Giuseppe Sportelli
Revisione 2021
Condividi e cita la fonte
Licenza Creative Common
Iscrivi ai corsi su
Sito Web https://www.corsi-on-line.it/moodle