Bonsoir,
Pendant les vacances, on nous a donné un devoir maison.
Il faut réaliser un algorithme répondant à ces critères :
" Prouver que trois points sont alignés et écrire l'équation de la droite correspondant aux deux premiers points. "
J'ai commencé, j'ai trouvé de l'aide également sur ce forum un petit peu, mais je ne suis pas sûr d'avoir bien répondu à l'énoncé.
Voici mon algorithme :
1 VARIABLES
2 xA EST_DU_TYPE NOMBRE
3 yA EST_DU_TYPE NOMBRE
4 xB EST_DU_TYPE NOMBRE
5 yB EST_DU_TYPE NOMBRE
6 xC EST_DU_TYPE NOMBRE
7 yC EST_DU_TYPE NOMBRE
8 a EST_DU_TYPE NOMBRE
9 b EST_DU_TYPE NOMBRE
10 DEBUT_ALGORITHME
11 //On renseigne les coordonnées des points A, B, et C.
12 LIRE xA
13 LIRE yA
14 LIRE xB
15 LIRE yB
16 LIRE xC
17 LIRE yC
18 //Calcul du coefficient directeur de la droite (AB) (donc, a)
19 a PREND_LA_VALEUR (yB-yA)/(xB-xA)
20 AFFICHER "Le coefficient directeur de (AB), soit a = "
21 AFFICHER a
22 //Calcul de l'ordonnée à l'origine de la droite (AB) (et donc b)
23 b PREND_LA_VALEUR yA-a*xA
24 AFFICHER "L'ordonnée à l'origine de (AB), soit b = "
25 AFFICHER b
26 //Le point C est-il sur la droite (AB) ? (test)
27 SI (abs(a*xC+b-yC)<1e-9) ALORS
28 DEBUT_SI
29 AFFICHER "Les trois points sont alignés."
30 FIN_SI
31 SINON
32 DEBUT_SINON
33 AFFICHER "Les points A, B, et C ne sont pas alignés."
34 FIN_SINON
35 FIN_ALGORITHME
J'aimerais également afficher l'équation de droite vers la fin, lorsque le calcul du coefficient directeur et de l'ordonnée à l'origine est réalisé, comment faire ? Je n'arrive pas.
Est-ce mon algorithme répond bien à "Prouver que trois points sont alignés" ?
Merci beaucoup,
Cordialement, Elouan.
19 a PREND_LA_VALEUR (yB-yA)/(xB-xA)
si xA = xB, on évitera pas une division par ZERO !
pour afficher l'équation de la droite :
afficher "y = "
si (a != 0)
afficher a
afficher "x "
if (b != 0)
if (b < 0) afficher "- "
sinon afficher "+ "
afficher (abs(b))
...
Donc pour le 19, il vaut mieux que je précise que xA =/= xB alors?
Sinon dans le bout d'algorithme que tu m'as montré, peux-tu me dire ce que sont y, a, x, et b ?
C'est que nous avons fait seulement 2 algorithmes très simples en classe alors lorsque ça devient un peu compliqué j'ai du mal, j'ai juste envie de comprendre !
Merci de prendre du temps pour moi :p
En fait c'est bon j'ai compris ton bout d'algo :p
Merci beaucoup
Merci quand même de me dire pour le 19 ^^
Bon voilà j'ai bien avancé
Merci encore.
J'ai encore une question s'il est possible de me répondre s'il vous plaît
Est-il possible de dire :
Si (b=0) alors ne pas afficher b
?
Merci d'avance.
PS: Mon algorithme actuel :
Mince j'ai oublié de compléter mon message, je sais que c'est pas bon de poster plusieurs fois de suite...
Donc, ce qui me manque pour finir :
- Les réponses à mes questions précédentes. ^^
- J'ai des trous dans mon algo, je sais pas quoi mettre ... ^^' Pouvez-vous m'aider?
Sinon je vous remercie beaucoup, ce forum est vraiment génial, c'est super de consacrer du temps à l'entraide, vraiment !
Merci beaucoup.
pour l'affichage de l'équation de la droite, modifie comme suit :
AFFICHER "(AB) : y = "
SI (a!=0) ALORS
DEBUT_SI
AFFICHER a
AFFICHER "x "
FIN_SI
SI (b!=0) ALORS
DEBUT_SI
SI (b>0) ALORS
DEBUT_SI
AFFICHER "+ "
FIN_SI
SINON
DEBUT SINON
AFFICHER "- "
FIN_SINON
AFFICHER (abs (b))
FIN_SI
pour le reste des questions, je te réponds ce soir.
...
Bonjour,
À quoi correspondant "AFFICHER (abs (b))" ? C'est quelle fonction ?
Et j'ai personnalisé un peu ton bout d'algo parce que toi tu as mis que si b<0, il fallait afficher "- ", or, si b est déjà négatif, il n'y a pas besoin de - sinon l'équation se retrouvera avec deux -.. Exemple : y = ax - -b. Donc je n'ai rien mis et ça donne y = ax -b.
C'est bon non ?
D'accord pour le reste des questions. Merci pour ton aide.
1 - ok pour le "moins" à l'affichage.
2 - ?? sur cette question "AFFICHER (abs (b))"
abs (b) = valeur absolue de b
mais je m'étonne de ta question car tu l'as utilisé ici :
SI (abs(a*xC+b-yC)<1e-9) ALORS
j'ai sans doute mis une paire de parenthèses en trop.. c'est tout.
3 - Si (b=0) alors ne pas afficher b
c'est déjà le cas avec :
SI (b!=0) ALORS ......
tu remarqueras que si (b ==0), rien est affiché.
4 - Donc pour le 19, il vaut mieux que je précise que xA =/= xB alors?
pour éviter de traiter le cas de la droite "verticale", il
vaudrait mieux contrôler la saisie de xB avec cette instruction :
13 XB PREND_LA_VALEUR de XA
14 TANT_QUE (XA == XB)
LIRE xB
FIN_TANT_QUE
...
Merci pour ces réponses, je test ça tout à l'heure !
Si j'ai encore besoin d'aide je vous refais signe, un grand merci !
Bonjour,
J'ai encore besoin d'aide... :
2. Comment on fait pour afficher une valeur absolue dans AlgoBox ?
Ce n'est pas un texte, ce n'est pas une variable.. Est-ce une valeur affectée à la variable b ?
3. Apparemment je n'avais pas ça, puisque à un certain moment j'ai testé mon algorithme et j'ai eu deux fois ou trois une équation telle que y=ax+0 .. Mais je crois que maintenant ça fonctionne.
4. J'ai compris ce que tu m'as dis, tant que la valeur qu'on donne à xB est égale à xA ils redemandent une autre valeur. Merci. ^^
Mis à part ceci, j'ai quasiment terminé :
pas mal !
1 - je laisserais la saisie des données dans l'ordre :
11 //On renseigne les coordonnées des points A, B, et C.
12 LIRE xA
13 LIRE yA
14 xB PREND_LA_VALEUR xA
15 //On souhaite ne pas traiter le cas de la droite verticale, avec des points de même abscisse
16 TANT_QUE (xA==xB) FAIRE
17 DEBUT_TANT_QUE
18 LIRE xB
19 FIN_TANT_QUE
20 LIRE yB
21 LIRE xC
22 LIRE yC
2 - sous ALGOBOX, on ne peut sans doute qu'afficher la valeur des variables
et non l'évaluation d'une fonction (mais je n'ai pas testé), auquel cas
pour afficher (abs(b)) il faut passer par une variable intermédaire :
b = abs(b)
afficher b
Mais le problème ne se pose plus, puisque l'affichage du 'moins" est réglé.
3 - l'affichage du b quand b == 0 :
tes instructions d'affichage ne sont pas à leur place.
corrige comme ceci :
38 SI (b!=0) ALORS
39 DEBUT_SI
40 SI (b>0) ALORS
41 DEBUT_SI
42 AFFICHER "+ "
43 FIN_SI
44 AFFICHER b
45 FIN_SI
De cette manière, tu n'as plus d'affichage du type : y = ax + 0
4 - Une fois la correction apportée ci-dessus, il restera à régler
l'affichage d'une droite d'équation : y = 0
...
Héhé ça abouti ! : D
Je suis très content de votre aide, elle m'est très utile étant donné que je comprend quasiment tout mieux maintenant.
Voici donc l'état de mon algorithme actuel :
Par contre je ne comprend pas ceci :
"4 - Une fois la correction apportée ci-dessus, il restera à régler
l'affichage d'une droite d'équation : y = 0"
Que voulez-vous dire par là ? Que faut-il faire ?
ok.
teste sous algobox l'affichage pour :
A(1; 1) B(2; 3) --> y = 2x
A(1; 1) B(2; 1) --> y = 1
A(1; -1) B(2; -1) --> y = -1
A(1; 0) B(2; 0) --> y = ??
...
Tes résultats d'équations de droites ne correspondent pas aux miens :
A(1; 1) B(2; 3) --> y = 2x - 1
A(1; 1) B(2; 1) --> y = x + 1
A(1; -1) B(2; -1) --> y = x -1
A(1; 0) B(2; 0) --> y = x
ok pour la 1°, c'est moi qui me suis trompé
c'est bien : A(1; 1) B(2; 3) --> y = 2x - 1
pour les trois autres, tu as un problème de test.
tes instructions d'affichage ne sont pas à leur place.
corrige comme ceci :
33 SI (a!=0) ALORS
34 DEBUT_SI
35 AFFICHER a
37 AFFICHER "x "
36 FIN_SI
...
Oui mais maintenant quand a!=0 ni a ni x sont affichés et donc on obtient une équation telle que y = + b
Je reviens ce soir
?? si a égal 0, il n'y a pas de raison de vouloir faire afficher ax, ni x
Je comprends pas ta remarque.
...
peut-être...
Il n'empêche que l'affichage de ce qui suit :
A(1; 1) B(2; 1) --> y = x + 1
A(1; -1) B(2; -1) --> y = x -1
A(1; 0) B(2; 0) --> y = x
est FAUX.
Fais une petite figure à la main, et tu verras
que les 3 droites sont des droites "horizontales"
Donc corige ce qui est FAUX, et ensuite
on paufinera l'affichage du "+" en double
...
Eh bien je sais que c'est faux, puisque les ordonnées des points sur chaque droite sont égales...
Comment dois-je le corriger?
Voilà j'ai corrigé comme tu as dis :
33 SI (a!=0) ALORS
34 DEBUT_SI
35 AFFICHER a
37 AFFICHER "x "
36 FIN_SI
Je te l'ai écrit avant.
corrige comme suit :
33 SI (a!=0) ALORS
34 DEBUT_SI
35 AFFICHER a
37 AFFICHER "x "
36 FIN_SI
...
ok
donc repasse le test :
A(0; 0) B(1; 2) --> y = 2x
A(1; 1) B(2; 1) --> y = 1
A(1; -1) B(2; -1) --> y = -1
A(1; 0) B(2; 0) --> y = ??
...
Maintenant ça fonctionne parfaitement !
Plus qu'à résoudre le problème du + !
Waow je suis super content, merci beaucoup encore une fois =)
En faisant le test avec ces coordonnées de points, on obtient y =
Donc en fait, on obtient rien... Est-ce normal ?
non. c'est donc la première anomalie qu'il faut régler.
et on va en profiter pour régler le double "+" en même temps.
Dans quel cas déjà le double "+" apparaît ?
...
En fait le problème n'est pas que le + est doublé mais quand ax = 0, il est toujours affiché, ce qui donne une équation équivalente à y = + b.
( y = 0x + b mais on affiche pas 0x)
Donc dans le cas où a = 0 ou x = 0 (ax = 0), le + ne doit pas apparaître. ^^
ok.
on va donc compléter le test pour régler ces 2 anomalies.
SI (a!=0) ALORS
DEBUT_SI
AFFICHER a
AFFICHER "x "
SI (b != 0)
DEBUT_SI
SI (b > 0) ALORS
DEBUT_SI
AFFICHER "+ "
fin_SI
AFFICHER b
fin_SI
FIN_SI
SINON
DEBUT_SINON
AFFICHER b
FIN_SINON
...
Génial, j'ai testé tes quatre possibilités et c'est parfait !
Juste une dernier petit détail :
Lorsque A(0; 0) B(1; 2).
On a y = 2x.
Où dois-je insérer mon retour à la ligne dans mon algorithme pour que la phrase "Les points A, B, et C ne sont pas alignés" s'affiche en dessous de l'équation et non à côté ?
Après le x non ?
juste avant les lignes suivantes :
46 //Le point C est-il sur la droite (AB) ? (test)
47 SI (abs(a*xC+b-yC)<1e-9) ALORS
...
En fait je vais éviter, je ne sais pas comment ça se fait sous AlgoBox, donc c'est bien comme ça.
Je met mon algorithme final, dites-moi ce que vous en pensez pour finir.. :p
tout me semble bien.
Pour le retour charriot, essaye un :
AFFICHER "\n"
Je'ai pas testé sous ALGOBOX.
Dans d'autres langages, c'est une syntaxe qui convient.
...
Parfait ! Génial ! Incroyable ! *content*
Je te remercie infiniment, tu m'as beaucoup aider !
Bonne soirée, et encore merci !
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :