L’espace de d´eplacement contient des points de passage o`u le robot doit aller, ainsi que des obstacles soit fixes soit mobiles, que le robot doit ´eviter. Les fonctions et proc´edures disponibles dans cet environnement sont pr´ecis´ees au tableau de la figure 1.
instruction signification
LF(char NomFichier[20]) lit le fichier texte d´efinissant l’espace TE(int NbLin, int NbCol) d´efinit la taille de l’espace
PR(int X, int Y) d´efinit la position du robot DR(int dX, int dY) d´efinit la direction du robot
AV(int NbPas) permet de faire avancer le robot de NbPas pas
IMMO() permet de faire avancer les mangeurs, le robot reste sur place APAP() gen`ere une image `a chaque d´eplacement d’une case
SPAP() gen`ere une seule image par d´eplacement
BC() laisse une trace derri`ere le robot
LC() ne laisse pas de trace derri`ere le robot
TD90() fait tourner le robot sur place sur sa droite TG90() fait tourner le robot sur place sur sa gauche
DT() fait tourner le robot de 180 degr´es
int RDG() d´etecte ce qu’il y a devant le robot `a gauche int RDD() d´etecte ce qu’il y a devant le robot `a droite int RD() d´etecte ce qu’il y a devant le robot int RLD() d´etecte ce qu’il y a 2 cases devant le robot
Figure 1: Tableau des fonctions disponibles dans l’environnementAlogobot.
Par exemple, pour l’espace de la figure 2 (`a gauche), un programme permettant d’aller sur tous les points de passage et d’´eviter les obstacles est donn´e listing 1. On obtient alors la trajectoire indiqu´ee sur la figure 2 (`a droite).
1 S´equence
Un algorithme (et un programme) est une liste d’instructions qui sont ex´ecut´ees les unes apr`es les autres, dans l’ordre o`u elles sont ´ecrites.
Exercice 1: Le programme de la figure 2 positionne un robot au milieu d’un carr´e de51cases de cˆot´e, dirig´e vers le haut. Compl´eter ce programme pour tracer un rectangle de41cases de cˆot´e.
Exercice 2: Ecrire un programme qui permette au robot d’aller sur tous les points de passage de´ l’espace de la figure 3.
1Cet environnement a ´et´e d´evelopp´e dans le cadre du projet tutor´e du S2 de Yohven Halgand, Adrien Chaix et Antoine David,
´etudiants du DUT Mesures Physiques en 2013/2014. Le nomAlogobotest la contraction des termes “algorithmique”, “logo” (un ancien langage de programmation dont s’inspire cet environnement) et “robot”.
0.0 0.2 0.4 0.6 0.8 1.0 0.0
0.2 0.4 0.6 0.8 1.0
0.0 0.2 0.4 0.6 0.8 1.0
0.0 0.2 0.4 0.6 0.8 1.0
Figure 2: Exemple d’espace de d´eplacement du robot, et trajectoire obtenue par le programme du listing 1.
Listing 1: exemple de programme utilisant l’environnement alogobot
// programme de demonstration de l’environnement alogobot // F. Auger, aout 2014 (alogobotDemo6.ch)
#include <stdio.h>
#include "alogobot.h"
int main() {
char NomLabyrinthe[20] = "Labyrinthe8.txt" ;
LireFichierAlogobot(NomLabyrinthe); // utilise l’espace defini dans Labyrinthe8.txt BC(); // le robot laisse une trace de son passage
SPAP(); // une seule image par deplacement AV(8); // avance de 8 cases
TD90(); AV(2); // tourne a droite et avance de 2 cases TG90(); AV(4); // tourne a gauche et avance de 4 cases TG90(); AV(8); // tourne a gauche et avance de 8 cases TG90(); AV(4);
TG90(); AV(3);
TD90(); AV(7);
TD90(); AV(3);
TG90(); AV(1);
return 0 ; }
EspaceTableau[50][ 0]=ObstacleFixe; EspaceTableau[50][50]=ObstacleFixe;
PR(25,25); DR(0,-1);
GenereImage(FichierImage); // abort();
// mettez vos instructions ici return 0 ;
}
0.0 0.2 0.4 0.6 0.8 1.0
0.0 0.2 0.4 0.6 0.8 1.0
Figure 3: Espace de d´eplacement du robot dans l’exercice 2.
0.0 0.2 0.4 0.6 0.8 1.0 0.0
0.2 0.4 0.6 0.8 1.0
0.0 0.2 0.4 0.6 0.8 1.0
0.0 0.2 0.4 0.6 0.8 1.0
Figure 4: Espaces de d´eplacement du robot dans les exercices 3 (`a gauche) et 4 (`a droite).
2 R´ep´etition
Une structure de r´ep´etition permet d’ex´ecuter plusieurs fois un groupe d’instructions qui n’est ´ecrit qu’une seule fois dans le programme. Par exemple
Action1(); Action1(); Action1(); Action1(); Action1(); Action1(); Action1();
peut s’´ecrire plus simplement
for (int i=0;i<7;i=i+1){Action1();}
Il existe aussi des structures permettant de r´ep´eter un groupe d’instructions tant qu’une condition, plac´ee avant ou apr`es le groupe d’instructions, est vraie.
while (condition) {action();}
// si condition est fausse des le debut, l’action ne sera jamais executee
do {action();} while (condition); // l’action est forcement executee au moins une fois
Exercice 3: Ecrire un programme qui permette au robot d’aller sur tous les points de passage de´ l’espace de la figure 4 (`a gauche).
Exercice 4: Ecrire un programme qui permette au robot d’aller sur tous les points de passage de´ l’espace de la figure 4 (`a droite). Dans cet espace, il y a deux obstacles mobiles qui se d´eplacent horizontalement.
3 Condition
Une structure conditionnelle permet d’ex´ecuter un groupe d’instructions si une condition est vraie :
if (condition) {ActionSiConditionVraie;}
ou d’ex´ecuter un groupe d’instruction ou un autre groupe d’instructions suivant qu’une condition est vraie ou fausse :
if (condition)
{ActionSiConditionVraie;}
else
{ActionSiConditionFausse;}
0.0 0.2 0.4 0.6 0.8 1.0
Figure 5: Espace de d´eplacement du robot dans l’exercice 5.
Une structure conditionnelle peut sans probl`eme ˆetre imbriqu´ee dans une autre structure conditionnelle ou dans une structure de r´ep´etition.
Exercice 5: Modifier le programme de l’exercice 3 pour permettre au robot d’aller sur tous les points de passage de l’espace de la figure 5.
4 Microcontrˆoleur
Le programme d’application d’un microcontrˆoleur s’ex´ecute d`es la mise sous tension de ce composant, et ne s’arrˆete jamais. Dans le programme d’un microcontrˆoleur, le programme principal n’est pas ´ecrit par le con- cepteur. C’est l’environnement de d´eveloppement qui ajoute automatiquement le code suivant `a la fin du pro- gramme :
void main() {
setup(); // the setup routine runs only once at startup
while(1){loop();} // the loop routine runs over and over again forever }
Le concepteur d´etermine alors la tˆache du microcontrˆoleur en d´efinissant les fonctionssetup()etloop().
Exercice 6: Ecrire un programme qui permette au robot de parcourir ´eternellement un cycle passant´ par les quatre points de passage de l’espace de la figure 6. Dans cet espace, il y a deux obstacles mobiles qui se d´eplacent horizontalement et deux autres qui se d´eplacent verticalement.
0.0 0.2 0.4 0.6 0.8 1.0 0.0
0.2 0.4 0.6 0.8 1.0
Figure 6: Espace de d´eplacement du robot dans l’exercice 6.
Modifier ensuite le programme pour calculer la moyenne et l’´ecart-type exp´erimental de10nombres, toujours sans utiliser de tableau.
Exercice 3: Un nombre entier naturelpest dit premiers’il n’est divisible que par1et par lui mˆeme.
Ecrire un programme qui demande `a l’utilisateur une valeur de´ p, puis qui v´erifie qu’aucun entieri compris entre2etp−1ne divisep.
Exercice 4: Ecrire un programme qui d´etermine si un entier saisi par l’utilisateur est contenu dans´ un tableau de nombres pr´ed´efinis.
Exercice 5: Ecrire un programme qui affiche `a l’´ecran les´ Lpremi`eres lignes du triangle de Pascal, L ´etant un entier saisi par l’utilisateur.
Exercice 6: Ecrire une fonction qui calcule les racines d’un polynˆome du second degr´e. ´´ Ecrire ensuite un programme qui demande `a l’utilisateur les coefficients du polynˆome, puis qui appelle la fonction ci-dessus et affiche les r´esultats.
Exercice 7: Ecrire une fonction qui effectue le tirage de deux d´es `a six faces et qui indique si les´ r´esultats constituent un double.
Algorithmique et Informatique
Exercices compl´ementaires de Travaux Dirig´es
Exercice 1: Ecrire un programme qui affiche les´ 20premiers termes de la table de multiplication par5et qui indique par une ´etoile les termes qui sont aussi des multiples de3.
Exercice 2: Ecrire un programme qui exprime un nombre entier de secondes en jours, heures,´ minutes et secondes. Par exemple 100 000secondes correspondent `a 1jour,3heures, 46minutes et 40secondes.
Exercice 3: Ecrire un programme qui calcule les int´erˆets produits chaque ann´ee pendant´ 30ans par le placement en banque d’une somme de1000euros avec un int´erˆet de1,3%.
Exercice 4: Ecrire un programme qui demande trois nombres r´eels positifs `a l’utilisateur, qui´ indique si ils peuvent correspondre aux longueurs des trois cˆot´es d’un triangle et, si c’est le cas, qui indique si le triangle est ´equilat´eral, isoc`ele et/ou rectangle.
Exercice 5: Ecrire un programme qui utilise une structure de r´ep´etition pour trouver le plus petit´ et le plus grand ´el´ement dans un tableau Ede nombres entiers et qui met dans un tableau Ptous les nombres pairs et dans un tableauItous les nombres impairs. Par exemple, pourE=[12, 19, 13, 11, 16, 10, 14, 17], le plus petit nombre est10, le plus grand nombre est19,P=[12, 16, 10, 14]etI=[19, 13, 11, 17].
Exercice 6:
1. ´Ecrire une fonction qui calcule la norme (que l’on appelle ´egalement le module) de la force de gravitation qui s’exerce entre deux solides de massesm1 etm2 distants d’un nombred. La norme de cette force est ´egale `a
F =G m1 m2
d2 avec G= 6.67384 10−11N m2kg−2
2. ´Ecrire une autre fonction qui calcule les coordonn´ees des forces de gravitation F12 et F21 qui s’exercent entre deux solides de massesm1 etm2et de coordonn´ees(x1, y1)et(x2, y2).
3. ´Ecrire un programme principal qui teste ces deux fonctions, par exemple en calculant les forces appliqu’ees sur trois solides de massesm1,m2 etm3situ´ees en(x1, y1),(x2, y2)et(x3, y3).
Exercice 7: Le fichier Marees_Juin_a_Juillet_2016.txt contient un calendrier des mar´ees, indiquant l’heure des mar´ees hautes et le coefficient associ´e. Ces informations se pr´esentent sous la forme de3entiersheure minute coefficient
1. ´Ecrire un programme qui lit ce fichier, v´erifie que les informations saisies sont correctes et stocke ces informations dans un tableau.
2. Compl´eter le programme pour calculer le temps ´ecoul´e entre deux deux mar´ees hautes, exprim´e en heures et minutes.
3. Compl´eter le programme pour calculer les plus petites et les plus grandes valeurs du coefficient de mar´ee et de l’intervalle de temps entre deux mar´ees hautes successives, exprim´e en minutes.
Exercice 8:
1. La fonction1 atan2(y, x)renvoie l’angle entre l’axe horizontal Ox et la droite reliant l’origine au point de coordonn´ees (x, y). Cet angle est compris entre −π et π. Calculer cet angle en faisantarctan(y/x)ne fournirait qu’un r´esultat entre −π/2etπ/2et ne permettrait pas de faire la dif´erence entre les points(x, y)et(−x,−y).
(a) V´erifier que cette fonction peut ˆetre d´efinie suivant le tableau de la Figure 1 (voir aussi Figure 2).
(b) ´Ecrire une fonctionmy_atan2(y,x)d´efinie de cette mani`ere, et un programme qui teste cette fonction en des points bien choisis.
2. Un point dans l’espace peut ˆetre localis´e par ses trois coordonn´ees cart´esiennes(x, y, z)ou par ses trois coordonn´ees sph´eriques(r, θ, ϕ), qui correspondent respectivement `a l’altitude, `a la colatitude2et `a la longitude3(voir figure 3). Le passage de(x, y, z)`a(r, θ, ϕ)est obtenu par les relations
r = qx2+y2+z2
θ = π
2 −arctan z
√x2 +y2
!
ϕ = atan2(y, x)
et le passage de(r, θ, ϕ) `a(x, y, z)est obtenu par les relations
x = rsin(θ) cos(ϕ) y = rsin(θ) sin(ϕ) z = rcos(θ)
Ecrire une fonction qui calcule les coordonn´ees sph´eriques `a partir des coordonn´ees cart´esiennes,´ une autre qui fait l’inverse, et un programme qui teste ces fonctions en des points bien choisis.
1Voirhttps://en.wikipedia.org/wiki/Atan2
2C’est l’angle compl´ementaire de la latitude. Elle est comprise entre−πetπ.
3La longitude est comprise entre−πetπ.
atan2(0, 1) = 0 π/2
π
−π/2
(1, 0) (0, 1)
(0,-1) The limit of atan2
from this side is−π
π/3 ( , )
π/3 (=60°) atan2(√3, 1) = π/3
0 atan2(1, 0) = π/2
(1, √3)
Figure 2: R´esultats de la fonction atan2(y, x) obtenus pour diff´erents points (source : https://en.wikipedia.org/
wiki/Atan2).
x
y z
(r, θ, φ)
φ θ
r
Figure 3: D´efinition des coordonn´ees sph´eriques (r, θ, ϕ) couramment utilis´ee en physique (source : https://en.
wikipedia.org/wiki/Atan2).