I SOTTOPROGRAMMI.

Slides:



Advertisements
Presentazioni simili
Procedure e funzioni A. Ferrari.
Advertisements

ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Introduzione al linguaggio C
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Le funzioni.
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Lo sviluppo top down Le funzioni
Passaggio di parametri per indirizzo
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 3 Aprile 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2016.
Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.
Le funzioni in C++. Introduzione  Spesso alcuni gruppi di operazioni vengono ripetute in diverse parti all’interno del medesimo programma  Si pensi.
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Fondamenti di Informatica A - Massimo Bertozzi LE FUNZIONI.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
© 2007 SEI-Società Editrice Internazionale, Apogeo
LA PROGRAMMAZIONE: Algoritmi e programmi
Introduzione al linguaggio C
Dal problema al processo risolutivo
7. Strutture di controllo Ing. Simona Colucci
Dal problema al processo risolutivo
10. Programmazione Ricorsiva Ing. Simona Colucci
Process synchronization
Process synchronization
L’AMBIENTE CODE BLOCKS E L’IO
I FILES AD ACCESSO SEQUENZIALE
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Informatica per l’Ingegneria
istalliamo l’ambiente di sviluppo - ide
Programmazione e Laboratorio di Programmazione
Process synchronization
Programmazione e Laboratorio di Programmazione
IL CONCETTO DI ALGORITMO
Programmazione e Laboratorio di Programmazione
Programmare.
Secondo Programma in C.
Programmazione e Laboratorio di Programmazione
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Copia di oggetti il costruttore di copia ha le stesse particolarità della signature di un costruttore ordinario; il primo parametro è una reference ad.
Programmazione e Laboratorio di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo
Programmazione e Laboratorio di Programmazione
Definizione di linguaggio di programmazione
APPUNTI SUL LINGUAGGIO C
Process synchronization
La struttura dei primi programma in C
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
Esercitazione guidata 1
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Unità 1 Programmi base.
Programmazione e Laboratorio di Programmazione
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Passaggio di parametri per indirizzo
Programmazione e Laboratorio di Programmazione
Array (vettori) In linguaggio C / C++.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

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 Scrivere un algoritmo per la preparazione di un pasto completo: Mettere la tovaglia sul tavolo Mettere 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. Apparecchiare la tavola Preparare l’antipasto Preparare il primo Preparare il secondo Preparare il dolce

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

Approccio Top-down Problema Sottoproblema 1 Sottoproblema 2 …

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

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.

NON è conveniente creare sottoprogrammi quando: 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

Le procedure e le funzioni I sottoprogrammi si suddividono in procedure e funzioni. Entrambe sono deputate alla risoluzione di uno specifico problema ma le funzioni restituiscono un risultato al programma chiamante, che può essere assegnato ad una variabile o usato in una espressione. Esempio: In Visual Basic le procedure si dichiarano mediante la parola chiave Sub e le funzioni mediante la parola chiave Function.

Nel linguaggio C i sottoprogrammi si definiscono come: I sottoprogrammi in C Nel linguaggio C i sottoprogrammi si definiscono come: tipo_valore_di_ritorno nome (parametro1, … ) {dichiarazione variabili; elenco istruzioni return (valore di ritorno);} Per le procedure è void. Il default è int. Identificatore della funzione tipo parametro nome parametro

#include <stdio.h> int fun(int a, int b) {int c; c=a+b; 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 Sottoprogramma principale Chiamata alla funzione

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 Prototipo della funzione Sottoprogramma principale Chiamata alla funzione Definizione della funzione

#include <stdio.h> int fun(int a, int b) {int c; c=a+b; 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); …} L’assenza di parametri equivale a void. L’assenza del tipo equivale a int. E’ bene precisare sempre il tipo di parametro! Parametri formali Parametri attuali Devono rispettare numero, ordine e tipo dei parametri formali

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

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/C++ lo realizzeremo con i puntatori.

Passaggio dei parametri per riferimento in C++ #include <iostreamh> fun(int a, int b, int &s) {s=a+b;} main () {… fun(p,q, somma); …} p q somma 2 4 a b s 2 4

Esempi Il main è una funzione del tipo int main(void) main ()  int è sottointeso La funzione pow è del tipo double pow(double, double)

Esempi printf è una funzione che riceve un parametro per valore. scanf è una funzione che riceve un parametro per riferimento. Entrambe restituiscono un intero 0 in caso di errore ≠0 in caso di esecuzione corretta

Esecuzione dei sottoprogrammi Fun1 INIZIO … Fun1.1 FINE Fun1.1 INIZIO … FINE Programma principale INIZIO … Fun1 Fun2 FINE Quando 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. Fun2 INIZIO … FINE

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.

Visibilità delle variabili #include <stdio.h> int somma; int fun(int,int); main () int fun(int a, int b) {int p.q; {int c; … c=a+b; somma=fun(p,q); return (c);} …} Variabile globale Variabili locali

Visibilità delle variabili #include <stdio.h> int somma; void fun(int,int); main () void fun(int a, int b) {int p.q; { … somma=a+b; fun(p,q); } …} Variabile globale Variabili locali

Visibilità delle variabili Lo spazio di memoria viene allocato al momento della chiamata della funzione e liberato al momento della return. int calcolo(int); main() {int n=2,s; s=calcolo(n); printf(‘‘s=%d n=%d’’,s,n); } n s s 2 3 2 int calcolo(int n) {int s=0; for(;n>0;n--) s=s+n; return s;} 1 2 3 s=3 n=2

#include <stdio.h> int somma=3; main () {int somma; somma=5; …} 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à. #include <stdio.h> int somma=3; main () {int somma; somma=5; …} 3 5

Lo shadowing #include <stdio.h> int somma=3; void fun(void); main () void fun(void) {int somma=5; {printf(‘‘%d’’,somma);} printf(‘‘%d’’,somma); fun();} 5 3 Se si usano variabili globali è bene usare identificatori diversi per variabili globali e locali.

Visibilità dei sottoprogrammi Il prototipo della funzione può essere collocato dopo le direttive al preprocessore (ambiente globale) in questo caso la funzione è visibile ovunque e può essere chiamata da qualunque altra funzione. dentro una funzione (ambiente locale) in questo caso la funzione è visibile solo all’interno della funzione in cui è stata dichiarata e può essere chiamata solo in quell’ambito. Per ottenere riusabilità ed astrazione è bene che le funzioni siano dichiarate globali.