Développement des systèmes informatiques


Représentations tabulaires


Comment décrire une fonction ?

Tables "normales" :

Sémantique

f(x, y) = y ≠ 0 y = 0
x = 0 3 5
x ≠ 0 8 13

x = 0 y ≠ 0 f(x,y) = 3 ∨
x = 0 y = 0 f(x,y) = 5 ∨
x ≠ 0 y ≠ 0 f(x,y) = 8 ∨
x ≠ 0 y = 0 f(x,y) = 13

(x = 0 y ≠ 0 ⇒ f(x,y) = 3)
(x = 0 y = 0 ⇒ f(x,y) = 5)
(x ≠ 0 y ≠ 0 ⇒ f(x,y) = 8)
(x ≠ 0 y = 0 ⇒ f(x,y) = 13)

Exemple: f(x,y,z,w)

Si x est plus grand que 23 et y est plus petit que 0 et z est égal à 1 alors x+y+z sinon si z est égal à 2 alors x+y-z. Si z est égal à 3 et x est plus grand que 23 et y est plus petit que 0 alors x-y+z mais si w est plus grand que 0 alors y. Si x est plus grand que 23 et y est plus grand que 0 alors quand z est égal à 1 la valeur est x*y*z, mais quand z est égal à 2 la valeur serait x/y-z, cependant si z est égal à 3 nous avons deux cas différents (1) w est égal à 0 et la valeur est x-y+z, (2) si w est positif alors elle est y+w. Si z est égal à 3 et x est plus grand que 23 et y est égal à 0 ou bien x est égal à 23 ou bien x est plus petit que 23 et y est plus petit que 0 alors la valeur est y-w. Dans les autres cas, quand x est plus petit que 23 et y n'est pas plus petit que 0, la valeur est y+w. La valeur est x+y+z lorsque x est plus grand que 23 et y est plus grand que 0 et z est égal à 3 et w est égal à 0 ou bien x est plus petit que 23, z est égal à 3 et w est égal à 0. La valeur est x/y/z quand x est égal à 23 et z est égal à 1 ou bien z est égal à 2 et y est plus grand que 0. Quand x est égal à 23 et y est égal à 0 et z est égal à 2, ou bien quand z est égal à 2 et x est plus petit que 23 la valeur est x/y+z. Si x est égal à 23 et y est plus petit que 0 et z est égal à 2 alors la valeur est x/y-z. Si x est égal à 23 et y est plus petit que 0 et z est égal à 3 et w est égal à 0 alors la valeur est x-y-z. Si x est égal à 23 et y est plus grand que 0 et z est égal à 3 et y n'est pas plus petit que 0 la valeur est x/y-z. Si x est égal à 23 et y est égal à 0 et z est égal à 1, la valeur est x-y/z. Si x est égal à 23 et y est égal à 0 et z est égal à 2, la valeur est x-y-z. Si x est plus petit que 23 et z est égal à 1 alors la valeur est x+y/z.

Le texte est ambigu et contradictoire ! Difficile à comprendre et à vérifier si la fonction a été bien définie.

Exemple: f(x,y,z)

z = 1 z = 2 z = 4 z = 5
x > 23 y < 0 x + y + z x/y + z x - y + z x/y + z
x > 23 y > 0 x/y + z x - y + z x - y + z x + y + z
x > 23 y = 0 x/y + z x + y + z x + y + z x/y + z
x = 23 y < 0 x/y + z x/y + z x + y + z x/y + z
x = 23 y > 0 x/y + z x + y + z x/y + z x/y + z
x = 23 y = 0 x - y + z x + y + z x/y + z x/y + z
x < 23 y < 0 x - y + z x/y + z x + y + z x/y + z
x < 23 y > 0 x - y + z x/y + z x + y + z x + y + z
x < 23 y = 0 x/y + z x/y + z x/y + z x + y + z

Facile à vérifier si la fonction est bien définie.

Défaut : plusieurs expressions peuvent se répéter.

Tables "inside-out"

Pourquoi ne pouvons-nous pas toujours utiliser des tables normales ?

Le nombre de cas peut être très grand, pendant que le nombre de différentes expressions (valeurs) peut être petit.

Qu'est-ce qu'une table "inside-out"?

Sémantique

x = 0 y ≠ 0 y = 0 false false
x ≠ 0 false false y ≠ 0 y = 0
f(x, y) = 3 5 8 13

x = 0 y ≠ 0 f(x,y) = 3 ∨
x = 0 y = 0 f(x,y) = 5 ∨
x ≠ 0 y ≠ 0 f(x,y) = 8 ∨
x ≠ 0 y = 0 f(x,y) = 13

(x = 0 y ≠ 0 ⇒ f(x,y) = 3)
(x = 0 y = 0 ⇒ f(x,y) = 5)
(x ≠ 0 y ≠ 0 ⇒ f(x,y) = 8)
(x ≠ 0 y = 0 ⇒ f(x,y) = 13)

Table "inside-out" équivalente à cette table

x > 23 y < 0 z = 1 z = 4 z = 2 ∨ z = 5
x > 23 y > 0 z = 5 z = 2 ∨ z = 4 z = 1
x > 23 y = 0 z = 2 ∨ z = 4 false z = 1 ∨ z = 5
x = 23 y < 0 z = 4 false z ≠ 4
x = 23 y > 0 z = 2 false z ≠ 2
x = 23 y = 0 z = 2 z = 1 z = 4 ∨ z = 5
x < 23 y < 0 z = 4 z = 1 z = 2 ∨ z = 5
x < 23 y > 0 z = 4 ∨ z = 5 z = 1 z = 2
x < 23 y = 0 z = 5 false z ≠ 5
f(x, y, z) = x + y + z x - y + z x/y + z

Représentation des relations sous forme tabulaire