S5BoucleExercices.doc - LAMSADE

o D'écrire un par ligne et dans l'ordre de la liste les éléments de l1 ; ... le nom
commence par la lettre D. (Rappel : étant donnée une chaîne de caractère s, s[i]
désigne ... c) Ecrire un algorithme d'obtenir pour une action la valeur de la
variation maximale de son cours .... Exercice 16 : Extrait de l'examen de
septembre 2000.

Part of the document


[pic] ----------------------------------------------------------------------------
-------------------------------------
Pas de nouvelles notions de cours. Finir le cours sur les boucles, et faire
des exercices, notamment utilisant à la fois les listes et les boucles.
----------------------------------------------------------------------------
------------------------------------- Exercice 1 : manipulation de listes
Soit l1 et l2 deux listes quelconques, donner les algorithmes permettant :
o D'écrire un par ligne et dans l'ordre de la liste les éléments de l1 ;
o D'écrire un par ligne et dans l'ordre inverse de la liste les éléments
de l1.
o De compter le nombre d'occurrence d'un élément dans une liste ;
o De construire l3 comme l'union sans doublon de l1 et l2 ;
o De construire l3 comme l'intersection de l1 et l2 ;
o De vérifier que les éléments de l1 sont une et une seule fois dans l2 ;
o De retirer un élément de toutes ses positions dans la liste l1 ; Exercice 2.
Soit la liste L:=[12,-6,5,8,9,0,12,1]. Ecrire des instructions permettant
de calculer la somme des éléments de L. Exercice 3.
Soit la liste L:=[12,-6,5,8,9,0,12,1].
- Ecrire une boucle permettant de calculer le plus petit élément de L.
- Ecrire (indépendamment) une boucle permettant de calculer l'indice du
plus petit élément de L. Exercice 4.
On a une séquence S, par exemple S=1,3,-5,8,10,x,y,z,6,t. En utilisant une
boucle, créer la séquence S2 contenant les éléments de S mais dans l'ordre
inverse. Exercice 5. Etant donnée une liste L de nombres, écrire des instructions
MAPLE permettant de calculer le nombre d'éléments de la liste inférieurs
strictement à 20. Ecrire des instructions MAPLE permettant de calculer le
produit des nombres divisibles par 6 dans L. Exercice 6.
1. On a une liste L des noms des étudiants d'un groupe
(L :=[(Coulomb(,(Perial(, (Nodrest(,...]). Ecrire un programme Maple
permettant de déterminer le nombre d'étudiants dont le nom commence par la
lettre D. (Rappel : étant donnée une chaîne de caractère s, s[i] désigne la
i° lettre de s)
2. On suppose maintenant qu'à chaque étudiant correspond une liste de deux
éléments : son nom et son prénom. La liste des étudiants du groupe est
alors formée de l'ensemble des listes de chaque étudiant, par exemple
L :=[[(Coulomb(,(Stephane(],
[(Perial(,(Etienne(],[(Nodrest(,(Mathieu(],...] . Ecrire un programme Maple
permettant de déterminer le nombre d'étudiants dont le prénom est (Alban(. Exercice 7.
On a une L liste de nombre triés par ordre croissant. Etant donne un
nombre, écrire des instructions permettant d'insérer ce nombre a la bonne
place dans la liste (( on veut que la liste reste triée). Exercice 8.
Ecrire un programme qui teste si une chaîne de caractères est un palindrome
(chaîne qui se lit de la même manière dans les deux sens, par exemple
(kayak(). Exercice 9.
Ecrire un algorithme qui compare par ordre lexicographique deux listes
numériques l1 et l2 et affiche le résultat de la comparaison.
On rappelle que dans l'ordre lexicographique la liste [25, 15, 32] est
inférieure à toute liste commençant par 26, à toute liste commençant par
25,16, à toute liste commençant par 25,15, 32, ... Exercice 10.
Soit s:="haoziuyeoiuyez". Ecrire les instructions permettant de créer une
chaîne s2 obtenue à partir de s en enlevant les voyelles. Exercice 11 :
Soit le tableau d'actions suivant, donnant le montant par mois du cours
moyen de l'action. | |Janvier |Février |... |Décembre |
|Vivendi |50 |51 |... |2 |
|... |... |... |... |... | Questions :
a) Donner la structure de listes permettant de représenter ce tableau.
b) Ecrire un algorithme permettant d'obtenir pour une action la valeur
minimale de l'action
c) Ecrire un algorithme d'obtenir pour une action la valeur de la
variation maximale de son cours
Exemple : la variation maximale pour Vivendi est 51 - 2 soit 49.
d) Ecrire un algorithme permettant de retrouver dans le tableau d'action
celle qui a subi la plus forte variation et afficher le nom de
l'entreprise.
Remarque : proc n'ayant pas été vu cela alourdi cet exercice mais cela peut
servir à introduire la notion de programme. Exercice 12.
Jeu du pendu simplifié : Maple génère un nombre aléatoire. On a dix essais
pour trouver ce nombre. A chaque proposition, le programme doit indiquer si
l'on a gagné et, sinon, si le nombre à trouver est plus petit ou plus grand
que le nombre proposé, ainsi que le nombre d'essais qu'il nous reste.
On utilisera la fonction rand : Taper b:=rand(1..1000): (b est alors un
générateur de nombres aléatoires entre 1 et 1000). Pour générer un nombre :
b() :
L'instruction break: permet de sortir d'une boucle.
Remarque : attention à cet exercice avec les problèmes de readstat ! Exercice 13 : liste de listes
Soit le tableau de notes suivant : | |Prénom |Math |... |Info |Français |
|Dupond |Jean |12 |... |15 |10 |
|... | |... |... |... |... |
|Durand |Paul |5 |... | |9 | Donner la structure de listes permettant de représenter ce tableau. Les
étudiants ne suivant pas tous les mêmes options, le tableau peut comporter
des « trous ». Par exemple, l'élève Durand n'a pas de notes en info et
cette matière ne doit donc pas apparaître pour Durand.
Donner l'algorithme qui permet de retrouver pour un étudiant sa note la
plus basse et qui affiche le nom de la matière concernée.
Donner l'algorithme qui permet pour une matière de calculer la moyenne des
notes des étudiants concernés.
Exercice 14 :
On considère une liste L numérique rangée par ordre croissante. Soit n sa
longueur.
1°) Ecrire en Maple une fonction rang ayant pour paramètre la liste L
et un nombre X qui donne le rang du premier élément de L strictement plus
grand que X ou n+1 si tous les éléments de L sont plus petits.
Rang([1,2,5,8,8,9,10],6) donne 4
2°)On considère l'algorithme suivant où L est toujours une liste
numérique croissante.
Procédure saisie(L) Déclaration des paramètres L liste croissante numérique ENTREE et SORTIE Déclaration des variables locales X :numérique, j :entier Début Lire(X)
J :=rang((L,X)
Insérer(X,j,L) Retour Si L :=[2,8,12,15] que devient L après l'appel de saisie(L) si
l'utilisateur tape 1, après un deuxième appel si l'utilisateur tape 10,
après un troisième appel si l'utilisateur tape 15. Implanter cette
procédure en Maple. Exercice 15 :
1) Implémenter l'algorithme de tri à Bulle : Le principe est de parcourir
le tableau en comparant deux éléments consécutifs que l'on échange au
besoin. On parcourt le tableau autant de fois que nécessaire pour que le
tableau soit trié.
a. Modifier swapA pour qu'il ne permute que si le premier paramètre est
supérieur au second.
b. Ecrire la méthode TriABulle qui prend en paramètre d'entrée sortie une
liste d'entiers non triés.
2) On peut s'éviter les passages inutiles à l'aide d'un booléen qui est mis
à true au début de chaque passage, et qui sera positionné à false si un
échange a lieu dans la boucle interne : modifier l'algorithme précédent
en conséquence. Exercice 16 : Extrait de l'examen de septembre 2000
On relève certains jours de l'année le niveau des précipitations. Une
observation sera une liste de 3 valeurs [< numéro du jour >,< numéro du
mois >,< niveau >]. Par exemple, 10mm d'eau observés le 13 février
correspond `a la liste [13,2,10]. On suppose qu'une variable Observations
contient une liste de telles observations. C'est donc une liste de listes.
1) On définit la variable Mois :=[ 31, 28, 31, 30, 31, 10, 31, 31, 30, 31,
30, 31] correspondant aux nombres de jours des mois d'une année non
bissextile. Définir une fonction numjour qui, `a une observation donnée,
associe le numéro du jour dans l'année. Par exemple, numjour([12,2,10])
vaut 43 (31 jours de janvier + 12
jours de février).
2) Définir une fonction `a valeur booléenne correct(x) qui retourne true si
l'observation x correspond `a un mois compris entre 1 et 12, un jour
entre 1 et le nombre de jours du mois donné et un niveau de
précipitations positif ou nul. Donner une ou des instructions permettant de supprimer les observations
incorrectes (si elles existent) de la variable observations. 3) Donner une fonction `a valeur booléenne Avant(x, y) prenant la valeur
true si l'observation x a lieu avant y.
Donner une ou des instructions Maple pour que la variable Observations soit
triée chronologiquement.
Exercice 17 :
Un numéro de compte bancaire se décompose en quatre parties :
. code banque : cinq caractères ;
. code guichet : cinq caractères ;
. numéro de client : onze caractères ;
. clef RIB : deux caractères.
Pour contrôler qu'un numéro de compte est valide, on réalise sa conversion
en un nombre de 23 chiffres et si ce dernier est divisible par 97, alors le
numéro de compte est valide. La conversion d'un numéro de compte s'effectue
de la manière suivante :
|Caractè|Chiff|
|res |res |
|0 |0 |
|1, A, J|1 |
|2, B, |2 |
|K, S | |
|3, C, |3 |
|L, T | |
|4, D, |4 |
|M, U | |
|5, E, |5 |
|N, V | |
|6, F, |6 |
|O, W | |
|7, G, |7 |
|P, X | |
|8, H, |8 |
|Q, Y | |
|9, I, |9 |
|R, Z | |
Écrire une procédure, contrôlerValiditéCompte, qui assure la lecture d'un
numéro de compte bancaire, contrôle sa validité et affiche le message
"Numéro de compte valide" ou "Numéro de compte non valide" s