Considera la següent funció:
/* @pre v.size()>0 * @post el primer component del resultat és el valor màxim de v, * el segon component del resultat és el valor mínim de v */ pair<int, int> max_min2(const vector<int>& v) { pair<int, int> p; p.first = v[0]; p.second = v[0]; int i = 1; while (i < v.size()) { if (v[i] > p.first) { p.first = v[i]; } else if (v[i] < p.second) { p.second = v[i]; } ++i; } return p; }
Ara respon a les següents preguntes:
Pregunta 1
Escriu l’invariant del bucle del codi max_min2
.
Pregunta 2
Demostra que si es compleix la precondició, després d’executar les inicialitzacions, es compleix l’invariant.
Pregunta 3
Demostra que si es compleixen la condició d’entrada en el bucle i l’invariant, i s’executa el cos del bucle, llavors es torna a complir l’invariant.
Pregunta 4
Demostra que si es compleix l’invariant, però no la condició d’entrada, llavors es compleix la postcondició.
Pregunta 5
Demostra que el bucle acaba. És a dir, dóna’m la funció cota i demostra les seves propietats.
Observació
El fitxer a enviar ha de ser un .tar
dins del qual hi hagi un fitxer de text respostes.txt
amb les respostes a les preguntes. (El veredicte del Jutge sempre serà verd, perquè les respostes s’avaluaran manualment.)
Input
Output