Insegnamento
Informatica
Data
July 12, 2018
Tipo di prova
Prova completa
Soluzioni
Con soluzioni
/** DOMANDA 1.
Scrivete una funzione RICORSIVA
string stringa(string s, char el, int i)
che, dati una string s, un char el e un int i, restituisca la stringa
contenente tutti i caratteri diversi da 'el' (in qualsiasi ordine), a
a partire dall'indice 'i'.
Se non ce ne sono, la funzione deve restituire la stringa vuota.
Si assuma che 0 <= i < v.length, ovvero non e` richiesto controllare nella
funzione che i sia una posizione legale.
DOMANDA 2.
Introducete nel posto opportuno nel programma la struttura
struct Voti {string studente, esame; int voto;};
Quindi definite una funzione
boolean maggioriDi(vector<Voti> stud, int voto, string es)
che restituisca true se tutti i voti di tutti gli studenti per l'esame 'es'
sono maggiori del parametro 'voto', false altrimenti.
DOMANDA 3.
Scrivere una funzione
vector <int> vettMinori(vector<int> v, int el)
che, dato un vector<int> v e un int el, restituisca un vector<int>
di tutti gli elementi minori di el. Il vettore restituito
deve avere dimensione adeguata, cioe` pari al numero degli elementi
che soddisfano la condizione.
DOMANDA 4.
Scrivete una funzione
bool substring(string s, string r)
che restituisca true se s e` sottostringa di r,
false altrimenti. Se si vuole, utilizzare la funzione
prefix(), data.
*/
#include <math.h>
#include <iostream>
#include <stdlib.h>
#include <string>
#include <vector>
using namespace std;
struct Voti {string studente, esame; int voto;};
// DOMANDA 1: completare
string stringa(string s, char el, int i) {
if (i >= s.length())
return "";
else
if (s[i] != el) return s[i] + stringa(s, el, i+1);
else return stringa(s, el, i+1);
}
//DOMANDA 2: completare
bool maggioriDi(vector<Voti> stud, int voto, string es) {
int i;
for (i = 0; i < stud.size(); i++) {
if (stud[i].esame == es && stud[i].voto <= voto) return false;
}
return true;
}
// DOMANDA 3: completare
vector <int> vettMinori(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 prefix(string s, string t, int i) {
int len_s = s.length(), len_t = t.length();
int j = 0;
while (j < len_s) {
bool prefix_conditions = (i+j < len_t) && (s[j] == t[i+j]);
if (!prefix_conditions)
return false;
j++;
}
return true;
}
bool substring(string s, string t){
int i = 0;
while (i < t.length()) {
if (prefix(s, t, i)) return true;
i++;
}
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;
cout << "ATTENZIONE: " << "de-commentate SOLO la parte del main() che vi serve per testare"
<< " ogni funzione e poi ri-commentatela per provare le altre!" << endl << endl;
// PROVA DOMANDA 1
cout << "PROVA DOMANDA 1" << endl << endl;
string v = "";
string s = "mamma";
cout << "stringa(v, 'a', 0) = " << stringa(v, 'a', 0) << endl << endl;
vector<int> mioV(0);
cout << "stringa(s, 'a', 0) = " << stringa(s, 'a', 0) << endl << endl;
// PROVA DOMANDA 2
cout << "PROVA DOMANDA 2" << endl << endl;
vector<Voti> V(5);
V[0].studente="Rossi"; V[0].esame="Analisi"; V[0].voto=27;
V[1].studente="Bianchi"; V[1].esame="Geometria"; V[1].voto=18;
V[2].studente="Ferrero"; V[2].esame="Geometria"; V[2].voto=24;
V[3].studente="Bono"; V[3].esame="Analisi"; V[3].voto=28;
V[4].studente="Rossi"; V[4].esame="Geometria"; V[4].voto=25;
cout << maggioriDi(V, 28, "Analisi") << endl << endl;
cout << maggioriDi(V, 17, "Analisi") << endl << endl;
// PROVA DOMANDA 3
cout << "PROVA DOMANDA 3" << endl << endl;
vector<int> vett(6);
vett[0]=5; vett[1]=2; vett[2]=4; vett[3]=0; vett[4]=2; vett[5]=7;
printVett(vettMinori(vett, 2));
// PROVA DOMANDA 4
cout << "PROVA DOMANDA 4" << endl << endl;
// ab e` sottostringa di abcd
cout << substring("ab", "abcd") << endl << endl;
// ac e` sottostringa di bacd
cout << substring("ac", "bacd") << endl << endl;
// ad NON e` sottostringa di bacd
cout << substring("ad", "bacd") << endl << endl;
system("pause");
}