MPSI/Ecole Préparatoire 2014-2015 Exercices d’ALGORITHMIQUE Exercice 1 : Ecrire un programme qui boucle à l’infini a) En utilisant la structure TANT QUE b) En utilisant la structure REPETER … JUSQUE c) En utilisant POUR Exercice 2 : Écrire un sous-programme qui affiche le codage d’un entier quelconque et donne le nombre de bits à 1. Exercice 3 : Écrire une fonction qui retourne le plus grand commun diviseur (pgcd) de deux nombres entiers positifs par l’algorithme d’Euclide suivante: Exercice 4 : Écrire une fonction qui calcule la racine carrée entière d’un nombre entier positif par soustractions successives des nombres impairs. Exemple : Racine de 51 Il y a eu 7 soustractions en tout, donc la racine entière de 51 est 7. Exercice 5 : Soit C np est défini pour 0 p n , par - C np C np1 C np11 pour p différent de 0 et n - C n0 C nn 1 Trouver un programme permettant d’effectuer le calcul de C np . Exercice 6 : La date de Pâques correspond au 1er dimanche après la première pleine lune qui suit l'équinoxe de printemps. Soient les données suivantes : a = Année modulo 19 b = Année modulo 4 c = Année modulo 7 d = (19 * a + 24) mod 30 e = (2 * b + 4 * c + 6 * d + 5) mod 7 alors n = 22 + d + e n est le numéro du jour à partir du 1er mars correspondant au dimanche de Pâques. Dr KADJO Tanon Lambert Département Mathématiques et Informatique INP-HB / Yamoussoukro www.kadjo-lambert.c4.cf MPSI/Ecole Préparatoire 2014-2015 Réalisez un programme qui calcule la date de Pâques à partir de l'année. Exercice 7 : Un candidat obtient 5 notes Système (Coeff 5), Algo (coeff 3), HTML (Coeff 3), Java (coeff 4), BDD (coeff 4), à un examen. Ces notes sont stockées dans un tableau NOTES. Pour déterminer sa réussite, on calcule une moyenne pondérée à l'aide de 5 coefficients stockés dans un tableau COEFF. 1) Ecrire l'algorithme qui calcule à l'aide d'une boucle, la moyenne pondérée d'un candidat. 2) Compléter cet algorithme à l'aide d'une deuxième boucle pour calculer le résultat de 30 candidats. Exercice 8 : Écrire un algorithme qui permet de déplacer un pion sur un damier. L’ordinateur demande à l’utilisateur dans quelle case se trouve son pion (quelle ligne, quelle colonne). On met en place un contrôle de saisie afin de vérifier la validité des valeurs entrées. Ensuite, on demande à l’utilisateur quel mouvement : - 0 (en haut à gauche) - 1 (en haut à droite) - 2 (en bas à gauche) - 3 (en bas à droite). Si le mouvement est impossible (i.e. on sort du damier), on le signale à l’utilisateur et on lui propose des positions et le jeu s’arrête. Sinon, on déplace le pion et on affiche le damier résultant, en affichant un « O » pour une case vide et un « X » pour la case où se trouve le pion. NB : On considère l’instruction LDA « Afficher (" \n") » , l’instruction permettant d’aller sur une nouvelle ligne. Exercice 9 : L’un des plus vieux code secret est le chiffre de César. Il consiste en un décalage circulaire de l’alphabet utilisé. Le tableau ci-dessous présente le codage obtenu pour un décalage de 4 positions de l’alphabet. Le mot “BAC” est codé “FEG”. Dr KADJO Tanon Lambert Département Mathématiques et Informatique INP-HB / Yamoussoukro www.kadjo-lambert.c4.cf MPSI/Ecole Préparatoire Lettre à coder Lettre après codage A E B F C G D H E I F J G K 2014-2015 … … Y C Z D On stocke dans le tableau CHAINE_A_CODER (respectivement le tableau CHAINE_A_DECODER), la chaîne de caractères à encoder (respectivement la chaine de caractères à décoder) à avec les critères suivants : - vous demandez à l’utilisateur de saisir la chaine. - Cette chaîne fait une longueur définie par la variable LONGUEUR_CHAINE. - Cette chaîne de caractères ne doit contenir que des majuscules. Assurez-vous qu’elle l’est. Dans cet exercice, on ne codera que les 26 lettres de l’alphabet. Les autres caractères ne le seront pas et seront donc fournis tels quels. 1) Quel est le code correspondant à la chaine EXAMEN si le décalage est de 4 positions. 2) Proposez un programme qui encode CHAINE_A_CODER et affiche le résultat. Le nombre de lettre de décalage est demandé à l’utilisateur. 3) Proposez un programme qui décode CHAINE_A_DECODER et affiche le résultat. Le nombre de lettre de décalage est demandé à l’utilisateur. Exercice 10 : Tri bulle 1. Ecrire un algorithme illustrant le tri bulle 2. Dérouler le tri bulle sur le tableau suivant, en donnant le détail des différentes étapes Notes 45 11 2 0 3 2 0 17 11 Exercice 11 : Méthode de Tri On a un tableau [1..N] de réels dont on sait qu’ils sont tous compris entre 0 et 1, et qu’ils sont différents les uns des autres. On se propose de les trier par la méthode suivante : - On sépare ceux qui sont plus petits que 1/2 (et on les met à gauche du tableau) et ceux qui sont plus grand s ou égaux à 1/2 (vont à droite). - On prend ceux qui sont plus petits que 1/2 , et on les sépare en plus petits et plus grands que 1/4. Les plus petits que 1/4 seront séparés en plus petits et plus grands que 1/8. Ceux qui sont plus petits que 1/2 mais plus grand que ¼ seront séparés en plus petits et plus grands que 3/8. Les plus grands que 1/2 seront séparés en plus grands et plus petits que 3/4 etc. jusqu’à aboutir à un tableau trié. - 1) A quel moment peut-on savoir que le tableau est trié ? 2) Programmer cette méthode. 3) Comment peut-on appliquer cette méthode sur un tableau de réels quelconques. Dr KADJO Tanon Lambert Département Mathématiques et Informatique INP-HB / Yamoussoukro de valeurs www.kadjo-lambert.c4.cf MPSI/Ecole Préparatoire 2014-2015 Exercice 12 : Soit l’algorithme suivant : Procédure Bolt (Tab[1..1000] : tableau de numériques, id_debut : entier, id_fin : entier) id_pivot : entier Debut Si (id_debut < id_fin) Alors id_pivot Partitionner (Tab, id_debut, id_fin) Bolt (Tab, id_debut, id_pivot) Bolt (Tab, id_pivot+1, id_fin) FinSi FinProcedure Fonction Partitionner (Tab[1..1000] : tableau de numériques, id_debut : entier, id_fin : entier) : numerique pivot, i, j : numérique test : booléen Debut pivotTab[id_debut] i id_debut - 1 j id_fin+1 test VRAI Tant Que (test) Repeter j j-1 Jusqu’à (Tab[j]<= pivot) Repeter i i+1 Jusqu’à (Tab[i]>=pivot) Si (i < j) Alors Echanger (Tab, i, j) Sinon test FAUX FinSI FinTantQue Retourner (j) FinFonction 1) 2) 3) 4) Donner le pseudo-code de la procédure Echanger Faire tourner sur l’exemple [9, 4, 2, 8, 5] l’algorithme Bolt. Faire tourner sur l’exemple [2, 4, 5, 8, 9] l’algorithme Bolt. Si l’on veut appliquer cet algorithme sur le tableau [2, 2, 2, 2, 2], quelle valeur retourne Partitionner, pour son premier appel ? Dr KADJO Tanon Lambert Département Mathématiques et Informatique INP-HB / Yamoussoukro www.kadjo-lambert.c4.cf MPSI/Ecole Préparatoire 2014-2015 Exercice 13 : Ecrire un algorithme qui affiche les informations ci-dessus d’un employé dans un cadre en lui indiquant le temps restant pour atteindre la date de retraite. On suppose que la durée de fonction est estimée à 30 ans d’exercice. Nom : KONE Prenoms : Mamadou Date d’embauche : 12/07/1978 Sexe : M Exercice 14. Créer un tableau EMPLOYES qui contiendra les informations sur les 50 employés d’une entreprise (Matricule, Nom, Salaire, Etat_civil, Date_Naiss, Date_embauche), le remplir puis afficher le nombre d’employés dont le salaire est compris entre 250 000 FCFA et 500 000FCFA. Afficher la liste des employés ayant plus de 20 ans de services à la date de 01/01/2010, ainsi que le nombre d’années de services. Exercice 15 : Écrivez une fonction ayant en paramètres le nombre d’heures effectuées par un salarié et son salaire horaire, qui retourne sa paie hebdomadaire. Les heures sup. (au-delà de 35 heures) sont payées à 150%. Dr KADJO Tanon Lambert Département Mathématiques et Informatique INP-HB / Yamoussoukro www.kadjo-lambert.c4.cf