Indice
Esercitazione: Array e puntatori
Esercizio 1: Ricerca in un array
Scrivere una funzione di prototipo
int cerca (int * vec, int lung, int x);
che cerca se l'elemento x
e' presente nell'array vec
di lung elementi e restituisce 1 se lo trova e 0 se non lo trova.
Verificare la correttezza della funzione utilizzando un opportuno main()
.
Esercizio 2: Ricerca del massimo e del minimo in un array
Scrivere una funzione di prototipo
void max (double * vec, int lung, double* pmax, double* pmin, int* pindmax, int *pindmin);
che cerca l'elemento massimo e l'elemento minimo nell'array vec
di lung elementi. La funzione restituisce in *pindmax e *pmax l'indice dell'elemento massimo ed il suo valore rispettivamente, e in *pindmin e *pmin l'indice dell'elemento minimo ed il suo valore rispettivamente.
Verificare la correttezza della funzione utilizzando un opportuno main()
.
Esercizio 3: Funzione swap
Scrivere una funzione di prototipo
void swap (int *a, int *b);
che ha l'effetto di scambiare i valori di due variabili, ad esempio:
int a=5; int b=63; swap(&a,&b); printf("a = %d, b = %d \n", a, b); ....
deve stampare
a = 63, b = 5
Sarebbe stato possibile ottenere lo stesso effetto utilizzando una funzione di prototipo
void swap (int a, int b);
? Perche' ?
Esercizio 4: Lettura, ordinamento e stampa di array
Scrivere un programma C costituito da un main()
che fino a che l'utente non chede di smettere legge da standard input un array di double lungo N, lo ordina e stampa l'array ordinato sullo standard output.
Suggerimento: Usare la funzione swap()
dell'esercizio precedente per scambiare di posto due valori dell'array durante l'ordinamento.
Esercizio 5: MSS, Maximum Segment Sum (con funzioni)
Dato un array di interi positivi e negativi, il segmento di somma massima e' la porzione contigua dell'array in cui la somma degli elementi ha valore piu' alto. Ad esempio l'array
[2,-4,2,-1,6-3]
ha come SSM il segmento [2,-1,6] di valore 7. Si chiede di definire due funzioni per la stampa e per il calcolo di SSM, con i seguenti prototipi :
/** stampa l'array s di lunghezza n */ void print_array(int s[], int n); /** calcola SSM sull'array s di lunghezza lung \param s array \param n lunghezza \param s_init puntatore alla variabile che conterra' la posizione di inizio dell'SSM \param s_lung puntatore alla variabile che conterra' la lunghezza del segmento di somma massima \retval k la somma degli elementi dell' SSM */ int ssm (int s[], int n, int * s_init, int * s_lung);
Quanti confronti vengono fatti dal programma che avete scritto ?
E' possibile sviluppare un algoritmo che risolve il problema con un numero di confronti lineare con la lunghezza $n$ dell'array. Come potrebbe essere organizzato ?
Esercizio 6: (avanzato) Stampa del triangolo di Tartaglia
Il triangolo di Tartaglia è una disposizione geometrica dei coefficienti binomiali, ad esempio:
1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 .......
Scrivere un programma C che legge un intero n
da standard input e stampa il triangolo di Tartaglia sullo standard output in maniera gradevole fino all riga n
-esima.