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