TD Algorithmique n° 11 - Université Grenoble Alpes

Transcription

TD Algorithmique n° 11 - Université Grenoble Alpes
Université Pierre Mendès France
U.F.R. Sciences de l’Homme et de la Société
Master IC2A DCISS - AST
T.D. Algorithmique n° 11
Fonctions et actions récursives
Exercice 1 : Chaîne binaire
Écrire une action récursive qui affiche la chaîne correspondant à la représentation binaire d'un entier. Pour
l'affichage on utilisera l'action ecr_c qui affiche un caractère (cf. cours). Spécification de l’action à réaliser :
EcrireChBinaire : action (X : entier ≥ 0)
{ Effet : affiche caractère par caractère la chaîne binaire représentant le nombre X }
exemples :
EcrireChBinaire(12) a pour effet d'afficher "1100"
EcrireChBinaire(0) a pour effet d'afficher "0"
EcrireChBinaire(126) a pour effet d'afficher "1111110"
Exercice 2 : Matrice symétrique
Écrire une fonction récursive qui détermine si une matrice carrée d'ordre N est symétrique.
EstSymétrique : fonction (M : matrice ; N : entier > 0) ⎯→ booléen
{EstSymétrique(M,N) désigne vrai si la matrice M d'ordre N est symétrique }
Dans le lexique partagé, le type matrice est définit comme suit :
Matrice : type tableau sur [1..NMax] de tableaux sur [1..NMax] de réels
Exercice 3 : Carrés emboîtés
Écrire l'action récursive suivante :
LesCarrés : action (Consultés N : entier ≥ 0, L : réel > 0, D : réel > 0)
{ Effet : trace la figure d'ordre N, la longueur du côté du carré extérieur est L, la différence de longueur
entre le carré }
{ E.I. : pe = basse, pp = position de l'angle inférieur gauche du carré extérieur, cap = OuestEst }
{ E.F. : pe = basse, pp = position de l'angle inférieur gauche du carré extérieur, cap = OuestEst }
D
L
L
$
N=0
N=1
D
12-2010
L
L
N=2
N=3
J.M. Adam
Exercice 5 : Carrés
Écrire l’action récursive CarréCroix qui trace la figure suivante au rang N :
L/5
2L/5
S
S
2L/5
S
L
L
L
N=1
N=2
N=3
CarréCroix : action ( Consulté N : entier ≥ 0 ; Consulté L : réel > 0 )
{ Effet : trace la figure au rang N }
{ E.I. : écran indifférent, pp = s (coin inférieur gauche de la figure), cap = a, pe = basse }
{ E.F. : figure tracée, pp = s coin inférieur gauche de la figure, cap = a, pe = basse }
Remarque : l’action CarréCroix peut être appelée avec N = 0, dans ce cas l’action ne trace rien.
Exercice 6 : Volume d'une pyramide à degré
Une pyramide à degrés peut être considérée comme un empilement concentrique de dalles en
forme de parallélépipède rectangle de base carrée. La figure ci-dessous présente un exemple de
pyramide à 6 degrés. Les caractéristiques d'une pyramide à degrés sont la longueur de sa base
(c'est à dire le côté de la base carrée du parallélépipède rectangle constituant la première dalle),
et la hauteur/largeur de chaque degré (notée d sur la figure). Le nombre de degrés de la pyramide
peut être déterminé à partir de ces caractéristiques, sachant que la dernière dalle (la plus haute)
est la plus petite possible obtenue en réduisant successivement sa surface par rapport à la dalle
précédente en fonction de d, mais sa largeur doit toutefois être supérieure ou égale à d (ceci est
illustré en pointillé dans la figure : si on avait ajouté une 7ème dalle, sa largeur aurait été inférieure
à d).
d
largeur < d
d
base
Une pyramide à 6 degrés
La même pyramide en coupe
a) Écrire une fonction récursive, prenant en paramètres la base b d'une pyramide à degrés et la
hauteur/largeur d d'un degré, qui calcule le volume de cette pyramide :
VolumePyramide : fonction (b : entier > 0, d : entier > 0) ⎯→ entier > 0
{ VolumePyramide(b,d) désigne le volume d’une pyramide à degrés de base b et de
hauteur/largeur d’un degré d }
b) Ecrire une version itérative de cette même fonction.
12-2010
J.M. Adam