IMT Lille Douai – FI 1A TD d’Algorithmique et Programmation TD d’Algorithmique et Programmation 5 & 6 Des exercices papiers à leur application sur ordinateur ! IMT Lille Douai – FI 1A Environnement de développement Vous allez utiliser l’environnement de développement intégré (IDE en anglais) Netbeans. Cet environnement permet le développement d’applications en Java, en vous apportant des facilités : coloration syntaxique, aide à la correction d’erreurs à la volée, tests et debug... Pour commencer, créez un nouveau projet. Comme catégorie de projet sélectionnez « Java » puis « Java Application » comme projet. La fenêtre suivante vous permet d’indiquer un nom à ce projet, par exemple TD5. C’est également dans cette fenêtre que vous pourrez choisir l’endroit où seront stockés vos fichiers de projet. Vous pouvez dès-à-présent vous créer un dossier dans lequel seront stockés tous vos codes. Le projet vous propose également de créer la « main class » dans laquelle sera cherchée la méthode main() À partir des paramètres précédents, l’assistant de Netbeans a créé pour vous un projet contenant un fichier source nommé « TD5.java » et qui contient le code suivant : Listing 1 – Code java par défaut pour votre projet 1 package td5 ; 2 3 4 5 6 /∗ ∗ ∗ @author Anthony F l e u r y ∗/ public c l a s s TD5 { 7 /∗ ∗ ∗ @param a r g s t h e command l i n e arguments ∗/ public s t a t i c void main ( S t r i n g [ ] a r g s ) { // TODO code a p p l i c a t i o n l o g i c h e r e } 8 9 10 11 12 13 14 } La première ligne est une instruction permettant de définir un « package ». Ce package est un ensemble de « Classes » regroupées dans un fichier et que l’on pourra ensuite réutiliser dans d’autres fichiers ou d’autres programmes. Ensuite vient la définition de la classe TD5. Cette classe est la classe « principale » de votre projet car c’est elle qui contient la méthode main. Cette méthode main reçoit un tableau de chaîne de caractères en arguments et ne renvoie rien. Elle doit toujours être définie ainsi. Cette méthode main() est le « fil conducteur » de votre programme. Votre programme commence par l’exécution de la première instruction de main et se termine dès la fin de la dernière instruction de celle-ci. Dans la suite, vous écrirez un ensemble de méthodes répondant aux questions données, puis vous testerez ces méthodes en les appelant dans la méthode main(). Le lancement de votre programme se fera par le bouton « Run » montré sur la Figure 1. Exercice 1 : Votre premier programme Modifiez ce projet afin de réaliser un premier programme affichant à l’écran le message de votre choix. Lancez ensuite ce programme, vous en verrez l’exécution dans la fenêtre Console (Output) qui va apparaitre. Exercice 2 : Un peu de calcul Écrivez la méthode factoriel suivante dans votre classe TD5 : A.D., A.F., M.L., G.D., A.G. Page : 1/2 IMT Lille Douai – FI 1A TD d’Algorithmique et Programmation Figure 1 – Fenêtre NetBeans Listing 2 – Code java pour le calcul du factoriel 1 2 3 public s t a t i c i n t f a c t o r i e l ( i n t N) { return N ∗ f a c t o r i e l (N−1); } Que se passe-t-il lors de l’exécution ? Résoudre le problème apparut et testez l’exécution pour N=10. Utilisez la méthode System.out.println() pour indiquer le résultat de votre exécution dans le main(). Testez ensuite l’exécution pour N=20. Que se passe-t-il et comment résoudre ce problème (qui réapparaitra pour des valeurs plus grandes) ? Ajoutez ensuite les différentes implémentations de la méthode puissance vues au TD 3. Testez ces implémentations en les appelant de votre main(). Exercice 3 : Le tri Reprenez les algorithmes vus en cours que sont le tri sélection et le tri à bulles et implémentez-les. 1. Testez-les d’abord que vos tris fonctionnent sur un tableau de taille fixe que vous remplirez à la main. Vous pouvez déclarer et remplir un tableau en une instruction avec la notation suivante : int [] test = {1, 3, 0, 9, 6, 4, 2}; 2. Générez ensuite un grand tableau (100 000 éléments). Pour ceci, avant le début de votre classe, ajoutez la ligne import java.util.Random;, puis dans votre méthode, déclarez ensuite dans votre méthode un nouveau générateur aléatoire : Random R = new Random();, et vous générerez un élément avec grandTableau[i] = R.nextInt();. Testez donc le temps d’exécution sur un grand tableau et comparez les deux algorithmes. 3. Générez ensuite un grand tableau (100 000 éléments) trié (contenant les nombres de 1 à N pour un tableau de taille N). Ce tableau est déjà trié. Comparez le temps d’exécution sur ce tableau. Échangez ensuite les deux cases extrêmes (première et dernière) et comparez de nouveau aux exécutions précédentes. Pouvez-vous expliquer ces différences ? 4. Une première optimisation de ce tri est appelée « tri Cocktail » (aussi appelé « tri Happy Hours »). Dans ce tri, nous gardons le principe du tri à bulles, mais en faisant un parcours dans un sens puis au tour d’après un parcours dans l’autre sens (du début à la fin puis de la fin au début). Modifiez votre algorithme de tri à bulles pour faire ce nouveau tri, puis testez sur les mêmes exemples que ceux donnés précédemment. Quelle est le résultat de ces tests ? Exercice 4 : Palindromes Reprenez votre correction de l’exercice du palindrome du TD3. Testez votre code pour afficher le résultat pour quelques valeurs choisies. Testez ensuite cette correction sur le nombre 101101. Vous verrez alors que probablement votre algorithme ne fonctionnera pas. Modifiez votre code pour que cela puisse fonctionner, en insérant en plus un élément permettant de compter le nombre de chiffres sur lequel vous êtes censé travailler, afin de pouvoir faire fonctionner votre code tant sur l’exemple donné précédemment que sur 1001101 par exemple. A.D., A.F., M.L., G.D., A.G. Page : 2/2