• Aucun résultat trouvé

Algorithmique et Informatique exercices de Travaux Dirigés

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmique et Informatique exercices de Travaux Dirigés"

Copied!
10
0
0

Texte intégral

(1)

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”.

(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 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 ; }

(3)

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.

(4)

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;}

(5)

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.

(6)

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.

(7)

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.

(8)

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:

(9)

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π.

(10)

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).

Références

Documents relatifs

Soit les 2 pages php suivantes : index.php et blog.php. La balise nav contient un ul et 2 li avec des href permettant de passer d’une page à l’autre. Pour l’exercice, réécrire

Ecrire un programme qui lit deux entiers et renvoie la valeur absolue de la diff´ ´ erence de ceux-ci.. Exercice

Ecrire un programme qui lit deux variables de type enti` ´ ere, les affiche, ´ echange leur contenu et les affiche de nouveau.. Exercice

L’ann´ ee courante sera mise dans une variable.. Exercice

(4) Effectuer une sym´ etrie axiale de l’image (on remplacera chaque image tab[i][j] par image tab[-i][j]).. (5) Effectuer une sym´ etrie centrale

Ecrire un programme qui lit deux variables de type enti` ´ ere, les affiche, ´ echange leur contenu et les affiche de nouveau.. Exercice

La figure montre la méthode utilisée pour déterminer le volume d’un corps solide de forme quelconque. ………. 4 points) Exercice

- Ecrire une fonction récursive qui calcule le PGCD de deux entiers positifs. On suppose qu’on ne peut effectuer que