Passaggio di parametri per indirizzo

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Funzioni In C++ le funzioni sono caratterizzate da un nome, dal tipo della variabile ritornata e da una lista di parametri (opzionali) La lista dei parametri.
Esercitazioni If nidificati
Sottoprogrammi: funzioni e procedure
Preincremento e PostIncremento in C++
Puntatori in C e C++.
Struttura di un programma
Linguaggio C++ Operatori – numeri pseudocasuali - costanti.
Numeri casuali.
Introduzione ad Array e Funzioni 2IC/2ID – a. s.2012/13.
PUNTATORI Introduzione
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Le funzioni.
Fondamenti di Informatica Prof. Cantone
Algoritmi in C++ (1) da completare
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Ambito delle variabili
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
9) If e else. Lab.Calc.I AA2002/03 - cap.92 espressione.
Istruzioni di selezione (If/else/switch)
Lab. Calc. AA 2005/061 puntatori. Lab. Calc. AA 2005/062 Attributi di un oggetto nome o identificatore; tipo o classe; valore o valori; indirizzo;
1 laboratorio di calcolo II AA 2003/04 terza settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 laboratorio di calcolo II AA 2003/04 seconda settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Le funzioni.
Algoritmi e Programmazione Avanzata
Lezione IX Laboratorio di Programmazione. Le Classi Una classe C++ è definita come segue: class Nomeclasse { private: // metodi e attrib. visibili solo.
AN Fondam98 Puntatori Azioni e procedure Assegnamenti, indirizzi e puntatori.
PUNTATORI Un puntatore è una variabile destinata a contenere lindirizzo di unaltra variabile Vincolo di tipo: un puntatore a T può contenere solo lindirizzo.
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++
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
void binario(int n); …………………
Lordinamento di tre numeri interi. acquisisci a,b,c (a > b) AND (a > c)(b > a) AND (b > c) (c > a) AND (c > b) Scrivi c,b,aScrivi b,c,aScrivi c,a,bScrivi.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Puntatori e gestione dinamica della memoria
Unità Didattica 3 Linguaggio C
Lo sviluppo top down Le funzioni
Ricerca sequenziale in un array di interi
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Template.
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Il linguaggio C Puntatori e dintorni. 2 Puntatori : idea di base In C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata.
Sottoprogrammi e funzioni
CORSO DI PROGRAMMAZIONE II
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
FUNZIONI: IL MODELLO A RUN-TIME 1) creazione di una nuova attivazione (istanza) del servitore 2) allocazione di memoria per i parametri e per le variabili.
Esercizi.
Copyright © Istituto Italiano Edizioni Atlas
Corso di Laurea in Informatica Architettura degli elaboratori a.a Programmazione Assembly: procedure (1) Supporto hardware alle procedure Passaggio.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2015.
Puntatori in C Un puntatore è una variabile che contiene un indirizzo di memoria. Quando una variabile contiene l’indirizzo di un’altra variabile, si dice.
Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.
Programmazione e Laboratorio di Programmazione
Le stringhe in C++ Laboratorio 26 Aprile Dott. Serena Villata
Programmazione e Laboratorio di Programmazione
Passaggio di parametri per indirizzo
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

Passaggio di parametri per indirizzo 29/03/2017 Funzioni in C++ Passaggio di parametri per indirizzo

Passaggio di parametri per indirizzo Il passaggio di parametri per indirizzo (o per riferimento) passa alla funzione l’indirizzo di memoria del parametro anziché il valore. Non ci sono quindi variabili distinte, una nel main ed una nella funzione, ma la funzione opera sulla stessa area di memoria del main. Data la variabile intera A per sapere qual è l’indirizzo di memoria di A si usa l’operatore &. Osserviamo le istruzioni seguenti: int A; A=5; cout <<“A vale ”<<A <<endl; cout <<“L’indirizzo di A vale ”<<&A<<endl; Sullo schermo viene prodotto: A vale 5 L’indirizzo di A vale 0x28ff44 Che significa che la variabile A è allocata all’indirizzo di memoria 28ff44 che è espresso in base 16 (0x) 28ff44 A 5

Passaggio di parametri per indirizzo Vediamo il seguente esempio in cui la funzione “aggiungi” aggiunge 1 ai due parametri ricevuti. Il primo parametro viene passato per valore il secondo per indirizzo. void aggiungi(int, int &); int main() { int a,b; a=0; b=5; aggiungi(a, b); cout<<“nel main a vale”<<a; cout<<“nel main b vale”<<b; } void aggiungi(int x, int &y) {x++; y++; cout<<“nella funzione x vale”<<x; cout<<“nella funzione y vale”<<y; RAM MAIN FUNZIONE a b x y / / 5 6 1 Schermo nella funzione: x vale 1 nella funzione: y vale 6 nel main: a vale 0 nel main: b vale 6

Passaggio di parametri per valore /* Scambio del valore di due variabili mediante valore */ #include <iostream> using namespace std; /* Scambio riceve due parametri di tipo float */ void Scambio(float , float ); // prototipo int main() { float var1 = 3.14, var2 = 1.41; // variabili locali cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl; // A Scambio sono passati i valori contenuti in var1 e var2 Scambio (var1, var2); // chiamata di funzione cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << endl; } // Funzione Scambio che effettua lo scambio void Scambio(float x, float y) float temp = x; x = y; y = temp; RAM MAIN FUNZIONE var1 var2 x y temp / / 3.14 1.41 3.14 1.41 3.14 1.41 3.14 Schermo Prima dello scambio....: var1 = 3.14 var2 = 1.41 Dopo lo scambio....: var1 = 3.14 var2 = 1.41

Passaggio di parametri per indirizzo /* Scambio del valore di due variabili mediante indirizzo */ #include <iostream> using namespace std; /* Scambio riceve due reference a variabili di tipo float */ void Scambio(float &, float &); // prototipo int main() { float var1 = 3.14, var2 = 1.41; // variabili locali cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl; // A Scambio sono passati gli indirizzi a var1 e var2 Scambio (var1, var2); // chiamata di funzione cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << endl; } // Funzione Scambio che effettua lo scambio void Scambio(float &x, float &y) float temp = x; x = y; y = temp; RAM MAIN FUNZIONE var1 var2 x y temp / / 3.14 1.41 3.14 1.41 3.14 Schermo Prima dello scambio....: var1 = 3.14 var2 = 1.41 Dopo lo scambio....: var1 = 1.41 var2 = 3.14

Passaggio di parametri con i vettori Nel caso dei vettori l’indirizzo di memoria in cui il vettore è allocato è indicato con il nome del vettore. Nel caso dei vettori il passaggio di parametri per indirizzo è l’unico utilizzabile

ESERCIZIO: diagramma di struttura Risolviamo il seguente problema: Date le altezze di 30 alunni di una classe, calcolare l’altezza media e stabilire quanti sono gli alunni che superano la media Altezze degli alunni di una classe Contare quanti alunni superano la media Inserire le altezze in un vettore Calcolare la media delle altezze

SOLUZIONE ESERCIZIO: programma // prototipi delle funzioni void inserisci(int v[],int); float calcolamedia(int v[],int); void contaaltezze(int v[],int,float); int main() { int const max=30; int vett[max]; float media; inserisci(vett,max); media=calcolamedia(vett,max); contaaltezze(vett,max,media); } void inserisci(int v[],int dim) // carico il vettore for (int i=0;i<dim;i++) {cout<<"\ndigita un elemento del vettore "; cin>>v[i]; float calcolamedia(int v[],int dim) //calcolo la media {float s,m; for (int i=0;i<dim;i++) s=s+v[i]; m=s/dim; cout<<"\nla media e' "<<m; return m; } void contaaltezze(int v[],int dim,float m) //calcolo le altezze {int conta=0; { if (v[i]>m) conta++; cout<<"\ngli alunni che superano la media sono "<<conta;