Département d'informatique Introduction à l’algorithmique et à la programmation IFT-21937 Syllabus Clermont Dupuis Bureau : 3976, pavillon Pouliot Tél. : 656-7522 (418) Adresse électronique : [email protected] © Université Laval Automne 2008 A. Cours Titre : Introduction à l’algorithmique et à la programmation Sigle : IFT-21937 Nombre de crédits : 3 crédits Session : Automne 2008 Salle et horaire : Travaux dirigés ME 14h30-16h30 Salle : PLT-3920 VE 14h30-16h30 Salle : PLT-3920 Cours magistraux JE 8h30-11h30 Salle : PLT-2783 B. Professeur : Dupuis, Clermont : 3976, pavillon Pouliot : Jeudi 14h30-16h30 Vendredi 8h30-11h30 Nom et prénom Bureau Disponibilités C. Description et objectifs du cours Description : Introduction à l’algorithmique et à la programmation. Débuter en Python. Instructions conditionnelles et itératives. Fichiers et entrées sorties. Séquences – chaînes de caractères, listes et tuples. Dictionnaire. Ensembles. Fonctions. Récursivité. Erreurs et exceptions. Modules et packages. Applications en mode interactif et interfaces graphiques. Analyse d’algorithmes. Applications diverses. Travaux pratiques en PYTHON. Préalables : aucun. Objectifs: Au terme de ce cours, l’étudiant(e) sera apte à résoudre des problèmes simples en développant des algorithmes corrects par rapport à leur spécification. Ils pourront mettre en œuvre ces algorithmes à l’aide du langage de programmation Python et présenter des programmes corrects, structurés, modulaires, lisibles et bien documentés. D. Méthodologie Cours : Il est prévu à chaque semaine environ 3 heures de cours magistraux et 2 heures de travaux dirigés. Travail personnel : L’étudiant sera fortement invité à approfondir les concepts vus en classe à travers des exercices suggérés. Travaux dirigés en laboratoire : Les travaux dirigés en laboratoire sont obligatoires. Des équipes d’au plus deux étudiants seront formées au début du trimestre. Les travaux devront être remis obligatoirement au professeur en quittant la séance de laboratoire ou au plus tard à 17h30 dans la boîte postale du professeur. Travaux pratiques : La réalisation de travaux pratiques représente une part importante de l’apprentissage. Ils consistent en travaux de programmation ou en problèmes à résoudre qui, la plupart du temps, sont une application concrète des concepts présentés dans le cours, et vérifiant la compréhension de la matière. Trois travaux pratiques seront exigés. Des équipes d’au plus deux étudiants seront formées au début du trimestre. Les travaux remis en retard ne seront pas acceptés. Un exemple de présentation d’un travail pratique est disponible sur le site WEB du cours. Ce mode de présentation des travaux devra être respecté à la lettre. E. Evaluation des apprentissages Examens Date Contenu I JE 16 octobre 2008 Chap. I à VI II JE 11 décembre 2008 toute la matière Travaux pratiques Date de remise JE 2 octobre 2008 II JE 6 novembre 2008 " III MA 16 décembre 2008 ME ou VE de chaque semaine. 35% 35% Modalités I Travaux dirigés en laboratoire Pondération Pondération Équipe de 2 max. 5% 10% " 10% Modalités Pondération Équipe de 2 max. 5% Note : Une attention particulière sera portée à la participation active des étudiants. A+ [97-100] B+ [85-89[ C+ [73-77[ D+ [63-66[ E [0-60[ A [93-97[ B [81-85[ C [69-73[ D [60-63[ A-[89-93[ B-[77-81[ C- [66-69[ Réussite Réussite Réussite Réussite Échec Concernant une absence à un examen, le plus rapidement possible, l’étudiant devra utiliser le formulaire Web à cet effet qu’il ou elle trouvera sur son guichet étudiant. Sans quoi, une note de 0 sera automatiquement allouée pour cet examen. Seuls motifs acceptables pour s’absenter à un examen : 1. incapacité pour l’étudiant de passer l’examen durant la plage horaire de cet examen, à être mentionné comme tel par un billet précis d’un médecin (incluant les coordonnées de ce dernier), suite à une consultation médicale. Ce billet doit être présenté à la Direction du département (tel qu’indiqué dans les instructions associées au formulaire Web à remplir), qui le déposera au dossier de l’étudiant. L’enseignant n’intervient pas dans ce processus mais en est informé automatiquement, d’où la nécessité pour l’étudiant de remplir ce formulaire Web le plus rapidement possible, car dans l’attente, une note de 0 est automatiquement attribuée à l’étudiant pour cette épreuve. 2. mortalité d’un proche, à être documenté par une preuve de décès de la personne et une lettre d’une tierce personne attestant du lien de parenté ou autre entre l’étudiant et la personne décédée. Ces pièces doivent également être présentées à la Direction du département (tel qu’indiqué dans les instructions associées au formulaire Web à remplir). L’enseignant n’intervient pas dans ce processus mais en est informé automatiquement, d’où la nécessité pour l’étudiant de remplir ce formulaire Web le plus rapidement possible, car dans l’attente, une note de 0 est automatiquement attribuée à l’étudiant pour cette épreuve. Aucune justification d’absence reliée à des événements sportifs (sauf pour les athlètes du Rouge et Or, sur approbation préalable de la Direction du Département), à un travail, à un conflit d’horaire avec d’autres cours ou examens, à des horaires de voyage conflictuels (selon des billets d’avion déjà achetés par exemple), ou à des motifs religieux quelconques n’est acceptable. Les conflits d’horaire doivent être résolus au tout début de la session, avant la fin de la période de modification de choix de cours, par l’étudiant lui-même. Un étudiant inscrit à l’un de nos cours après cette date est réputé ne pas avoir de conflit d’horaire pour passer ses examens. Toute absence justifiée à un examen entraîne l’obligation pour l’étudiant de passer un examen de reprise. Cet examen se déroulera normalement durant le week-end (soit entre le vendredi après-midi et le dimanche soir) de la première semaine de cours de la session académique suivante. L’étudiant a l’obligation de se rendre disponible à cette date, sans quoi il obtiendra la note de 0 pour cet examen. IMPORTANT : Dans le cadre d’un travail, toute communication entre équipes est strictement défendue. Toute personne prise à plagier, à tricher, activement ou passivement, ou à contrevenir aux directives données dans le cadre d’un examen ou d’un travail noté et contributoire à la note finale du cours, peu importe la pondération attribuée à l’examen ou au travail en question, fera face aux conséquences de ses gestes, qui peuvent aller jusqu’à l’exclusion de son programme de formation. Une politique stricte de tolérance zéro est appliquée en tout temps et sous toutes circonstances. Tous les cas seront référés à la direction du Département. L’étudiant trouvera sur son guichet étudiant la politique départementale relative aux examens; il ou elle est réputé(e) en avoir pris connaissance. F. Contenu 1. Introduction à l’algorithmique Définition et formulation d’un algorithme. Applications à différents types de problèmes. Opérations élémentaires. Choix d’un algorithme. Efficacité d’un algorithme. Analyse en pire cas et analyse en moyenne. Décomposition fonctionnelle : identification des tâches principales à accomplir et découpage en sous-tâches. Méthodologie de résolution de problème. 2. Introduction à la programmation Introduction à l’architecture des ordinateurs. Aperçu des langages machine et des langages de programmation. Notion de programme. Spécification fonctionnelle. Étapes dans la vie d’un programme. Qualités d’un programme. Historique et avantages du langage Python. Environnement de programmation en Python. 3. Débuter en Python Affichage des résultats d’un programme. Commentaires. Opérateurs. Nombres entiers. Nombres réels. Chaînes de caractères. Représentation des données. Nombres décimaux, nombres binaires et nombres hexadécimaux. Table ASCII. Identificateurs. Variables. Absence de déclaration de variables. Initialisation de variables simples. Opérateur d’affectation. Opérateurs arithmétiques unaires et binaires. Conversion de types numériques. Priorité des opérateurs. Lecture et écriture en mémoire. Identification des erreurs de logique et de syntaxe. Lecture des données au clavier. Exemples de programmes simples en Python. Fonctions intégrées. Gestion de la mémoire. 4. Instructions conditionnelles et itératives Comparaison de données à l’aide des opérateurs relationnels. Expressions booléennes. Opérateurs logiques : « et » logique, « ou » logique et la négation. Les blocs. La structure alternative : clause « if » avec ou sans « else ». Les opérateurs conditionnels. La structure répétitive : la clause « while ». Présence de sentinelles. Structures imbriquées. 5. Fichiers et entrées / sorties Sauvegarde des programmes dans des fichiers. Compilation. Lecture et écriture de données dans des fichiers. Formatage des données en sortie. 6. Séquences : chaînes de caractères Définition de séquences. Opérations sur les séquences. Instruction for. Fonctions permettant de manipuler des chaînes de caractères. Comparaison de chaînes de caractères. Formatage. Exemples d’application. 7. Séquences : listes et tuples Définition d’une liste. Opérations sur les listes. Fonctions permettant de manipuler les listes. Instruction for. Tuples. Exemples d’application. Copies superficielles et en profondeur. 8. Dictionnaires Définition d’un dictionnaire. Opérations sur les dictionnaires. Accès, suppression et ajout d’éléments du dictionnaire. Fonctions permettant de manipuler les dictionnaires. Clés de dictionnaire. Exemples. 9. Ensembles Définition d’un ensemble. Opérations sur les ensembles. Accès, suppression et ajout d’éléments d’un ensemble. Fonctions permettant de manipuler les ensembles. Exemples. 10. Procédures et fonctions Procédures et fonctions. Modularité et ses avantages. Librairies de fonctions existantes. Définition d’une fonction avec ou sans paramètres. Modification des valeurs des paramètres. Transmission des données par valeur. Valeurs par défaut des paramètres. Variables globales et variables locales. Valeurs de renvoi d’une fonction. Commentaires. Attributs d’une fonction. Ordre avec lequel les fonctions sont déclarées. Transmission de fonctions comme paramètre. Exemples. 11. Récursivité Définition récursive d’un problème. Critère d’arrêt et convergence. Performance des algorithmes récursifs. Résolution d’un problème à l’aide de la récursivité. 12. Erreurs et exceptions Erreurs syntaxiques et sémantiques. Mise en œuvre de la gestion des erreurs. Définition d’une exception, détection et traitement des exceptions, gestion du contexte, levée des exceptions, assertions. Test unitaire. Test de la boîte blanche. Exemples. 13. Modules et packages Modules, fichiers, chemin d’accès à un module, espaces de noms, importation de modules ou d’attributs de modules, packages, exemples. 14. Applications en mode interactif et interfaces graphiques Interface graphique, étapes de développement dans une application, insertion de textes dans une fenêtre, positionnement des composantes graphiques à l’intérieur de la fenêtre, création de boutons, boîtes de dialogue, saisie de données, affichage de résultats dans la fenêtre principale, boutons avec options multiples, menus, gestion d’événements de type souris ou clavier. G. Logiciels L’interpréteur Python (logiciel libre) sera utilisé dans le cadre de ce cours. H. Bibliographie Manuel obligatoire (notes de cours) Aucun manuel n’est obligatoire mais des notes de cours seront fournies au fur et à mesure de leur disponibilité. Références sur le langage Python Matthieu Brucher, Python Les fondamentaux du langage La programmation pour les scientifiques. ENI, Collection Ressources informatiques, 2008, 352p. Wesley J. Chun, Au cœur de Python Version 2.5 Volume 1 Notions fondamentales. Campus Press, 2007, 645p. Wesley J. Chun, Au cœur de Python Version 2.5 Volume 2 Notions avancées. Campus Press, 2007, 337p. Brad Dayley, Le guide de survie Python L'essentiel du code et des commandes. CampusPress, 2007, 261p. Tony Gaddis, Starting out with Python. Addison Wesley, 2009, 482p. Mark Lutz, Learning Python. O’Reilly, 2008, 700p. Alex Martelli, Python in a nutshell A Desktop Quick Reference. O’Reilly, 2006, 695p. Gérard Swinnen, Apprendre à programmer avec Python. http://www.ulg.ac.be/cifen/inforef/swi . Tarek Ziadé, Python Petit guide à l’usage du développeur agile. Dunod, 2007, 187p. Tarek Ziadé, Programmation Python Syntaxe, conception et optimisation. Eyrolles, 2006, 537p. Important: les personnes intéressées par l’un de ces ouvrages doivent euxmêmes les commander auprès de la librairie Zone de l’université Laval. H. Date de dernière mise à jour Ce document a été mis à jour pour la dernière fois le 21 juillet 2008.