1 Remarques et erreurs fréquentes 1. Penser à utiliser les algorithmes des questions précédentes. Par exemple, pour voir si un mot m est français, écrire "Si estfrançais(m) ". 2. Beaucoup confondent "tant que" avec "si"... A la louche : si vous avez déjà mis une boucle "pour", il y a peu de chance pour qu il y ait aussi besoin d un "tant que", sauf pour un algo difficile. 3. Le manque d explication est particulièrement nocif lorsque l algorithme est faux : si vos explications montrent que vous aviez une stratégie valable, vous aurez une partie des points, sinon rien. 4. Pour vous aider à expliquer (et à comprendre vous-même) un algo, un bon point de départ est d expliquer quelle va être l utilité de chaque variable. 5. N utiliser que les instructions vues en cours, et pas les commandes python supplémentaires vues en TD ou que vous connaissez par ailleurs. Par exemple pour le calcul du max, return( max(t)) ne rapportera pas de point! 6. Quand on demande de renvoyer, ce n est pas afficher. De plus, à 2.3, on demande explicitement de renvoyer le résultat sous la forme (min, max) : pas de texte donc. Remarque: ainsi, pour récupérer le min d un tableau d entier, on pourra utiliser MinEtMax(T)[0], et le max sera obtenu par MinEtMax(T)[1]. 7. Une donnée d entrée n est pas une variable. Remarque: Python autorise de faire varier une donnée d entrée, ce n est pas le cas de Caml par exemple, et c est de toute façon une mauvaise habitude. 8. Calcul du max : ne pas initialiser la variable à 0! Imaginez que la liste ne contiennent que des négatifs! Prendre plutôt T[0] comme valeur de départ. Un tableau est a priori de dimension 1. i.e. les éléments s obtiennent par T[i], et pas par T[i][ j] (ça serait pour un tableau de tableaux). Rappelons que dans python, les tableaux et les listes sont implémentés par le même objet, appelé "list". Par contre, dans la théorie, un tableau a une longueur fixe, alors que dans une liste on peut rajouter ou enlever des éléments. 9. Dernière question : on demande un algo qui marche dans tous les cas, pas juste si n est impair. 10. Pour la présentation : vous pouvez prendre une ligne pour écrire un commentaire plutôt que de le tasser à droite de la ligne de code... Allez, pour une présentation parfaite, vous pouvez écrire les commentaires d une autre couleur (crayon ou noir). 11. [] est la liste vide. Pour la chaîne de caractère vide, c est "". 12. Les chaînes de caractère sont "immuables" ("non mutable" en anglais). Ceci signifie qu on ne peut pas les modifier en place. En particulier, pas de "append" ni de "pop", ni de m[i]=... 1
Informatique : premier devoir surveillé Durée 2 heures. Le sujet comporte une page recto-verso. On prendra soin de bien présenter les algorithmes. Les commentaires pourront être indiqués par un #, comme en python. Dans chacun des deux exercices, les questions sont de difficulté grosso-modo progressive. 2 Correcteur orthographique On dispose d un tableau Dictionnaire contenant tous les mots de la langue française. Ce tableau est placé en variable "globale", ce qui signifie qu il sera accessible par n importe quel algorithme, sans qu il soit nécessaire de l indiquer parmi les entrées de l algorithme. 1. Vérification d un mot : Écrire un algorithme estfrançais qui prend en entrée un mot m et regarde si ce mot est dans Dictionnaire. On renverra un booléen. 2. Complétion automatique : (a) Écrire un algorithme préfixe prenant en entrée deux mots n et m, et renvoyant "vrai" si n est le de m, renvoyant "faux" sinon. Attention aux indices : ne pas dépasser d un mot ni de l autre! (b) Écrire un algorithme complétion prenant en entrée un mot n, et renvoyant la liste de tous les mots du dictionnaire qui commencent par n. 3. Vérification d un texte : On veut maintenant vérifier un texte entier. On prendra donc en entrée une chaîne de caractères t pouvant contenir des espaces. Le but est de séparer les mots entre ces espaces, et de vérifier si chacun de ces mots est bien dans Dictionnaire. Pour simplifier, on ne prendra pas en compte la ponctuation : on suppose que t ne contient que des mots (sans majuscule) et des espaces. On propose la stratégie suivante : on utilisera une variable m qui contiendra le mot en cours. On parcourt t, on ajoute chaque lettre lue à m, et à chaque fois qu on rencontre un espace c est que le mot en cours est i : on teste si m est dans Dictionnaire, et on réinitialise m à "" (le mot vide). Écrire l algorithme correspondant. 3 Min et max d une liste 1. Écrire un algorithme prenant en entrée un tableau d entiers T et calculant le maximum de ce tableau. 2. Soit T un tableau d entier, et n son nombre d éléments. Combien de comparaisons sont effectuées par votre algorithme pour trouver le maximum de T? Combien d affectations au maximum? Au minimum? On pourrait bien sûr écrire un algorithme similaire pour calculer le minimum de T. Alors le calcul du minimum et du maximum de T prendrait un nombre de comparaisons de l ordre de 2n. Voici une stratégie plus rapide pour calculer simultanément le maximum et le minimum de T : On utilise deux variables m et M qui contiendront respectivement le minimum et le maximum des éléments du tableau déjà vus. On va parcourir le tableau en avançant de deux cases en deux cases. À chaque étape, si T[i]<T[i+1] alors on compare T[i] avec m, et on met à jour m si besoin ; puis on compare T[i+1] avec M, et on met M à jour si besoin. Mais si T[i]>T[i+1], on fait de même en échangeant les rôles de T[i] et T[i+1]. 3. Dans cette question, on suppose pour simplifier que le nombre n d éléments de T sera pair. Compléter l algorithme ci-dessous pour mettre en œuvre la stratégie expliquée ci-dessus. Attention : il peut y avoir plusieurs lignes à écrire sur chaque " ". On expliquera en particulier soigneusement la valeur ale de i dans la boucle "pour". On se place du point de vue python sur le tableaux : le dernier élément de T est donc T[n 1]. 2
Min et max Entrée : T un tableau d entier Sortie : le minimum et le maximum de T, présentés sous la forme (min, max) pour i de 0 à, de 2 en 2 : si T[i] < T[i + 1] : sinon: renvoyer ( ) 4. Combien de comparaisons sont effectuées par ce nouvel algorithme? 5. Compléter l algorithme pour qu il fonctionne aussi si n est impair. Indication: Si n est impair, la dernière valeur prise par i dans la boucle "pour" de l algorithme précédent sera n 3. 3
Correction 1 Correcteur orthographique 1. 2. 3. On note que cette question était un peu imprécise : l énoncé ne précise pas ce que l algorithme doit renvoyer. On peut renvoyer un simple booléen indiquant si le texte est correct. Cependant, il semble plus pratique de renvoyer la liste des mots mal orthographiés (par exemple on voudra peut-être les souligne en rouge dans un second temps). Entrées : t une chaîne de caractères, contenant uniquement des lettres minuscules et des espaces Sorties : La liste des mots mal orthographiés dans t Variables : m : chaîne, L : liste de chaînes, i, l : entiers l longueur de t m pour i de 0 à l 1 : # on parcourt tout le texte si t[i]==" " : #dans ce cas, on vient de ir un mot si non(estfrançais(m)) : ajouter m dans L m #réinitialiser m sinon: m m + t[i] renvoyer (L) Algorithme 1 : Vérification d un texte 2 Min et Max Le calcul du maximum dans un tableau est un des algorithmes à connaître cités dans le programme officiel. On parcourt le tableau, et on utilise simplement une variable m qui contiendra au fur et à mesure le maximum des éléments déjà rencontrés. 4
Entrées : T un tableau d entier Sorties : le maximum de T Variables : m, i, l : entiers l longueur de T m T[0] pour i de 1 à l 1 : #T[0] est déjà dans m : on peut commencer à 1. si T[i] > m : m T[i] renvoyer (m) Algorithme 2 : Calcul du maximum d un tableau 5