Un esempio: Calcolo della potenza n-esima di un numero reale

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Sottoprogrammi: funzioni e procedure
Scomposizione funzionale
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Linguaggi algoritmici
Iterazione A. Ferrari.
Selezione A. Ferrari.
Procedure e funzioni A. Ferrari.
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.
LE FUNZIONI IN C Sommario 1 Introduzione 2 Moduli di programma in C
I DATI LE ISTRUZIONI LE STRUTTURE FONDAMENTALI
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
Informatica Generale Susanna Pelagatti
3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)
Introduzione al linguaggio C
esponente del radicando
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Iterazione enumerativa (for)
Funzioni definite dall’utente
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
Corso di Informatica (Programmazione)
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
memoria gestita staticamente:
Le funzioni.
Espressioni condizionali
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Linguaggio C++ Fondamenti Un primo semplice esempio:
Sistemi e Tecnologie Informatiche Requisiti per la realizzazione di un buon programma.
Lo sviluppo top down Le funzioni
BIOINFO3 - Lezione 321 ACCESSO REMOTO AL SERVER SIBILLA Attraverso Internet è possibile accedere al server sibilla.cribi.unipd.it. Potrete così effettuare.
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 5 (Deitel) Le funzioni Indice degli argomenti Introduzione Moduli nei programmi C 5.3.
Capitolo 4 (Deitel) Le strutture di controllo in C
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
Array (ordinamento) CORDA – Informatica A. Ferrari.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
Una "vera" classe.. ..un esempio pratico: la calcolatrice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 3 Aprile 2015.
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting.
La ricorsione.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Sottoprogrammi e funzioni
Intelligenza Artificiale Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Algoritmi.
Concetti Fondamentali sulla Programmazione
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
L’ELABORATORE ELETTRONICO uno strumento in grado di eseguire insiemi di azioni (“mosse”) elementari le azioni vengono eseguite su oggetti (dati) per produrre.
Informatica e Informatica di Base
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Problemi, algoritmi e programmazione
Complessità Computazionale
Sistemi e Tecnologie Informatiche Complessità di calcolo.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
Informatica Problemi e algoritmi. una situazione che pone delle domande cui si devono dare risposte. Col termine problema o situazione problematica s’indica.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2016.
Dal problema al programma – ciclo di sviluppo del software La scrittura del programma è solo una delle fasi del processo di sviluppo di un'applicazione.
Unità di apprendimento 6
Metodi in Java. Note Identificazione input: (il raggio è un numero reale !!!) Identificazione delle operazioni necessarie al calcolo Area=r*r*PI Circonferenza=2*r*PI.
Dal PROBLEMA all’ALGORITMO
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Transcript della presentazione:

Un esempio: Calcolo della potenza n-esima di un numero reale Linguaggio C++ Funzioni Un esempio: Calcolo della potenza n-esima di un numero reale

Nella fase d’implementazione di un programma, come nella fase di analisi del problema, è consigliabile suddividere il codice in tante parti, ciascuna delle quali risolve un particolare aspetto del problema. Tali parti, in C++, prendono il nome di funzioni

La loro struttura è del tutto simile a quella già vista per il main: un insieme di dati e istruzioni, racchiusi tra parentesi graffe cui è associato un nome e che ritorna un valore. Al momento del runtime, il nome della funzione scritto all’interno di un segmento di programma, provoca l’esecuzione dell’insieme d’istruzioni associato

Per affrontare il tema delle funzioni si analizza, come pretesto, il problema del calcolo della potenza intera di un numero reale supponendo di coinvolgere nella sua risoluzione più gruppi di persone. Si vedrà come l’uso delle funzioni semplifichi questo compito, permettendo altresì di scrivere il programma in un formato più leggibile, compatto ed elegante

Analisi del problema Si desidera scrivere un programma che calcoli la potenza n-esima di un numero reale x: con n intero, positivo o negativo

La prima versione dell’algoritmo risolutivo è ancora molto semplice: Potenza di un numero reale { Acquisisci il valore di x e di n Calcola la potenza Comunica il risultato }

Evidenziati gli aspetti fondamentali del problema (top), si procede scomponendoli in fasi più semplici, fino ad arrivare a una forma non più divisibile (down). Se l’esempio proposto facesse realmente parte di un grande progetto, alcuni componenti del gruppo di lavoro potrebbero non conoscerne i dettagli. Ognuno di loro, o in piccoli gruppi, si occuperà di una fase cercando di sfruttare al meglio le proprie competenze specifiche

Gli algoritmi rappresentati di seguito potrebbero costituire un primo esempio di tale lavoro: Acquisisci il valore di x e di n si occupa di acquisire dalla tastiera il valore della base x e dell’esponente n e non necessita di ulteriori scomposizioni

L’algoritmo Calcola la potenza si occupa di calcolare il valore della potenza n-esima di x tenendo conto che se n è negativo la potenza è data dal reciproco della potenza (positiva) di x:

Sviluppando il blocco Calcola la potenza si ottiene: { SE (n >= 0) esponente  n ALTRIMENTI { esponente  –n Calcola la potenza positiva SE (n < 0) potenza  1 / potenza }

Come si nota, nella fase di scomposizione di questo algoritmo è stato necessario ricorrere ad un’altro algoritmo, Calcola la potenza positiva, che calcolerà il valore della potenza n-esima (positiva) di x. In linguaggio di programmazione, questa scelta “naturale” si tradurrà nella chiamata della funzione specializzata in questo compito

L’algoritmo Calcola la potenza positiva moltiplica x per sé stessa per esponente – 1 volte, ovvero eleva x a esponente: Calcola la potenza positiva { potenza  1 numeroVolte  1 FINCHÉ (numeroVolte <= esponente) { potenza  potenza · x numeroVolte  numeroVolte + 1 } Se esponente è 0 non viene effettuata nessuna moltiplicazione perché x0 vale 1

L’algoritmo Comunica il risultato ha il compito di comunicare il valore del polinomio. La comunicazione può avvenire presentando il valore sullo schermo, stampandolo, scrivendolo su un file o inviandolo a un’altra periferica d’uscita. In questo esempio si suppone di visualizzarlo sullo schermo. Non sono quindi necessarie ulteriori scomposizioni

Nella fase di trasformazione del programma in C++ questi algoritmi, tranne Acquisisci il valore di x e di n, sono stati scritti sottoforma di funzione. Sì è così ottenuto un programma il cui main ha la stessa chiarezza e semplicità di lettura dell’algoritmo di base

/* Programma per il calcolo della potenza intera di un numero reale. Versione con uso di funzioni */ #include <iostream> using namespace std; double x, potenza; // di x elevata a n int n, esponente; // esponente ed esponente assoluto int numeroVolte; // variabile di ciclo char op; // carattere di separazione tra x e n

// Funzione che calcola x elevata a esponente void CalcolaPotenzaPositiva() { potenza = 1; // Inizializza la variabile accumulatore for(numeroVolte = 1; numeroVolte <= esponente; numeroVolte++) potenza *= x; // potenza = potenza * x }

// Funzione che calcola x elevata a n void CalcolaPotenza() { // in esponente va il valore assoluto di n if (n >= 0) esponente = n; else esponente = -n; CalcolaPotenzaPositiva(); // Chiamata di funzione // se n è negativo calcola il reciproco if (n < 0) potenza = 1 / potenza; }

void ComunicaRisultato() { cout << "Il valore della potenza e': “ << potenza << endl; } // Funzione principale del programma int main() // Acquisisci il valore della x e di n cout << "Scrivi la potenza da calcolare ” "nel formato x^n: "; cin >> x >> op >> n; CalcolaPotenza(); // Chiamata di funzione ComunicaRisultato(); // Chiamata di funzione

Si osservi come la struttura delle funzioni utilizzate dal programma sia simile a quella della funzione principale main. Ognuna di esse, infatti, costituisce un vero e proprio sottoprogramma, che sarà eseguito quando richiesto

Definizione e chiamata di una funzione Ogni funzione è costituita da un’intestazione, in cui è indicato il nome, e da un corpo dove, tra parentesi graffe, sono racchiuse le istruzioni che dovranno essere eseguite quando la funzione verrà chiamata

Tale struttura prende il nome di definizione di funzione intestazione NomeFunzione() { ... } corpo Tale struttura prende il nome di definizione di funzione

Questa istruzione prende il nome di chiamata di funzione Per fare in modo che le istruzioni del corpo della funzione siano eseguite è sufficiente scriverne il nome seguito dalle parentesi tonde () e dal carattere terminatore ; : NomeFunzione(); Questa istruzione prende il nome di chiamata di funzione

Esecuzione di un programma Ogni programma è comunemente costituito da numerose funzioni, ciascuna delle quali ha lo scopo di risolvere un determinato problema. Fra queste, ne esiste una di nome main che stabilisce il punto dal quale avrà inizio l’esecuzione del programma. Al main di solito è affidato il compito di controllare la sequenza del programma

Durante l’esecuzione di una chiamata di funzione, il controllo del programma passa alla prima istruzione del corpo della funzione. Terminata l’esecuzione del sottoprogramma, il controllo è restituito alla funzione chiamante che proseguirà eseguendo l’istruzione successiva alla chiamata di funzione

void CalcolaPotenza() { ... Funzione chiamante Funzione chiamata Chiamata di funzione int main() { ... CalcolaPotenza(); } void CalcolaPotenza() { ... }

Vantaggi nell’uso delle funzioni I principali vantaggi nell’uso delle funzioni si possono sintetizzare nei seguenti tre punti: 1. il raggruppamento di un certo numero di istruzioni sotto un unico nome aumenta la leggibilità del codice sorgente e ne può ridurre sia la dimensione sia il tempo necessario per scriverlo;

2. nel caso di problemi di complessità elevata, dove è richiesta la partecipazione di più persone allo sviluppo di un progetto, l’uso delle funzioni costituisce senz’altro l’organizzazione più produttiva, perché permette un’efficiente suddivisione del lavoro; 3. le funzioni rendono concreta l’analisi dei problemi con il procedimento top-down

È anche bene ricordare che una funzione può essere richiamata dall’interno di un’altra funzione (CalcolaPotenzaPositiva() è stata chiamata da CalcolaPotenza()). Inoltre, per utilizzare una funzione non è necessario conoscerne i dettagli

Per esempio, per ottenere il valore di xn è sufficiente sapere che occorre chiamare la funzione CalcolaPotenza() inizializzando opportunamente le sue variabili di ingresso x ed n e che, dopo la chiamata, il risultato sarà disponibile nella variabile di ritorno potenza

In questo modo nulla vieta a una funzione scritta per un programma di essere impiegata per realizzarne un altro: si possono così organizzare apposite librerie (sottoforma di file) dalle quali poi richiamare le funzioni che occorrono, senza la necessità di doverle riscrivere ogni volta

Questo espediente permette altresì di modificare il corpo di una funzione (per esempio per correggerla, renderla più efficiente o mutarne addirittura il comportamento) senza dover intervenire sul programma che la utilizza