Insegnamento
Informatica
Data
May 1, 2022
Tipo di prova
SimulazioneProva completa
Soluzioni
Con soluzioni
/** Domanda 3: Scrivere una funzione (obbligatoriamente ricorsiva):
int map(vector<int> V, int f(int b))
che prende un vettore V={V[0], …, V[n-1]} di interi, una funzione f
da interi a interi, un intero 0mn, e restituisce
map(V,f,m) = (f(V[0]) + … + f(V[m-1]).
Esempio. Sia V = {0,1,2,3,4,5} e f(x)=2x, g(x)=x*x e h(x)=x.
Allora map(V,f,6) = 0+2+4+6+8+10 = 30 e map(V,g,6) = 0+1+4+9+16+25 = 55
e map(V,h,6) = 0+1+2+3+4+5 = 15.
*/
// TESTO DOMANDA 3: completare con una funzione ricorsiva:
#include <math.h>
#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;
int map(vector<int> V, int f(int b), int m){
if (m <= 0)
return 0;
else
return f(V[m-1]) + map(V, f, m-1);
}
/* Note.
(i) Fate attenzione all'uso dell'indice m nel test per
il caso base e nella chiamata ricorsiva (vedere testo
dell'esercizio).
(ii) in C(++) e` possibile passare come parametro
di una funzione map un'altra funzione f, che potra`
essere usata nel modo solito nel body di map,
ovvero in questo caso passandole un parametro di tipo
int come richiesto.
*/
void print(vector<int> V, int a) {
if (a<V.size()){cout << V[a] << " "; print(V, a+1);}
}
int f(int x){return 2*x;}
int g(int x){return x*x;}
int main(){
vector<int> V(6,0); V[0]=0; V[1]=1; V[2]=2; V[3]=3; V[4]=4; V[5]=5;
cout << "Il vettore V: " << endl;
print(V,0); cout << endl << endl;
cout << " map(V,f,6)=" << map(V,f,6) << endl;
cout << " map(V,g,6)=" << map(V,g,6) << endl;
system("pause");
}