Il 0% ha trovato utile questo documento (0 voti)
6 visualizzazioni123 pagine

2-2) Array e Stringhe C++

Il documento tratta degli array e delle stringhe in C++, spiegando come dichiararli, inizializzarli e utilizzarli per gestire dati come i tempi di gara. Vengono presentati vari esempi pratici, tra cui il calcolo della media, l'ordinamento e il conteggio dei valori ripetuti. Inoltre, si introduce la classe vector per gestire array dinamici e si accenna al concetto di classi e oggetti in C++.
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
6 visualizzazioni123 pagine

2-2) Array e Stringhe C++

Il documento tratta degli array e delle stringhe in C++, spiegando come dichiararli, inizializzarli e utilizzarli per gestire dati come i tempi di gara. Vengono presentati vari esempi pratici, tra cui il calcolo della media, l'ordinamento e il conteggio dei valori ripetuti. Inoltre, si introduce la classe vector per gestire array dinamici e si accenna al concetto di classi e oggetti in C++.
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

Array e stringhe in C++

Prof. Andrea Giammanco

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;

int giro_2 = 93;

6
Gli array
int giro_1 = 95;

int giro_2 = 93;

int giro_3 = 88;

7
Gli array
int giro_1 = 95;

int giro_2 = 93;

int giro_3 = 88;

int giro_4 = 99;

8
Gli array
int giro_1 = 95;

int giro_2 = 93;

int giro_3 = 88;

int giro_4 = 99;

int giro_5 = 90;

9
Gli array
int giro_1 = 95;

int giro_2 = 93;

int giro_3 = 88;

int giro_4 = 99;

int giro_5 = 90;

float media = (giro_1 + giro_2 + giro_3 + giro_4 + giro_5) / 5

10
Gli array

E se i giri
fossero 50?

11
Gli array

Un array è un insieme di variabili dello stesso tipo.

95 93 88 99 90

12
Gli array

Un array è un insieme di variabili dello stesso tipo.

elementi 95 93 88 99 90

13
Gli array

Un array è un insieme di variabili dello stesso tipo.

indice

elementi 95 93 88 99 90

14
Gli array

Un array è un insieme di variabili dello stesso tipo.

indice 0

elementi 95 93 88 99 90

15
Gli array

Un array è un insieme di variabili dello stesso tipo.

indice 0 1

elementi 95 93 88 99 90

16
Gli array

Un array è un insieme di variabili dello stesso tipo.

indice 0 1 2

elementi 95 93 88 99 90

17
Gli array

Un array è un insieme di variabili dello stesso tipo.

indice 0 1 2 3

elementi 95 93 88 99 90

18
Gli array

Un array è un insieme di variabili dello stesso tipo.

indice 0 1 2 3 4

elementi 95 93 88 99 90

19
Gli array

Un array è un insieme di variabili dello stesso tipo.

indice 0 1 2 3 4

elementi 95 93 88 99 90

Chiamiamo questo array:

giri
20
Gli array

Un array è un insieme di variabili dello stesso tipo.

indice 0 1 2 3 4

elementi 95 93 88 99 90

In C++, dichiariamo un array di questo tipo così:


Chiamiamo questo array:
int giri[5] = {95, 93, 88, 99, 90}
giri
dimensione
21
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
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

Possiamo anche dichiarare un array con la sua dimensione, e


inserire i valori in un secondo momento

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.

Quindi il suo punteggio viene penalizzato aggiungendo 10 secondi.

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.

Si registrano i seguenti piazzamenti:

5, 1, 3, 3, 4, 1, 2, 5, 2, 1

La prima gara siete arrivati quinti, la seconda prima, e così via…

Vogliamo scrivere un programma in C++ che conta i piazzamenti totali nelle


diverse posizioni:

Ad esempio, siamo arrivati primi ben tre volte!

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

int x = 3; 3 15 int y = 15;

x y

46
Scambio dei valori di due variabili

int x = 3; 3 15 int y = 15;

x y

int z;

47
Scambio dei valori di due variabili

int x = 3; 3 15 int y = 15;

x y

3 int z;
z = x;
z

48
Scambio dei valori di due variabili

int x = 3; 3 15 int y = 15;

x y

3 int z;
z = x;
z

49
Scambio dei valori di due variabili

int x = 3; 15 15 int y = 15;

x y

3 int z;
z = x;
z x = y;

50
Scambio dei valori di due variabili

int x = 3; 15 15 int y = 15;

x y

3 int z;
z = x;
z x = y;

51
Scambio dei valori di due variabili

int x = 3; 15 3 int y = 15;

x y

3 int z;
z = x;
z x = y;
y = z;

52
Scambio dei valori di due variabili

int x = 3; 15 3 int y = 15;

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

Scriviamo un programma per sapere, in ogni competizione, se ha fatto meglio il


gruppo di ragazze oppure il gruppo di ragazzi

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

Una prima soluzione potrebbe


essere quella di creare un array
di float, e ogni volta che
inseriamo un prodotto nel
carrello, memorizziamo il suo
prezzo nell’array

float lista_della_spesa[10];
lista_della_spesa[0] = 1.19;
59
Un problema degli array
Immaginiamo di fare la spesa al supermercato

Il problema di questo approccio


è che non sappiamo a priori
quanta spesa vogliamo fare… E
se sforiamo la dimensione
dell’array?

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

Aggiungi elementi e il vector si espande. Rimuovi elementi e si ridimensiona. Tutto


questo senza dover pensare alla gestione della memoria

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

vector<tipo di dato> nome_array(dimensione_di_partenza);

64
Gli array dinamici e la classe vector
Per dichiarare un array dinamico si usa la sintassi

vector<tipo di dato> nome_array(dimensione_di_partenza);

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).

In altre parole, una classe è un progetto, un disegno tecnico, un modello.

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:

● Usa il progetto chiamato vector.


● Crea un oggetto chiamato numeri.
● Questo oggetto sarà una lista dinamica che può contenere numeri interi (int).
71
Gli Oggetti Hanno Dati e Azioni
Ogni oggetto creato da una classe ha:

● Dati (le informazioni che contiene):

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:

● Dati (le informazioni che contiene):


Ad esempio, un vector può contenere una lista di numeri come [10, 20, 30].

● 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

vector<int> numeri = {1, 2, 3, 4};

cout << [Link](); // Output: 4

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.

Infine il programma mostra in output la dimensione dell’array

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;

[Link](); // è un riferimento al primo elemento

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.

Il programma cancella l’elemento di indice 2.

Dopo, il programma inserisce all’inizio dell’array il valore 100.

Infine il programma mostra in output l’array.

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++

In C++ le stringhe sono array di caratteri

85
Le stringhe in C++

In C++ le stringhe sono array di caratteri

‘m’ ‘a’ ‘r’ ‘i’ ‘o’

86
Le stringhe in C++

In C++ le stringhe sono array di caratteri

‘m’ ‘a’ ‘r’ ‘i’ ‘o’ ‘\0’

87
Le stringhe in C++

In C++ le stringhe sono array di caratteri

“qui finisce la stringa di caratteri”

‘m’ ‘a’ ‘r’ ‘i’ ‘o’ ‘\0’

88
Le stringhe in C++

In C++ le stringhe sono array di caratteri

‘m’ ‘a’ ‘r’ ‘i’ ‘o’ ‘\0’

In C++, dichiariamo una stringa di questo tipo così:


char nome[] = “Mario”;

89
Le stringhe in C++

In C++ le stringhe sono array di caratteri

‘m’ ‘a’ ‘r’ ‘i’ ‘o’ ‘\0’

In C++, dichiariamo una stringa di questo tipo così:


char nome[] = “Mario”;

char nome[] = {‘M’, ‘a’, ‘r’, ‘i’, ‘o’}; 90


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

Per usare la classe stringa dobbiamo includerla in questo modo

#include<string>

93
La classe string
Per dichiarare una stringa si può quindi usare questa sintassi:

string nome_stringa(“testo della stringa”)

94
La classe string
Per dichiarare una stringa si può quindi usare questa sintassi:

string nome_stringa(“testo della stringa”)

Ad esempio:

string nominativo(“mario rossi”);

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;

[Link](2); // restituisce errore

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;

[Link](2); // restituisce errore

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ì:

int mia_matrice [3][4]={


{100, 101, 102, 103},
{104, 105, 106, 107},
{108, 109, 110, 111}};

107
Array bidimensionali - Matrici
Si può inizializzare l’array bidimensionale al momento della dichiarazione, così:

int mia_matrice [3][4]={


{100, 101, 102, 103},
{104, 105, 106, 107},
{108, 109, 110, 111}};

108
Esercizio
Data la matrice:

int mia_matrice [3][4]={


{100, 101, 102, 103},
{104, 105, 106, 107},
{108, 109, 110, 111}};

Sommare tutti i suoi elementi, e mostrare in output la somma ottenuta

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:

struct squadra miaSquadra = {“Palermo”, 20};

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

Il programma poi crea due oggetti della struttura squadra.


1. miaSquadra, con nome “Palermo” e punti 6
2. tuaSquadra, con nome da chiedere in input all’utente, e punteggio calcolato
prendendo il punteggio di miaSquadra e sottraendo 3
118
Esercizio

119
Esercizio
Scrivere un programma in C++ che dichiara una struttura appropriata per
rappresentare una data. Esempio: 25 Aprile 1945.

Poi, il programma crea una istanza di questa struttura, e chiede all’utente di


inserire i valori della data odierna.

Infine, il programma mostra in output i valori della data odierna

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

Potrebbero piacerti anche