Le funzioni.

Slides:



Advertisements
Presentazioni simili
Esercitazioni If nidificati
Advertisements

Sottoprogrammi: funzioni e procedure
Preincremento e PostIncremento in C++
Puntatori in C e C++.
Code::Blocks Ambiente di sviluppo.
Iterazione while – do while - for.
Code::Blocks Ambiente di sviluppo.
Struttura di un programma
Linguaggio C++ Operatori – numeri pseudocasuali - costanti.
Numeri casuali.
Procedure e funzioni In linguaggio C.
Introduzione ad Array e Funzioni 2IC/2ID – a. s.2012/13.
Generazione di numeri casuali in Dev C++
I DATI LE ISTRUZIONI LE STRUTTURE FONDAMENTALI
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F3 Iterazione.
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Concetti di base: header file, funzione main(),set caratteri C++, token, operatori, espressioni etc. Flusso di controllo, cicli, costrutti.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
TERNE PITAGORICHE Obiettivi dell’esercitazione
Programmazione Procedurale in Linguaggio C++
1 Il nostro esempio guida: La costruzione di uno stack.
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Costruzione di Interfacce Lezione 12 C++STL
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II
Introduzione agli stream e alle classi
Array Un array è una collezione in sequenza di variabili del medesimo tipo Riferimento con un nome comune Nome_studente1 Nome_studente2. Nome_studenteN.
Funzioni di Libreria per le stringhe DICHIARAZIONI CONTENUTE NEL FILE: char *strcpy( char *dest, const char *sorg ); Copia sorg in dest, incluso il carattere.
9) If e else. Lab.Calc.I AA2002/03 - cap.92 espressione.
Istruzioni di selezione (If/else/switch)
1 laboratorio di calcolo II AA 2003/04 terza settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Il main program Ogni programma in C++, per essere eseguibile, deve contenere una funzione main() da cui l’esecuzione comincerà main() deve avere un tipo.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Crivello Di Eratostene (fonte wikipedia
Equazione di secondo grado.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
void binario(int n); …………………
Creazione progetto in C++/DEV
Puntatori e gestione dinamica della memoria
Lo sviluppo top down Le funzioni
Passaggio di parametri per indirizzo
Corso di Programmazione Grafica e Laboratorio Daniele Marini
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Dato un vettore di reali di dimensione DIM, si inseriscano N elementi presi da tastiera, si utilizzi 0 per terminare l’inserimento. Ordinare gli elementi.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II
Procedure e funzioni In linguaggio C.
Scrivere e compilare programmi
L’ordinamento per Selezione seleziona l’elemento con valore maggiore e lo scambia con il primo elemento del vettore. Tra gli N-1 elementi rimanenti viene.
C++:Strutture di Controllo
Copyright © Istituto Italiano Edizioni Atlas
Files in C++ Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera)
LA CLASSE STRING Videmus nunc per speculum et in aenigmate
C/C++.
Strutture classi e oggetti
L’AMBIENTE CODE BLOCKS E L’IO
Struttura di un programma
Struttura di un programma
Operatori – numeri pseudocasuali - costanti
Passaggio di parametri per indirizzo
Programmazione Procedurale
Transcript della presentazione:

Le funzioni

Cosa fa questo programma? #include <iostream> #include <cmath> using namespace std; int x; float y; int main() { x=rand(); y=sqrt(x); cout<<y; system(“pause”); return EXIT_SUCCESS; }

Le istruzione rand(), sqrt(x); system(“pause”); prendono il nome di : Chiamata a sottoprogramma Esse sono sottoprogrammi, messi a disposizione dalla librerie . Ma noi possiamo definire dei nostri sottoprogrammi? La risposta è si Vediamo come:

Progettare un sottoprogramma Innanzitutto i sottoprogrammi si dividono in Procedure Funzioni Differenze? Le funzioni sono dei sottoprogrammi che restituiscono al codice chiamante un valore Le procedure sono sottoprogrammi le cui istruzioni sono manipolazione di dati che non restituiscono nessun valore. Il valore indefinito in C++ prende il nome di void system è una procedura Rand sqrt sono funzioni

Progettare una procedura Vogliamo disegnare una rettanglo di asterischi. le attribuiremo il nome rettangolo Quando si progetta una procedura si parte dalla sua definizione: La definizione è composta dall’intestazione e dal corpo

Progettare una procedura Intestazione L’intestazione è composta da <tipo_restituito> <nome_sottoprogramma>( ); Esempi void linea( ); è la procedura che disegna una linea di asterichi che occupa una riga void rettangolo(int r, int c); è la procedura che disegna un rettangolo di asterischi dove r indica il numero di righe e c il numero di colonne che la compongono la prima è una procedura senza parametri l’altra ha i parametri.

Progettare una procedura Intestazione I parametri sono quelle variabili che mi permettono di effettuare le stesse operazioni su valori differenti Quando non ho questa esigenza non metto i parametri

Progettare una procedura Intestazione Quando necessito dei parametri devo indicare il tipo e il nome Il numero dei parametri è opzionale da 0 a n Seguendo la seguente sintassi <tipo_restituito> <nome_sottoprogramma>(<tipo_parametro> <nome_parametro>, <tipo_parametro> <nome_parametro>, .. <tipo_parametro> <nome_parametro>) La nostra procedura avrà la seguente intestazione void rettangolo ( int r, int c);

Progettare una procedura Il corpo È quella parte del codice racchiuso tra parentesi graffe che descrive le istruzioni che la procedura esegue e che ha come ultima istruzione return ; In questo caso seguito da nessun valore perché le procedure restituiscono il tipo void altrimenti return dovrà essere seguito da un valore dello stesso tipo restituito dalla funzione Ad esempio il main essendo di tipo int alla fine contiene l’istruzione return 0; Dove 0 è un valore intero

Progettare una procedura La definizione della nostra procedura sarà la seguente void rettangolo ( int r, int c){ for (int i=0;i<r;i++){ for (int j=0;j<c;j++) cout<<‘*’; cout<<endl; } return ;

All’ interno del codice dove va scritta? Subito dopo la fine del main Ma se richiamo il sottoprogramma come siamo abituati a fare nel main e non è un sottoprogramma di libreria il compilatore quando giunge alla riga del richiamo del sottoprogramma dà errore di identificatore non dichiarato come si risolve? Prima del main si inserisce il prototipo

Progettare una procedura Il prototipo È la linea di codice che va inserita prima del main uguale alla definizione seguito dal punto e virgola Indica al compilatore le proprietà del sottoprogramma quali: Tipo restituito Nome Eventuali parametri void rettangolo(int r, int c); Vediamo il programma completo che usa la nostra procedura

#include <iostream> using namespace std; void rettangolo(int r, int c); int main() { int x,y; rettangolo (20,50); cout<<“inserire il numero delle righe e delle colonne”; cin>>x>>y; rettangolo(x,y); system(“pause”); return EXIT_SUCCESS; } void rettangolo ( int r, int c){ for (int i=0;i<r;i++){ for (int j=0;j<c;j++) cout<<‘*’; cout<<endl; } return ;

Costruiamo la funzione fattoriale La funzione fattoriale, come qualsiasi funzione matematica restituisce un valore per un certo parametro di ingresso Vediamo la sua definizione: int fattoriale(int n){ int f=1; for (int i=2;i<=n;i++) f=f*i; return f; }

Costruiamo la funzione primo La funzione ci dice se un certo numero passato come parametro alla funzione è primo o no Vediamo la sua definizione: bool primo (int x){ int i=2; while(x%i!=0) i++; if (x==1||i==x) return true; else return false; }

Esercizio Realizzare il programma di consegna per oggi facendo uso di sottoprogrammi

Esercizio Scrivere un programma C++ che permette di scegliere una delle seguenti funzionalità Visualizzare i primi n numeri Visualizzare i primi n numeri pari Visualizzare i primi n numeri dispari Visualizzare i primi n numeri primi Visualizzare i primi n numeri della serie di Fibonacci Dato in input n calcolare n! Dato in input n stampare le prime n righe del triangolo di Tartaglia Indicazioni e suggerimenti per lo svolgimento Nelle pagine successive

Indicazioni Il programma deve essere realizzato con l’uso di: Selezione multipla e deve contenere un ciclo continuo fino a quando l’utente decide di uscire dal programma Ogni caso di scelta deve essere realizzato con un sottoprogramma Ogni caso deve essere realizzato con il ciclo for

Suggerimenti Serie di Fibonacci 0 1 1 2 3 5 8 13…… n! è il fattoriale di n esso assume i seguenti valori se n=0 fatt(n)=1 Altrimenti fatt(n(= n*n-1*n-2* *2*1 cioè è il prodotto dei numeri da 1 a n Triangolo di Tartaglia Ogni elemento è dato da j!/(k!*(j-k)! Con J che va da 0 a n dove n è il numero delle righe e k va da 0 a j

#include <cstdlib> #include <iostream> using namespace std; float x,y; void scambia(float a, float b); Int main () { cin>>x; cin>>y; scambia (x,y); cout<<“i valori di x e y sono “<<x<<“ “<<y<< endl; system("PAUSE"); return EXIT_SUCCESS; } void scambia(float a, float b) { float app; app=a; a=b; b=app; return; Cosa fa questo programma? Provate a ricopiare questo programma e verificate quanto avete dichiarato

Perché le variabili non sono scambiate? Non è un errore di algoritmo E’ una questione di parametri Alla procedura scambia vengono passati dei parametri per valore Questo vuol dire che quando viene eseguita la procedura essa viene corredata della copia dei valori contenuti nei parametri x,y che sono le effettive variabili su cui viene eseguito lo scambio. Cioè la x e la y del main e quelle della procedura puntano a due celle di memoria differenti pertanto le modifiche apportate alle celle puntate dalle variabili della procedura non sono riportate anche sulle altre e tali modifiche alla chiusura della procedura vengono perse Come si risolve questo problema?

Quando si vuole che le variabili passate come parametri devono conservare le modifiche effettuate dalla procedura occorre anteporre al nome del parametro la & In questo modo la variabile viene passata per indirizzo e quindi sia le variabili del main che quella passata come parametro alla procedura o funzione puntano alla stessa cella di memoria Il prototipo di scambia diventa void scambia(float &a, float &b);

#include <cstdlib> #include <iostream> using namespace std; float x,y; void scambia(float &a, float &b); Int main () { cin>>x;; cin>>y; scambia (x,y); cout<<“i valori di x e y sono “<<x<<“ “<<y<< endl; system("PAUSE"); return EXIT_SUCCESS; } void scambia(float &a, float &b) { float app; app=a; a=b; b=app; return; X e y sono parametri attuali a e b sono detti parametri formali e quando sono accompagnati con la & essi sono passati per indirizzo cioè si punta alla stessa cella di memoria della variabile che viene passata al momento del richiamo. In questo modo conserva le modifi che

void acquisisciraggio(float &r ) {do{ cout<<"inserire il raggio deve essere tale che non superi il valore 100 "; cin>>r; } while (r<0 || r>100); return; } Questo codice permette di inserire un raggio con controllo sul suo valore Il suo richiamo nel main sarà: int main(){ float r; acquisisciraggio( r); cout<< “la circonferenza è “<<2*r*3.14; return 0; Posso realizzare la stessa funzionalità con una funzione?

float acquisisciraggio() { float r; { cout<<"inserire il raggio deve essere tale che non superi il valore 100 "; cin>>r; } while (r<0 || r>100); return r; } In questo caso cambia il modo di richiamare il programma ad esempio : int main(){ float r=acquisisciraggio( ); cout<< “la circonferenza è “<<2*r*3.14; return 0;

void acquisiscilatitriangolo(int &x, int &y , int &z) { do{ cout<<"inserire un valore positivo cin>>x; } while (x<0 ); cin>>y; } while (y<0 ); cin>>z; } while (z<0 ); return; } Questa procedura permette l’acquisizione delle coordinate con cotrollo. Posso trasformarla in funzione?

int acquisiscilatitriangolo(int &x, int &y , int &z) { do{ cout<<"inserire un valore positivo cin>>x; } while (x<0 ); cin>>y; } while (y<0 ); cin>>z; } while (z<0 ); return 0; } Questa volta devo lasciare i parametri perché i lati sono tre e le funzioni restituiscono un solo valore ma essa è comunque una funzione che però deve essere richiamata come una procedura e non come una funzione.