Mention Mathmatiques, spcialit Enseignement des mathmatiques
Algorithmique et graphes, thmes du second degr
Feuille TD n1 Exercices dalgorithmique lments de correction
Exercice 1. Rsolution dune quation du 1 er degr crire un algorithme permettant de rsoudre une quation coefficients rels de la forme ax + b = 0 (a et b seront entrs au clavier). Rponse. Lalgorithme est le suivant : Algorithme equationPremierDegr Algorithme equationPremierDegr Algorithme equationPremierDegr Algorithme equationPremierDegr # cet algorithme rsout une quation de la forme ax + b = 0 # a et b sont entrs au clavier. variables a, b rels dbut # lecture donnes !ntrer " a, b # # rsolution de l$quation # cas o% a = 0 si " a = 0 # alors si " b = 0 # alors Afficher " &'ous les rels sont solution& # sinon Afficher " &Pas de solution& # # cas o% a 0 sinon Afficher " (b ) a # fin*si fin Exercice 2. Minimum de trois nombres crire un algorithme permettant dafficher le plus petit de trois nombres entrs au clavier. Rponse. Un algorithme possible est le suivant : si a est plus petit que b, il suffit de comparer a c sinon, il faut comparer b c : Algorithme minimum'rois+ombres Algorithme minimum'rois+ombres Algorithme minimum'rois+ombres Algorithme minimum'rois+ombres # cet algorithme ,ermet d$afficher le ,lus ,etit de trois nombres # entrs au clavier. variables a, b, c entiers naturels dbut # lecture donnes !ntrer " a, b, c # # com,araisons si " a - b # alors si " a - c # alors Afficher " a # sinon Afficher " c # fin*si sinon si " b - c # alors Afficher " b # sinon Afficher " c # fin*si fin*si fin Exercice 3. Dure dun vol davion crire un algorithme permettant de calculer la dure dun vol davion, connaissant lhoraire de dpart (heures et minutes) et lhoraire darrive (heures et minutes), sans convertir les horaires en minutes. On suppose que le vol dure moins de 24 heures. Rponse. On effectue le calcul sans tenir compte des valeurs et on ajuste le cas chant. Lalgorithme est alors le suivant : Algorithme dure.olAvion/ans0onversion Algorithme dure.olAvion/ans0onversion Algorithme dure.olAvion/ans0onversion Algorithme dure.olAvion/ans0onversion # cet algorithme ,ermet de calculer la dure d$un vol d$avion # sans convertir les horaires de d,art et d$arrive en minutes. variables h*de,art, m*de,art, h*arrivee, m*arrivee entiers naturels h*duree, m*duree entiers naturels dbut # lecture donnes !ntrer " h*de,art, m*de,art, h*arrivee, m*arrivee # # calcul de la dure h*duree h*arrivee 1 h*de,art m*duree m*arrivee 1 m*de,art # on rectifie les minutes si ncessaire si " m*dure - 0 # alors m*duree 20 + m*duree h*duree = h*duree ( 3 fin*si # on rectifie les heures si ncessaire si " h*duree - 0 # alors h*duree = 45 + h*duree fin*si # affichage rsultat Afficher " h*duree, m*duree # fin Exercice 4. Lecture dalgorithme Que fait lalgorithme suivant ? Algorithme m6st7re8oucle4 Algorithme m6st7re8oucle4 Algorithme m6st7re8oucle4 Algorithme m6st7re8oucle4 # c$est 9 vous de trouver ce que fait cet algorithme: variables a, b, c entiers naturels dbut # lecture des donnes !ntrer " a, b # # initialisation et calculs c 3 tantque " b 0 # faire si " " b mod 4 # = 3 # alors c c ; a fin*si a a ; a b b div 4 fin*tantque # affichage rsultat Afficher " c # fin Rponse. Cet algorithme calcule la valeur de a lev la puissance b (exponentiation rapide). Cet algorithme utilise le mme principe que le prcdent : cette fois, cest la dcomposition binaire de b qui est utilise. La variable a, elle, prend successivement les valeurs a, a 4 , a 5 , a < , etc. Lorsquun tour de boucle correspond un 1 dans la dcomposition binaire de b, la variable c cumule par produit la puissance correspondante de a. Ainsi, pour b = 43 = 4 5 + 4 4 + 4 0 , la variable c vaudra finalement a ; a 5 ; a 32 = a 3+5+32 = a 43 = a b . Cet algorithme calcule donc la valeur de a la puissance b, ce que lon peut aisment vrifier en le faisant tourner sur un (petit) exemple Exercice 5. Afficher les diviseurs dun entier crire un algorithme permettant dafficher les diviseurs dun entier naturel par ordre croissant. Rponse. La boucle Pour vient encore notre rescousse ici (notons quil est inutile cependant de parcourir lintervalle =n)4 + 3, n>). Attention, si n = 0, tous les entiers divisent n !... Lalgorithme est le suivant : Algorithme diviseurs?rdre0roissant Algorithme diviseurs?rdre0roissant Algorithme diviseurs?rdre0roissant Algorithme diviseurs?rdre0roissant # cet algorithme ,ermet d$afficher les diviseurs d$un entier naturel # ,ar ordre croissant variables n, diviseur entiers naturels dbut # lecture des donnes !ntrer " n # # cas o% n est nul si " n = 0 # alors Afficher " &'ous les entiers non nuls sont diviseurs de 0& # # cas gnral sinon # boucle de ,arcours, si diviseur divise n, on l$affiche ,our diviseur de 3 9 n div 4 faire si " n mod diviseur = 0 # alors Afficher " diviseur # fin*si fin*,our Afficher " n # fin*si fin Exercice 6. Nombre premier crire un algorithme permettant de dterminer si un entier naturel entr au clavier est premier. Rponse. Il suffit de chercher un diviseur de n dans lintervalle =4,@acine0arre"n#>. Ds quun tel diviseur est trouv, le nombre n nest pas premier. On utilisera donc la structure tantque qui permet darrter la recherche ds quun diviseur est dcouvert. Lalgorithme est le suivant : Algorithme nombrePremier Algorithme nombrePremier Algorithme nombrePremier Algorithme nombrePremier # cet algorithme ,ermet de dterminer si un entier naturel entr au clavier # est ,remier variables n, diviseur entiers naturels rac rel dbut # lecture des donnes !ntrer " n # # initialisations rac @acine0arre " n # # fonction racine carre diviseur 4 # boucle de recherche d$un diviseur tantque " " n mod diviseur 0 # et " diviseur A rac # # faire diviseur diviseur + 3 fin*tantque # affichage rsultat si " diviseur B rac # alors Afficher " &Ce nombre est ,remier& # sinon Afficher " &Ce nombre n$est ,as ,remier& # fin*si fin Exercice 7. Nombres premiers jumeaux infrieurs 1000 Deux nombres premiers sont jumeaux si leur diffrence vaut 2 (par exemple, 5 et 7 sont deux nombres premiers jumeaux). crire un algorithme permettant dafficher tous les couples de nombres premiers jumeaux infrieurs 1000. Rponse. Il suffit de modifier lalgorithme prcdent, en mmorisant le dernier nombre premier trouv. On obtient alors : Algorithme nombresPremiersDumeaux Algorithme nombresPremiersDumeaux Algorithme nombresPremiersDumeaux Algorithme nombresPremiersDumeaux # cet algorithme ,ermet d$afficher la liste de tous les nombres ,remiers # infrieurs 9 300 variables i, n, n,rec, diviseur entiers naturels rac rel dbut # initialisation n,rec 4 # boucle ,rinci,ale ,our i de E 9 FFF faire # initialisations rac @acine0arre " n # # fonction racine carre diviseur 4 # boucle de recherche d$un diviseur tantque " " n mod diviseur 0 # et " diviseur A rac # # faire diviseur diviseur + 3 fin*tantque # si n ,remier si " diviseur A Arac # alors # Gumeau avec n,rec H si " n 1 n,rec = 4 # alors Afficher " n,rec, n # fin*si # on met 9 Gour n,rec n,rec n fin*si fin*,our fin Exercice 8. Calcul du n ime nombre de Fibonnacci crire un algorithme permettant de calculer le nombre de Fibonacci I"n# : I"0# = 0, I"3# = 3, et I"n# = I"n(3# + I"n(4#. Rponse. On mmorise les valeurs de I"n# et I"n(3#, que lon maintient jour au fur et mesure de lavance du calcul Lalgorithme est le suivant : Algorithme nombreIibonacci Algorithme nombreIibonacci Algorithme nombreIibonacci Algorithme nombreIibonacci # cet algorithme ,ermet de calculer le nombre de Iibonacci I"n# variables n, i, fibo, moins3 entiers naturels dbut # lecture des donnes !ntrer " n # # initialisations fibo 3 moins3 0 # test si cas sim,le " n = 0 # si " n = 0 # alors Afficher " 0 # sinon # boucle de calcul ,our le cas gnral ,our i de 4 9 n faire fibo fibo + moins3 moins3 fibo 1 moins3 fin*,our # affichage rsultat Afficher " fibo # fin*si fin Remarquons ici les oprations du corps de boucle ,our : nous nous sommes permis dutiliser un artifice vitant lutilisation dune variable supplmentaire. Si nous avons effectu par exemple 3 tours de boucles, nous avons moins3 = 4 et fibo = E (on a calcul I"5#). Au 4 me tour, nous faisons fibo E + 4 = J, puis moins3 J 1 4 = E, ce qui est bien correct.