Université de Grenoble Alpes U.F.R. Sciences de l’Homme et de la Société Master IC2A DCISS – MASSS 6 janvier 2016 ALGORITHMIQUE Examen Durée : 3 heures Tous documents autorisés. Appareils électroniques interdits. 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 définie dans une question précédente. Le barème donné est indicatif. Exercice 1 : Etoiles (4 points) 1) Tracé d'une étoile à cinq branches A l’aide d’une machine-tracés, on veut tracer une étoile à cinq branches comme celle de la figure suivante : t 36° s Les angles formés par les 5 branches (pointes) de l’étoile sont de 36° Une telle étoile est caractérisée par : • • • son sommet (s sur la figure) : c'est l'un des sommets (points extrêmes) de l'étoile, sa taille (t sur la figure) : c'est la taille commune de tous les segments reliant deux sommets de l'étoile, son cap (marqué par une flèche sur la figure) : c'est le cap de l'un des segments passant par le sommet de l'étoile, et tel qu'un observateur placé au sommet et regardant dans le sens défini par ce cap, voit l'autre extrémité du segment devant lui et le segment suivant à sa droite. Réaliser l’action de tracé d’une étoile après avoir précisé l’état initial et final de l’action : action tracerUneEtoile (consulté t : réel, modifié m : Machine-tracés) // Effet : trace une étoile de taille t à partir de la position courante de la plume // E.I. : à préciser // E.F.: à préciser Master IC²A – DCISS – MASSS 1/4 JMA – 01/2016 2 ) Une explosion d'étoiles On veut construire un algorithme de tracé d'un dessin récursif formé d'étoiles à cinq branches, comme l'illustre la figure suivante : Un tel dessin est caractérisé par : • • son ordre, comme le suggèrent les figures : la figure d'ordre 1 comporte une étoile, la figure d'ordre 2 comporte une étoile de taille t et cinq étoiles de taille t/3, placées à chacun de ses sommets, son sommet, sa taille, son cap : ce sont le sommet, la taille et le cap de l'étoile la plus grande. Spécifier et donner une réalisation récursive d'une action nommée tracerDesEtoiles permettant de tracer le dessin de taille t et d'ordre n, sachant qu'à l'état initial, la position dans le plan et le cap de la plume sont respectivement le sommet et le cap du dessin que l'on veut tracer. action tracerDesEtoiles (………. à compléter …………..) // Effet : trace le dessin de taille t et d'ordre n à partir de la position courante de la plume // E.I. : à compléter // E.F.: à compléter Exercice 2 : Nombre d’éléments pas communs (4 points) On considère deux séquences d'entiers positifs, classées en ordre croissant, et représentées dans des fichiers. Un même nombre peut apparaître plusieurs fois dans une séquence. Ecrire un algorithme qui calcule le nombre d’éléments qui ne sont pas communs aux deux séquences, c’est-à-dire les éléments qui n’apparaissent jamais dans l’autre séquence (nombres en gras sur l’exemple). Exemple : séquence 1 : 1 1 1 3 3 4 11 11 11 25 28 30 30 séquence 2 : 1 2 3 5 5 11 11 24 25 25 29 30 34 39 42 résultat affiché : nombre d’éléments pas communs : 9 Si un nombre est présent plusieurs fois dans une liste et absent dans l’autre, il ne sera compté qu’une seule fois dans le nombre total des éléments pas communs aux deux séquences. Chaque séquence ne sera lue qu’une seule fois. Master IC²A – DCISS – MASSS 2/4 JMA – 01/2016 Exercice 3 : Nombre d’or (5 points) Le « nombre d'or » α est une proportion géométrique couramment utilisée en peinture et en architecture pour ses qualités esthétiques. Il est égal à la plus simple des fractions continues possibles : Pour calculer ce nombre, on se définit la suite suivante : u0 = 1 un = 1 + 1/ un-1 Calculer le nombre d’or revient à calculer les termes successifs de cette suite jusqu’à obtenir une précision suffisante. a) Donnez les valeurs des 4 premiers termes de cette suite. b) Ecrire une fonction récursive qui calcule le terme n° n de la suite : fonction alpha (n : entier ≥ 0) → réel > 0 // alpha(n) renvoie le terme n° n de la suite, c’est-à-dire un c) Ecrire la version itérative de la fonction Alpha d) Ecrire la fonction itérative nombredOr qui calcule le nombre d’or avec une précision ε donnée : fonction nombredOr (eps : réel > 0) → réel > 0 // nombredOr(eps) désigne le terme un vérifiant : |un+1 - un| / un < eps } Exercice 4 : Matrices carrées (7 points) 1) Rotation droite (3 points) Ecrire la fonction rotationDroite qui calcule la rotation à droite d’une matrice carrée d’ordre n : Lexique partagé : NMax : l’entier 20 // constante Matrice : type tableau sur [1..NMax] de tableaux sur [1..NMax] d’entiers fonction rotationDroite (m : Matrice, n : entier entre 2 et NMax) → Matrice // rorationDroite(m,n) renvoie la matrice carrée d’ordre n correspondant à la rotation à droite de m } Exemple pour une matrice d’ordre 4 (n=4) : m Master IC²A – DCISS – MASSS rotation calculée 3/4 JMA – 01/2016 2) Comparaison de 2 matrices d’ordre n (2 points) Ecrire la fonction matEgales qui détermine si 2 matrices carrées d’ordre n sont identiques : fonction matEgales(m1, m2 : Matrices, n : entier entre 2 et NMax) → booléen // matEgales(m1,m2,n) renvoie vrai si les matrices carrées m1 et m2 d’ordre n sont identiques 3) Comparaison de 2 matrices d’ordre N à une rotation près (2 points) Ecrire la fonction matSimilaires qui détermine si deux matrices sont identiques, à une rotation près, et calcule le nombre de rotations droites à appliquer à la première matrice pour être identique à la seconde : fonction matSimilaires (m1, m2 : Matrices, n : entier entre 2 et NMax) → entier entre -1 et 3 // matSimilaires(m1,m2,n) renvoie k (entier entre -1 et 3) ; si m1 et m2 sont identiques après avoir appliqué k rotations droites à m1, renvoie -1 si m1 et m2 ne sont jamais identiques } Exemple 1 : m1 m2 Il faut appliquer 3 rotations droites à m1 pour qu’elle soit identique à m2, la fonction renvoie 3. Exemple 2 : m1 m2 Il faut appliquer 1 rotation droite à m1 pour qu’elle soit identique à m2, la fonction renvoie 1. Exemple 3 : m1 m2 Après avoir comparé les 4 rotations possibles de m1 avec m2, m1 et m2 ne sont jamais identiques ; la fonction renvoie -1. Master IC²A – DCISS – MASSS 4/4 JMA – 01/2016