Sottoprogrammi: astrazione procedurale



Похожие документы
Gestione dinamica di una pila

La struttura dati ad albero binario

Funzioni in C. Violetta Lonati

Laboratorio di programmazione

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

GESTIONE INFORMATICA DEI DATI AZIENDALI

Funzioni. Il modello console. Interfaccia in modalità console

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella


Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Inizializzazione, Assegnamento e Distruzione di Classi

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

obiettivi di questa seconda metà del corso fare un passo avanti rispetto a :... meccanismi di composizione dei dati

Ricerca sequenziale di un elemento in un vettore

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

costruttori e distruttori

Linguaggio C - Funzioni

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Algoritmi di Ricerca. Esempi di programmi Java

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Calcolare il massimo di una lista

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

puntatori Lab. Calc. AA 2007/08 1

Allocazione dinamica della memoria - riepilogo

Concetto di Funzione e Procedura METODI in Java

Il tipo di dato astratto Pila

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Informatica

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

I file di dati. Unità didattica D1 1

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Connessione ad internet

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Arduino: Programmazione

Grammatica di base: Pointers

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

Esercizio: gestione di un conto corrente

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

I puntatori e l allocazione dinamica di memoria

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Oggetti Lezione 3. aspetti generali e definizione di classi I

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Lezione 8. La macchina universale

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

Laboratorio di Algoritmi e Strutture Dati

Lezione 4 Le code. Informatica. 26 Aprile Le pizze devono essere preparate e consegnate seguendo l ordine di arrivo degli ordini

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

Linguaggio C. Fondamenti. Struttura di un programma.

esercizi Esercizi / problemi

Matlab: Funzioni. Informatica B. Daniele Loiacono

Algoritmi e Strutture Dati

La ricorsione. Politecnico di Milano Sede di Cremona

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3

Introduzione alla Programmazione ad Oggetti in C++

Codifica: dal diagramma a blocchi al linguaggio C++

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi terza

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

FUNZIONI. La libreria standard del C fornisce una ricca collezione di funzioni, come le funzioni:

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Test Excel conoscenze di Base

Corso di Fondamenti di Informatica

Elementi di semantica operazionale

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

10 - Programmare con gli Array

Abstract Data Type (ADT)

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Programmazione in Java Parte I: Fondamenti

Introduzione a Classi e Oggetti

Esercitazione n 4. Obiettivi

Descrizione di un algoritmo

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Algoritmi di ordinamento

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Introduzione JDBC interfaccia java.sql driver caricare i driver

Puntatori Passaggio di parametri per indirizzo

CAPITOLO 7 - SCAMBIO DI MESSAGGI

Le Stringhe. Un introduzione operativa. Luigi Palopoli

BOZZA. cin per la comunicazione dal dispositivo di input standard, la tastiera, al programma (stream di input standard)

Elementi di semantica denotazionale ed operazionale

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Linguaggio C - Stringhe

dall argomento argomento della malloc()

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Транскрипт:

Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j<len) &&!presente ) if ( x == lista[j] ) presente = true; else j++; Variabili di ingresso: lista, len, x Variabili di uscita: presente, j void ricerca ( const int *a, const int n, const int x, bool &trov, int &pos ) { int i; trov = false; i = 0; while ( (i<n) &&!(trov) ) if ( x == a[i] ) trov = true; else i++; pos = i;

Prototipo di un sottoprogramma Nome preceduto dalla parola chiave void Lista dei parametri formali tra parentesi (obbligatorie) tipo e nome parametri di ingresso, di uscita e di ingresso/uscita Corpo del sottoprogramma dichiarazione di variabli automatiche (locali) parte eseguibile Se non vi sono parametri formali al posto della lista vuota è preferibile mettere la parola chiave void

Parametri effettivi e parametri formali chiamante int lista[maxlen]; int len, val; int i; bool presente; ricerca(lista, len, val, presente, i); parametri effettivi /* continua l elaborazione usando i parametri di uscita presente e i */ chiamato parametri formali void ricerca ( const int *a, const int n, const int x, bool &trov, int &pos ) { int i; trov = false; i = 0; while ( (i<n) &&!(trov) ) if ( x == a[i] ) trov = true; else i++; pos = i;

Esecuzione di sottoprogrammi: chiamata, ritorno e main () { int x, y, z;... bin(x+1, y, z);... chiamata void bin ( int n, int k, int &result ) { int temp; temp = fact(k)*fact(n-k); result = fact(n) / temp; ritorno x y z x y z x y z n k result temp di bin tempo chiamata di bin creazione del esecuzione di bin distruzione del ritorno a main

Modi di passaggio dei parametri Passaggio per valore il parametro formale è una variabile che viene inizializzata con il valore del parametro effettivo: il codice del sottoprogramma opera su una copia del parametro effettivo Passaggio per riferimento il parametro formale sta per il parametro effettivo: il codice del sottoprogramma opera sul parametro effettivo

Modi di passaggio dei parametri Possono essere passati per valore solo i parametri di ingresso I parametri di uscita e quelli di ingresso/uscita, poiché devono essere modificati, devono essere passati per riferimento I parametri effettivi corrispondenti a parametri passati per valore devono essere espressioni I parametri effettivi corrispondenti a parametri passati per riferimento devono essere delle variabili

Passaggio dei parametri in C/C++ tempo main () { int x, y, z;... bin(x+1, y, z);... passaggio per valore void bin ( int n, int k, int &result ) { int temp; temp = fact(k)*fact(n-k); result = fact(n) / temp; passaggio per riferimento x: 4 y: 2 z:? x: 4 y: 2 z:? x: 4 y: 2 z: 10 n: 5 k: 2 result: temp di bin chiamata di bin creazione del esecuzione di bin distruzione del ritorno a main

Parametri array Poiché il nome di un array rappresenta il suo indirizzo iniziale il tipo del parametro formale corrispondente deve essere un puntatore al tipo base dell array void ricerca ( const int *a, const int n, const int x, bool &trov, int &pos ); Si può usare la notazione equivalente int nome[] per mettere in risalto che il parametro effettivo deve essere l indirizzo di un array void ricerca ( const int a[], const int n, const int x, bool &trov, int &pos );

Parametri array main () { int n, x, i, L[M]; bool pres;... ricerca(l, n, x, pres, i);... n : 2 x : 3 i :? pres :? L[0] : 1 L[1] : 3 (al momento della chiamata) void ricerca ( int a[], int n, int x, bool &trov, int &pos ) { int i; trov = false; i = 0; while ( (i<n) &&!(trov) ) if ( x == a[i] ) trov = true; else i++; pos = i; di ricerca L[2] :?... L[M-1]:? chiamata a : n : 2 x : 3 trov : pos : flag : 1 i : 1 ritorno n : 2 x : 3 i : 1 pres : 1 L[0] : 1 L[1] : 3 L[2] :?... L[M-1]:? (al momento del ritorno)

Esempio Riceve in ingresso una lista di numeri e la ricopia in uscita eliminando i doppioni inizializza (lista,len) a lista vuota ; cin >> n; for ( i=0; i<n; i++ ) { cin >> x; if ( (lista,len) non contiene x ) { aggiungi x a (lista,len); cout << x;

Esercizio void init_vuota ( int *lista, int &len ); /* inizializza (lista,len) a lista vuota */ void ricerca ( const int *lista, const int len, const int x, bool &trov ); /* trov = (lista,len) contiene x */ void aggiungi ( int *lista, int &len, const int x ); /* aggiunge x a (lista,len) */ init_vuota(lista,len); cin >> n; for ( i=0; i<n; i++ ) { cin >> x; ricerca(lista,len,x,presente); if (!presente ) { aggiungi(lista,len,x); cout << x;

Soluzione senza i sottoprogrammi /* inizializza (lista,len) a lista vuota */ len = 0; cin >> n; for ( i=0; i<n; i++ ) { cin >> x; /* presente = (lista,len) contiene x */ presente = false; j = 0; while ( (j<len) &&!presente ) if ( x == lista[j] ) presente = true; else j++; if (!presente ) { /* aggiunge x a (lista,len) */ lista[len] = x; len++; cout << x;