Comprovar funcions i relacions U44602


Statement
 

pdf   zip

thehtml

Suposem que principi i fi són enters, i relacio és una funció de dos paràmetres que retorna un booleà (True o False). Suposarem que fi - principi2.

Feu una funció comprova_funcio(relacio, principi, fi) que retorna una funció. Aquesta funció retornada, anomenem-la fret, ha de tenir les següents característiques: Té una funció f com a paràmetre, i ha de retornar True si la relació relacio és compleix per a totes les parelles adjacents dins la seqüència f(principi), f(principi+1),..., f(fi-1).

Dit d’una altra manera, comprova_funcio(relacio, principi, fi) ha de retornar una funció, que podem anomenar fret, tal que fret(f) ha de retornar True si es verifica que:

relacio(f(principi),f(principi+1)) = True

relacio(f(principi+1),f(principi+2)) = True

...

relacio(f(fi-2),f(fi-1)) = True

En altre cas, fret(f) ha de retornar False

Per exemple, en el joc de proves que veieu més avall:

- La funció comprova_eq amb una funció f com a argument, és a dir, comprova_eq(f), comprova que els valors de f(0), f(1), f(2), f(3) i f(4) siguin tals que: f(0) == f(1), f(1) == f(2), f(2) == f(3), i f(3) == f(4). Si es verifiquen aquestes quatre igualtats comprova_eq(f) retorna True, altrament retornarà False.

- La funció comprova_up amb una funció f com a argument, és a dir, comprova_up(f), comprova que els valors de f(0), f(1), f(2), f(3) i f(4) siguin tals que: f(0) < f(1), f(1) < f(2), f(2) < f(3), i f(3) < f(4). Si es verifiquen aquestes quatre desigualtats comprova_up(f) retorna True, altrament retornarà False.

Entrada

La funció té tres paràmetres, una funció i dos enters que s’han d’ajustar als requeriments mencionats.

Observacions

Un cop definida la funció, en provar-la al REPL de Python us hauria de sortir el mateix que podeu observar més avall.

Sample session
>>> comprova_eq = comprova_funcio(lambda x,y: x == y, 0, 5)
>>> comprova_eq(lambda x: 3)
True
>>> comprova_eq(lambda x: x)
False
>>> 
>>> comprova_up = comprova_funcio(lambda x,y: x < y, 0, 5)
>>> comprova_up(lambda x: x)
True
>>> comprova_up(lambda x: 3)
False
>>> 
Information
Author
Jordi Delgado
Language
Catalan
Official solutions
Python
User solutions
Python