Devoir surveillé novembre 2014

publicité
Université Pierre Mendès France
U.F.R. Sciences de l’Homme et de la Société
Master IC2A – DCISS – MASSS
8.11.2014
ALGORITHMIQUE
Devoir surveillé
Durée : 2 h – Tous documents autorisés, tout matériel électronique interdit.
Il sera tenu compte de la lisibilité des algorithmes. Pour chaque algorithme réalisé, on définira
soigneusement les variables, les fonctions et les actions introduites pour résoudre le problème.
Les exercices sont indépendants et peuvent être traités dans n'importe quel ordre.
Dans un exercice, pour résoudre une question, vous pouvez utiliser une action ou une fonction que vous
n'avez pas réussi à écrire, en donnant simplement sa spécification. Le barème donné est indicatif, il est
proportionnel au temps de travail estimé : 1 points = 6 minutes.
Exercice 1 : Les deux plus petits (4 points)
On veut réaliser l’action nommée CalculerDeuxPlusPetits qui calcule les deux plus petites
valeurs parmi 4 :
action CalculerDeuxPlusPetits (consultés a, b, d, d : entiers ; élaborés m1, m2 : entiers)
{ Effet : Calcule m1 et m2 les 2 plus petites valeurs parmi a, c, c et d }
a) Précisez l’état initial et l’état final de cette action
b) Ecrire l’action CalculerDeuxPlusPetits (lexique et algorithme)
Exercice 2 : Figures diverses (8 points)
On veut réaliser une action nommée qui trace une croix selon le modèle de la figure ci-dessous, à
l’aide d’une machine-tracés. Une croix est caractérisée par les informations suivantes :
•
•
•
Le point S : le coin supérieur gauche de la croix
la longueur L1 : l’épaisseur des branches de la croix
la longueur L2 : la longueur des branches de la croix
S
La figure ci-contre illustre ces informations :
L2
L2
L1
a) Définir le type nommé Croix correspondant à ces caractéristiques
b) Spécifier et réaliser l’action TracerCroix qui trace une croix à l’aide d’une machine-tracés :
action TracerCroix (consulté x : Croix, modifié m : machine-tracés)
{ Effet : trace la croix x à l’aide de la machine-tracés m }
{ E.I. : ….. à compléter……….. }
{ E.F. : ….. à compléter……….. }
11-2014
1/3
J.M. Adam
c) On veut maintenant réaliser une action nommée qui trace un octogone selon le modèle de la
figure ci-dessous, à l’aide d’une machine-tracés. Un octogone est un polygone convexe régulier
formé de 8 côtés égaux, les angles entre les côtés font 135 degrés. Un octogone est caractérisé
par les informations suivantes :
•
•
Le point S : le coin supérieur gauche de l’octogone
la longueur L : longueur des côtés de l’octogone
S
La figure ci-contre illustre ces informations :
Définir le type nommé Octogone correspondant
à ces caractéristiques
45°
135°
L
L
d) Spécifier et réaliser l’action TracerOctogone qui trace un octogone à l’aide d’une machinetracés :
action TracerOctogone (consulté x : Octogone, modifié m : machine-tracés)
{ Effet : trace l’octogone X à l’aide de la machine-tracés M }
{ E.I. : ….. à compléter……….. }
{ E.F. : ….. à compléter……….. }
e) A l’aide des actions TracerCroix et TracerOctogone, écrire un algorithme principal qui lit les
caractéristiques d’un octogone, trace l’octogone à l’aide d’une machine-tracés, puis trace une croix
inscrite dans l’octogone selon le modèle de la figure suivante :
S
L
L
Le point S est commun à l’octogone et à la croix. L’algorithme principal calculera les
caractéristiques de la croix qui s’inscrit dans l’octogone, puis tracera la croix.
Exercice 3 : Compter les multiples (6 points)
On considère une séquence d’entiers représentée dans un fichier.
a) Ecrire un algorithme qui affiche le nombre de multiples de 3 contenus dans le fichier
Exemple : séquence lue :
4 20 -3 10 12 0 13 -9 17 27
message affiché : nombre de multiples de 3 : 5
Il s’agit des valeurs -3, 12, 0 -9 et 27 (la valeur zéro est un multiple de 3)
11-2014
2/3
J.M. Adam
b) On souhaite généraliser cet algorithme pour en faire l’action nommée CompterMultiples qui
compte le nombre de multiples d’un entier N, contenus dans un fichier. Voici la spécification de
cette action :
action CompterMultiples ( consulté n : entier > 0, consulté F : fichier d’entiers,
élaboré nbm : entier ≥ 0 )
{ Effet : Calcule nbm le nombre de multiples de N présents dans le fichier F }
{ E.I. : n = n0, F contient la séquence à examiner, nbm = ? }
{ E.F. : n = n0, F contient la séquence à examiner (et a été parcouru), nbm = k, nombre de
multiples de n trouvés dans le fichier F }
Réaliser l’action CompterMultiples
c) Ecrire un algorithme principal qui lit 3 entiers positifs a, b et c, puis calcule et affiche pour un
fichier d’entiers donné :
- le nombre de multiples de chacun des nombres a, b et c contenus dans le fichier d’entiers ;
pour cela on appellera trois fois l’action CompterMultiples
- le nombre total de multiples trouvés ; les nombres qui sont multiples de plusieurs nombres
sont comptés plusieurs fois dans le total. Dans l’exemple, zéro est compté trois fois, 20 et 12
deux fois.
Exemple :
entiers lus : 3, 4, 5
séquence lue :
4 20 -3 10 12 0 13 -9 17 27
résultats affichés :
nombre de multiples de 3 : 5
nombre de multiples de 4 : 4
nombre de multiples de 5 : 3
nombre total de multiples de 3, 4 et 5 : 12
Exercice 4 : Fonction mystérieuse (2 points)
Expliquez ce que calcule la fonction suivante en justifiant votre réponse.
fonction f (x, y : entier) → entier
// f(x,y) renvoie …
lexique de f
x, y : entiers // paramètres
s : entier
// valeur renvoyée
i : entier
// compteur
algorithme de f
i←0
s←0
tantque i < x faire
s←s+y
i←i+1
ftantque
renvoyer(s)
11-2014
3/3
J.M. Adam
Téléchargement