24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
1 MeDeC - Centro Demoscopico Metropolitano Provincia di Bologna - per Valutazione su alcuni servizi erogati nel.
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
PUNTATORI Introduzione
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Frontespizio Economia Monetaria Anno Accademico
1 la competenza alfabetica della popolazione italiana CEDE distribuzione percentuale per livelli.
Anno accademico Array e puntatori in C.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
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.
Process synchronization
Programmazione 1 9CFU – TANTE ore
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.
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
JAVA C import java.util.*; #include <stdio.h>
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
6.6Ordinamento di Vettori Ordinamento di dati –Applicazione computazionale importante –Virtualmente ogni organizzazione deve ordinare dei dati Enormi quantità
1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
La partita è molto combattuta perché le due squadre tentano di vincere fino all'ultimo minuto. Era l'ultima giornata del campionato e il risultato era.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Scritte scritte scritte scritte scritte scritte scritte Scritte scritte Titolo.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Sottoprogrammi e Unità di Compilazione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
Struct, enum, Puntatori e Array dinamici
Strutture di controllo in C -- Flow Chart --
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Esercizi C su array e matrici
Le funzioni.
Contatore: esempio di circuito sequenziale
Settimana: 3-7 marzo Orariolunedimartedi Mercoledi 5 Giovedi 6 Venerdi lezione intro alla fis mod DR lezione intro alla fis mod DR.
2 3 4 RISERVATEZZA INTEGRITA DISPONIBILITA 5 6.
Melfi, 1 aprile 2011 – MediaShow 1 Social Network: possibilità di uso consapevole nella didattica Uso, consapevolezza, opportunità, proposte Caterina Policaro.
Piero Scotto - C141 C14 #14 Puntatori e file. Il problema dellordinamento. Debug.
22 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ore 10:00.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
ISOIVA (LOCALE) TO ISOIVA (WEB) RIPARTIZIONE INFORMATICA UFFICIO APPLICATIVI AMMINISTRATIVI 13/04/2011 UNIVERSITÀ DEGLI STUDI DI FERRARA 1.
ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Uso delle funzioni Uso delle funzioni
1 Questionario di soddisfazione ATA - a. sc. 2008/09 Il questionario è stato somministrato nel mese di aprile Sono stati restituiti 29 questionari.
void binario(int n); …………………
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
1 Questionario di soddisfazione del servizio scolastico Anno scolastico 2011/2012 Istogramma- risposte famiglie.
Unità Didattica 3 Linguaggio C
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
Calendario lezioni ed esercitazioni impartite nell anno accademico 2001/2002 II Semestre Corso di Fisica Sperimentale con Laboratorio Classe di Tecnologie.
14 marzo 2002 Avvisi:.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 7 (Deitel) I puntatori Sommario Introduzione Dichiarare e inizializzare i puntatori.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
-17 Aspettative economiche – Europa Settembre 2013 Indicatore > +20 Indicatore 0 a +20 Indicatore 0 a -20 Indicatore < -20 Unione Europea Totale: +6 Indicatore.
+21 Aspettative economiche – Europa Dicembre 2013 Indicatore > +20 Indicatore 0 a +20 Indicatore 0 a -20 Indicatore < -20 Unione Europea Totale: +14 Indicatore.
© GfK 2012 | Title of presentation | DD. Month
Pippo.
Introduzione al linguaggio C. Cos’e’ il C? Il C e’ un linguaggio ad alto livello Un compilatore C prende in input un file contenente codice sorgente C.
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Esercitazione 5 D. Bloisi, A.
lun mar mer gio ven SAB DOM FEBBRAIO.
1 Acceleratori e Reattori Nucleari Saverio Altieri Dipartimento di Fisica Università degli Studi - Pavia
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.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
comprensione e modifica di codice
Transcript della presentazione:

24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente, piano terra. Speciale 1 o Esonero: soluzioni, commenti, correzioni compiti prossima lezione (giovedì 2 maggio). Progetti: gia disponibili nella pag. WEB.

Qualche minuto di laboratorio Esercizio 6.19 Scrivere un programma C che simuli il lancio di due dadi. Il programma dovra utilizzare rand per lanciare il primo dado e poi invocarla nuovamente per lanciare il secondo dado: poi calcolera la somma dei due valori. (Nota: tale somma puo variare tra 2 e 12). Tale programma dovra lanciare i due dadi volte e poi dovra visualizzare i seguenti risultati: Un vettore di frequenze F per i risultati di ogni lancio cioe tale che F(i) rappresenta quante volte la somma dei due dadi e stata uguale ad i con i=2,3,…12. Una matrice D 6x6 tale che D(i,j) rappresenta quante volte si e ottenuto i col primo dado e j con il secondo dado con i,j=1,2,…,6. Vediamo le soluzioni proposte da voi…

Chiamata di funzioni per riferimento Chiamata per riferimento usando puntatori come argomenti –Si passa lindirizzo di un argomento usando loperatore & –Consentono di cambiare il valore nella locazione di memoria –Gli array non si possono passare con & perche il nome dellarray e gia un puntatore operatore * –Usato come alias per una variabile allinterno di una funzione void double(int *number) {*number = 2 * (*number);} *number si usa come alias per la variabile passata

1. /* Elevare al cubo mediante una chiamata per valore */ 2.#include 3.int cubeByValue(int); 4.main() 5.{ 6. int number = 5; 7. printf("The original value of number is %d\n", number); 8. number = cubeByValue(number); 9. printf("The new value of number is %d\n", number); 10. return 0; 11.} 12.int cubeByValue(int n) 13.{ 14. return n * n * n; /* eleva al cubo */ 15.} The original value of number is 5 The new value of number is 125 Output

1/* Fig. 7.7: fig07_07.c 2 Elevare al cubo mediante chiamata per riferimento 3 mediante puntatori */ 4 5#include 6 7void cubeByReference( int * ); 8 9int main() 10{ 11 int number = 5; printf( "The original value of number is %d", number ); 14 cubeByReference( &number ); 15 printf( "\nThe new value of number is %d\n", number ); return 0; 18} 19 20void cubeByReference( int *nPtr ) 21{ 22 *nPtr = *nPtr * *nPtr * *nPtr; 23} The original value of number is 5 The new value of number is 125 Notare che viene dato lindirizzo di number – infatti cubeByReference aspetta un puntatore (indirizzo di una variabile). Allinterno di cubeByReference, si usa *nPtr ( *nPtr e number ). Output

Usare il qualificatore Const con i puntatori Qualificatore const – una variabile non puo essere cambiata –Utile avere const se la funzione non deve cambiare una variabile –Tentativi di cambiare un const produce errore in compilazione Puntatori const – puntano alla stessa locazione di memoria –Devono essere inizializzati quando sono dichiarati int *const myPtr = &x; Tipo int *const – puntatore costante a un int const int *myPtr = &x; Puntatori regolari a const int const int *const Ptr = &x; const puntatore a const int x puo essere cambiato, ma non *Ptr

1./* Fig7_10 Converting lowercase letters to uppercase letters */ 2./* using a non-constant pointer to non-constant data */ 3.#include 4.void convertToUppercase(char *); 5.main() 6.{ 7. char string[] = "characters"; 8. printf("The string before conversion is: %s\n", string); 9. convertToUppercase(string); 10. printf("The string after conversion is: %s\n", string); 11. return 0; 12.} 13.void convertToUppercase(char *s) 14.{ 15. while (*s != '\0') { 16. if (*s >= 'a' && *s <= 'z') 17. *s -= 32; /* convert to ASCII uppercase letter */ s; /* increment s to point to the next character */ 19. } 20.}

The string before conversion is: characters The string after conversion is: CHARACTERS Output

1./* Fig7_11 Printing a string one character at a time using */ 2./* a non-constant pointer to constant data */ 3.#include 4.void printCharacters(const char *); 5.main() 6.{ 7. char string[] = "print characters of a string"; 8. printf("The string is:\n"); 9. printCharacters(string); 10. putchar('\n'); 11. return 0; 12.} 13.void printCharacters(const char *s) 14.{ 15. for ( ; *s != '\0'; s++) /* no initialization */ 16. putchar(*s); 17.} The string is: print characters of a string Output

1./* Fig7_12.c Attempting to modify data through a */ 2./* non-constant pointer to constant data */ 3.#include 4.void f(const int *); 5.main() 6.{ 7. int y; 8. f(&y); /* f attempts illegal modification */ 9. return 0; 10.} 11.void f(const int *x) 12.{ 13. *x = 100; /* cannot modify a const object */ 14.} 13 Warning: assignment of read-only location 13 ERROR: Cannot modify a const object Dev-C++ Borland

1./* Fig Attempting to modify a constant pointer to */ 2./* non-constant data */ 3.#include 4.main() 5.{ 6. int x, y; 7. int * const ptr = &x; 8. ptr = &y; /* attempt to modify a const pointer*/ 9. return 0; 10.} 10 Warning: assignment to read-only variable ptr 10 ERROR: Cannot modify a const object Dev-C++ Borland

1/* Fig. 7.14: fig07_14.c 2 Attempting to modify a constant pointer to 3 constant data */ 4 5#include 6 7int main() 8{8{ 9 int x=5, y; const int * const ptr = &x; *ptr = 7; 16 ptr = &y; return 0; 19} FIG07_13.c: Error E2024 FIG07_13.c 15: Cannot modify a const object in function main 16: Cannot modify a const object in function main *** 2 errors in Compile ***

Bubble Sort usando chiamata per riferimento Implementare bubblesort usando puntatori –Scambia due elementi –La funzione swap deve ricevere un indirizzo (usando &) degli elementi dellarray Gli elementi dellarray hanno una chiamata-per- valore per default –Usando puntatori e loperatore *, la funzione swap puo scambiare elementi dellarray

1/* Fig. 7.15: fig07_15.c 2 This program puts values into an array, sorts the values into 3 ascending order, and prints the resulting array. */ 4#include 5#define SIZE 10 6void bubbleSort( int *, const int ); 7 8int main() 9{9{ 27 return 0; 28} 11 int a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; 12 int i; printf( "Data items in original order\n" ); for ( i = 0; i < SIZE; i++ ) 17 printf( "%4d", a[ i ] ); bubbleSort( a, SIZE ); /* ordina larray */ 20 printf( "\nData items in ascending order\n" ); for ( i = 0; i < SIZE; i++ ) 23 printf( "%4d", a[ i ] ); printf( "\n" ); Bubblesort prende lindirizzo dellarray. Il nome di un array e un puntatore..

Data items in original order Data items in ascending order Output 33 int pass, j; 34 for ( pass = 0; pass < size - 1; pass++ ) for ( j = 0; j < size - 1; j++ ) if ( array[ j ] > array[ j + 1 ] ) 39 swap( &array[ j ], &array[ j + 1 ] ); 40} 41 42void swap( int *element1Ptr, int *element2Ptr ) 43{ 44 int hold = *element1Ptr; 45 *element1Ptr = *element2Ptr; 46 *element2Ptr = hold; 47} 29 30void bubbleSort( int *array, const int size ) 31{ 32 void swap( int *, int * );

103void bubbleSort( int a[] ) 104{ 105 int pass, j, hold; for ( pass = 1; pass <= SIZE - 1; pass++ ) for ( j = 0; j <= SIZE - 2; j++ ) if ( a[ j ] > a[ j + 1 ] ) { 112 hold = a[ j ]; 113 a[ j ] = a[ j + 1 ]; 114 a[ j + 1 ] = hold; 115 } 116} Nelle lezioni precedenti…

Aritmetica con i puntatori Alcune operazioni aritmetiche possono essere utilizzate con i puntatori –Incrementa/decrementa puntatori ( ++ o -- ) –Si puo aggiungere/sottrarre un intero a/da un puntatore ( + o +=, - o -= ) –Puntatori possono essere sottratti uno dallaltro –Attenzione : Sono operazioni senza significato a meno che non siano effettuate su array.

Aritmetica con i puntatori int v[5] (supp int e di 4 byte) –vPtr = v oppure vPtr = &v[0] vPtr punta al primo elemento v[0] nella locazione ( vPtr = 3000 ) –vPtr +=2; assegna a vPtr valore 3008 vPtr punta a v[2], ma un int vale 4 byte! variabile puntatore vPtr v[0]v[1]v[2]v[4]v[3] locazione

Aritmetica con i puntatori Sottrarre puntatori –Restituisce il numero di elementi tra uno e laltro –vPtr2 = &v[2]; vPtr = &v[0]; vPtr2 - vPtr = 2. ( numero di elementi del vettore tra vPtr2 e vPtr ) Confronti tra puntatori ( ) –Per vedere quale puntatore punta allelemento dellarray di indice maggiore… –Anche per controllare se un puntatore punta a

Aritmetica con i puntatori Puntatori dello stesso tipo possono essere assegnati uno allaltro –Se non sono dello stesso tipo, deve essere usato un operatore cast –Eccezione: puntatori a void (tipo void * ) Puntatori generici, rappresentano qualunque tipo Non occorre casting per convertire un puntatore ad un puntatore void Puntatori void non possono essere dereferenziati