Première S Lycée Jean Vilar 2013/2014 AlgoBox : Vecteurs et droites du plan Exercice 1. On considère l’algorithme suivant ? Variables xA, yA, xU, yU, a, b, c sont des nombres réels Entrée Saisir xA, yA, xU et yU Initialisation a prend la valeur yU b prend la valeur -xU c prend la valeur -a xA – b yA Sortie Afficher « l'équation est ax + by + c = 0 avec a », a, ««b = », b, « c = », c 1. À quoi sert l’algorithme ? Expliquer. 2. Compléter le programme suivant qui correspond à l’algorithme : 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: VARIABLES xA EST_DU_TYPE NOMBRE yA EST_DU_TYPE NOMBRE xU EST_DU_TYPE NOMBRE yU EST_DU_TYPE NOMBRE ... ... ... DEBUT_ALGORITHME LIRE xA LIRE yA ... ... a PREND_LA_VALEUR yU b PREND_LA_VALEUR -xU ... AFFICHER "L’équation est de la forme ax + by + c = 0" AFFICHER "\navec a = " AFFICHER a ... ... ... ... 24: FIN_ALGORITHME ou en Python : x_A y_A ... ... a = b = ... = i n p u t ( ”x A = ”) = i n p u t ( ”y A = ”) y_U ≠x_U p r i n t ”L e q u a t i o n de l a d r o i t e p a s s a n t par A e t de v e c t e u r d i r e c t e u r U est ” p r i n t a , ”x + ” , . . . 19 Première S Lycée Jean Vilar 2013/2014 Exercice 2. Ecrire un programme qui demande a, b et c trois nombres réels et ensuite qui teste si a ”= 0 ou b ”= 0 et le cas échéant affiche ”ax + by + c = 0” est l’équation cartésienne d’une droite”. Exercice 3. Coder dans AlgoBox l’algorithme suivant : a, b, c sont des nombres xA, yA sont des nombres Lire a, b et c Si a <> 0 ou b <> 0 alors lire xA, yA si A appartient à la droite D d’équation ax + by + c = 0 alors Afficher "A appartient à D" fin fin Exercice 4. On considère la droite D d’équation 6x + 15y = 3 Écrire un programme qui compte le nombre de points A appartenant à D et tels que les coordonnées soient des nombres entiers compris entre -20 et 20. 20 Première S Lycée Jean Vilar 2013/2014 AlgoBox : Vecteurs et droites du plan (corrigé) Exercice 1. On considère l’algorithme suivant ? Variables xA, yA, xU, yU, a, b, c sont des nombres réels Entrée Saisir xA, yA, xU et yU Initialisation a prend la valeur yU b prend la valeur -xU c prend la valeur -a xA – b yA Sortie Afficher « l'équation est ax + by + c = 0 avec a », a, ««b = », b, « c = », c 1. À quoi sert l’algorithme ? Expliquer. 2. Compléter le programme suivant qui correspond à l’algorithme : 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: VARIABLES xA EST_DU_TYPE NOMBRE yA EST_DU_TYPE NOMBRE xU EST_DU_TYPE NOMBRE yU EST_DU_TYPE NOMBRE a EST_DU_TYPE NOMBRE b EST_DU_TYPE NOMBRE c EST_DU_TYPE NOMBRE DEBUT_ALGORITHME LIRE xA LIRE yA LIRE xU LIRE yU a PREND_LA_VALEUR yU b PREND_LA_VALEUR -xU c PREND_LA_VALEUR -a * xA + b * yA AFFICHER "L’équation est de la forme ax + by + c = 0" AFFICHER "\n avec a = " AFFICHER a AFFICHER "\n b = " AFFICHER b AFFICHER "\n c = " AFFICHER c 24: FIN_ALGORITHME Exercice 2. Ecrire un programme qui demande a, b et c trois nombres réels et ensuite qui teste si a ”= 0 ou b ”= 0 et le cas échéant affiche ”ax + by + c = 0” est l’équation cartésienne d’une droite” : 1: 2: 3: 4: 5: 6: 7: VARIABLES a EST_DU_TYPE NOMBRE b EST_DU_TYPE NOMBRE c EST_DU_TYPE NOMBRE DEBUT_ALGORITHME LIRE a LIRE b 21 Première S Lycée Jean Vilar 2013/2014 8: LIRE c 9: SI ( a!= 0 ou b != 0 ) ALORS 10: DEBUT_SI 11: AFFICHER "ax+by+c = 0 décrit une droite" 12: FIN_SI 13: SINON 14: DEBUT_SINON 15: AFFICHER "ax + by + c = 0 ne décrit pas une droite" 16: FIN_SINON 17: FIN_ALGORITHME Exercice 3. Coder dans AlgoBox l’algorithme suivant : a, b, c sont des nombres xA, yA sont des nombres Lire a, b et c Si a <> 0 ou b <> 0 alors lire xA, yA si A appartient à la droite D d’équation ax + by + c = 0 alors Afficher "A appartient à D" fin fin On rappelle que le point A(xA ; yA ) appartient à la droite D si et seulement si on a l’égalité : axA + byA + c = 0. D’où, le programme : 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: VARIABLES a EST_DU_TYPE NOMBRE b EST_DU_TYPE NOMBRE c EST_DU_TYPE NOMBRE xA EST_DU_TYPE NOMBRE yA EST_DU_TYPE NOMBRE DEBUT_ALGORITHME LIRE a LIRE b LIRE c SI ( a!= 0 ou b != 0 ) ALORS DEBUT_SI LIRE xA LIRE yA SI (a*xA + b*yA + c == 0) ALORS DEBUT_SI AFFICHER "A(xA;yA) appartient à la droite D" FIN_SI SINON DEBUT_SINON AFFICHER "A(xA;yA) n’appartient pas à la droite D" FIN_SINON FIN_SI SINON DEBUT_SINON AFFICHER "ax + by + c = 0 ne décrit pas une droite" FIN_SINON FIN_ALGORITHME Exercice 4. On considère la droite D d’équation 6x + 15y = 3 22 Première S Lycée Jean Vilar 2013/2014 Écrire un programme qui compte le nombre de points A appartenant à D et tels que les coordonnées soient des nombres entiers compris entre -20 et 20. Avant d’écrire le programme, précisons l’algorithme (ou comment on fait pour compter ces points). Rappelons que si l’on se donne x alors on connait y : y= 3 ≠ 6x 15 Ainsi, pour x allant de ≠20 à 20, il nous suffit de tester si y est un nombre entier compris entre ≠20 et 20. D’autre part, notons que la fonction affine f (x) = 3≠6x 15 est décroissante (son coefficient directeur 6 2 est ≠ 15 = ≠ 5 ), ainsi pour tout ≠20 Æ x Æ 20, on a 20 Ø f (≠20) Ø y = f (x) Ø f (20) Ø ≠20. D’où la condition ≠20 Æ y Æ 20 est automatiquement vérifiée. L’algorithme est alors le suivant : 1: x, y sont des nombres 2: compteur est un nombre entier 3: compteur Ω 0 4: for x allant de -20 à 20 do 5: if 3 - 6x est divisible par 15 then 6: incrémenter le compteur de 1 7: y Ω 3≠6x 15 8: afficher (x,y) 9: end if 10: end for 11: Afficher compteur Û initialisation Une façon de tester si un nombre est divisible par 15 est de vérifier si le reste de sa division euclidienne par 15 est nul. Dans le langage d’AlgoBox, le reste de la division euclidienne d’un nombre n par 15 se calcul à l’aide la commande %, ainsi : n % 15. Voici maintenant le programme Algobox : 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: VARIABLES x EST_DU_TYPE NOMBRE y EST_DU_TYPE NOMBRE compteur EST_DU_TYPE NOMBRE DEBUT_ALGORITHME compteur PREND_LA_VALEUR 0 POUR x ALLANT_DE -20 A 20 DEBUT_POUR SI ( (3-6*x) % 15 == 0 ) ALORS DEBUT_SI compteur PREND_LA_VALEUR compteur + 1 y PREND_LA_VALEUR (3-6*x)/15 AFFICHER "\n(" AFFICHER x AFFICHER ", " AFFICHER y AFFICHER ")" FIN_SI FIN_POUR AFFICHER "\n Nombre de solutions: " AFFICHER compteur 22: FIN_ALGORITHME 23