Exercices d`algorithmique
Transcription
Exercices d`algorithmique
Promo 2013 Exercices d’algorithmique Les algorithmes proposés ne sont pas classés par ordre de difficulté. Nombres Ecrire un algorithme qui renvoie la somme des nombre entre 0 et n passé en paramètre Ecrire un algorithme qui renvoie la factorielle de n passé en paramètre Ecrire un algorithme qui renvoie la valeur de n puissance k avec n et k passés en paramètres Ecrire un algorithme qui renvoie la moyenne de deux réels a et b passés en paramètres Ecrire un algorithme qui renvoie le résultat d’une mini-calculatrice. Cette méthode aura comme paramètre deux nombres et une chaîne de caractère qui vaudra « + », « - », « * », « / ». Ecrire un algorithme qui renvoie le nombre de chiffres d’un entier passé en paramètre Ecrire un algorithme qui renvoie la somme des chiffres d’un entier passé en paramètre Ecrire un algorithme qui renvoie le nombre de chiffres communs à deux entiers passés en paramètres Ecrire de deux façons différentes un algorithme qui affiche tous les entiers entre 0 et 100 divisibles par 7. Méthode 1 : Si l’on connaît un multiple de 7, il suffit d’ajouter 7 pour avoir le suivant. Sachant que le premier multiple de 7 est 0 (7*0=0) écrire une méthode qui affiche les multiples de 7 entre 0 et 100. Méthode 2 : Avec les opérateurs DIV et REST faire un algorithme qui affiche les nombres divisibles par 7 entre 0 et 100. Pour chaque nombre trouvé, on affichera en plus le résultat de la division. Ecrire un algorithme qui calcule le nombre d’années nécessaires pour doubler son épargne en affichant le montant de l’épargne chaque année à partir d’un montant initial et d’un taux constant Ecrire un algorithme qui écrit la table de multiplication d’un nombre passée en paramètre, présentée comme suit (cas où l'utilisateur entre le nombre 7) : Table de 7 : 7x1=7 7 x 2 = 14 7 x 3 = 21 … 7 x 10 = 70 Ecrire un algorithme qui lit deux nombres n1 et n2 et écrit tous les nombres compris entre n1 et n2, sauf les multiples de 3 et les multiples de 5. Antoine GAGNEUX Algorithmique et Java Promo 2013 Nombres Complexes Ecrire une méthode qui affiche les nombres complexes z résultat de l’équation : Z n =λ Avec n entier et λ nombre complexe, passés en paramètre. Les z solutions sont les complexes de la forme : ρ = n r et θ =α + 2Kπ Avec λ=r(cos α + i sin α) et K de 0 à n-1 n n Nombres premiers Partie 1 : Un nombre est dit premier s’il ne se divise que par lui-même et par 1. Pour savoir si un nombre a est premier il faut le diviser par tous les nombres d compris entre 1 et lui même. Si aucune division n’est possible, le nombre est alors premier. Ecrire un algorithme qui affiche si un nombre rentré par l’utilisateur est premier ou non. Partie 2 : Cette manière de calculer les nombres premiers est longue ! En réalité, si a est le nombre sur lequel on s’interroge, on peut ne tester que tous les nombres d tels que d2<= a. Des que d2>a on peut arrêter la boucle de test (il existe une démonstration mathématique). Ecrire un algorithme permettant de vérifier si un nombre est premier en prenant en compte ces nouvelles informations. Partie 3 : Soit un nombre n, il peut s’écrire sous la forme n=p*q avec p et q des nombres premiers (propriété mathématique). L’objectif de cet exercice est d’afficher les p et q connaissant n. On pose l’hypothèse qu’il existe une opération qui indique si un nombre est premier, on écrira par exemple dans l’algorithme si i est premier alors …(avec i une variable). Ecrire l’algorithme qui affiche p et q à partir de n demandé à l’utilisateur. (Indication : on pourra tester tous les p et tous les q entre 1 et n) Suites Ecrire un algorithme qui renvoie la valeur de U(n), n passé en paramètre, d’une suite. Ecrire de deux façons différentes un algorithme qui affiche les valeurs successives d’une suite (la même) de 0 à n passé en paramètre. Quelles sont les avantages de ces deux approches ? Ecrire un algorithme qui renvoie la valeur de n pour le premier terme d’une suite supérieur (ou inférieur suivant les cas) à k passé en paramètre Exemple de suites possibles : U0=3 Un+1 = Un + 1.74 U0=1 Un+1 = Un * 2.4 Antoine GAGNEUX Algorithmique et Java Promo 2013 Chaines Ecrire un algorithme qui renvoie si deux mots (chaîne de caractères) passés en paramètre sont des anagrammes l’un de l’autre. (Lettres identiques mais dans un ordre différent) Ecrire un algorithme qui renvoie si un mot (chaine de caractères) passé en paramètre est un palindrome (mot identique de gauche à droite et de droite à gauche : radar) Booléens Faire la table de vérité de la formule (résultat en fonction des valeurs de A, B et C) (A ET B) OU (A ET NON B ET C) Ecrire un algorithme qui affiche le OU exclusif (XOR) de deux booléens XOR V F V F V F V F Formule : (A OU B) ET (NON (A ET B)) Nombres, Exercice : moyennes Cet exercice concerne la réalisation d’un algorithme, composé de sous- algorithme, permettant le calcul de la moyenne de groupes de personnes. (Sans tableau) Partie 1 Ecrire une méthode qui - effectue la saisie des notes - renvoie la moyenne et le nombre de notes entrées - la saisie s’arrête lorsque l’utilisateur rentre la note -1 Partie 2 Ecrire une méthode qui renvoie le maximum de deux nombres passés en paramètre. Partie 3 On désire écrire une méthode rajoutant une note à la moyenne. A partir d’une moyenne, d’un nombre de personnes et d’une note supplémentaire, la procédure met à jour le nombre de personnes et la moyenne. La formule pour calculer la nouvelle moyenne est : Nouvellemoyenne=((moyenne*nbpersonnes)+nouvellenote)/(nbpersonnes+1) Ecrivez la méthode. Partie 4 Ecrire une méthode qui renvoie une note saisie par l’utilisateur. Partie 5 A partir de toutes ces méthodes, on désire écrire un algorithme qui effectue les taches suivantes : - Calcul de la moyenne et du nombre de notes du groupe 1 - Calcul de la moyenne et du nombre de notes du groupe 2 - Affichage de « le groupe le plus nombreux contient xx personnes » - Affichage de « et sa moyenne est yy » - Ajout d’une nouvelle note au groupe 1 - Recalcule de la moyenne du groupe 1 - Affichage de « la nouvelle moyenne du groupe 1 est zz, il compte qq personnes » Vous devez utiliser les fonctions réalisées dans les parties 1, 2, 3, 4. Antoine GAGNEUX Algorithmique et Java Promo 2013 Tableaux Ecrire une méthode qui initialise à 0 un tableau de taille n passée en paramètre. Ecrire une procédure qui affiche toutes les cases d’un tableau. Ecrire une procédure qui affiche toutes les cases non vides d’un tableau (une case est dite vide si sa valeur est -1). Ecrire une fonction qui compte le nombre d’éléments non vides dans un tableau. Ecrire une fonction vide? qui renvoie vrai si le tableau contient au moins 1 case vide. Ecrire une fonction qui calcule la moyenne des éléments d’un tableau. Cas 1 : le tableau est totalement rempli de cases non vides. Cas 2 : le tableau peut contenir des cases vides. Ecrire une fonction qui renvoie l’indice de la place d’un élément recherché dans le tableau. Cas 1 : Ecrire la fonction en supposant que l’élément se trouve dans le tableau Cas 2 : Ecrire la fonction dans le cas général. Ecrire une procédure ajoute qui ajoute un élément dans la première case vide du tableau. Ecrire une procédure qui insère un élément e à l’indice i. (Décrire le processus en étapes puis écrire l’algorithme) Ecrire un algorithme qui insère un élément e à la première place libre (les places libres auront comme valeur -1), e passé en paramètre Ecrire un algorithme qui insère un élément e à la première place du tableau, e passé en paramètre Ecrire une procédure qui supprime l’élément d’indice i. Ecrire une procédure qui supprime l’élément e. Ecrire une procédure qui supprime tous les éléments e. Ecrire une procédure qui supprime l’élément d’indice i avec décalage. Ecrire une procédure qui supprime l’élément e avec décalage. Ecrire une procédure qui tasse un tableau (mettre tous les éléments vides à la fin du tableau) Ecrire un algorithme qui affiche un tableau à l’envers (du dernier au premier élément) Ecrire un algorithme qui inverse un tableau Antoine GAGNEUX Algorithmique et Java Promo 2013 Tableau : Dichotomie 1 Sachant que le tableau est trié et connaissant la valeur de la case du milieu du tableau, il est possible de savoir si l’élément recherché se trouve dans la sous partie gauche ou droite du tableau. Exemple : on recherche l’élément 23 dans le tableau de 19 cases suivant 3 8 17 18 23 26 29 31 32 38 45 47 55 59 62 78 82 90 23 est plus petit que 32 donc se trouve dans la partie gauche du tableau c’est à dire entre les cases 1 et 10. Ensuite, recommençons dans la sous partie gauche. 1 Exemple : est ce que 23 est plus petit ou plus grand que 18, c’est à dire à gauche ou à droite de la 5ème case ? 3 8 17 18 23 26 29 31 Ensuite, recommençons jusqu'à tomber sur le numéro cherché. Le principe de dichotomie est donc le suivant Choisir un intervalle (Au départ tout le tableau) Prendre son milieu Comparer l’objet cherché avec la valeur du milieu Modifier (restreindre) l’intervalle en fonction de la comparaison (A gauche ou à droite) Recommencer l’opération jusqu'à l’arrêt (trouvé ou non trouvé) Ecrire une méthode qui recherche un élément e dans un tableau par dichotomie Tableaux, Exercice : Hidden and dangerous, Recherche et suppression - Définir un tableau d’entiers de taille 100. - Ecrire une méthode qui initialise le tableau avec des entiers quelconques compris entre 1 et 100. Le tableau d’entier représente la jungle hostile dans laquelle vous devez débusquer des ennemis pour les détruire. La destruction se fait avec décalage. Pour savoir si un élément est un ennemi vous connaissez un test infaillible : s’il est impair et ses deux voisins pairs alors c’est un ennemi. Tactique 1 : On ratisse large Attention : ne codez pas cette tactique On parcourt la jungle, dès qu’on trouve un ennemi on s’arrête et on l’élimine. On recommence alors au début du tableau Lorsqu’on atteint enfin la fin du tableau, il n’y a plus d’ennemi. Quel est le problème de cette tactique ? Tactique 2 : Avec la technologie moderne Etape 1 : L’aviation parcourt la jungle et compte le nombre d’ennemis présents. Etape 2 : Vous supprimez les ennemis en vous aidant de l’information de l’aviation. Codez cet algorithme. Tactique 3 : « Roger, quartier général » Vous êtes au quartier général et vous supervisez les informations de l’aviation et de l’infanterie. Etape 1 : Vous demandez à l’aviation la place de l’ennemi le plus proche à partir de la position i. Etape 2 : Vous envoyez l’infanterie détruire l’ennemi en connaissant sa position. Etape 3 : Vous recommencez l’étape 1 à partir de la nouvelle position. Codez cet algorithme. Antoine GAGNEUX Algorithmique et Java Promo 2013 Tableaux 2D : Matrix - The Mutiplixeur En français, la multiplication de deux matrices carrées de même dimension (n*n) est réalisée par la célèbre formule qu’aurait pu écrire Zola « Ligne fois colonne ». En dessin, DeVinci aurait réalisé une œuvre à partir d’un schéma se rapprochant de celui-ci : j j i. . . . ci , j . = . i En mathématique, Fermat n’aurait même pas pris la peine d’annoter dans la marge la formule de multiplication de deux matrices de même dimension suivante : N Ci , j = ∑ Ai , k Bk , j k =1 Mais en informatique, l’élève, n’ayant point autant de notoriété va devoir écrire l’algorithme correspondant. Ecrire un algorithme qui réalise la multiplication de deux matrices (dimensions des deux matrices identiques). Antoine GAGNEUX Algorithmique et Java