c. gaibisso programmazione di calcolatori lezione xiv i vettori programmazione di calcolatori: i...

18
C. Gaibisso Programmazione di Programmazione di Calcolatori Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

Upload: romhilda-cappelli

Post on 02-May-2015

219 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso Programmazione di Programmazione di CalcolatoriCalcolatori

Lezione XIVI vettori

Programmazione di Calcolatori: i vettori 1

Page 2: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

VettoriVettori

Programmazione di Calcolatori: i vettori 2

• Vettore (monodimensionale) di n elementi:definisce una corrispondenza biunivoca tra un insieme omogeneo di n elementi e l’insieme di interi {0, 1, …, n-1}

• Esempio:

0 1 2 3 4

Vettore di 5 interi

5 -1 32 -4 27

Page 3: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

Operatore sizeof()Operatore sizeof()

Programmazione di Calcolatori: i vettori 3

• Sintassi:

sizeof(tipo_di_dato)

con tipo_di_dato identificatore di tipo predefinito o non

•Valore:

numero delle locazione utilizzate per rappresentare un valore di tipo tipo_di_dato

Page 4: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

Operatore sizeof()Operatore sizeof()

Programmazione di Calcolatori: gli operatori 4

// sorgente: Lezione_XIV\Sizeof.c// programma che illustra il comportamento dello// operatore sizeof()#include <stdio.h>int main () { printf ("\nDimensione int: %d\n", sizeof(int)); printf ("\nDimensione char: %d\n", sizeof(char)); printf ("\nDimensione double: %d\n", sizeof(double)); printf ("\nDimensione int *: %d\n", sizeof(int *)); printf ("\nDimensione char *: %d\n", sizeof(char *)); printf ("\nDimensione double *: %d\n", sizeof(double *)); return(1); }

• Esempio:

Page 5: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

Operatore sizeof()Operatore sizeof()

Programmazione di Calcolatori: i vettori 5

• Compilazione:

• Esecuzione:

Page 6: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

Definizione di un vettoreDefinizione di un vettore

Programmazione di Calcolatori: i vettori 6

• Definizione:tipoVett nomeVett

[dimVett]

Espressione costante intera

• Modifiche allo stato della memoria:

sizeof(tipoVett)

sizeof(tipoVett)

sizeof(tipoVett)dimVett * sizeof(tipoVett)

tipoVett *nomeVett

Page 7: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso Accesso agli elementi di un Accesso agli elementi di un vettorevettore

Programmazione di Calcolatori: i vettori 7

• Indirizzi:

nomeVett

nomeVett+1

*(nomeVett)

*(nomeVett+1)

• Accesso all’elemento i-esimo:

a) *(nomeVett+i)

b) nomeVett[i]

• Contenuto:

int *nomeVett

nomeVett+dimVett-1 *(nomeVett+dimVett-1)

Page 8: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso Accesso agli elementi di un Accesso agli elementi di un vettorevettore

Programmazione di Calcolatori: i vettori 8

• Esempio:

int ArrInt[6];

*ArrInt = 1;*(ArrInt+3) = *ArrInt+2;

ArrInt

ArrInt+1

ArrInt+2

ArrInt+3

ArrInt+4

ArrInt+5

2834

2835

2836

2837

2838

2839

2840

2841

2842

2843

2844

2845

ArrInt 2834

1

3

ArrInt[0] = 1;ArrInt[3] = ArrInt[0]+2;

Page 9: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

I vettori e le funzioniI vettori e le funzioni

Programmazione di Calcolatori: i vettori 9

• I vettori come parametri formali:

a) tipofun nomefun (…, tipoVett

nomeVett[], …)

{ … };

b) tipofun nomefun (…, tipoVett

*nomeVett, …)

{ … };

• I vettori come parametri attuali:

nomefun (…, nomeVett, …)

Page 10: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

I/O di vettoriI/O di vettori

Programmazione di Calcolatori: i vettori 10

StartNome: AcqVettVariabili: int index,

int vett[K]

index 0

index < K Endfalseindex index+1

true

vett[index]

• I diagrammi di flusso:

Acquisizione del contenuto di un

vettore di K interi

Page 11: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

I/O di vettoriI/O di vettori

Programmazione di Calcolatori: i vettori 11

StartNome: AcqVettVariabili: int index,

int vett[K]

index 0

index < K Endfalseindex index+1

• I diagrammi di flusso:

Restituzione del contenuto di un

vettore di K interi

truevett[inde

x]

Page 12: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

I/O di vettoriI/O di vettori

Programmazione di Calcolatori: i vettori 12

// sorgente: Lezione_XIV\VettIOInd.c// programma che illustra le modalita' di acquisizione// e di restituzione del contenuto di un vettore di// interi utilizzando l'indirizzo dei suoi elementi// direttive per il preprocessore#include <stdio.h>#define DIM_VETT 5// funzione per l'acquisizione del contenuto di un vettore di interivoid AcqVettInt(int *Vett, int dim) { // definizione della variabile per la scansione del vettore int pos; // scansione del vettore e acquisizione del suo contenuto for (pos = 0; pos < dim; pos++) { printf("\nVett[%d]? ", pos); scanf("%d", Vett+pos); }; };

• Il codice:

Page 13: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

I/O di vettoriI/O di vettori

Programmazione di Calcolatori: i vettori 13

// funzione per la restituzione del contenuto di un vettore di interivoid ResVettInt(int *Vett, int dim) { // definizione della variabile per la scansione del vettore int pos; // scansione del vettore e restituzione del suo contenuto for (pos = 0; pos < dim; pos++) printf("\nVett[%d]: %d", pos, *(Vett+pos)); };// Chiamanteint main() { // definizione di un vettore di interi int prova[DIM_VETT]; // acquisizione del contenuto del vettore AcqVettInt(prova, DIM_VETT); // restituzione del contenuto del vettore ResVettInt(prova, DIM_VETT); return(1); }

Page 14: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

I/O di vettoriI/O di vettori

Programmazione di Calcolatori: i vettori 14

• Compilazione:

• Esecuzione:

Page 15: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

I/O di vettoriI/O di vettori

Programmazione di Calcolatori: i vettori 15

• Il codice:// sorgente: Lezione_XIV\VettIONome.c

// programma che illustra le modalita' di acquisizione e di restituzione del// contenuto di un vettore di interi utilizzando il nome dei suoi elementi

...

// funzione per l'acquisizione del contenuto di un vettore di interi

void AcqVettInt(int Vett[], int dim) {

// definizione della variabile per la scansione del vettore

int pos;

// scansione del vettore e acquisizione del suo contenuto

for (pos = 0; pos < dim; pos++) { printf("\nVett[%d]? ", pos); scanf("%d", &Vett[pos]); }; };

Page 16: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso

I/O di vettoriI/O di vettori

Programmazione di Calcolatori: i vettori 16

• Il codice:// funzione per la restituzione del contenuto di un vettore di interi

void ResVettInt(int Vett[], int dim) { // definizione della variabile per la scansione del vettore

int pos;

// scansione del vettore e restituzione del suo contenuto

for (pos = 0; pos < dim; pos++) printf("\nVett[%d]: %d", pos, Vett[pos]); };

// Chiamante

Page 17: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso Dimensionamento a run-time di un Dimensionamento a run-time di un vettorevettore

Programmazione di Calcolatori: i vettori 17

• La dimensione di un vettore può essere definita a run time?// definizione della variabile per la dimensione del vettoreint dim;// definizione di un vettore di dimensione nota a run-timeint Vett [dim];// acquisizione della dimesione di un vettorescanf(“%d”, &dim);

•Assolutamente no!!!!

nella definizione di un array la sua dimensione deve essere specificata tramite una espressione costante

•Conseguenza:

se le dimensioni dell’array cambiano il codice deve essere modificato e ricompilato

Page 18: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1

C. Gaibisso Dimensionamento a run-time di un Dimensionamento a run-time di un vettorevettore

Programmazione di Calcolatori: i vettori 18

Esiste un soluzione a questo

problema?