====== 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 in un array =====
Scrivere una funzione di prototipo
void max (double * vec, int lung, double* pmax, int* pind);
che cerca l'elemento massimo nell'array ''vec'' di lung elementi. La funzione restituisce in *pind e *pmax l'indice dell'elemento massimo 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: Somma e prodotto di matrici =====
Scrivere un programma C costituito da un ''main()'' che legge da standard input due matrici quadrate, le somma, calcola il prodotto e stampa i risultati sullo standard output.
===== Esercizio 5: MSS, Maximum Segment Sum =====
Dato un array di interi positivi e negativi, il segmento di somma massima e' la porzione contigua dell'array in cui la somma deigli 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);
===== Esercizio 6: 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 fino all riga ''n''-esima.
===== Esercizio 7: Algoritmi di ordinamento su Array =====
Facendo riferimento agli algoritmi di ordinamento visti a lezione, implementare un algoritmo di ordinamento non ricorsivo (bubblesort o selection sort) e l'algoritmo merge-sort su array di double.
Valutare i tempi di esecuzione su array di lunghezza crescente generati casualmente nell'intervallo [0,1] utilizzando le funzioni ''rand(), srand()'' e il comenado di shell ''time''. Ci sono delle variazioni ?
===== Esercizio 8: Algoritmi di ordinamento su Array: costo ... =====
Cercare una formula (approssimata) che fornisca il numero di istruzioni eseguite dai tre algoritmi di ordinamento (selection sort, bubblesort e mergesort) in funzione di //n//, lunghezza dell'array da ordinare.