C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i...
-
Upload
romhilda-cappelli -
Category
Documents
-
view
218 -
download
2
Transcript of C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i...
![Page 1: C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/1.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/2.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/3.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/4.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/5.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/6.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/7.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/8.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/9.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/10.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/11.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/12.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/13.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/14.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/15.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/16.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/17.jpg)
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.](https://reader035.fdocumenti.com/reader035/viewer/2022062418/5542eb67497959361e8d2ad7/html5/thumbnails/18.jpg)
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?