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.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Introduzione al linguaggio C++
INFORMATICA Altre Istruzioni di I/O
Introduzione al linguaggio C
Puntatori in C e C++.
PUNTATORI Introduzione
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Introduzione al linguaggio C
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
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.
Funzioni definite dall’utente
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli.
Corso di Fondamenti di programmazione a.a.2009/2010
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di Programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso.
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.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
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.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
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.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
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.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Funzioni di Libreria per le stringhe DICHIARAZIONI CONTENUTE NEL FILE: char *strcpy( char *dest, const char *sorg ); Copia sorg in dest, incluso il carattere.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
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.
Dichiarazioni e tipi predefiniti nel linguaggio C
I File.
Le funzioni.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
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
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
Programmazione di Calcolatori
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 5 (Deitel) Le funzioni Indice degli argomenti Introduzione Moduli nei programmi C 5.3.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 7 (Deitel) I puntatori Sommario Introduzione Dichiarare e inizializzare i puntatori.
Complessità di un algoritmo
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
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.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 11 e 12 -
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Puntatori e Stringhe.
Il linguaggio C Puntatori e dintorni.
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
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.
Operatori di incremento e decremento
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2015.
Stringhe Una stringa è un vettore di char con un carattere costante \0 che indica la fine della stringa il terminatore rende differenti gli array di char.
Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.
Transcript della presentazione:

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 in Informatica Università degli Studi “La Sapienza” (lezioni 12-15) Puntatori e ricorsione

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007Puntatori I puntatori sono delle variabili che come valore contengono degli indirizzi di memoria int count;  count contiene un _valore_ intero int *countPtr;  La variabile countPtr contiene l’indirizzo di una locazione di memoria che contiene un valore intero countPtr Il nome di una variabile intera (es. count) fa direttamente riferimento ad un valore intero; Una variabile puntatore fa indirettamente riferimento ad un valore intero (deriferimento). Variabili di tipo puntatore devono essere dichiarate e inizializzate Es. int * countPtr; /*dichiarazoine*/ float * fcountPtr; countPtr = &count; /*inizializzazione*/ fcountPtr=NULL; /*NULL è una costante simbolica predefinita In molti file di intestazione incluso stdio.h. Se una variabile puntatore è inizializzata a NULL non punta ad alcuna locazione di memoria*/

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Operatore di indirizzo & (operatore unario di indirizzo) restituisce l’indirizzo di memoria associato al suo operando; int y=5; int *yPtr; yPtr=&y; 5 y 3200

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Operatore di indirizzo & (operatore unario di indirizzo) restituisce l’indirizzo di memoria associato al suo operando; int y=5; int *yPtr; yPtr=&y; 5 y 3200 Viene allocata memoria per la variabile puntatore yPtr. Nella locazione di yPtr viene memorizzato l’indirizzo di memoria associato alla variabile y yPtr 3200 & deve essere applicato ad una variabile. Non Può essere applicato a costanti, espressioni o a variabili dichiarate con la specifica di classe di memoria register

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Operatore di deriferimento L’operatore * (detto operatore di deriferimento o di risoluzione dell’indirizzo) consente di accedere al valore contenuto nella locazione di memoria puntata da una variabile puntatore

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Operatore di deriferimento L’operatore * (detto operatore di deriferimento o di risoluzione dell’indirizzo) consente di accedere al valore contenuto nella locazione di memoria puntata da una variabile puntatore 5 y 3200 yPtr 3200 *yPtr è il valore contenuto nella locazione di memoria il cui indirizzo è memorizzato in yPtr 5

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007Esempio La specifica di conversione %p di printf consente di stampare in output indirizzi di locazioni di memoria

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007Esempio

Precedenza degli operatori

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007

Chiamata per riferimento delle funzioni Come può essere realizzata in C? Se vogliamo poter modificare il contenuto di una variabile x con cui invochiamo una funzione e far sì che tali modifiche permangano anche all’uscita dalla funzione possiamo usare come parametro formale un puntatore (quindi passare lalla funzione l’indirizzo di x)… Un esempio..

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007Esempio /*eleva al cubo una variabile usando una chiamata per valore*/ #include #include int cubeByValue(int); main(){ int number =5; printf(“Il valore originale del numero è: %d\n”,number); number=cubeByValue(number); printf(“il nuovo valore del numero è: %d\n”,number); return 0; } int cubeByValue(int n) { return n*n*n; } Il valore originale del numero è: 5 Il nuovo valore del numero è: 125

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Cosa succede in memoria…

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Cosa succede in memoria…

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Cosa succede in memoria…

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Esempio 2 /*eleva al cubo una variabile usando una chiamata per riferimento*/ #include #include void cubeByReference(int *); main(){ int number =5; printf(“Il valore originale del numero è: %d\n”,number); cubeByReference(&number); printf(“il nuovo valore del numero è: %d\n”,number); return 0; } void cubeByReference(int *nPtr) {*nPtr=(*nPtr)*(*nPtr)*(*nPtr);} Il valore originale del numero è: 5 Il nuovo valore del numero è: 125

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Cosa succede in memoria… int number=5;cubeByReference(&number); 5 number 6200

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Cosa succede in memoria… int number=5;cubeByReference(&number); 5 number 6200 void cubeByReference(int *nPtr) {*nPtr=(*nPtr)*(*nPtr)*(*nPtr);} Invochiamo la funzione cubeByReference Viene allocata memoria per la variabile puntatore nPtr Viene copiato in nPtr il valore dell’argomento con cui è stata invocata la funzione  &number OVVERO l’indirizzo della locazione di memoria della variabile number OVVERO

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Cosa succede in memoria… int number=5;cubeByReference(&number); 5 number 6200 void cubeByReference(int *nPtr) {*nPtr=(*nPtr)*(*nPtr)*(*nPtr);} Invochiamo la funzione cubeByReference 6200 Si esegue l’istruzione*nPtr=(*nPtr)*(*nPtr)*(*nPtr); *nPtr è il valore contenuto nella locazione di memoria puntata da nPtr  5 L’istruzione quindi dice di elevare al cubo 5 e di memorizzare il valore risultante nella locazione di memoria puntata da nPtr

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Cosa succede in memoria… int number=5;cubeByReference(&number); 5 number 6200 void cubeByReference(int *nPtr) {*nPtr=(*nPtr)*(*nPtr)*(*nPtr);} Invochiamo la funzione cubeByReference 6200 L’istruzione quindi dice di elevare al cubo 5 e di memorizzare il valore risultante nella locazione di memoria puntata da nPtr Il cubo di 5 è

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Cosa succede in memoria… int number=5;cubeByReference(&number); printf(“il nuovo valore del numero è: %d\n”,number); return 0; 5 number 6200 void cubeByReference(int *nPtr) {*nPtr=(*nPtr)*(*nPtr)*(*nPtr);} Si ritorna il controllo al main che esegue la prossima istruzione 6200 Si stampa il valore di number  125 La memoria allocata per nPtr viene rilasciata 125

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Cosa succede in memoria… Passaggio per valore evita di compromettere i valori delle variabili con cui sono invocate le funzioni (spesso non si vogliono modificare tali valori) Passaggio parametri per riferimento evita di dover allocare, ad ogni invocazione di funzione, memoria per copiare quantità di dati di input grandi che possono dover essere passati alla funzione  esempio: se la funzione ha come input un vettore abbiamo bisogno solo di un parametro di tipo puntatore in cui copiare la locazione di memoria associata al primo elemento del vettore

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Qualificatore const Consente di specificare che il valore di una particolare variabile NON dovrà essere modificato Il compilatore intercetterà qualsiasi tentativo di modificare una variabile che sia stata dichiarata const e, nel caso in cui tale variabile sia modificata, darà un errore o un warning.  serve a proteggere da errori nell’implementazione del codice  rendere più facile il debugging

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Modi di passare un puntatore a una funzione ‘Puntatore variabile a dati variabili’ – i dati possono essere modificati attraverso il puntatore –Il valore della variabile puntatore potrà essere modificato in modo che il puntatore possa fare riferimento ad altri dati

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007Esempio #include #include void convertToUppercase (char *); main(){ char string[ ]=“caratteri”; printf(“la stringa prima della conversione è %s\n”,string); convertToUppercase(string); /*converte le lettere minuscole della stringa in maiuscole*/ printf(“dopo la conversione la stringa è %s\n”,string); return 0; } void convertToUppercase(char *s) { while (*s != ‘\0’) { if (*s >= ‘a’ && *s = ‘a’ && *s<= ‘z’)*s-=32;++s;}} La stringa prima della conversione è:pippo Dopo la conversione la stringa è PIPPO Vengono modificati i caratteri della Stringa. s punta a caratteri diversi della stringa durante l’esecuzione della funzione

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Altri casi… Puntatore variabile a dati costanti (i dati non possono essere modificati) #include #include void printCharacters (const char *); main(){ char string [ ]=“stampa i caratteri”; printf (“la stringa è:\n”); printCharacters (string); putchar(‘\n’); return 0; } void printCharacters(const char *s) { for (;*s!=‘\0’;s++) putchar(*s);} la stringa è: stampa i caratteri

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Altri casi… Puntatore costante a dati variabili – il puntatore fa sempre riferimento alla stessa locazione di memoria –Tramite il puntatore si può cambiare il valore della locazione di memoria int *const ptr; Puntatore costante a dati costanti –il puntatore fa sempre riferimento alla stessa locazione di memoria –Il valore della locazione di memoria non può essere modificato const int *const ptr;

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Esempio #include #include main () { int x=5,y; const int *const ptr=&x; *ptr=7; ptr=&y; ptr=&y; return 0; return 0;} Cannot modify a const object

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Bubblesort (versione 2) #include #include #define SIZE 10 void bubbleSort(int *,const int); void swap (int *,int*); main(){ int i,a[SIZE]={2,6,4,8,10,12,89,68,45,37}; printf(“ordine originale \n”); for (i=0;i<=SIZE-1;i++) printf(“%d”,a[i]); bubbleSort (a,SIZE); printf(“dati in ordine crescente \n”); for (i=0;i<=SIZE-1;i++) printf(“%d”,a[i]);printf(“\n”); return 0; }

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007Bubblesort void bubbleSort(int *array, const int size) { int pass,j; for (pass=1;pass <=size-1;pass++) for (j=0;j<=size-2;j++) if(array[j]>array[j+1])swap(&array[j],&array[j+1]);}

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Swap void swap (int *element1Ptr, int *element2Ptr) { int temp; temp=*element1Ptr;*element1Ptr=*element2Ptr;*element2Ptr=temp;}

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007