Algorithmique td Algo 2 – Nov. 2014 Info-sup S1 Epita TD répétitif 1 Itérations Exercice 1.1 (Zorglub) Que calcule l’algorithme suivant lorsqu’il est appelé avec un entier n strictement positif ? algorithme fonction zorglub : entier parametres locaux entier n variables entier i, j, k debut j ← 1 k ← 0 i ← 1 tant que i <= n faire j ← i*j k ← j+k i ← i+1 fin tant que retourne k fin algorithme fonction zorglub Exercice 1.2 (Multiplication) 1. Écrire une fonction qui calcule x × y, avec (x, y) ∈ N2 en n’utilisant que les opérateurs + et -. 2. Écrire une fonction qui calcule x × y, avec cette fois-ci (x, y) ∈ Z2 . Exercice 1.3 (Puissance N) Écrire une fonction calculant le résultat de nn , avec n ∈ N. La fonction doit afficher également toutes les puissances de n intermédiaire. Exercice 1.4 (Fibonacci) Écrire une fonction itérative calculant le ne`me terme de la suite de Fibonacci. f ibo(0) = f ibo(1) = 1 f ibo(n) = f ibo(n − 1) + f ibo(n − 2) 1 Algorithmique td Algo 2 – Nov. 2014 Info-sup S1 Epita Exercice 1.5 (Maximum) 1. Écrire une fonction qui à partir d’un entier n strictement positif : lit n valeurs entières (données par l’utilisateur), retourne la plus grande des n valeurs lues. 2. Modifier la fonction pour qu’elle n’accepte que des valeurs strictement positives (elle doit en lire n). Exercice 1.6 (Suite) Soit une suite numérique u dont le ne`me terme peut être calculé par l’appel à la fonction u(n). 1. Écrire une fonction qui retourne la somme Sn des n premiers termes de la suite u. 2. Sans utiliser la fonction précédente, écrire une fonction qui retourne n X Si i=1 où Si est la somme des i premiers termes de la suite u. 3. Si ce n’est pas déjà le cas, écrire de nouveau la fonction précédente avec une seule boucle ! 2 Répétitions Exercice 2.1 (Où il faut arriver à 1) La conjecture de Syracuse est définie par : Soit n un entier naturel non nul, ◦ si n est pair, le nombre suivant sera n/2 ; ◦ si n est impair, le nombre suivant sera 3n + 1. Cette suite s’arrête toujours avec la valeur n = 1. Écrire un algorithme qui, à partir de l’entier n, affiche les valeurs calculées en utilisant la conjecture de Syracuse jusqu’à obtenir la valeur 1, si n est strictement positif. Dans le cas contraire, l’algorithme doit déclencher une erreur. Exercice 2.2 (Euclide) Écrire un algorithme calculant le pgcd de 2 entiers a et b strictement positifs en utilisant la méthode d’Euclide dont le principe est rappelé ci-dessous. Algorithme d’Euclide : Si a et b sont deux entiers avec a ≥ b, si r est le reste de la division euclidienne de a par b : a = bq + r avec r < b, alors le pgcd de a et b vaut le pgcd de b et r. Si a est divisible par b, alors le pgcd de a et b est b. 2 Algorithmique td Algo 2 – Nov. 2014 Info-sup S1 Epita Exercice 2.3 (Miroir) Écrire une fonction qui donne le "miroir" d’un entier passé en paramètre s’il est positif. Exemple : 1278 → 8721. Remarque : si l’entier donné est 1250, le résultat sera 521. Exercice 2.4 (Quotient) Soient deux entiers naturels non nuls a et b. Écrire une fonction calculant le quotient entier de a sur b en n’utilisant que des opérateurs additifs (les seules opérateurs autorisés sont + et -). Exercice 2.5 (Où on cherche la puissance) Écrire une fonction qui à partir de deux entiers naturels non nuls a et b, détermine si a est une puissance de b, c’est-à-dire ∃p ∈ N / a = bp . Une erreur devra être déclenchée en cas d’entrées non valides. Exemples : ◦ si a = 16 et b = 2, alors la fonction retourne vrai. ◦ si a = 15 et b = 5, alors la fonction retourne f aux. ◦ si a = 81 et b = 3, alors la fonction retourne vrai. Exercice 2.6 (Factorielle calculable ?) Écrire une fonction itérative qui, à partir d’une valeur entière donnée limite, calcule le plus grand nombre entier pair n tel que n! < limite. Si la valeur ne peut pas être calculée (limite ≤ 0), la fonction retournera 0. Par exemple : si limite = 150 et 5! < 150 < 6! alors le plus grand entier pair dont la factorielle ne dépasse pas 150 est 4. 3 Algorithmique td Algo 2 – Nov. 2014 3 Info-sup S1 Epita Divisibilité Exercice 3.1 (Divisibilité par 11) Ce test particulier de la divisibilité par 11 a été donné en 1897 par Charles L. Dodgson (Lewis Carroll). Soit un entier naturel à tester, former un nouveau nombre en : — enlevant le chiffre des unités — soustrayant le chiffre enlevé du nombre raccourci. Le nombre résultant est divisible par 11 si et seulement si le nombre initial est divisible par 11. Exemple : 24684 → 2464 → 242 → 22. Le nombre 24684 est divisible par 11. Écrire une fonction qui vérifie si un entier naturel non nul est divisible par 11 en utilisant le principe donné ci-dessus. Les seules divisions entières (quotients et restes) qui pourront être utilisées seront des divisions par 10 (pas de division par 11 !). Exercice 3.2 (Nombre parfait) Un nombre est dit parfait s’il est plus grand que 1 et égal à la somme de tous ses diviseurs qui lui sont strictement inférieurs. Exemple : 28 = 1 + 2 + 4 + 7 + 14. Écrire une fonction qui détermine si un entier supérieur à 1 est parfait. Question bonus : Dans une version optimisée, peut-on encore afficher les diviseurs en ordre croissants ? 4 Algorithmique td Algo 2 – Nov. 2014 Info-sup S1 Epita Exercice 3.3 (Preuve par 9) La preuve par neuf permet de "vérifier" l’exactitude d’une multiplication sur les entiers naturels. Pour cela il faut savoir calculer la racine numérique d’un nombre : on ajoute les chiffres du nombre, puis ceux de la somme obtenue, et ainsi de suite jusqu’à n’obtenir un seul chiffre. Pour effectuer la preuve par neuf d’une multiplication A × B = C, il suffit de comparer la racine numérique du produit des racines numériques de A et de B avec la racine numérique de C. L’égalité des deux chiffres obtenus constitue la vérification de l’opération. Écrire une fonction qui à partir de 3 entiers naturels non nuls a, b et c, teste l’égalité a/b = c en utilisant la preuve par neuf. Cette technique est-elle vraiment une preuve mathématique ? Exercice 3.4 (Nombre premier) Écrire une fonction qui détermine si un entier strictement supérieur à 1 est premier ou non. Exercice 3.5 (Vilain nombre) Un ”nombre vilain“ est un nombre qui a au moins deux paires de facteurs telles que la somme des facteurs d’une paire équivaut à la différence des facteurs de l’autre. Ainsi, par exemple : — le nombre 6 est un nombre vilain puisque 6 × 1 = 6, 2 × 3 = 6, et 6 - 1 = 2 + 3 ; — aussi, 24 est un autre nombre vilain puisque 12 - 2 = 6 + 4. Écrire une fonction qui détermine si un entier naturel est un nombre vilain ou non. 5 Algorithmique td Algo 2 – Nov. 2014 4 Info-sup S1 Epita Des chaînes Exercice 4.1 (Recherche) 1. Écrire une fonction booléenne qui recherche si un caractère donné appartient à une chaîne. La fonction devra retourner la position du premier caractère trouvée, la valeur −1 si celui-ci n’est pas présent. 2. Écrire une fonction qui retourne le nombre d’occurrences d’un caractère donné dans une chaîne. 3. Écrire une fonction qui retourne le caractère le plus fréquent dans une chaîne. Exercice 4.2 (Où on change de base) Écrire une fonction itérative qui, à partir d’une chaîne de caractères représentant un entier naturel en base 2 retourne l’entier en décimal. La chaîne vide est l’entier 0. Exemples : — Si la chaîne contient "101010", la fonction retourne 42 (car 42 = 32 + 8 + 2). — Si elle contient "11010000000", la fonction retourne 1664 (car 1664 = 1024 + 512 + 128). On supposera la chaîne valide : elle ne contient que des ’0’ et des ’1’. Exercice 4.3 (Sous-chaîne) 1. Écrire une fonction booléenne qui teste si une chaîne est contenue dans une autre chaîne. 2. Écrire une fonction qui retourne le nombre d’occurrences d’une chaîne dans une autre chaîne. Exemple : Si la chaîne contient "tototot" et que la chaîne recherchée est "tot", la fonction retournera 3. 6
© Copyright 2024 ExpyDoc