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