2-2) Array e Stringhe C++
2-2) Array e Stringhe C++
I.I.S. G. D’Alessandro
1
Gli array
2
Gli array
Giro 1: 95 secondi
Giro 2: 93 secondi
Giro 3: 88 secondi
Giro 4: 99 secondi
Giro 5: 90 secondi
3
Gli array
Giro 1: 95 secondi
Giro 2: 93 secondi
Giro 3: 88 secondi Media?
Giro 4: 99 secondi
Giro 5: 90 secondi
4
Gli array
int giro_1 = 95;
5
Gli array
int giro_1 = 95;
6
Gli array
int giro_1 = 95;
7
Gli array
int giro_1 = 95;
8
Gli array
int giro_1 = 95;
9
Gli array
int giro_1 = 95;
10
Gli array
E se i giri
fossero 50?
11
Gli array
95 93 88 99 90
12
Gli array
elementi 95 93 88 99 90
13
Gli array
indice
elementi 95 93 88 99 90
14
Gli array
indice 0
elementi 95 93 88 99 90
15
Gli array
indice 0 1
elementi 95 93 88 99 90
16
Gli array
indice 0 1 2
elementi 95 93 88 99 90
17
Gli array
indice 0 1 2 3
elementi 95 93 88 99 90
18
Gli array
indice 0 1 2 3 4
elementi 95 93 88 99 90
19
Gli array
indice 0 1 2 3 4
elementi 95 93 88 99 90
giri
20
Gli array
indice 0 1 2 3 4
elementi 95 93 88 99 90
indice 0 1 2 3 4
elementi 95 93 88 99 90
Come facciamo a
prendere il contenuto di
una cella? Ad esempio la
terza?
22
Gli array
int giri[5] = {95, 93, 88, 99, 90}
indice 0 1 2 3 4
elementi 95 93 88 99 90
Come facciamo a
prendere il contenuto di giri[2]
una cella? Ad esempio la
terza?
23
Gli array
Scrivere un programma in C che dichiara un array contenente i primi 5 numeri pari
da 2 a 10. Poi, il programma mostra in output l’elemento con indice 3.
24
Gli array
25
Gli array
26
Gli array
27
Gli array nella memoria RAM
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
28
Gli array nella memoria RAM
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 char
pippo
= ‘c’
29
Gli array nella memoria RAM
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 char
pippo
= ‘c’
2
int pluto = 2
30
Gli array nella memoria RAM
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 char
pippo
= ‘c’
2
int pluto = 2
5
int numeri_pari[5] = {2, 4, 6, 8, 10}
6
31
Inizializzare un array con un ciclo iterativo
Scrivere un programma in C che inizializza un array di 10 elementi contenente i
numeri interi da 0 a 9.
32
Inizializzare un array con un ciclo iterativo
33
Inizializzare un array con un ciclo iterativo
Scrivere un programma in C++ che inizializza un array di 10 elementi, con i
numeri dispari che vanno da 1 a 19
34
Inizializzare un array con un ciclo iterativo
35
Calcolo valori massimo e minimo
Scrivere un programma che trova il valore massimo e il valore minimo di un array
e li mostra in output.
36
Calcolo valori massimo e minimo
37
Stampa classifica
Supponi di avere la seguente classifica per 6 atleti, che riporta il numero di secondi
impiegati nella corsa ai 100 metri:
1. 12.4
2. 13.0
3. 13.3
4. 13.8
5. 14.0
6. 14.5
Scrivi un programma in C++ che inizializza un array con questi valori, stampa la
classifica.
Il programma inoltre mostra in output lo stacco in secondi tra un atleta e il successivo
38
Stampa classifica
39
Shift dei valori di un array
Considerando lo stesso array di tempi dell’esercizio precedente, immagina che
l’atleta vincitore ha invaso l'altra corsia durante la gara.
Scrivi un programma in C++ per ri-aggiornare l’array della classifica alla luce della
penalità.
40
Shift dei valori di un array
41
Conteggio dei valori ripetuti in un array
Supponiamo che la vostra classe partecipa a una competizione di corsa.
5, 1, 3, 3, 4, 1, 2, 5, 2, 1
42
Conteggio dei valori ripetuti in un array
43
Ordinamento array - Bubble Sort
44
Ordinamento array - Bubble Sort
45
Scambio dei valori di due variabili
x y
46
Scambio dei valori di due variabili
x y
int z;
47
Scambio dei valori di due variabili
x y
3 int z;
z = x;
z
48
Scambio dei valori di due variabili
x y
3 int z;
z = x;
z
49
Scambio dei valori di due variabili
x y
3 int z;
z = x;
z x = y;
50
Scambio dei valori di due variabili
x y
3 int z;
z = x;
z x = y;
51
Scambio dei valori di due variabili
x y
3 int z;
z = x;
z x = y;
y = z;
52
Scambio dei valori di due variabili
x y
3 int z;
Scambio z = x;
effettuato! z x = y;
y = z;
53
Ordinamento array - Bubble Sort
54
Lavorare con più array
Supponiamo di avere i risultati su 10 gare del gruppo di ragazzi, e quelli del
gruppo di ragazze della classe.
ragazze: 5, 1, 3, 3, 4, 1, 2, 5, 2, 1
ragazzi: 1, 2, 3, 1, 7, 5, 2, 1, 2, 4
55
Lavorare con più array
56
Un problema degli array
Immaginiamo di fare la spesa al supermercato
57
Un problema degli array
Immaginiamo di fare la spesa al supermercato
Vogliamo scrivere un
programma che tiene traccia di
quali articoli abbiamo nel
carrello, e alla fine calcola il
totale da pagare
58
Un problema degli array
Immaginiamo di fare la spesa al supermercato
float lista_della_spesa[10];
lista_della_spesa[0] = 1.19;
59
Un problema degli array
Immaginiamo di fare la spesa al supermercato
float lista_della_spesa[10];
lista_della_spesa[0] = 1.19;
…
lista_della_spesa[10] = 2.39;
60
Gli array dinamici e la classe vector
Con gli array dinamici, è possibile variare la dimensione dell’array nel corso del
programma
61
Gli array dinamici e la classe vector
Con gli array dinamici, è possibile variare la dimensione dell’array nel corso del
programma
62
Gli array dinamici e la classe vector
Per usare gli array dinamici, dobbiamo usare la classe vector
#include<vector>
63
Gli array dinamici e la classe vector
Per dichiarare un array dinamico si usa la sintassi
64
Gli array dinamici e la classe vector
Per dichiarare un array dinamico si usa la sintassi
Esempio:
vector<float> lista_della_spesa(10);
65
Introduzione a Classi e Oggetti
In C++ (e in tanti altri linguaggi di programmazione), le classi sono come stampini
per creare degli oggetti. Ma cosa vuol dire? Partiamo con un esempio semplice.
66
Cos’è una Classe?
Una classe è una struttura che definisce:
● Come sarà fatto un oggetto (cioè quali dati avrà, come una lista di numeri o
un nome).
● Cosa potrà fare un oggetto (cioè quali azioni potrai compiere su di lui, come
aggiungere o rimuovere dati).
67
Cos’è un Oggetto?
Un oggetto è un'istanza "reale" di una classe.
68
Cos’è un Oggetto?
Un oggetto è un'istanza "reale" di una classe.
Immagina una classe come il progetto di una casa, e un oggetto è la casa che
costruisci basandoti su quel progetto.
69
Cos’è un Oggetto?
Un oggetto è un'istanza "reale" di una classe.
Immagina una classe come il progetto di una casa, e un oggetto è la casa che
costruisci basandoti su quel progetto.
Puoi costruire tante case (oggetti), tutte con lo stesso progetto (classe), ma
ognuna con i suoi dati specifici.
70
vector è una Classe
In C++, la classe std::vector è già pronta e inclusa nella libreria standard (#include
<vector>). Ti permette di creare oggetti che funzionano come una lista dinamica.
Quando scriviamo:
vector<int> numeri;
stiamo dicendo:
Ad esempio, un vector può contenere una lista di numeri come [10, 20, 30].
72
Gli Oggetti Hanno Dati e Azioni
Ogni oggetto creato da una classe ha:
● Azioni (i metodi):
Ad esempio, un vector può aggiungere un numero alla lista, rimuoverne
uno, o dirti quanti numeri contiene.
73
Il metodo push_back
Il metodo push_back inserisce un nuovo elemento alla fine dell’array:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numeri;
// Usiamo dei metodi per aggiungere e gestire i dati
numeri.push_back(10); // Aggiungiamo 10
numeri.push_back(20); // Aggiungiamo 20
return 0;
}
74
Il metodo size
Il metodo size restituisce il numero di elementi attualmente contenuti nel vettore
75
Esercizio
Scrivere un programma in C++ che dichiara un vettore dinamico di 2 elementi,
imposta il primo valore a 5, il secondo valore a 3, e poi aggiunge un ulteriore
valore pari a 1.
76
Esercizio
77
Il metodo begin
Il metodo begin restituisce un riferimento all’elemento iniziale dell’array:
vector<int> piazzamenti(2);
piazzamenti[0] = 5;
piazzamenti[1] = 3;
78
Il metodo insert
Il metodo insert inserisce un elemento in una specifica posizione:
vector<int> piazzamenti(2);
piazzamenti[0] = 5;
piazzamenti[1] = 3;
[Link]([Link](), 1);
1 5 3
79
Il metodo erase
Il metodo erase cancella un elemento in una specifica posizione:
vector<int> piazzamenti(2);
piazzamenti[0] = 5;
piazzamenti[1] = 3;
[Link]([Link]());
80
Esercizio
Scrivere un programma in C++ che dichiara un vettore dinamico, lo inizializza con
i numeri da 0 a 9.
81
Esercizio
82
Esercizio
Scrivere un programma in C++ che prende in input un numero N, e mostra in
output tutti i numeri primi fino ad N.
83
Esercizio
84
Le stringhe in C++
85
Le stringhe in C++
86
Le stringhe in C++
87
Le stringhe in C++
88
Le stringhe in C++
89
Le stringhe in C++
91
La classe string
Si possono usare array dinamici speciali per gestire le stringhe
92
La classe string
Si possono usare array dinamici speciali per gestire le stringhe
#include<string>
93
La classe string
Per dichiarare una stringa si può quindi usare questa sintassi:
94
La classe string
Per dichiarare una stringa si può quindi usare questa sintassi:
Ad esempio:
95
Prendere in input una stringa
Per prendere in input una stringa useremo la funzione getline con la sintassi:
getline(cin, nome_stringa);
96
Esercizio
Scrivere un programma in C++ che prende in input il nominativo e l’indirizzo di una
persona, e li mostra in output combinandoli insieme sulla stessa riga.
97
Esercizio
98
Il metodo at
Il metodo at serve ad accedere ad un elemento di un vettore/stringa, e controlla
se l’indice è valido:
vector<int> piazzamenti(2);
piazzamenti[0] = 5;
piazzamenti[1] = 3;
5 3
99
Il metodo at
Il metodo at serve ad accedere ad un elemento di un vettore/stringa, e controlla
se l’indice è valido:
vector<int> piazzamenti(2);
piazzamenti[0] = 5;
piazzamenti[1] = 3;
piazzamenti[2] 5 3
Invece restituisce un valore
casuale!
100
Il metodo at
101
Array bidimensionali - Matrici
Un array bidimensionale rappresenta un insieme di variabili dello stesso tipo
organizzati in due dimensioni, come le righe e le colonne di una tabella.
102
Array bidimensionali - Matrici
Un array monodimensionale lo possiamo immaginare come uno scaffale di un
archivio
103
Array bidimensionali - Matrici
Un array bidimensionale lo possiamo immaginare come un archivio intero
104
Array bidimensionali - Matrici
In C++ possiamo dichiarare una matrice ad esempio in questo modo:
int mia_matrice[3][4];
105
Array bidimensionali - Matrici
In C++ possiamo dichiarare una matrice ad esempio in questo modo:
int mia_matrice[3][4];
106
Array bidimensionali - Matrici
Si può inizializzare l’array bidimensionale al momento della dichiarazione, così:
107
Array bidimensionali - Matrici
Si può inizializzare l’array bidimensionale al momento della dichiarazione, così:
108
Esercizio
Data la matrice:
109
Esercizio
110
Le strutture di dati
Le struct (o strutture) sono uno strumento fondamentale in C++ che ci
permette di raggruppare diversi tipi di dati in un'unica entità.
111
Le strutture di dati
Le struct (o strutture) sono uno strumento fondamentale in C++ che ci
permette di raggruppare diversi tipi di dati in un'unica entità.
Sono una sorta di "contenitore" che rende il codice più ordinato e facile da capire,
soprattutto quando hai a che fare con dati complessi.
112
Le strutture di dati
struct squadra{
string nome;
int punti;
};
113
Le strutture di dati
struct squadra{
string nome;
int punti;
};
nome e punti si
chiamano attributi della
struttura
114
Le strutture di dati
struct squadra{
string nome; La struttura
int punti; squadra è un
}; modello astratto!
Ci dice come è fatta,
in generale una
squadra
nome e punti si
chiamano attributi della
struttura
115
Le strutture di dati
Per creare poi una istanza concreta di una squadra, cioè un oggetto che eredita le
sue caratteristiche generali e ne dà valori specifici, scriveremo ad esempio:
116
Le strutture di dati
Per accedere a un attributo di una struttura si usa la sintassi col punto
[Link] = “Tigers”;
117
Esercizio
Scrivere un programma in C++ che dichiara la struttura squadra vista prima:
struct squadra{
string nome;
int punti;
};
119
Esercizio
Scrivere un programma in C++ che dichiara una struttura appropriata per
rappresentare una data. Esempio: 25 Aprile 1945.
120
Esercizio
121
Array di strutture
E’ possibile scrivere un array di strutture
struct data{
int giorno;
int mese;
int anno;
};
struct data giornate[3] = {{2, 5, 2020},
{9, 5, 2020},
{16, 5, 2020}};
122
Array di strutture
E’ possibile scrivere un array di strutture
struct data{
int giorno;
int mese;
int anno;
};
struct data giornate[3] = {{2, 5, 2020},
{9, 5, 2020},
{16, 5, 2020}};
123