Epreuve informatique d'admission à l'Ecole Polytechnique Année 1992 Rapport de MM. OKSMAN, PERRONNET et SCHERER, examinateurs d'Informatique. Cette année encore, l'épreuve informatique a été organisée dans des conditions matérielles satisfaisantes. Le matériel IBM s'est révélé fiable. Le support technique apporté tant par le personnel de l'Ecole que par les jeunes vacataires a été irréprochable. Le niveau de compétence en informatique des candidats continue de progresser, même si nombre d'entre eux ne maîtrisent pas encore parfaite- ment les possibilités de la version 6.0 de Turbo-Pascal. Il ne s'en trouve presque plus qui fassent l'impasse complète sur l'informatique : tous réussissent à écrire au moins quelques lignes de programme pour échapper à une note éliminatoire. On constate des progrès spectaculaires chez les 5/2. - - - Remarques générales Il est difficile d'imaginer qu'un candidat puisse entrer à l'Ecole en ignorant tout de l'informatique ; l'esprit de l'épreuve veut qu'un candidat soit au minimum capable de réfléchir, de rédiger "à la main" le principe d'un algorithme de résolution et de profiter du temps disponible pour résoudre le problème soumis grâce à l'écriture d'un programme dont les résultats doivent ensuite donner lieu à critique et conclusion. Avant d'écrire le programme, il est bon de résoudre le problème par des formules et des notations explicites. Les formules mathématiques entièrement écrites (notamment l'énumération des valeurs prises par les indices dans les sommes, produits,...) sont plus faciles à programmer. Quand un algorithme a été choisi, il faut d'abord essayer de le vérifier à la main avant de l'écrire et le faire tourner sur des exemples simples, ou l'exécuter par la pensée, afin de mettre en évidence les oublis ou les erreurs. Les choix faits seront ainsi mieux justifiés et le programme sera construit sur des bases solides. Les entrées sophistiquées avec menu sont trop consommatrices de temps de réalisation. Il faut d'abord résoudre le problème soumis en prévoyant des entrées de données claires mais simples, ou même les créer s'il le faut au sein du programme lui-même. - - - Quelques remarques mathématiques -1 Si A est une matrice définie positive, les valeurs propres de A sont les inverses de celles de A et la plus petite des valeurs propres de -1 A est l'inverse de la plus grande des valeurs propres de A. Se placer dans le repère propre d'un objet simplifie sa manipulation (cone, cylindre, ellipse,... ). -1 Si on doit résoudre x= A . b où x et b sont de simples vecteurs, A une matrice, la résolution ne se fait pas par les formules de Cramer, ni -1 par le calcul de A multiplié par b, mais plutôt par la méthode de Gauss, par ses variantes ou encore par des méthodes itératives. Considérations sur Turbo-Pascal Bien adapté aux besoins spécifiques de ce genre d'épreuve, le langage Turbo-Pascal doit néanmoins être utilisé avec discernement. Il convient de mettre en garde les candidats contre quelques-unes de ses particularités. Rappelons que la connaissance de la notion de récursivité n'est pas exigée des candidats. Ceux qui veulent néanmoins l'utiliser s'exposent à un risque, mentionné dans la documentation du Turbo-Pascal, mais généralement ignoré, de débordement non signalé de la pile interne du co-processeur mathématique, qui engendre des résultats faux sans que le candidat s'en aperçoive. Il subsiste quelques légères différences de notation entre Turbo- Pascal et les usages des mathématiciens. Ainsi le logarithme des mathé- matiques usuellement noté Log(x), s'écrira Ln(x) en Pascal, plutôt que Log(x) qui fournit le logarithme en base 10. De même il convient d'être vigilant dans l'utilisation des fonctions "Trunc", "Frac", et l'opérateur "mod" (modulo). La fonction Atan(y/x) pour x,y dans le demi-plan des y positifs conduit à des arrêts d'exécution variés si x=0 ou si x est trop petit. Quelques candidats sont gênés par leur ignorance totale de l'anglais: les messages d'erreur de Turbo-Pascal apparaissent sur l'écran en anglais, mais sont expliqués en français dans l'annexe A du guide du prorammeur (pages 363 à 389). Un programme Pascal truffé d'erreurs de syntaxe et cela dès les premières lignes est à déconseiller. Inversement, un trop grand luxe de fioritures (menus) ne saurait masquer la nécessité de bien traiter d'abord le corps dur du programme. Le candidat doit comprendre qu'un algorithme non décrit dans le rapport est difficile à retrouver si seul le programme sans commentaires est disponible et si a fortiori le programme comporte en plus des erreurs de syntaxe et/ou de logique. Les examinateurs tolèrent l'utilisation dans les programmes de types plus élaborés que les trois types "integer", "real" et "boolean" cités dans le programme. Dans le cas du type "integer", notamment, les débordements de capacité produisent des erreurs qui ne sont pas toujours détectées ni bien diagnostiquées par les candidats. Un type trop élégant peut compliquer la programmation. Le choix de la structure des données n'est pas innocent : il conditionne la programmation. Exemple : une matrice décrite par blocs est assurément un joli type Pascal : type matrice_de_matrice = array [1..n,1..n] of matrice; mais il conduit à gérer mathématiquement par blocs les indices, ce qui complique et les mathématiques et la programmation. Par exemple le simple produit d'une matrice par un vecteur double le nombre des boucles. En revanche, si une matrice d'ordre élevé ne comporte que cinq diagonales de coefficients non nuls, les stocker dans cinq vecteurs permet de repousser les limites de déclaration en Pascal de la matrice. Une procédure ou fonction ne devient vraiment utile que si elle est appelée au moins deux fois et ne se limite pas à une instruction ou si elle représente une opération appelable avec des variables différentes ou si elle décrit une étape importante du calcul. Il convient d'employer des noms de variables parlants, directemment inspirés de l'énoncé, mais attention à n et N que Pascal ne distingue pas, ou à la matrice M confondue avec la variable entière m, et aux doubles utilisations : le type Point et la procédure Point qui déroutent les candidats à la compilation. Attention aussi à l'abus d'une mauvaise indentation et des "if..then..else" emboîtés mais mal maîtrisés. Il faut éviter de modifier l'indice d'une boucle "for" à l'intérieur de la boucle : les programmes deviennent alors très difficiles à mettre au point. La bibliothèque Modubase, fournie aux candidats, correspond très bien à leurs attentes. Certains se plaindront du bip sonore qui accompagne la "Pause" de Modulog, qui multiplié par trente finit par gêner la concentra- tion des candidats. Avec Modulog, "pi" est une constante prédéclarée, utilisable dans une déclaration de constante, alors que "e", qui est une fonction sans argument, ne l'est pas. Compte tenu des performances apportées par la version 6.0 de Turbo- Pascal, les candidats ont intérêt à : _ manipuler les menus, le curseur et les boutons, pour accéder aux fonctions "edit", "copy", "cut" et "paste", qui font gagner beaucoup de temps dans l'écriture des programmes. _ éviter de taper les programmes dans le clipboard ! _ apprendre à mettre au point un programme avec l'option "debug" et ses sous-options (points d'arrêts, surveillance des valeurs) : le gain de temps peut être considérable, mais attention, si cette option permet de localiser où déraille la logique du programme, elle ne saurait remplacer la réflexion. _ employer si nécessaire l'option "Help" qui apporte généralement immédiatement les renseignements nécessaires (excepté malheureuse- ment pour Modulog, où le candidat est réduit à la documentation papier). Conclusion Le sérieux croissant avec lequel les candidats abordent cette épreuve, ainsi que l'évolution de leur niveau de formation sont la preuve que désormais l'outil informatique est devenu une partie intégrante de la culture du scientifique ou de l'ingénieur d'aujourd'hui. -=-=-