Introduzione al C Corso di Fondamenti di Informatica Ingegneria Clinica Le Matrici e i Puntatori Domenico Daniele Bloisi

Documenti analoghi
Introduzione al C. Esercitazione 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria Clinica

Introduzione al C. Esercitazione 3. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria Clinica

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h

Librerie C. Corso di Linguaggi e Traduttori 1 AA

Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Esercizi Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Laboratorio di Programmazione

I files (archivi) Il C definisce in stdio.h tre file aperti automaticamente: stdin, stdout e stderr.! Sono ad accesso sequenziale diretto

Input/Output su File

Corso di Informatica A.A

Esercizi Array Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Matrici. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Operazioni su file di caratteri

File binari e file di testo

Linguaggio C: PUNTATORI

Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Array. Unità 7. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Char. Parte 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Puntatori. Fondamenti di Programmazione

Variabili. Unità 2. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Dati due punti sul piano calcolare la loro distanza

Variabili. Unità 2. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Char. Unità 2. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Operazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 9 File

Stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Informazioni Utili. Strumenti Utilizzati. Creazione e gestione di un progetto. Fondamenti di Informatica L-B (L-Z) Esercitazioni

Informazioni Utili. Fondamenti di Informatica L-B (L-Z) Esercitazioni. A.A. 2005/06 Tutor: Loris Cancellieri

Istruzioni Condizionali

puntatori Lab. Calc. AA 2006/07 1

Esercizi con Array. Unità 7. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

File. Molto astratta: file ha un nome (ex. Pippo.c), ed altre caratteristiche (dimensione, tipo, etc). Operazioni: copiare, cancellare, eseguire..

Preprocessore. Unità 9. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi Si ringrazia Raffaele Nicolussi

Istruzioni Condizionali

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Fondamenti di Informatica L-B (L-Z) Esercitazioni. A.A. 2007/08 Tutor: Barbara Pettazzoni

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 4 Ing. Gian Enrico Conti Dott.

Perchè i files? Realizzano la persistenza dei dati. Sono delle strutture di dati sequenziali. dati che sopravvivono all esecuzione del programma

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 6 Marzo 2016

Perché usare UniversiBO?

Introduzione al C. Esercitazione 4. Domenico Daniele Bloisi. Si ringrazia Andrea Capata. Corso di Fondamenti di Informatica Ingegneria Clinica

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 21 Maggio 2014

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Esercitazione 6. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR. Domenico Daniele Bloisi

Linguaggio C: i file

Istruzioni Condizionali

Puntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Fondamenti di Informatica L-A

Lezione 12: Allocazione Dinamica della Memoria

Files in C endofile

Matrici. Unità 7. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Corso di Informatica A.A

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 15 Maggio 2015

Strutture dati. Operatori di incremento e decremento. Strutture di dati. Strutture di dati. ++ e -- Esempi. Vettori e matrici.

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

C: panoramica. Violetta Lonati

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 15 Maggio 2013

Laboratorio di Informatica

POINTERS. Una variabile pointer è una variabile che ha come valore un indirizzo di memoria.

Parte II ing. Domenico Daniele Bloisi, PhD

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi

Introduzione al C. Unità 7 Array. S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi

I file possono essere manipolati (aperti, letti, scritti ) all interno di programmi C. dischi nastri cd

Streams e disk files

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Esercizi File Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Esercizi Esame. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Char e bool. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Operazioni sulle stringhe

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Gestione dei File C. Generalità

Corso di Informatica A.A

Array k-dimensionali

Ambienti di Programmazione per il Software di Base

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Introduzione al linguaggio C Primi programmi

Introduzione alla programmazione. Alice Pavarani

L AMBIENTE CODE BLOCKS E L IO

ELEMENTI DI INFORMATICA. Linguaggio C

Introduzione al C. Unità 9 File. D. Bloisi, S. Peluso, A. Pennisi, S. Salza

Controllo del flusso

Introduzione al C++ (continua)

Sommario FONDAMENTI DI INFORMATICA 1. Il tipo FILE. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file

Caratteri e stringhe

Corso sul linguaggio C

Puntatori a funzioni - 1

Transcript:

Corso di Fondamenti di Informatica Ingegneria Clinica e i Puntatori Domenico Daniele Bloisi

Informazioni Generali ing. Domenico Daniele Bloisi Dipartimento di Informatica e Sistemistica Stanza B213, secondo piano Via Ariosto 25 (adiacente Piazza Dante, Vittorio Emanuele, Tram 3 fermata via Labicana) mailto:bloisi@dis.uniroma1.it http://www.dis.uniroma1.it/~bloisi/didattica Pagina 2

Ricevimento Martedì 15.15-17.15 Giovedì 15.45-17.45 Via Ariosto 25, Stanza B213 Si consiglia di inviare una e-mail per conferma mailto:bloisi@dis.uniroma1.it Pagina 3

Menù di oggi Esercizi sulle Matrici Errori comuni in C I puntatori I Files Pagina 4

Cos è un vettore Un vettore, o meglio, un array è un insieme ordinato di elementi, tutti di uno stesso tipo. Può essere visualizzato idealmente come una lista di celle numerate univocamente cella 0 1 2 3 4 5 indice Array di 6 elementi Pagina 5

Gli Arrays Un esempio di definizione di un array in C e' : tipo nome array dimensione int elenco_numeri[50]; e si accede agli elementi dell'array nel seguente modo: terzo_numero = elenco_numeri[2]; elenco_numeri[49] = 100; Pagina 6

Gli Arrays: rappresentazione ideale int elenco_numeri[50];????? 0 1 2 3 4 9 terzo_numero = elenco_numeri[2]; elenco_numeri[49] = 100; terzo_numero?? X? 100 0 1 2 3 4 9 Pagina 7

Le matrici Le matrici non sono altro che array multidimensionali righe 0 1 [0][0] [1][0] [0][1] [1][1] Notazione C: matrice[righe][colonne] 0 1 colonne Pagina 8

Gli Array multidimensionali Gli array multidimensionali sono cosi definiti: int tabella_numeri[50][50] (per due dimensioni) int big_d[20][30][10][40] (per più di due dimensioni) Pagina 9

Indicizzazione degli Array multidimensionali si accede agli elementi di un array multidimensionale nel seguente modo: numero = tabella_numeri[5][32]; tabella_numeri[1][23] = 100; Pagina 10

Esempio Matrici #include <stdio.h> #include <stdlib.h> int main() { int matrice[2][2], i, j; matrice[0][0] = 1; matrice[0][1] = 2; matrice[1][0] = 3; matrice[1][1] = 4; for(i = 0; i < 2; i++) for(j = 0; j < 2; j++) printf("matrice[%d][%d] = %d\n", i, j, matrice[ i ][ j ]); system("pause"); } Pagina 11

Output Matrici matrice[0][0] = 1 matrice[0][1] = 2 matrice[1][0] = 3 matrice[1][1] = 4 Premere un tasto per continuare... Pagina 12

Codice sulle matrici Si veda il file array2d.c Pagina 13

Errori comuni in C Esistono due tipi di errori: Errori sintattici Errori semantici I primi possono essere facilmente riconosciuti dal compilatore (con alcune eccezioni). I secondi possono essere riconosciuti solo in fase di esecuzione. Pagina 14

Assegnazione (=) al posto di confronto (==) Il C utilizza l'assegnazione per valore, per tale motivo l espressione: if (a = b) è sintatticamente corretta. Nota: b e' assegnato ad a, l'espressione a = b prende il valore di b, if (a=b) diventa if (b), quindi true se b!= 0, false se b == 0. Pagina 15

Passaggio dell'indirizzo di puntatori E' fondamentale ricordare di mettere la "&" nella funzione scanf(). Questo vale per ogni funzione che debba gestire indirizzi di memoria e puntatori Pagina 16

Mancanza di ( ) per una funzione spesso ci si dimentica di mettere ( ) dopo una funzione; è necessario farlo, anche se non ci sono parametri passati alla funzione stessa. Pagina 17

Indici di array E' importante ricordare che gli array in C sono dichiarati in maniera diversa: gli array multidimensionali vengono dichiarati alla stessa maniera di quelli semplici, ma con l'elenco dei valori massimi associati ad ogni dimensione; la notazione che viene utilizzata per gli array multidimensionali e' la seguente: [ ][ ]... dove tra le [ ] va specificata la dimensione massima per ognuna delle dimensioni dell'array stesso. Un vettore di "n" elementi ha un intervallo indice che va da 0 a "n-1". Pagina 18

C è case-sensitive Una regola fondamentale per l'utilizzo del C è quella di ricordare che le lettere maiuscole e quelle minuscole vengono trattate come fossero caratteri diversi. Pagina 19

il ";" chiude ogni istruzione E' facile dimenticarsene, ma il compilatore riscontrerà questa mancanza e la segnalerà. Si tratta dell errore più diffuso per chi inizia a programmare. Attenzione al ; può avere doppia valenza Errore sintattico ed errore semantico (e.g., se messo senza intenzione subito dopo un for). Pagina 20

Puntatori 0 Insieme di celle ORDINATO UNIVOCAMENTE Memoria Principale Visualizzazione ideale n Pagina 21

Puntatori 0 int x = 1; 2359156 1 n Pagina 22

Puntatori 0 2359156 n 1 int x = 1; printf("stampa x = %d\n", x); Ottengo stampa x = 1 Pagina 23

Puntatori 0 2359156 n 1 int x = 1; printf("stampa &x = %d\n", &x); Ottengo stampa &x = 2359156 Pagina 24

Puntatori 2359154 2359156 n 1 2359156 int x = 1; int *x_ptr; x_ptr = &x; printf("stampa *x_ptr = %d\n", *x_ptr); printf("stampa &x_ptr = %d\n", &x_ptr); printf("stampa x_ptr = %d\n", x_ptr); Ottengo stampa *x_ptr = 1 stampa &x_ptr = 2359154 stampa x_ptr = 2359156 Pagina 25

Visualizzazione ideale 2359156 x_ptr punta ad x 1 x Per il programmatore ha nome x 2359154 2359156 x_ptr Per il programmatore ha nome x_ptr Pagina 26

Puntatori I puntatori sono una delle più importanti caratteristiche del C. Se non si è in grado di usare i puntatori in maniera appropriata, non si riusciranno a sfruttare completamente la potenza e la flessibilità che il C permette; infatti, il segreto del linguaggio C sta proprio nel modo in cui utilizza i puntatori. Pagina 27

Perché i puntatori? Il C usa molto i puntatori. Perché - e' l'unico modo per esprimere alcune operazioni; - produce codici sorgenti compatti ed efficienti; - rappresenta uno strumento molto efficace. Pagina 28

Dove usarli? Il C utilizza molto i puntatori in maniera esplicita con: -vettori; - strutture; - funzioni. Pagina 29

Cos è un puntatore? Un puntatore e' un tipo di dato, una variabile che contiene l'indirizzo in memoria di un'altra variabile. Si possono avere puntatori a qualsiasi tipo di variabile. La dichiarazione di un puntatore include il tipo dell'oggetto a cui il puntatore punta. In C ogni variabile ha due tipi di valori: una locazione e un valore contenuto in quella locazione. Pagina 30

Gli operatori & e * L' operatore & (operatore unario, o monadico) fornisce l'indirizzo di una variabile. L' operatore * (operatore indiretto, o non referenziato) dà il contenuto dell'oggetto a cui punta un puntatore. Pagina 31

Dichiarare un puntatore Per dichiarare un puntatore ad una variabile, l'istruzione e': int *pointer; Nota: è obbligatorio associare un puntatore ad un tipo particolare; per esempio, non è possibile assegnare l'indirizzo di uno short int ad un long int. Pagina 32

Esempio Puntatori Consideriamo gli effetti del seguente codice: int *pointer; /*dichiara pointer come un puntatore a int*/ int x = 1,y = 2; (1) pointer = &x; /* assegna a pointer l'indirizzo di x*/ (2) y = *pointer; /* assegna a y il contenuto di pointer */ (3) x = pointer; /* assegna ad x l'indirizzo contenuto in pointer */ (4) *pointer = 3; /* assegna al contenuto di pointer il valore 3 */ Pagina 33

Spiegazione 100 200 1000 1 2? x (1) y pointer 100 200 1000 1 2 100 x y pointer 100 200 1000 100 1 100 x (3) y pointer 100 200 1000 1 1 100 x (2) y pointer Pagina 34

Spiegazione (2) 100 200 100 1 x y 1000 100 pointer (4) 100 200 1000 3 1 100 x y pointer Pagina 35

Ricapitolando in merito ai puntatori possiamo avere tre possibili valori: pointer contenuto o valore della variabile pointer (cioè l indirizzo della locazione di memoria a cui punta) &pointer indirizzo fisico della locazione di memoria del puntatore *pointer contenuto della locazione di memoria a cui punta Pagina 36

Attenzione Quando un puntatore viene dichiarato non punta a nulla. Per poterlo utilizzare deve puntare a qualcosa. E' infatti un errore comune non assegnare un indirizzo di memoria a un puntatore prima di usarlo. int *ip; *ip = 100; genererà un errore (crash di programma). Pagina 37

Utilizzo corretto L'utilizzo corretto e' il seguente: int *ip; int x; ip = &x; *ip = 100; Pagina 38

I Files Per aprire un puntatore al file si utilizza la funzione fopen( ) definita come: FILE *fopen(char *name, char *mode) Tale funzione ritorna un puntatore a FILE. La stringa "name" e' il nome del file su disco a cui vogliamo accedere; la stringa "mode" definisce il tipo di accesso. Se per una qualsiasi ragione il file risulta non accessibile, viene ritornato un puntatore nullo. Pagina 39

Modalità di accesso Le possibili modalita' di accesso ai files sono: - "r" (read), - "w" (write), - "a" (append). Pagina 40

Aprire un file Per aprire un file dobbiamo avere una stream (puntatore al file) che punta ad una struttura FILE. Così, per aprire in lettura un file chiamato myfile.dat, dovremo avere: FILE *stream, *fopen(); /* dichiarazione di una stream e del prototipo fopen */ stream = fopen ("myfile.dat","r"); Pagina 41

Fare le cose per bene E' buona norma controllare l'esito dell'apertura del file: if ((stream = fopen("myfile.dat","r")) == NULL ) { printf("can't open %s \n", "myfile.dat"); exit(1); }... Pagina 42

Lettura e scrittura su files Le funzioni fprintf ed fscanf sono comunemente utilizzate per l'accesso ai files: int fprintf(file *stream, char *format, args...) int fscanf(file *stream, char *format, args...) Sono simili a printf e scanf, tranne per il fatto che i dati sono letti dalla stream, che deve essere aperta con fopen( ). Pagina 43

Esempio lettura da file Ad esempio: char *string[80]; FILE *fp; if ((fp=fopen("file.dat","r"))!= NULL) fscanf(fp,"%s",string); Pagina 44

Importante Il puntatore alla stream viene incrementato automaticamente con tutte le funzioni di lettura/scrittura su file, quindi non è necessario preoccuparsi di farlo manualmente. Pagina 45

Ulteriori funzioni di I/O da file Altre funzioni di I/O da file sono: int getc(file *stream), int fgetc(file *stream) int putc(char ch, FILE *s), int fputc(char ch, FILE *s) Queste funzioni sono come getchar e putchar. "getc" e' definita come macro di preprocessore in stdio.h, "fgetc" e' una funzione di libreria C; con entrambe si ottiene lo stesso risultato. Pagina 46