Insegnamento
Informatica
Data
September 11, 2018
Tipo di prova
Prova completa
Soluzioni
Con soluzioni
/** DOMANDA 1.
Scrivete una funzione RICORSIVA
int somma(vector<int> v, int i)
che, dati un vector<int> v e un int i, restituisca la somma di
tutti gli elementi positivi di v a partire dalla posizione i. Si assuma
che 0 <= i < v.length, ovvero non e` richiesto controllare nella
funzione che i sia una posizione legale.
DOMANDA 2.
Inserite nel programma la struttura
struct Temperatura {string luogo, mese; int temp;};
Quindi definite una funzione
boolean compresi(vector<Temperatura> loc, int temp1, int temp2)
che restituisca true se almeno una temperatura di "TO" e` compresa tra 'temp1'
e 'temp2', false altrimenti.
DOMANDA 3.
Scrivere una funzione
vector <int> vettMinoriUguali(vector<int> v, int el)
che, dato un vector<int> v e un int el, restituisca un vector<int>
di tutti gli elementi minori o uguali a el. Il vettore restituito
deve avere dimensione adeguata, cioe` pari al numero degli elementi
che soddisfano la condizione.
DOMANDA 4.
Scrivete una funzione
boolean noPrefisso(string s, string r)
che restituisca true se s NON e` prefisso di r,
false altrimenti.
*/
#include <math.h>
#include <iostream>
#include <stdlib.h>
#include <string>
#include <vector>
using namespace std;
struct Temperatura {string luogo, mese; int temp;};
// DOMANDA 1: completare
int somma(vector<int> v, int i) {
if (i >= v.size())
return 0;
else
if (v[i] > 0) return v[i] + somma(v, i+1);
else return somma(v, i+1);
}
//DOMANDA 2: completare
bool compresiTO(vector<Temperatura> loc, int temp1, int temp2) {
int i;
for (i = 0; i < loc.size(); i++) {
if ((loc[i].temp >= temp1 && loc[i].temp <= temp2) && loc[i].luogo == "TO") return true;
}
return false;
}
// DOMANDA 3: completare
vector <int> vettMinoriUguali(vector<int> v, int el) {
int i;
vector<int> r(0);
for (i = 0; i < v.size(); i++)
if (v[i] <= el)
r.push_back(v[i]);
return r;
}
// DOMANDA 4: completare
bool noPrefisso(string s, string r) {
int i;
if (s.length() > r.length())
return true;
for (i = 0; i < s.length(); i++)
if (s[i] != r[i])
return true;
return false;
}
void printVett(vector<int> v) {
int i;
for (i = 0; i < v.size(); i++)
cout << v[i] << " ";
cout << endl << endl;
}
int main() {
cout << "ATTENZIONE: " << "gli esempi inclusi possono non bastare a controllare se gli esercizi sono corretti!" << endl << endl;
// PROVA DOMANDA 1
cout << "PROVA DOMANDA 1" << endl << endl;
vector<int> vett(6);
vett[0]=5; vett[1]=2; vett[2]=4; vett[3]=0; vett[4]=2; vett[5]=7;
cout << "somma(vett) = " << somma(vett, 0) << endl << endl;
vector<int> mioV(0);
cout << "somma(mioV) = " << somma(mioV, 0) << endl << endl;
// PROVA DOMANDA 2
cout << "PROVA DOMANDA 2" << endl << endl;
vector<Temperatura> V(5);
V[0].luogo="TO"; V[0].mese="giu"; V[0].temp=32;
V[1].luogo="MI"; V[1].mese="set"; V[1].temp=18;
V[2].luogo="RM"; V[2].mese="gen"; V[2].temp=24;
V[3].luogo="FI"; V[3].mese="giu"; V[3].temp=28;
V[4].luogo="CA"; V[4].mese="ott"; V[4].temp=25;
cout << compresiTO(V,10,30) << endl << endl;
// PROVA DOMANDA 3
cout << "PROVA DOMANDA 3" << endl << endl;
printVett(vettMinoriUguali(vett, 2));
// PROVA DOMANDA 4
cout << "PROVA DOMANDA 4" << endl << endl;
// ab e` prefisso di abcd
cout << noPrefisso("ab", "abcd") << endl << endl;
// ac non e` prefisso di abcd
cout << noPrefisso("ac", "abcd") << endl << endl;
system("pause");
}