Module ITC34 - Algorithmique et Programmation
TDs Algorithmique (trois séances)
Benoît Darties - b[email protected]
Univ. Bourgogne Franche-Com
Année universitaire 2015-2016
Avant-propos : Support de Travaux Dirigés (TD) dispensés à l’Université Bourgogne Franche-
Comté, enseignements en Algorithmique et Programmation partie Algorithmique. La totalité
de ce document a été rédigée uniquement à partir des connaissances de son auteur, et en
utilisant un matériel personnel. L’utilisation / réutilisation partielle ou complète d’éléments
de ce document est soumise à l’approbation de son auteur. Les corrections détaillées de chaque
exercice sont disponibles par mail sur demande au terme des séances de TD.
1 Analyse, boucles et structures conditionnelles
Les exercices de cette section vous permettent de vous familiariser avec la notation des algo-
rithmes, avec le concept de trace issu du déroulement d’un algorithme, et avec la notion d’algo-
rithmes récursifs. On demandera un soin particulier lors de la rédaction d’un algorithme, en faisant
bien figurer le nom de l’algorithme, sa fonction, les paramètres d’entrée et le résultat retourné.
Exercice 1 : Analyse d’algorithme
L’objectif de cet exercice est d’arriver à comprendre le fonctionnement et le but d’un algorithme
en retraçant son déroulement. Pour cela, on injecte diérentes valeurs d’entrée, on note le résultat
à chaque fois, on cherche une corrélation entre les entrées et le résultat obtenu, et on essaye de
conclure sur l’objectif de l’algorithme à partir des observations réalisées
On considère l’algorithme suivant dont l’objectif est inconnu :
Algorithme 1 : Algorithme inconnu
Données :A:entierstrictementpositif
B:entierstrictementpositif
Résultat :result : entier positif
1début
2si A<Balors
3temp A;
4A B;
5B temp;
6fin
7C Amod B;
8tant que C6=0faire
9A B;
10 B C;
11 C Amod B;
12 fin
13 result B;
14 retourner result ;
15 fin
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 2
1. Combien cet algorithme possède t’il de paramètres d’entrée ?
2. En utilisant un tableau dont les colonnes sont indicées par les diérents paramètres et va-
riables de cet algorithme, eectuer la trace de l’algorithme pour les valeurs de paramètres
d’entrée suivantes :
(a) A= 56 et B= 21
(b) A= 48 et B= 12
(c) A= 49 et B= 27
3. Que fait cet algorithme ? (Eectuez une trace avec d’autres valeurs si la réponse ne vous
apparait pas tout de suite)
4. Nommez cet algorithme. Quelle syntaxe écririez-vous pour exécuter cet algorithme lorsque le
premier paramètre A prend la valeur 50 et le second paramètre B prend la valeur 23 ?
5. Deux nombres sont premiers entre eux si et seulement si leur plus grand commun diviseur est
égal à 1. En réutilisant et appelant l’algorithme précédent comme sous-algorithme, écrivez
un algorithme qui renvoie vrai si et seulement si deux nombres sont premiers entre eux.
Exercice 2 : Algorithmes de quelques fonctions mathematiques
L’objectif de cet exercice est la définition des entrées d’un algorithme à partir des données d’un
énoncé, ainsi que la manipulation de variables au sein d’une boucle
Écrivez les algorithmes permettant de calculer les objets mathématiques suivants :
1. le nombre harmonique Hnd’un entier n,déniparléquationsuivante:
Hn=
n
X
k=1
1
k=1+
1
2+1
3+...+1
n(1)
L’entier naturel nest ici la seule entrée de l’algorithme. Le résultat à renvoyer est la valeur du
nombre harmonique, qui peut être un nombre réel. On suppose que nest toujours strictement
supérieur à 0.
2. une approximation du nombre ,obtenueaumoyendelaformulationdeLeibniz:
4.
n
X
k=0
(1)k
2k+1 =4
14
3+4
54
7+4
11 ...+4
2n+1 (2)
Lorsque ntend vers l’infini, alors la formulation de Leibniz tend vers .Onvousdemande
d’écrire d’ici l’algorithme permettant de calculer cette formulation lorsque nest un entier
naturel positif donné en tant que paramètre de l’algorithme.
Exercice 3 : Manipulation de structures
Dans cette exercice, nous définirons et manipulerons quelques structures au sein d’un algorithme.
Pour des raisons de simplicité, nous supposerons ici que l’utilisateur ne rentre que des entiers
strictement positifs
On souhaite créer une structure permettant de stocker des dates, ainsi que des algorithmes (ou
fonctions) permettant de manipuler des dates.
1. Définir le type date. Ce type doit être une structure comportant trois éléments :
jour,quidénitlenumérodejour(comprisentre1et31),
mois,quidénitlenumérodemois(comprisentre1et12),
annee,quidénitlannéesouslaformedunentiernaturel.
c
2015 - Réutilisation totale ou partielle de ce support soumise à approbation de l’auteur.
Corrections disponibles par mail sur demande ( benoit.darties@u-bourgogne.fr )
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 3
Il est bien à noter qu’il s’agit d’un type, et non d’une variable. On considère par la suite que
lorsqu’une variable de type date est créée, le domaine de chacun de ses éléments est bien
respecté. (par exemple, le jour ne pourra pas être égal à 35).
2. Ecrire une fonction estBissextile qui prend en paramètre une donnée nommée annee de
type entier. Cette fonction renvoie un booléen, qui est à vrai si l’année est bissextile, et
faux sinon. Pour rappel, une année est bissextile si elle est divisible par 4 mais pas par 100,
elle est aussi bissextile si elle est divisible par 400.
3. Ecrire une fonction dateJuste qui prend en paramètre une donnée nommée date2test de
type date. Cette fonction renvoie un booléen, qui est à vrai si la date représentée dans la
structure date2test est juste, c’est à dire que pour les mois de 30 jours, l’élément jour n’est
pas égal à 31, et qu’il n’est pas égal à 29, 30 ou 31 pour le mois de février, sauf s’il s’agit
d’une année bisextille, auquel cas, la valeur 29 est admise. Autrement, elle renverra faux.
4. Ecrire la fonction jourDuLendemain qui prend une donnée nommée aujourdhui de type
date,etretourneunestructuredetypedate qui correspond à la date du lendemain.
5. Ecrire une fonction compareDates prend comme données deux dates nommées d1 et d2 de
type date,etretournelavaleur0sicesdatessongales,1siladated1 est plus récente que
la date d2 ,et-1siladated2 est plus récente que la date d1
6. En réutilisant une partie des fonctions définies jusqu’à présent, écrire une fonction ecartJours
qui prend comme données deux dates nommées d1 et d2 de type date,etretournele
nombre de jours qui séparent ces deux dates. On pourra faire cette fonction de manière très
simple (pas nécessairement optimal en terme de temps de calcul) en utilisant les fonctions
jourDuLendemain et compareDates.
Exercice 4 : Analyse d’algorithme recursif
Cet exercice vise à vous familiariser avec le concept d’algorithmes récursif, et à vous permettre
d’appréhender ces derniers en déroulant un exemple simple
On vous propose d’étudier l’algorithme récursif AlgoMystere suivant, qui prend en entrée deux
entiers naturels A et B :
Algorithme 2 : AlgoMystere
Données :A:entiernaturel
B : entier naturel
Résultat :result : entier
1début
2si B=0alors
3result A;
4retourner result ;
5sinon
6C=Amod B;
7result=AlgoMystere(B,C) ;
8retourner result ;
9fin
1. Eectuer la trace de l’algorithme lorsque le premier appel de l’algorithme est réalisé avec
les valeurs suivantes (pour réaliser cette trace, à chaque appel de l’algorithme, il convient de
définir un nouveau tableau correspondant à un nouvel appel avec les valeurs adéquates en
paramètres) :
(a) A= 750 et B= 150
(b) A= 500 et B= 170
2. Que fait cet algorithme ?
c
2015 - Réutilisation totale ou partielle de ce support soumise à approbation de l’auteur.
Corrections disponibles par mail sur demande ( benoit.darties@u-bourgogne.fr )
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 4
Exercice 5 : Definition d’algorithme recursif
Dans cet exercice, il vous est demandé de définir un algorithme récursif permettant de calculer
deux fonctions mathématiques pour lesquelles vous avez déjà définis des algorithmes itératifs pré-
cédemment. Il vous est conseillé d’écrire dans un premier temps la fonction sous forme récursive
réduite, en exprimant une valeur de départ, et d’exprimer la fonction à l’indice nselon sa valeur
à un indice inférieur, par exemple n1, puis d’écrire le pseudo-code associé
1. Proposez deux algorithme récursifs nommés harmonique et piLeibniz,prenantchacunun
paramètre nde type entier, et permettant de calculer les éléments suivants. Pour chaque
algorithme, vous déterminerez la valeur de l’indice de départ. Si le paramètre nest égal à cet
indice, on retourne simplement la valeur. Sinon, il convient d’exprimer la valeur à retourner
en fonction de la valeur qui aurait été retournée à l’indice inférieur.
(a) le nombre harmonique Hnpour un entier n1donné. Pour rappel :
Hn=
n
X
k=1
1
k=1+
1
2+1
3+...+1
n(3)
(b) une approximation du nombre ,obtenueaumoyendelaformulationdeLeibniz.Pour
rappel, la fonction de Leibniz est la suivante :
4.
n
X
k=0
(1)k
2k+1 =4
14
3+4
54
7+4
11 ...+4
2n+1 (4)
2 Algorithmes sur tableaux et matrices
Les exercices de cette section vous permettent de vous entrainer sur la définition d’algorithmes
dans des tableaux et matrices. Les objectifs sont multiples : déterminer le type de parcours à eectuer
sur un tableau : déterministe (pour .. allant de ..a ..) ou non déterministe (tant que ...), définir les
meilleures conditions d’arrêt dans les boucles non déterministes, eectuer des boucles imbriquées
dans le parcours de matrices . . . Dans ces exercices, nous travaillerons uniquement avec des tableaux
d’entiers. Chaque tableau d’entier passé en données sera de type tableau d’entier et identifié par
un nom, et il faudra également passer en donnée la taille de ce tableau. Un raisonnement similaire
est à appliquer si le tableau est bi-dimentionnel : on utilisera le type matrice d’entiers et les
deux dimensions de cette matrice doivent également être passés en paramètres
Exercice 6 : Manipulation de tableau d’entiers
L’objectif de cet exercice est de définir les premières boucles qui permettent de parcourir un ta-
bleau, et de déterminer leur caractère déterministe, ou non déterministe
Dans l’ensemble des questions suivantes, la donnée de chacun des algorithmes à écrire est un
tableau d’entier nommé Taccompagné de sa taille nqui est définie en tant qu’entier. Les cellules de
Tsont indicées de 0àn1,etlesvaleursdecescellulessontinitialiséesavecdesvaleursentières
aléatoires. On vous demande d’écrire les algorithmes suivants :
1. Un algorithme somme qui prend en données le tableau d’entiers Tet sa taille n,etquiretourne
la somme des valeurs des cellules du tableau T.
2. Un algorithme consécutifs qui prend en données le tableau d’entiers Tet sa taille n,etqui
retourne vrai si et seulement si deux cellules de Td’indice immédiatement consécutifs ont la
même valeur, et faux sinon. Par exemple, si on a les tableaux suivants :
T1= [ 5 , 6 , 78 , 34 , 23 , 56 , 34 , 70 ]
T2= [ 5 , 6 , 78 , 34 , 23 , 23 , 42 , 67 ]
T3= [5,6,5,6,5,6,5,6]
c
2015 - Réutilisation totale ou partielle de ce support soumise à approbation de l’auteur.
Corrections disponibles par mail sur demande ( benoit.darties@u-bourgogne.fr )
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 5
alors l’algorithme consécutifs ne retournera vrai que pour le tableau T2
3. Un algorithme affiche qui prend en données le tableau d’entiers Tet sa taille n,etquiache
les valeurs contenues dans le tableau Tséparées par des tirets. Par exemple :
5-6-78-34-23-56-34-67
La diculté de cette question réside dans le fait que l’on ne souhaite pas qu’il y ait un tiret
après le dernier nombre.
Exercice 7 : Manipulation de matrices d’entiers
Dans cet exercice, nous étendons les algorithmes vus sur tableau unidimensionnels à des tableaux
bi-dimensionnels, c’est à dire des matrices
Dans cet exercice, nous reprenons la définition des algorithmes de l’exercice précédent avec non
pas un tableau d’entier T,maisavecunematricedentiersnotéeMdont les dimensions mXnsont
deux entiers également passés en paramètres. On vous demande d’écrire les algorithmes suivants :
1. Un algorithme somme qui prend en données la matrice d’entiers Met ses dimensions mxn,
et qui retourne la somme des valeurs des cellules de la matrice M.
2. Un algorithme consécutifs qui prend en données la matrice d’entiers Met ses dimensions m
xn,etquiretournevrai si et seulement si deux cellules adjacentes de Mont la même valeur,
et faux sinon. Deux cellules sont dites adjacentes si elles sont immédiatement consécutives
sur la même ligne ou sur la même colonne. Pour cet exercice, deux approches sont possibles :
Soit on regarde seulement les cellules consécutives sur les lignes, puis on fait la même
chose sur les colonnes.
Soit on parcours les cellules de l’indice [0][0] àlindice[n-2][n-2] et on regarde pour
chacune si sa valeur est la même que la cellule imdiatement à droite ou que la cellule
immédiatement en dessous. Il faudra ensuite parcourir une seule fois la dernière ligne,
et la dernière colonne, pour verifier les adjacences des cellules de cette ligne et de cette
colonne.
3. Un algorithme affiche qui prend en données la matrice d’entiers Met ses dimensions mx
n,etquiachelesvaleurscontenuesdanslamatriceMséparées par des tirets. Un exemple
d’achage est présenté ci-après :
5-6-8-34-23-56-34-67
56-4-78-34-13-56-434-12
34-99-94-34-76-47-34-67
4-6-84-34-23-0-98-27
Exercice 8 : Algorithme de tri par selection
Cet exercice présente un algorithme courant de tri d’éléments d’un tableau. Il vise à évaluer votre
capacité à traduire des instructions informelles et à les écrire sous la forme d’un algorithme
Le tri par sélection est une méthode de tri des éléments d’un tableau. Nous utiliserons ici un
tableau d’entier Tde taille net on supposera que tous ces éléments sont des entiers strictement
positifs mais inrieurs à 1000.LetriparsélectionconsisteàordonnerlelémentsdeTde manière
séquentielle dans un nouveau tableau de même taille, que nous appellerons T2,delafaçonsuivante:
On parcourt entièrement Tàlarecherchedelacellulecontenantlavaleurlapluspetite.
L’indice du tableau qui contient cette valeur est stocké dans une variable temp.Poureectuer
cette sélection, on peut supposer que temp est initialisé avec l’indice 0,etpointedoncsur
la première , et chaque fois que l’on rencontre une valeur inférieure à celle contenue dans
temp,onaectetemp avec cette nouvelle valeur.
c
2015 - Réutilisation totale ou partielle de ce support soumise à approbation de l’auteur.
Corrections disponibles par mail sur demande ( benoit.darties@u-bourgogne.fr )
1 / 9 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !