Come vi orientate in Bicocca? uno studio user-centered sul sistema di wayfinding dell’edificio U6
I SOTTOPROGRAMMI -...
Transcript of I SOTTOPROGRAMMI -...
I SOTTOPROGRAMMI
Approccio Top-down
Quando dobbiamo affrontare un problema complesso è bene individuare le parti che lo compongono e suddividerlo in problemi minori più agevoli da risolvere.
Approccio Top-down
Mettere la tovaglia sul tavoloMettere i piatti…Mettere pane, acqua e vino in tavola
Tagliare il salame…Versare le olive in un contenitore
Mettere l’acqua sul fuoco…
Tagliare la carne…
Rompere le uova…
Servire dolci e liquori.
Scrivere un algoritmo per la preparazione di un pasto completo:
Apparecchiare la tavola
Preparare l’antipasto
Preparare il secondo
Preparare il dolce
Preparare il primo
Inizio programma principale
Apparecchiare la tavola
Preparare antipasto
Preparare primo
Preparare secondo
Preparare torta
Servire dolci e liquori
Fine
Inizio sottoprogramma Preparare torta
rompere le uova
…
ungere la teglia
…
Fine
Preparare cena
Preparare
antipasto
Preparare
primo
Preparare
secondo
Preparare
dolci
Preparare
digestivo
Preparare
pasta
Preparare
sugo
… …
Problema
Sottoproblema 1 Sottoproblema 2 …
Sottoproblema 2.1 Sottoproblema 2.2
Sottoproblema 2.1.1 …
Approccio Top-down
…
L’approccio top down funziona quando• La scomposizione in sottoproblemi consente di
affrontare problemi più facilmente risolvibili• Si identifica un corretto ordine nell’affrontare i
diversi sottoproblemi• La soluzione dei sottoproblemi conduce alla
soluzione generale
Approccio Top-down
Approccio bottom-up,
● ossia "dal basso verso l'alto",
● privilegia l'aspetto esecutivo rispetto a quello
funzionale, procedendo dal particolare verso il
generale.
● è una strategia induttiva e consente di
concentrarsi subito sui punti cardine del
problema che, però, potrebbero essere di
difficile individuazione iniziale.
I Sottoprogrammi
Un sottoprogramma è una porzione di codice, una parte di un programma, che risolve un particolare sotto-problema e che verrà eseguita quando chiamata dal programma principale.
Ogni sottoprogramma deve avere un nome, deve essere descritto una sola volta e richiamato al bisogno attraverso il suo nome.
I Sottoprogrammi
E’ conveniente creare sottoprogrammi quando:
•Le azioni eseguite dal sottoprogramma sono di interesse generale•Le azioni eseguite dal sottoprogramma non sono di interesse generale ma si presentano più volte all’interno del programma•Si riesce ad ottenere una maggiore leggibilità del programma
I Sottoprogrammi
I sottoprogrammi consentono di •Astrarre•Occupare meno memoria•Riusare il codice•Migliorare la leggibilità del codice.
I Sottoprogrammi
NON è conveniente creare sottoprogrammi quando:
•Le azioni eseguite dal sottoprogramma non sono di interesse generale.•Non si ottiene una maggiore leggibilità del programma.•Non si ottiene una maggiore velocità di esecuzione o un risparmio di spazio in memoria.
Esempio: Creare un sottoprogramma che faccia solo la lettura da tastiera di un dato e lo restituisca al programma principale.
I Sottoprogrammi
Un sottoprogramma deve avere:•Un nome (identificatore)•Una descrizioni (blocco di istruzioni)•Permettere lo scambio di dati col programma principale o altri sottoprogrammi.
Un sottoprogramma può:•Ricevere dati•Restituire risultati
Esecuzione dei sottoprogrammi
Programma principale
INIZIO
…
Fun1
…
Fun2
…
FINE
Fun1
INIZIO
…
Fun1.1
…
FINE
Fun2
INIZIO
…
FINE
Fun1.1
INIZIO
…
FINE
uando si attiva un sottoprogramma si sospende l’esecuzione del sottoprogramma chiamante e si memorizza l’indirizzo dell’istruzione successiva a quella di chiamata in modo da sapere da dove proseguire.
Le funzioni
● Una funzione è un sottoprogramma contenente
le istruzioni che risolvono uno specifico
problema
● quando il sottoprogramma viene attivato da
un'istruzione di chiamata, restituisce un valore.
● Il valore della funzione deve essere
● Usato come elemento di un'istruzione.
● richiamata in un'assegnazione a una variabile
oppure all'interno di una generica espressione.
Sintassi#include<iostream>
using namespace std;
tipodidato nomefunzione (<lista dei parametri>); Prototipo della Funzione
int main(){
…......................;
variabile=nomefunzione(<listavariabili>); Chiamata della
Funzione
….....................;
return 0;
}
tipodidato nome funzione(<lista dei parametri>) Definizione della funzione
{
….............;
return(valore);
}
I sottoprogrammi in C
#include <stdio.h>
int fun(int a, int b){ int c; c=a+b; return (c);}main (){…
somma=fun(p,q);…}
Direttive al preprocessore
Definizione della funzione
Chiamata alla funzione
Sottoprogramma principale
I sottoprogrammi in C
#include <stdio.h>
int fun(int,int);main (){…
somma=fun(p,q);…}int fun(int a, int b){
int c;c=a+b;return (c);
}
Direttive al preprocessore
Definizione della funzione
Chiamata alla funzione
Prototipo della funzione
Sottoprogramma principale
Ambiente locale e globale
L’ambiente di un sottoprogramma è l’insieme delle risorse (variabili, costanti, parametri, sottoprogrammi) da esso utilizzabili
Ambiente locale � risorse specifiche del sottoprogramma
Ambiente globale � risorse utilizzabili da tutti i sottoprogrammi
ATTENZIONE: E’ buona regola di programmazione privilegiare l’ambiente locale, minimizzando l’ambiente globale.
Visibilità delle variabili
E' possibile dichiarare delle variabili dentro le funzioni.
Esse sono dette variabili locali e sono visibili solo dentro la funzione in cui vengono dichiarate. Perciò è possibile dichiarare variabili con lo stesso nome in funzioni (ambienti) diversi.
Visibilità delle variabili
E’ possibile dichiarare delle variabili globali e sono visibili e accessibili in tutto il programma.
ATTENZIONE: Le variabili globali potrebbero essere modificate involontariamente o intenzionalmente ed in modo malizioso.
Lo shadowing
Se vengono dichiarate due variabili, anche di tipo diverso, una globale ed una locale, aventi lo stesso identificatore, la variabile locale oscura quella globale, impedendone la visibilità.
3
#include <stdio.h>int somma=3;main (){int somma;somma=5;…}
5
La ricorsione
E’ possibile chiamare un sottoprogramma all’interno di un altro sottoprogramma.
Alcuni linguaggi consentono ad un sottoprogramma di chiamare se stesso, cioè ammettono la ricorsione.
Esercizio
Calcolo della media di due studenti e rilevazione
del migliore
Le procedure e le funzioni
● La procedura è un sottoprogramma contenente le istruzioni che risolvono uno specifico problema.
● L'esecuzione di una procedura viene attivata dall'apposita istruzione di chiamata (invocazione). Essa utilizzando il passaggio per riferimento può modificare il valore di variabili che sono locali in un altro sottoprogramma.
Esempio: In Visual Basic le procedure si dichiarano mediante la parola chiave Sub e le funzioni mediante la parola chiave Function.
Le procedure e le funzioni
● Le procedure sono astrazione di istruzioni
● Le Funzioni di operatori
● Decrivere il problema della distinzione tra i due sottoprogrammi in C++ e troppo lungo.
Sintassi#include<iostream>
using namespace std;
void nomeprocedura (<lista dei parametri>); Prototipo della procedura
int main(){
…......................;
nomeprocedura(<listavariabili>); Chiamata della procedura
….....................;
return 0;
}
void nomeprocedura (<lista dei parametri>) Definizione della procedura
{
….............;
}
I parametri
Servono per scambiare informazioni tra le diverse parti di un programma. Sono caratterizzati da:
– Un identificatore
– Un tipo
– Un valore
– Una direzione
• Input
• Output
• Input/output
Differenza
• I parametri sono una cosa
• Le variabili sono altre cose
Var input e Par input
…
Leggi (lato)
….
lato
Sottoprogramma
Var output e Par input
…
scrivi (lato)
….
lato
Sottoprogramma
Var input e Par output
…
leggi (lato)
….
Sottoprogramma
lato
Var lavoro e Par output
…
Lato=lato+4
….
Sottoprogramma
lato
Var lavoro e Par output/output
…
Lato=Lato+4
….
Sottoprogramma
LatoLato
I sottoprogrammi in C
#include <stdio.h>
int fun(int a, int b){int c;c=a+b;return (c);}
main (){…somma=fun(p,q);…}
Parametri
formali
Parametri attuali
Devono rispettare numero, ordine e tipo dei parametri formali
L’assenza di parametri equivale a void.L’assenza del tipo equivale a int.E’ bene precisare sempre il tipo di parametro!
I parametri
I parametri possono essere passati alla funzione
• Per valore
Viene predisposta una nuova cella di memoria (parametro formale) e lì copiato il valore del parametro attuale. Qualunque modifica al parametro formale non viene percepita dal parametro attuale.
• Per riferimento
I parametri formali contengono l’indirizzo di memoria del parametro attuale. Si lavora quindi sulla variabile originaria, il cui valore può essere modificato.
Esempio: In Visual Basic si usa la parola chiave ByVal.
Esempio: In Visual Basic si usa la parola chiave ByRef. In C lo simuleremo con i puntatori.
I sottoprogrammi – passaggio per riferimento
Ricordiamo che i parametri possono essere passati alla funzione per riferimento.
In C++ il passaggio per riferimento viene simulato attraverso l’uso del & che indica l'indirizzo
I sottoprogrammi – passaggio per Valore
Esempio: Scrivere una procedura che restituisca la somma di due numeri ricevuti dal main.
void fun(int x, int y, &int z);
int main(){
int a,b, somma;cin<<a;
cin<<b;fun(a,b,somma);
cout>>somma;
retun 0;}
void fun(int x, int y, int &z)
{z=x+y;
}
I sottoprogrammi – passaggio per riferimento
2 3
a b
2
somma
3
5
5
x y
z
void fun(int x, int y, int &z){
z=x+y;}
void fun(int x, int y, &int z); int main()
{int a,b, somma;
cin<<a;
cin<<b;fun(a,b,somma);
cout>>somma;retun 0;
}
I sottoprogrammi – passaggio per valore
2 3
a b
2
somma
3
5
x y z
void fun(int x, int y, int z)
{
z=x+y;}
void fun(int x, int y, int z); int main()
{int a,b, somma;
cin<<a;cin<<b;
fun(a,b,somma);cout>>somma;
retun 0;}
5
I sottoprogrammi – passaggio per riferimento
Esempio: Scrivere una funzione che restituisca l’area ed il perimetro di un quadrato, il cui lato viene letto nel main.
I sottoprogrammi – passaggio per riferimento
main()
{int I=2,area, perimetro;
fun(l,area,perimetro);
cout<<”area=”<<area;
cout<<”perimetro”<<perimetro;}
void fun(int x, int &y, int &z)
{y=pow(x,2);
z=4*x;}
2
a area
2
perimetro
4 8
8
x
y z
4
I sottoprogrammi – passaggio per riferimentoscambio valori di due variabili
void fun(int x, int y );
main()
{int a=2, b=3;
fun(a,b);
cout<<a<<” “<<b;}
void fun(int x, int y)
{int aux;
aux=x; x=y; y=aux;}
2 3
a b
2
aux
3
2 3
x y
3 22
I sottoprogrammi – passaggio per riferimento scambio valori di due variabili
void fun(int *, int *);
main()
{int a=2, b=3;
fun(a,b);
cout<<a<<” “<<b;}
void fun(int &x, int &y)
{int aux;
aux=x; x=y; y=aux;}
2 3
a b
aux
3 2
x y 2
3 2
I sottoprogrammi – passaggio per riferimento
Il passaggio per riferimento si rende necessario quando
È opportuno effettuare un passaggio per valore quando l'informazione è solo di input per il sottoprogramma.
È opportuno effettuare un passaggio per indirizzo quando vogliamo la restituzione del valore del parametro formale (parametro di output), .
I sottoprogrammi – passaggio per riferimento● Le procedure devono comunicare con l'esterno
esclusivamente tramite parametri.
● Non si deve utilizzare un numero eccessivo di
parametri (se ciò dovesse accadere, forse sarebbe utile
rivedere la progettazione).
● Le procedure non devono utilizzare le variabili globali
e, in particolar modo, non devono modificarle
● Le procedure che risolvono un certo problema non
devono usare al loro interno istruzioni di input/output:
devono comunicare i dati solo attraverso i parametri.
● La gestione dell'input/output deve avvenire tramite
apposite procedure.