03 Array Lucidi
03 Array Lucidi
▶ C e C++ non verificano gli indici dell’array, cioè non viene controllato se gli 1 // dichiarazione e utilizzo di un array
indici siano validi (stiano dentro la dimensione) 2 #include<iostream>
3 using namespace std;
▶ per esempio: 4
double v[2]={1.2,0.8}; 5 int main(){
cout << v[2]; 6 double n[10],m;
7 for(int i=0;i<=9;i=i+1)
è un errore perché l’indice dell’ultimo elemento è 1
8 cin >> n[i];
▶ al momento della compilazione non viene segnalato nessun errore 9 m=0;
▶ durante l’esecuzione: 10 for(int i=0;i<=9;i=i+1)
11 m=m+n[i];
▶ può succedere che il sistema operativo ferma il programma quando il
12 cout << m/10 << endl;
programma tenta di eseguire il commando cout << v[2]; 13 return 0;
▶ oppure il programma esegue ma il suo comportamento è casuale (stampa ciò 14 }
che si trova nella memoria dopo v[1])
▶ risaputo al momento della compilazione: ▶ la funzione riceve l’indirizzo del primo elemento, “sa” dove si trova l’array, può
5 double n[10]; // number of entries known at compile time, OK modificarlo:
5 void read_array(int v[], int n){
▶ risaputo al momento dell’esecuzione del programma: 6 for(int i=0;i<n;i++)
7 int k; 7 cin >> v[i];
8 cin >> k; 8 }
9 int a[k]; // number of entries specified at run time, OK
▶ la funzione riceve l’indirizzo del primo elemento, “sa” dove si trova l’array, ma
▶ è casuale e quindi questo è UN GRAVE ERRORE: grazie alla parola chiave const non può modificarlo:
11 int c; 10 void print_array(const int v[], int n){
12 int b[c]; 11 for(int i=0;i<n;i++)
13 cin >> c; 12 cout << v[i] << " ";
13 cout << endl;
11 int c; 14 }
12 int b[c]; // number of entries random at run time, NOT OK!!!!!
13 cin >> c;
28 // ordinamento per selezione 5 int m1[3][5]; // number of entries known at compile time, OK
29 void selection(int n, int v[]){ 6
7 int ri,co;
30 int i,mi; 8 cin >> ri;
31 for(i=0; i<n-1; i++){ 9 cin >> co;
32 mi = minindex(v,i,n-1); 10 int m2[ri][co]; // number of entries specified at run time, OK
33 swap(v[mi],v[i]); 11
34 } 12 for(int i=0;i<ri;i++)
35 } 13 for(int j=0;j<co;j++)
14 cin >> m2[i][j];
36
15
37 int main(){ 16 for(int i=0;i<ri;i++){
38 const int x=10; 17 for(int j=0;j<co;j++)
39 int v[x]={10,6,8,2,4,1,7,8,2,3}; 18 cout << m2[i][j] << " ";
40 print(x,v); 19 cout << endl;
41 selection(x,v); 20 }
21
42 print(x,v);
22 int r,c;
43 return 0; 23 int m3[r][c]; // number of entries random at run time, NOT OK!!!!!
44 } 24 cin >> r;
25 cin >> c;
Array statici, András Horváth 11/ 14 Array statici, András Horváth 12/ 14
Array multidimensionali, come parametro Altro da studiare
possiamo omettere dalla specifica degli array multidimensionali solo la prima ▶ operatori ++, --, +=, -=, *= e /=: Sezione 2 degli appunti
dimensione e le altre devono essere fornite tramite costanti: ▶ programmi forniti negli appunti
5 // dimensione massima di un array durante l’esecuzione:
6 const int max_size=100;
Array statici, András Horváth 13/ 14 Array statici, András Horváth 14/ 14