Bonjour / Bonsoir :
Loin d'être un expert en programmation et en algorithme, je dispose seulement de quelques bases et j'ai tenté de répondre à la question suivante, mais sans succès malheureusement. Voici la question : traduire cet algorithme par un programme et tester ce programme. Je vous expose cet algorithme pour vous éclairer.
f est une fonction définie sur [V;W] avec f(V)f(W). On découpe l'intervalle [a;b] en N intervalles de même longueur (W-V)/N et on considère l'algorithme suivant :
Entrées :
V,W: bornes de l'intervalle
f: la fonction étudiée
N: le nombre d'intervalles
Initialisations :
pas (noté P): prend la valeur (V-W)/N
D: prend la valeur f(W)-f(V)
x: prend la valeur de V
Traitement :
Pour k de 1 jusqu'à N
| Si f(x+P)-f(x) et D pas de même signe alors
| Sortie
| Afficher ''Fonction pas monotone''
| Fin du programme
| FinSi
| x prend la valeur de x+P
FinPour
Sortie
Afficher ''Fonction semble monotone''
J'ai donc essayé un programme mais sans succès malheureusement avec ma TI82stats (en anglais). Le voici.
: ClrHome
: Lbl
: Menu("CHOIX","Ax+B",A,"x²+Bx",B,"Ax²-Bx+C",C,"QUITTER",XX) Ici c'est un menu qui servirait à étudier plusieurs fonctions f
: Lbl A
: ClrHome
: Input "A:", A
: Input "B:", B
: Input "V", V
: Input "W", W
: Input "N", N
: (W-V)/NP Pour comprendre ces calculs, se reporter à l'algorithme
: (A*W+B)-(A*V+B)D Pour la fonction A, soit f=Ax+B
: Vx
: (A*(x+P)+B)O f(x+P) est représenté par O
: (A*x+B)Q f(x) est représenté par Q
: If O-Q0 ans D
0: Then
: Disp ''Pas Monotone"
: Pause
: End
: If O-Q0 and D
0
: Then
: Disp ''Pas monotone"
: Pause
: End
: If x+px
: Then
: Disp "Monotone"
: Pause
: End
: Goto
En vous remerciant d'avoir déjà lu mon message, et si vous le pouvez m'apporter des éléments de réponses (en pensant que je ne suis pas un expert dans le domaine SVP!). Peut-être faut'il faire une boucle en suivant la phrase
bonsoir Aageborgen
je pense que ton erreur vient de la ligne
If x+px -> x
relis l'algorithme ; à cette ligne, ce n'est pas une condition
Oui effectivement. Mais ma difficulté dans ce cas-là est de traduire ''x prend la valeur de x+pas".
Je ne connais pas l'utilité de Prompt et des autres touches alors...
tu dois juste écrire
x+px -> x,
mais pas à cet endroit ; il faut la mettre à la fin de la boucle donc juste avant goto qui devrait être goto A
une autre erreur : après "la fonction n'est pas monotone", il faut sortir du traitement; il ne faut pas recommencer une boucle.
une remarque : tu aurais pu regrouper les deux cas
If O-Q>0 and D<0
et If O-Q>0 and D<0
en un seul cas : si le produit est négatif
if (O-Q)*D<0
En comprenant un peu j'ai fait :
...
: Disp "Pas Monotone"
: Pause
: End
: x+px
: Disp "Monotone"
: Pause
: Goto A
Je ne suis pas du tout sûr que ce soit cela mais le programme a l'air de marcher mais il met toujours Monotone alors je reste bien dubitatif...
ce n'est pas encore tout à fait juste :
- après goto A, mais une étiquette : lbl B
...
Disp "Pas Monotone"
: Pause
: goto B <--------------- tu rajoutes cette ligne qui te fait sortir du prgr.
: End
ensuite, le "disp monotone" doit être écrit qd il a fini toutes les boucles.
Par contre, il faut rajouter une condition à "goto A" sinon, il tournera sans fin. Il faut vérifier que tu restes dans l'intervalle :hme
if x<w then goto A.
mais tu aurais pu plutôt utiliser une boucle "for", comme dans l'algorithme
Ca commence à devenir compliqué là
J'ai fait en fonction de ce que j'ai compris :
...
: Disp "Pas monotone"
: Pause
: Goto B
: End
: x+Px
: Disp "Monotone"
: If x<W Là je comprend pas cette condition...
: Then
: Goto A
je reprends depuis le début :
tu découpes l'intervalle en N intervalles, et tu traites chaque intervalle
la ligne x+p->x fait "passer à l'intervalle suivant, mais il ne faut pas "sortir "de l'intervalle initial ; donc si x<W, tu refais la boucle; sinon, c'est fini.
En utilisant une boucle "For", ce serait plus simple.
(si tu n'es pas pressé, je te l'écrirai demain)
je n'ai pas modifié le début du programme
: ClrHome
: Lbl
: Menu("CHOIX","Ax+B",A,"x²+Bx",B,"Ax²-Bx+C",C,"QUITTER",XX) Ici c'est un menu qui servirait à étudier plusieurs fonctions f
: Lbl A
: ClrHome
: Input "A:", A
: Input "B:", B
: Input "V", V
: Input "W", W
: Input "N", N
: (W-V)/NP Pour comprendre ces calculs, se reporter à l'algorithme
: (A*W+B)-(A*V+B)D Pour la fonction A, soit f=Ax+B
: V->x
"je modofie à partir d'ici"
for (i,1,N)
: (A*(x+P)+B)->O f(x+P) est représenté par O
(La variable O n'est pas très bien choisie,
tu risques de confondre avec 0 (zéro))
: (A*x+B)->Q f(x) est représenté par Q
: If (O-Q)*D<0 Then
: Disp ''Pas Monotone"
: Pause
: goto B
: End (c'est le endif)
: x+P->x
: End (c'est le endfor)
: disp "la fonction semble monotone"
: pause
: lbl B
: end (fin du programme)
: goto si tu veux revenir au menu
est-ce que cela te paraît plus simple ?
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :