Votre question

Aide sur le programme Scheme

Tags :
  • Define
  • Programmation
Dernière réponse : dans Programmation
27 Septembre 2010 11:08:49

Bonjour,

J'ai un exercice pour demain en Informatique, mais je ne comprend pas trop. Pouvez-vous m'aider ?

Ex:

Question 1:

Donnez la spécification et la définition de la fonction abs qui donne la valeur absolue de son argument. (Cette question je l'ai réussi sans trop de problème)


Question 2:

On cherche à savoir si deux valeurs x1 et x2 sont égales à epsilon près, c'est-à-dire si la valeur absolue de leur différence est inférieur à une valeur positive donnée (supposé petite)

1) Donnez la spécification et la définition du prédicat eps-equal? qui teste l'égalité de deux valeurs à epsilon près. La valeur de cet epsilon peut être passée en argument.

2) Donnez un ensemble de tests le plus complet possible pour votre fonction. Vous devez tenir compte du maximum de cas de figure possibles : arguments positifs ou négatifs, rapport entre les deux arguments (plus petit ou plus grand), valeur attendue vraie ou fausse


J'ai réussi à faire la "Question 1", mais les deux questions de la "Question 2", je sais pas trop comment m'y prendre, vu qu'on m'a demandé de donner la spécification et la définition de la fonction abs, je dois surement l'utiliser.. Mais comment ?

Pouvez-vous m'aider s'il vous plait ?

Merci d'avance.

Autres pages sur : aide programme scheme

a c 232 L Programmation
27 Septembre 2010 12:55:45

Salut,

Dans la définition de "epsilon près" tu as l'utilisation de la valeur absolue, donc oui tu vas utiliser "abs".
Citation :
la valeur absolue de leur différence est inférieur à une valeur positive donnée (supposé petite)

C'est équivalent à : abs(x1 - x2) < epsilon
m
0
l
27 Septembre 2010 17:37:59

Okay merci. Avec ce que tu m'as dit, je l'ai interprété en Scheme et ça me donne ça:

Question 2:

1)
;;; eps-equal?: Valeur * Valeur -> Bool
;;; (eps-equal? x1 x2) vérifie l'égalité de deux valeurs à epsilon près.
;;; Epsilon = 0.001

(define (eps-equal? x1 x2)
(if (< (- (abs x1)(abs x2)) 0.001)
#t
#f))

Je ne sais pas si c'est bon :s

Merci d'avance.
m
0
l
Contenus similaires
a c 232 L Programmation
27 Septembre 2010 18:10:15

Hmm, je ne connais pas du tout Scheme.

Mais ta ligne (if (< (- (abs x1)(abs x2)) 0.001) me parait bizarre.
Vu qu'il faudrait faire un abs(x1 - x2), toi ce que tu fais c'est abs(x1) - abs(x2), ce qui n'est pas la même chose.
Exemple, avec x1 = 5 et x2 = -2
abs(5 - -2) = abs(7) = 7
abs(5) - abs(-2) = 5-2 = 3

Ca serait plutôt quelque chose du genre:
(if (< (abs (- x1 x2)) 0.001)


Après, dans ton énoncé, il est dit que epsilon doit être pris en paramètre, et pas spécifié directement (je ne sais pas comment on gère les paramètres en Scheme), et qu'il doit être positif.
Je ne sais pas si tu as moyen de vérifier qu'il est positif ou pas, mais tu pourrais là aussi faire un abs(epsilon) pour s'assurer qu'il soit positif ;)  (enfin, même si ce n'est pas une vraie vérification, vu que ça transforme le nombre en positif si besoin)
m
0
l
27 Septembre 2010 20:26:23

Re, oui effectivement je me suis tromper pour la ligne (if (< (- (abs x1)(abs x2)) 0.001)

J'ai remplacé par ce que tu m'as dit, qui est juste.

Pour ce qui est de l'epsilon je sais pas comment m'y prendre. J'ai pensé à faire:

;;; HYPOTHESE epsilon > 0
;;; ERREUR lorsque epsilon < 0

Mais je ne sais pas si c'est juste, puis écrire en scheme j'ai pas arrivé à la faire...

Merci encore.
m
0
l
a c 232 L Programmation
27 Septembre 2010 21:43:41

Comme je te disais, je ne connais pas du tout le Scheme, ça ressemble au LISP dans sa forme dont j'ai quelques lointains souvenirs, mais ça s'arrête là.
Alors, te dire quelles fonctions utiliser, je ne sais pas du tout.

Il faut voir quelles fonctions tu as appris en cours jusqu'à présent. Tu as une fonction qui te permettrait de lire un nombre ? Genre (read epsilon) ?
Et après, pour ton hypothèse, ça serait un IF comme tu as fait déjà:
(if (> epsilon 0)
// ton code actuel
// le code qui retournerait une erreur (write "ERREUR") ?
)
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS