Alors voila, c'est un exercice de DM qui parle d'alignements des points (jusque là tout va bien) mais il faut automatiser les calculs et ca je ne sais pas du tout faire. Alors merci d'avance !
On se place dans un repère.
1) Soient trois points A, B et C.
On souhaite automatiser les calculs permettant d'affirmer que les points A, B et C sont alignés ou non.
Elaborer une démarche et écrire un algorithme permettant de résoudre la question.
2) Programmer cet algorithme sur Algobox.
3) A l'aide du programme, dire, dans chacun des cas suivants, si les points A, B et C sont alignés ou no :
A(1;-2), B(3;4) et C(-1;-8)
A(-3;2), B(3;1) et C(0;2)
A(1;-4), B(100;62) et C(-2,6;-6,4)
Bonjour quand même...
Il y a plusieurs démarches possibles.
Que proposes-tu ?
Soient les trois premiers points de la question 3
Comment ferais-tu (sans l'algorithme pour l'instant) pour savoir s'ils sont ou ne sont pas alignés ?
Ben moi j'ai appris à voir des point alignés dans un repère avec une fonction affine ax + b (avec une formule pour trouver a) et on voyait si le troisieme point était sur la droite.
Donc c'est pour ca que je suis un peu bloqué.
Bon, pourquoi pas. C'est l'une des méthodes possibles.
Imaginons que l'on demande au programme de trouver l'équation de la droite qui passe par les points A : (xA ; yA) et B : (xB ; yB)
Quelle est cette équation ? y = ... ?
Et ensuite, par exemple, on remplacera le x de cette équation par xC et on vérifiera que la valeur prise par y est bien égale à yC
Ceci ne sera pas difficile à programmer (d'ailleurs j'ai fait le programme qui attend tes réponses).
Excuse-moi mais je n'ai pas trop compris ton dernier post ! Je ne fais des algorithmes que depuis deux semaines donc je comprends pas trop encore =)
Sinon je fais
a prend la valeur yB-yA/xB-xA (c'est la formule qu'on m'a donnée pour trouver a)
puis je fais l'équation pour trouver p.
Je ne sais vraiment pas =).
Oui, tu as bien commencé !
et pour trouver la valeur de p il faut, par exemple, dire que cette droite passe par le point A : (xA ; yA)
Qu'est ce que tu entends par la avec "Dire que cette droite passe par le point A(xA;yA)" ?
Désolé de te poser autant de question et en tout cas merci de m'aider à comprendre cet exercice !
J'ai commencé à taper l'algorithme sur Algobox :
En Variable, j'ai déclaré xa, yA, xB, yB, xC, yC, ax et b
Jusque la est-ce que c'est juste ou pas ?
Ton message de 20 h 01 : parce qu'il faut calculer la valeur de p
Ton message de 20 h 05 : pourquoi pas (je n'ai eu besoin que de xA, yA, xB, yB, xC et yC) mais tu peux ajouter d'autres variables. Ce n'est pas grave.
Si je comprends bien tu écriras que ax = (yB - yA)/(xB - xA)
c'est une possibilité
Tu sais il n'y a pas du tout qu'une seule manière d'écrire un bon programme. Ce qui compte c'est qu'il trouve le bon résultat, assez rapidement et dans tous les cas où il est prévu de fonctionner.
Mais il faut savoir quelle valeur donner à b ou à p ...
Oui effectivement j'ai mis ensuite :
Lire xA, yA, xB, yB
Puis AX prend la valeur (yB-yA)/(xB-xA)
Donc jusque la tout est bon
Puis pour trouver P on fait quel calcul ? J'avais pensé à b prend la valeur AX + ????
Je ne sais pas trop quel calcul faire pour trouver p ou b !
Si on le fait à la main sans Algorithme on fait bien :
ax + b = xA
c'est ca ?
Pour le calcul de p je t'ai dit comment faire (message de 19 h 58) :
il faut écrire que pour x = xA alors y = yA puisque la droite passe par le point A : (xA ; yA)
Je vais quitter l' pour quelque temps ; ne t'étonne pas si je ne réponds pas. Je ne sais pas si je reviendrai ce soir, mais je suis sûr d'être là demain matin très tôt. Je lirai ce que tu as fait.
OK Merci pour ton aide !
Donc sur Algobox je dois déclarer x et y comme variable ou pas ?
Puis je mets x recoit xA
y recoit yA
Comme je te l'ai écrit, j'ai rédigé tout le programme avec seulement 6 variables déclarées : les 3 couples de deux coordonnées des points A, B et C
Mais si tu trouves plus pratique d'employer des variables intermédiaires tu peux toujours le faire.
L'étape qu'il faut correctement franchir avant de commencer à programmer dans Algobox est de définir parfaitement ta démarche.
Il faut donc résoudre le problème "à la main", sur ton brouillon. Et ensuite on "code" cette démarche.
Tu sais qu'une droite (non parallèle à l'axe des ordonnées) a une équation du type
y = m x + p
Tu as su trouver le coefficient directeur m d'une droite qui passe par les points A et B
si xA xB
Il faut continuer (trouver p)
Tu sais que la droite à trouver passe par le point A
donc
yA = m xA + p
Ceci te permet de calculer p (ou de le faire calculer par le programme)
La dernière étape consistera à vérifier qu'avec les valeurs m et p trouvées le point C a des coordonnées qui vérifient
yC = m xC + p
si le point C est bien sur la droite définie par A et B
____________________
Tu vois que se dessine un squelette du programme :
. déclarer les variables : les coordonnées ainsi que m et p
. entrer les coordonnées des trois points A, B et C
. calculer le coefficient directeur m
. calculer l'ordonnée à l'origine p
. tester si les coordonnées du point C vérifient l'équation de la droite (AB)
. afficher la réponse
Qu'en penses-tu ?
Oui merci ca commence à être plus clair. Je vais essayer de le programmer cet après-midi.
Merci de ton aide.
Une fois que j'aurais programmer, pourras-tu me dire si avec les valeurs données tu trouves les mêmes résultats ?
Bon alors pour A(1;-2), B(3;4) et C(-1;-8), j'ai trouvé que A, B et C n'étaient pas alignés
Est-ce que c'est juste ou non ?
Je viens de m'apercevoir d'une erreur car je n'ai pas déclaré xC et yC. Donc je vais le refaire.
Cette fois ci, je trouve qu'il sont alignés. Juste ou non ?
Si tu veux je peux t'envoyer une capture d'écran, mais la photo est trop grosse pour que je te l'envoie ici. =)
Alors je te donne les trois réponses :
. 1ère série : alignés
. 2ème série : pas alignés
. 3ème série : alignés
Si tu veux, je peux poster le programme (je sais comment faire... ) ; mais j'aimerais être sûr que tu n'as plus de questions avant de le poster.
OK pour le 1 et le 2 mais j'ai trouvé pour le 3 qu'ils n'étaient pas alignés.
Je veux bien que tu postes le programme s'il te plait pour vérifier que c'est à peu près le même programmes que j'ai fait ! Merci
Excellent tes résultats de 12 h 47 !
____________________
On va donc chercher à comprendre ce qui se passe pour le troisième cas
Conseil :
Modifie très légèrement ton programme (temporairement, tu le remettras comme au début ensuite) : c'est une pratique courante de ceux qui programment. Quand il y a un problème on cherche à comprendre d'où vient le problème et pour cela on fait imprimer par le programme des données intermédiaires qui ne serviront plus ensuite
Déclare une nouvelle variable : yM
fais faire par le programme le calcul
yM = m xC + p
et demande au programme d'afficher la valeur de yM
Normalement tu attends une réponse yM = -6,4
Mais... peux-tu recopier très exactement la réponse de ton programme ?
Bon alors j'ai introduit le calcul yM = M*xC + P juste après le calcul de P.
Je trouve toujours A, B et C non alignés
Mais je trouve comme tu as dis, yM = -6.4
La réponse de mon programme est simplement de dire si A, B et C sont alignés ou pas, je ne demande pas d'afficher des valeurs.
Bon, je t'explique.
Un programme travaille avec des nombres arrondis. Il ne peut pas conserver une infinité de chiffres
Par exemple pour 2/3 il n'a pas une infinité de 6 dans l'expression 0,666 666 666 666 ...
et il est très probable qu'il a quelque chose comme 0,666 666 667
Si le résultat d'un calcul est 0,666 666 666
et que l'on demande au programme : ces deux nombres sont-ils égaux ? Il répondra : "NON"
Donc il faut se méfier beaucoup dés que l'on veut comparer deux nombres.
Il est prudent d'écrire : la différence entre les deux nombres est-elle plus petite que 0,000 000 001
par exemple.
Je te donne mon programme où tu vas trouver cette manière de faire. Et mon programme répond bien que les trois points sont alignés (et ils le sont).
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 m EST_DU_TYPE NOMBRE
9 p EST_DU_TYPE NOMBRE
10 DEBUT_ALGORITHME
11 LIRE xA
12 LIRE yA
13 LIRE xB
14 LIRE yB
15 LIRE xC
16 LIRE yC
17 //calcul du coefficient directeur de la droite (AB)
18 m PREND_LA_VALEUR (yB-yA)/(xB-xA)
19 //calcul de l'ordonnée à l'origine de la droite (AB)
20 p PREND_LA_VALEUR yA-m*xA
21 //test : le point C est-il sur la droite (AB) ?
22 SI (abs(m*xC+p-yC)<1e-9) ALORS
23 DEBUT_SI
24 AFFICHER "Les trois points sont alignés"
25 FIN_SI
26 SINON
27 DEBUT_SINON
28 AFFICHER "Les trois points ne sont pas alignés"
29 FIN_SINON
30 FIN_ALGORITHME
C'est exactement ce que j'ai mis sauf pour les lignes 17, 18, 21, 22
Les lignes 17 et 18 sont elles obligatoires ?
Peut-tu m'expliquer la ligne 21 car moi j'ai mis "SI (yC == MX*xC + P) ALORS" ?
En tout cas, Merci de ton aide car j'y arrivais vraiment pas ! =)
Avec une écriture que tu connais mieux voici ce qu'écrit la ligne 22 :
SI |m xC + p - yC| < 1.10-9 ALORS...
abs( ... ) veut dire "valeur absolue"
et
1e-9 veut dire 0,000 000 001 = 1.10-9 (un milliardième)
On cherche à savoir si
yC = m xC + p
ou si
m xC + p - yC est très très proche de zéro
D'accord ?
Les lignes 17, 19 et 21 ne sont pas obligatoires mais sont très utiles.
Ce sont des commentaires
Ils permettent à quelqu'un qui n'a pas écrit lui-même le programme de comprendre ce qui est fait.
Et ils te permettront dans quelques mois, quand tu auras oublié ce que tu avais fait, de relire plus facilement le programme.
Comprends-tu tout bien ?
As-tu essayé de rentrer le programme ? Trouves-tu maintenant que les points sont effectivement alignés ?
On cherche une valeur très proche de 0 car on a des chiffres à virgules donc Algobox arrondi et nous dit ensuite que f(xC) n'est pas égal à yC.
Est-ce que c'est bien ça ?
Il faut la valeur absolue...
Si la valeur est positive cela ne change rien
Mais suppose que la valeur soit négative comme -5
Alors le point n'est pas sur la droite, et ton programme dira que les points sont alignés parce que
-5 < 0,000 000 001
Il faut la valeur absolue !
Merci.
Faut dire que tu m'as très bien expliqué ! Avec un peu d'entrainement, je commence de plus en plus à comprendre les algorithmes.
Pour ma part, je trouve très amusant ce petit logiciel Algobox
C'est un beau travail de celui qui l'a conçu.
Je t'en prie et à une prochaine fois !
C'est un beau travail qui ne cesse d'être amélioré !
Une dernière petite question, comment mettre le topic en mode résolu ?
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :