Esercizio 1 Scrivere un programma che prenda in input ed inizializzi con valori interi un vettore di interi V di lunghezza 10 e stampi gli elementi di V dall'ultimo al primo. Il main del programma deve occuparsi dell'inizializzazione del vettore, mentre la stampa deve essere eseguita da una funzione ricorsiva che prenda in input il vettore V e la sua lunghezza. Note: Il vettore va letto in una sola riga, questo pu essere fatto con il seguente codice: scanf(%d %d %d %d %d %d %d %d %d %d,&(V[0]),&(V[1]),&(V[2]),&(V[3]),&(V[4]),&(V[5]),&(V[6]),&(V[7]),&(V[8]),&(V[9])); I valori del vettore in input inseriti da tastiera devono essere separati da singoli spazi bianchi. Ad esempio, per il vettore V =[0,1,2,3,4,5,6,7,8,9] l'input : 0 1 2 3 4 5 6 7 8 9 La funzione ricorsiva deve stampare gli elementi del vettore dall'ultimo al primo, cio: V[9] V[8] .. .. V[0] La stampa deve andare a capo dopo ogni valore stampato. Il programma deve stampare solamente il risultato. La funzione di stampa deve essere ricorsiva, funzioni iterative saranno considerate errate. Esempio Se il programma prende in input V =[0,1,2,3,4,5,6,7,8,9] l'esecuzione corretta : 0 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 0 Esercizio 2 Una matrice M:n x n rappresenta le strade che connettono n paesi. In particolare, M[i,j] vale 1 se esiste una strada diretta dal paese i al paese j, 0 altrimenti. Si assume che: - M[i,i] = 1 per ogni i = 0,..,n-1. - M[i,j] = M[j,i] per ogni i,j = 0,..,n-1 Un percorso dal paese i al paese j una sequenza di paesi connessi tra loro, cio una sequenza p(1),..,p(m) t.c. - p(1) = i, - p(m) = j, - per ogni k=1,..,m-1, M[p(k),p(k+1)] = 1. La lunghezza di un percorso tra due paesi i e j definita come il numero di strade da attraversare per arrivare da i a j. Quindi un percorso p(1),..,p(m) ha lunghezza m-1. Scrivere un programma che legga da tastiera una matrice M di dimensioni 6x6, due interi i e j ed un valore intero max, e dica se esiste un percorso dal paese i al paese j di lunghezza al pi max. Note Il main del programma deve leggere da tastiera i valori binari per inizializzare la matrice in input per righe (una riga intera alla volta). Dopo la lettura della matrice, senza l'aggiunta di alcun tipo di stampa, dovr leggere i, j e max. La lettura pu essere effettuata iterando con un ciclo sul numero di righe un codice simile a quello dato nell'esercizio 1. La verifica dell'esistenza del percorso deve essere calcolata da una funzione ricorsiva che prenda in input la matrice M, i due paesi i e j e la lunghezza massima del percorso max. Il programma dovr stampare 1 se il percorso esiste, 0 altrimenti. La funzione di verifica dell'esistenza del percorso deve essere ricorsiva, funzioni iterative saranno considerate errate. Esempio: Consideriamo la matrice 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 1 0 1 1 0 0 0 1 1 1 Il paese 3 ha un percorso diretto con i paesi 2 e 5, mentre il paese 0 ha un percorso diretto solamente con 1. Supponiamo di voler verificare se esiste un percorso da 3 a 0 di lunghezza al pi 3. Quindi i = 3, j = 0, max = 3. Il programma deve leggere la matrice per righe e poi i, j e max, quindi l'input : 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 1 0 1 1 0 0 0 1 1 1 3 0 3 Il percorso esiste, perch 3->2->1->0 ha lunghezza 3. Il programma deve quindi stampare: 1 Riassumendo, l'esecuzione corretta : 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 1 0 1 1 0 0 0 1 1 1 3 0 3 1