26 marzo 2024
Generalmente una variabile può contenere un solo valore, spesso però si vuole eseguire operazioni su una sequenza di variabili, una soluzione è l’utilizzo di un array (o vettore). Un array è una collezione di elementi omogenei (tutti dello stesso tipo).
La dichiarazione di un array avviene specificando il tipo e il numero degli elementi:
La dimensione dell’array è una costante intera, spesso definita tramite una macro o una costante:
oppure:
Si accede a un elemento dell’array tramite subscripting:
Gli indici degli array in C partono da 0, come in Java.
Il compilatore C non controlla i limiti degli array, quindi è possibile accedere a elementi fuori dal range definito, questo può causare errori difficili da individuare.
Si intuisce che C sia molto permissivo con il subscripting, il seguente codice quindi è perfettamente legittimo:
Un array può essere inizializzato al momento della dichiarazione:
Se si mettono meno numeri, i restanti elementi vengono inizializzati a 0 (ma questo non succede se non ne specifico nessuno!):
Se metto più elementi di quelli dichiarati il compilatore segnala un errore. Se invece si omette la dimensione dell’array, il compilatore la calcola automaticamente dalla lista di initializzazione:
In C non esiste un sistema per ottenere senza sforzo la dimensione di un array, per questo, spesso, si utilizza una variabile per memorizzare la dimensione dell’array.
Tuttavia si può usare sizeof
per ottenere la dimensione di un array:
Un array può contenere elementi di qualsiasi tipo, anche altri array! Per dichiarare un array multidimensionale si specifica il numero di elementi per ogni dimensione:
int matrix[5][9];
Per accedere a un elemento di un array multidimensionale si usano più indici:
matrix[1][5] = 42;
e NON matrix[1,5] = 42;
int matrix[5][9]; matrix[1][5] = 42;
Scrivere un programma che distribuisca una mano di carte per il gioco della briscola (3 carte) e le stampi a video.
Scrivere un programma per calcolare la somma di due array di interi di dimensione 10. La soluzione si compone di 2 parti:
Scrivere un programma che stampi la somma delle righe e delle colonne di una matrice \(5 \times 5\) di interi.
La matrice è la seguente: 8 3 9 0 10 3 5 17 1 1 2 8 6 23 1 15 7 3 2 9 6 14 2 6 0
Esempio di esecuzione:
In C si può pensare a una qualsiasi funzione come una scatola nera con un certo numero di ingressi e un solo output.
Praticamente una funzione è un sottoprogramma, un insieme di istruzioni che esegue un compito specifico.
Esempio:
Il valore di ritorno può non esserci, anche i parametri possono essere void
oppure si possono omettere:
Nota
L’istruzione return
può essere omessa in una funzione void
.
Le funzioni possono essere dichiarate e definite in due momenti diversi del programma.
La dichiarazione di una funzione è una promessa che il programmatore fa al compilatore: “presto ti dirò cosa fa questa funzione”.
La sintassi della dichiarazione è la stessa della definizione, ma senza il corpo della funzione:
Esempio:
Gli argomenti possono anche essere degli array, mentre il tipo di ritorno no.
Se si passa un array come argomento, si può omettere la sua dimensione, ma in tal caso non sarà possibile conoscere la dimensione dell’array all’interno della funzione, per questo spesso si passa anche la dimensione dell’array come argomento.
Scrivere una funzione che trovi il valore minimo in un array di numeri interi la firma della funzione è int array_min(int arr[], int size)
.
Scrivere una funzione ricorsiva per sommare gli elementi di un array di double, la firma della funzione è double array_sum(double arr[], int size)
.
Scrivere una funzione ricorsiva che, dato un array di caratteri, ne stampi il contenuto su standard output. La firma della funzione è void print_string(char arr[], int size)
.
Modificare la soluzione dell’esercizio precedente per stampare l’array in ordine inverso. Implementare poi una soluzione non ricorsiva allo stesso problema.
Scrivere una funzione ricorsiva all
che, dato un array di interi, restituisca true se tutti gli elementi dell’array sono diversi da 0, false altrimenti.
Dati e Algoritmi