Il 0% ha trovato utile questo documento (0 voti)
2 visualizzazioni

03 Array Lucidi

Caricato da

cennifrancesco3
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
2 visualizzazioni

03 Array Lucidi

Caricato da

cennifrancesco3
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 4

Gli array

▶ gli array sono sequenze di variabili dello stesso tipo


▶ gli elementi vengono situate consecutivamente nella memoria
Array statici
▶ per creare (dichiarare) un array bisogna specificare il tipo degli elementi, il
nome e il numero degli elementi, cioè la dimensione
András Horváth ▶ per esempio, con int v[5]; si crea nella memoria un array di 5 int:
[email protected]

▶ l’indice del primo elemento è 0


▶ per accedere ad un elemento bisogna usare il nome dell’array e specificare
l’indice dell’elemento
▶ sono statici perché il tipo e la dimensione non sono modificabili durante
l’esecuzione
▶ il nome dell’array scritto senza indice è l’indirizzo del primo elemento
(cout << v; stampa l’indirizzo del primo elemento)
Array statici, András Horváth 1/ 14 Array statici, András Horváth 2/ 14

Gli array Esempio di dichiarazione e utilizzo di un array

▶ 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])

Array statici, András Horváth 3/ 14 Array statici, András Horváth 4/ 14


Numero di elementi Array come parametro, funzioni

▶ 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;

Array statici, András Horváth 5/ 14 Array statici, András Horváth 6/ 14

Array come parametro, intero programma Ordinamento per selezione, idea


1 // array come parametro
2 #include<iostream>
3 using namespace std;
▶ procedimento:
4 ▶ si cerca l’elemento più piccolo e si scambia questo elemento con il primo
5 void read_array(int v[], int n){ elemento
6 for(int i=0;i<n;i++)
7 cin >> v[i];
▶ si cerca l’elemento più piccolo escludendo la prima posizione e si scambia
8 } questo elemento con il secondo elemento
9 ▶ si cerca l’elemento più piccolo escludendo le prime due posizioni e si scambia
10 void print_array(const int v[], int n){
questo elemento con il terzo elemento
11 for(int i=0;i<n;i++)
12 cout << v[i] << " ";
▶ ...
13 cout << endl; ▶ in altre parole: si amplia la parte ordinata cercando l’elemento più piccolo
14 }
15 della parte non ordinata e facendo un scambio
16 int main(){ ▶ esempio (parte in grassetto è ordinato):
17 int n;
18 cin >> n; ▶ vettore iniziale: ( 8,10,1,2,5)
19 int a[n]; ▶ dopo un scambio: (1,10,8,2,5)
20 read_array(a,n); ▶ dopo due scambi: (1,2,8,10,5)
21 print_array(a,n);
22 return 0;
▶ dopo tre scambi: (1,2,5,10,8)
23 } ▶ dopo quattro scambi: (1,2,5,8,10)
Array statici, András Horváth 7/ 14 Array statici, András Horváth 8/ 14
Ordinamento per selezione, codice Ordinamento per selezione, codice

1 // ordinamento per selezione 12 // restituisce indice dell’elemento minimo in (v[i],v[i+1],...,v[j])


2 #include<iostream> 13 int minindex(const int v[], int i, int j){
3 using namespace std; 14 int m=i;
4 15 for(int k=i+1;k<=j;k++)
5 // stampa vettore di interi 16 if(v[k]<v[m])
6 void print(const int n, int v[]){ 17 m=k;
7 for(int i=0;i<n;i++) 18 return m;
8 cout << v[i] << " "; 19 }
9 cout<<"\n"; 20
10 } 21 // scambio
22 void swap(int &a, int &b){
23 int temp=a;
24 a=b;
25 b=temp;
26 }

Array statici, András Horváth 9/ 14 Array statici, András Horváth 10/ 14

Ordinamento per selezione, codice Array multidimensionali, dichiarazione

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;

23 // stampa una matrice a video


24 void print_matrix(const int m[][max_size], int r, int c){
25 for(int i=0;i<r;i++){
26 for(int j=0;j<c;j++)
27 cout << m[i][j]<< " ";
28 cout << endl;
29 }
30 }

Array statici, András Horváth 13/ 14 Array statici, András Horváth 14/ 14

Potrebbero piacerti anche