Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

INFORMATICA Altre Istruzioni di I/O
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
Sottoprogrammi: funzioni e procedure
Uso avanzato di C.
Puntatori in C e C++.
Procedure e funzioni A. Ferrari.
Procedure e funzioni In linguaggio C.
LE FUNZIONI IN C Sommario 1 Introduzione 2 Moduli di programma in C
PUNTATORI Introduzione
Introduzione al linguaggio C
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Anno accademico Array e puntatori in C.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
FUNZIONI DI BIBLIOTECA
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Caratteri e stringhe di caratteri
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
Funzioni definite dall’utente
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.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
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.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Algebra Lineare Esercizi assegnati.
Le funzioni.
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.
Linguaggi di programmazione: funzioni Le funzioni richiedono un numero fisso o variabile di argomenti, ovvero valori che devono essere passati alla funzione.
Programmazione di Calcolatori
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Programmazione di Calcolatori
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Lo sviluppo top down Le funzioni
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XVIII Le matrici Programmazione di Calcolatori: le matrici 1.
Passaggio di parametri per indirizzo
C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1.
Programmazione di Calcolatori
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
Complessità di un algoritmo
1 Esempi domande di esame. 2 Dato il seguente programma #include int main(){ int *p,j=9,i=5; p=&j; *p=i; printf("%d %d %d\n", i,j,*p); scanf("%d",p);/*
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.
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
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 B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
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.
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.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Il linguaggio C Puntatori e dintorni.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Laboratorio di Linguaggi... altre D O M A N D E ! Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Copyright © Istituto Italiano Edizioni Atlas
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.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1

Problema: scrivere una funzione che calcoli la potenza n-ma di un numero intero m e una funzione main che la utilizzi

#include #include /* dichiarazione della funzione power */ int power(int base, int n); main()‏{ int i, potenza; for(i=0 ; i < 10 ; i++){ potenza = power(2,i); printf("%d %d \n", i, potenza); } } /* funzione potenza */ int power(int base, int n)‏ { int i, p=1; for (i=1 ; i <=n ; i++) p=p*base; return p; }

STRUTTURA DI UNA FUNZIONE La prima linea della funzione power è la definizione della funzione: int power (int base, int n) tipo del valore che nome della tipo e nome la funzione ritorna funzione dei parametri Con l'istruzione return p il valore di p è mandato di ritorno alla funzione chiamante main() attraverso il nome della funzione

L'istruzione, prima di main(), int power(int m, int n); è la dichiarazione della funzione (o prototipo) specifica il tipo del valore di ritorno, il tipo ed il nome degli argomenti La dichiarazione di una funzione deve concordare con la sua definizione. CHIAMATA DELLA FUNZIONE: potenza = power(2,i);

Problema: scambia i valori di due variabili #include #include int scambio(float x, float y); int scambio(float x, float y); /* funzione main */ main() { float a, b; float a, b; a=3; b=5; a=3; b=5; scambio(a,b); scambio(a,b); printf("a=%f b=%f \n", a, b); printf("a=%f b=%f \n", a, b);} /* funzione scambio */ int scambio(float x, float y) { float t; float t; t=x; x=y; y=t; t=x; x=y; y=t; return 0; } return 0; }

L'esecuzione del precedente programma non dà il risultato atteso. Si ottiene infatti: a=3 b=5 Perchè? Nel linguaggio C tutti gli argomenti di una funzione sono passati per VALORE Le funzioni non possono alterare il valore degli argomenti nella funzione chiamante main()‏ Come risolvere il problema ?

PUNTATORI…p … x … memoria memoria p è un puntatore alla variabile x CIOE' p è una variabile che contiene l'indirizzo della variabile x L'istruzione p = &x ; assegna l'indirizzo di x alla variabile puntatore p ( p punta a x )‏ L'operatore unario * applicato ad una variabile puntatore restituisce il contenuto della variabile puntata: *p è il contenuto dell’area di memoria puntata da p, cioè nel nostro esempio il valore di x

Una variabile puntatore deve essere dichiarata Ad esempio: int *p; p è una variabile puntatore ad una locazione di memoria di tipo intero ESEMPIO: int x; /* dichiarazione della variabile x */ int *p; /* dichiarazione del puntatore p */ p=&x; /* assegnazione a p dell'indirizzo di x */ *p=3;/* assegnazione al contenuto di p del valore 3*/ nomi p x indirizzi …52…3…

Esempio: int x=1, y=2, z[10]; int *p; /* dichiarazione del puntatore p */ p = &x; /* p ora punta a x */ y = *p; /* y ora vale 1 */ *p = 0; /* x ora vale 0 */ p = &z[0]; /* p ora punta a z[0] */ p = &z[0]; /* p ora punta a z[0] */ I puntatori possono apparire nelle espressioni, ad esempio: int x,y, *p; p=&x; y = *p +1; /* equivale a y = x+1; */ *p += 1; /* equivale a x = x+1; */ *p = 10; /* equivale a x=10; */ Se q è un altro puntatore ad una variabile intera, l'istruzione Se q è un altro puntatore ad una variabile intera, l'istruzione q = p; copia il contenuto di p in q, cioè q punta alla stessa variabile a cui punta p

Soluzione del problema dello scambio di variabili: utilizzo dei puntatori Soluzione del problema dello scambio di variabili: utilizzo dei puntatori Funzione: Funzione: void scambio (float *px, float *py) { float temp; temp = *px; temp = *px; *px = *py; *py = temp; } Chiamata alla funzione: scambio(&a, &b);

Problema: Prodotto matrice-vettore #include #include main()‏{ float a[8][8],b[8],c[8]; int i,j,n; scanf ("%d", &n); for (i=0; i<n; i++){ scanf ("%f", &b[i]); for (j=0; j<n; j++) { scanf ("%f", &a[i][j]); }} for (i=0; i<n; i++){ c[i]=0.; for (j=0; j<n; j++){ c[i]=c[i]+a[i][j]*b[j];} printf ("%f\n", c[i]); }}

Esiste una stretta relazione tra array e variabili puntatore int a[10]; int *pa; pa = &a[0]; pa pa+1 pa+2 pa+1 è l'indirizzo di a[1] … *(pa+1) è il contenuto di a[1] pa+i è l'indirizzo di a[i] … *(pa+i) è il contenuto di a[i] a[9]…a[1]a[0] a a[9]…a[1]a[0] a

PER DEFINIZIONE il nome di un array è l'indirizzo del primo elemento dell'array Ad esempio: int a[10], *pa; a[i] ⇔ *(a+i) &a[i] ⇔ a+i pa = &a[0]; ⇔ pa = a; *(pa+i) ⇔ pa[i]

MA un puntatore è una variabile, il nome di un array è una costante LE ISTRUZIONI pa=a; pa++; SONO CONSENTITE a=pa; a++; NON SONO CONSENTITE

Se il nome di un array è passato come argomento ad una funzione, in realtà è passato l'indirizzo del primo elemento dell'array Esempio: main()‏ { int a[3]; ∶ fun(a); ∶ } Il prototipo della funzione può essere del tipo: int fun(int arr[3]); oppure int fun(int arr[]); oppure int fun(int *arr);

Somma di due vettori I versione (senza puntatori)‏ #include main()‏ { float a[10],b[10],c[10]; int i,n; scanf("%d",&n); for(i=0;i<n;i++)‏ scanf("%f %f",&a[i],&b[i]); for(i=0;i<n;i++)‏ { c[i]=a[i]+b[i]; printf("%f\n",c[i]); }

Somma di due vettori II versione (con puntatori)‏ #include main()‏ { float a[10],b[10],c[10]; int i,n; scanf("%d",&n); for(i=0;i<n;i++)‏ scanf("%f %f",a+i,b+i); for(i=0;i<n;i++)‏ { *(c+i)=*(a+i)+*(b+i); printf("%f\n",*(c+i)); }

F I N E