• Non ci sono risultati.

Fondamenti di Informatica

N/A
N/A
Protected

Academic year: 2021

Condividi "Fondamenti di Informatica"

Copied!
3
0
0

Testo completo

(1)

Fondamenti di Informatica

© 2001 Pier Luca Montessoro, Davide Pierattoni 1 (si veda la nota di copyright alla slide n. 2)

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 1

FONDAMENTI DI INFORMATICA

Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI

Facoltà di Ingegneria Università degli Studi di Udine

Linguaggio C Vettori e stringhe

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. Davide Pierattoni, Università degli Studi di Udine.

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell'Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione.

Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori.

L'informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell'informazione).

In ogni caso non può essere dichiarata conformità all'informazione contenuta in queste slide.

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.

Nota di Copyright

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 3

Vettori

• Un vettore è un insieme ordinato di dati omogenei (cioè dello stesso tipo elementare)

• Ogni elemento dell’insieme è

accessibile tramite un indice (il numero d’ordine)

• In C il primo elemento di un vettore ha sempre indice 0

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 4

Vettori

int a[10];

a

a[0] a[1]...

Il nome di un vettore è sinonimo dell’indirizzo del suo primo elemento.

int a[10]; dichiara un vettore a di dieci elementi (interi) consecutivi, chiamati a[0], a[1], ...

a[9].

...a[9]

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 5

Vettori

• In C i vettori iniziano sempre da 0

• I vettori possono essere inizializzati nella dichiarazione:

int a[5] = { 30, 39, 23, 10, 87 };

• Normalmente i compilatori non controllano se un indice eccede la fine di un vettore, né a tempo di compilazione (compile time), né durante l’esecuzione del programma (runtime)

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 6

Vettori e puntatori

• In realtà, la sintassi del C per i vettori è una forma semplificata di istruzioni con i puntatori:

v [i]

è equivalente a

*(v + i)

• Grazie alle regole dell’aritmetica dei puntatori,

a v viene sommato il valore di i moltiplicato

per il numero di byte occupati da un singolo

elemento del vettore

(2)

Fondamenti di Informatica

© 2001 Pier Luca Montessoro, Davide Pierattoni 2 (si veda la nota di copyright alla slide n. 2)

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 7

Sottovettori

• f(&v[2]) e f(v + 2) sono due modi equivalenti per passare alla funzione f il sottovettore di a che inizia da a[2].

v

v+2

&v[2]

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 8

Vettori multidimensionali

In realtà non esistono: sono realizzati come vettori di vettori.

Es.: int matrice [10][5];

vettore di 10 elementi

ogni elemento è a sua volta un vettore di 5 interi

In pratica: int matrice [10][5];

numero di righe numero di colonne

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 9

Vettori multidimensionali

matrice [i] indirizzo dell'i-esimo vettore di 5 interi

matrice [i][j] indirizzo dell'elemento i,j della matrice

matrice [i,j] sintatticamente sbagliato!

char vs [10][16]; vettore di 10 stringhe da 15 caratteri

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 10

Vettori multidimensionali

Allocazione della memoria:

char m[3][4];

m, m[0], &m[0][0]

m[1], &m[1][0]

&m[2][3];

m[2], &m[2][0]

1 byte

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 11

Vettori multidimensionali e funzioni

• Se una matrice (vettore bidimensionale) deve essere passata ad una funzione f come parametro, la dichiarazione di f deve includere la dimensione delle colonne.

• Esempi:

f(char v[10][16]);

f(int v[][10]);

f(double (*v)[3]);

• Il 16 deve comparire perché permette al

compilatore di calcolare correttamente gli indirizzi di memoria delle singole locazioni della matrice

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 12

Vettori di puntatori

Allocazione della memoria:

char *m[3]; m[0]

m[1] m[2]

1 word

(3)

Fondamenti di Informatica

© 2001 Pier Luca Montessoro, Davide Pierattoni 3 (si veda la nota di copyright alla slide n. 2)

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 13

Vettori di caratteri (stringhe)

char s[8];

h e l l o \0 s

(vettore di caratteri)

• "hello" è una stringa costante

• Nella rappresentazione interna, il vettore corrispondente è terminato dal codice ASCII '\0', in modo che il programma possa trovarne la fine

- -

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 14

I/O con stringhe

• Per leggere una parola da tastiera:

• Per leggere l’intera riga da tastiera:

{

char str[64];

scanf ("%s", str);

...

}

{

char str[64];

gets (str);

...

}

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 15

I/O con stringhe

• Per scrivere una stringa sul monitor:

oppure, andando a capo alla fine:

{

char str[64];

...

printf ("%s", str);

}

{

char str[64];

...

puts (str);

}

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 16

Esempio: mygets

void mygets (char s[]) {

int i = 0;

while ((s[i++] = getchar()) != '\n');

s[i] = '\0';

return;

}

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 17

Esempio: myputs

void myputs (char s[]) {

int i = 0;

while (s[i] != '\0') putchar (s[i++]);

putchar ('\n');

return;

}

Fondamenti di Informatica - Linguaggio C - Vettori e stringhe

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 18

strlen: versione evoluta

int strlen (char *s) {

char *p = s;

while (*p != '\0') p++;

return p - s;

}

Riferimenti

Documenti correlati

© 2001 Pier Luca Montessoro, Davide Pierattoni 1 (si veda la nota di copyright alla slide n.. PIER LUCA

© 2001 Pier Luca Montessoro, Davide Pierattoni 1 (si veda la nota di copyright alla slide n.. PIER LUCA

© 2007 Pier Luca Montessoro, Davide Pierattoni 1 (si veda la nota di copyright alla slide n.. PIER LUCA

© 1999 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Le tecnologie alla base del World Wide Web (I parte). © 1999 Pier Luca Montessoro ( si veda la nota a

© 2001 Pier Luca Montessoro (si veda la nota a pagina 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali1. Nota

Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli

Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non