============================================================== SOLUZIONI ============================================================== 1. #include #define DIM 50 float Media(float vet[], int from, int dim) /* funzione di calcolo della media in modo ricorsivo */ { float med,med1; if(from == dim-1) med=vet[from]; else { med1=Media(vet, from+1, dim-1); med=(float)vet[from]/dim + (float)med1*(dim-1/dim); } return med; } void main() { int cont; float media, a[DIM]; for(cont=0; cont int prodotto(int x, int y) { if ((x == 0) || (y == 0)) return 0; else return x + prodotto(x, y-1); } int esponente(int x, int y) { if ( y==0 ) return 1; else return prodotto(x, esponente(x, y-1)); } main() { int x, y, res; printf("Inserisci x: "); scanf("%d",&x); printf("Inserisci y: "); scanf("%d",&y); res = prodotto(x, y); printf("Il risultato del prodotto e' %d\n", res); res = esponente(x, y); printf("Il risultato dell'esponente e' %d\n", res); } ============================================================== 3. #include int multiply(int *vet, int from, int to) { if (from > to) return 1; if (from % 2 == 0) return vet[from]*multiply(vet, from+2, to); else return multiply(vet, from+1, to); } main(){ int v[] = {3, 2, 3, 4}; int res; res = multiply(v, 0, 3); printf("Il prodotto dei pari e' %d\n",res); } ============================================================== 4. #include void invertiNumero(int num){ if (num != 0) { printf("%d", num%10); invertiNumero(num/10); } } OPPURE void invertiNumero(int num) { if (num < 10) printf ("%d", num); else { printf("%d", num%10); invertiNumero(num/10); } } main() { int num; do { printf("Immetti un numero maggiore di 0: "); scanf("%d",&num); } while (num <= 0); invertiNumero(num); printf("\n"); } ============================================================== 5. #include #define TRUE 1 #define FALSE 0 int isPal(int *vet, int from, int to) { if (from >= to) return TRUE; else return (vet[from] == vet[to] && isPal(vet, from+1, to-1)); } main(){ int v[4] = {1,2,1,0}; if(isPal(v,0,3)) printf("il vettore e' palindromo\n"); else printf("il vettore non e' palindromo\n"); } ============================================================== 6. #include int A(int m, int n) { int res; if (m == 0) return n+1; else if (n == 0) return A(m-1,1); else return A(m-1, A(m,n-1)); } main(){ int n,m,res; printf("inserisci m: "); scanf("%d",&m); printf("inserisci n: "); scanf("%d",&n); res=A(m,n); printf("A(%d,%d) = %d\n", m, n, res); } ============================================================== 7. #include int palindroma(void) { char prima, dopo; int pal; do { /* ciclo per saltare spazi bianchi e a capo */ prima = getchar(); } while (prima == ' ' || prima == '\n'); if (prima == '.') return 1; /* la sequenza "." e` palindroma */ else { pal = palindroma(); /* verifica se la sequenza di caratteri tranne il primo e l'ultimo e` palindroma */ do { /* ciclo per saltare spazi bianchi e a capo */ dopo = getchar(); } while (dopo == ' ' || dopo == '\n'); return (pal && prima == dopo); } } int main() { printf("Immetti una sequenza di caratteri (con un '.' centrale)!\n"); if (palindroma()) printf("E` palindroma\n"); else printf("Non e` palindroma\n"); } ============================================================== 8. #include int ricBin(int *vet, int from, int to, int num) { int mid; if (from > to) return -1; mid = (from + to)/2; if (vet[mid] == num) return mid; else if (vet[mid] < num) return ricBin(vet, mid+1, to, num); else return ricBin(vet, from, mid-1, num); } main(){ int v[6] = {2, 3, 4, 6, 8, 9}; int num, res; printf("Inserisci il numero da cercare: "); scanf("%d",&num); res = ricBin(v, 0, LUNG-1, num); if (res == -1) printf("Il numero %d non e' presente\n", num); else printf("Il numero %d e' presente nella posizione di indice %d\n", num, res); }