PLAN DE COURS Hiver 2012
IFT-1004 18821 - Introduction à la programmation
Informations générales
Crédits : 3
Temps consacré : 3-2-4
Mode d'enseignement : À distance
Site Web : https://cours.ift.ulaval.ca/2012h/ift1004_18821/
Intranet Pixel : https://pixel.fsg.ulaval.ca
Enseignant(s) : Alikacem, Abderrahim [email protected]
Responsable : Alikacem, Abderrahim [email protected]
Date d'abandon sans échec : 19 Mars 2012 à 23h59
Description sommaire
Paradigmes et langages de programmation. Introduction à la résolution de problèmes avec Python. Du
langage interprété, Python, vers un langage compilé et structuré, le langage C. Spécification d'un
problème et décomposition fonctionnelle. Programmation modulaire. Notions de boîte noire,
d'interface, de précondition et de postcondition. Traitement des erreurs et mécanisme de gestion des
exceptions. Récursivité. Introduction à la complexité des algorithmes. Normes de programmation.
Horaire et disponibilités
Classe virtuelle synchrone : Mardi 13h30 à 14h50
Mercredi 12h30 à 13h50
Vendredi 13h30 à 15h30
Disponibilité de l'enseignant : Mercredi 14h00 à 16h00 PLT-3960 (du 9 janv. au 16
avril)
Aide à l'enseignement : Vendredi 13h30 à 15h30 PLT-3947 (du 9 janv. au 16
avril)
Objectifs
L'objectif principal de ce cours est de former l'étudiant aux notions de base de la programmation
moderne afin qu'il puisse solutionner des problèmes reliés à sa discipline, avec comme support un
langage interprété et non typé, Python, et un langage compilé et typé, le C. Les « bonnes manières »
1/13
d'utilisation de ces langages seront présentées tout au long du cours dans un souci de concision,
d'efficacité, et de lisibilité du code. Chaque langage sera étudié suivant ses spécificités qui font sa
force. De plus, des méthodes d'interfaçage entre Python et le langage C seront présentées afin de tirer
le maximum de ces 2 langages du point de vue efficacité dans la conception d'un programme.
De plus, ce cours fournira une vision différente de la programmation qui ne doit pas être réduite à son
aspect purement syntaxique, souvent déroutant pour un débutant. Un bon programmeur doit certes
maîtriser les aspects techniques de la programmation mais une approche algorithmique doit
impérativement précéder la réalisation de tout projet d'envergure. Ce sera notre démarche tout au long
du cours.
Ce cours s'adresse à tout étudiant qui devra, au cours de sa carrière professionnelle, participer à
l'élaboration de logiciels, que ce soit comme informaticien ou non.
Objectifs spécifiques
À l'issue de ce cours, l'étudiant sera en mesure de:
1. résoudre des problèmes de programmation en maniant efficacement les éléments fondamentaux de
procédure:
a) les blocs séquentiels,
b) conditionnels,
c) et répétitifs;
2. programmer avec des structures de données de base;
3. effectuer la décomposition fonctionnelle d'un problème;
a) notion de fonctions et passage de paramètres;
b) de spécification des fonctions à l'aide des commentaires spécialisés;
c) de modules,
d) de gestion des exceptions,
e) de tests unitaires.
4. adopter et de respecter des normes de programmation;
5. produire la documentation automatisée de programmes à l'aide d'outils dédiés;
6. juger l'efficacité de la performance des programmes et de leur qualité;
7. acquérir les bases de Python et disposer d'une bonne vue d'ensemble de ces modules ;
8. maîtriser tous les mécanismes nécessaires au développement d'applications avec Python;
9. acquérir les bases de la programmation en langage C, norme ANSI C99;
10. maîtriser les spécificités du C que sont les pointeurs et la gestion dynamique de la mémoire;
11. développer le reflexe de faire du prototypage de programmes avec Python;
12. concevoir des interfaces en Python vers le langage C pour des fins d'optimisation.
2/13
Contenu
Le contenu du cours est étalé sur les 15 semaines que compte la session. Les cinq premières semaines
sont consacrées entièrement à la programmation avec le langage Python. En effet, nous sommes
persuadés qu'il n'y a pas mieux que commencer avec ce langage car il est très simple à apprendre et
d'une manière générale très intuitif qui font que rapidement vous commencerez à développer des
programmes relativement complexes. En effet, au lieu de s'attarder à apprendre un langage avec, entre
autres, une syntaxe lourde, ce qui n'est pas le cas de Python, ceci nous permettra de nous concentrer
sur l'activité qu'est la programmation, ses besoins, ses méthodes ainsi que ses normes. Avec Python,
nous préciserons alors une méthodologie de résolution de problèmes afin de produire des solutions
sous forme de programmes complets, robustes et efficaces.
Durant les six semaines suivantes, nous découvrirons les bases de la programmation en C. Dans une
activité de programmation, Python est souvent dédié au prototypage d'une solution vu sa rapidité de
mettre en oeuvre une solution. Cependant, ce langage est reconnu pour ne pas produire des
programmes rapides, et la rapidité de l'exécution d'un logiciel est primordiale dans beaucoup de
situations. Les langages C (et C++) sont eux reconnus pour la production de solutions plus efficace en
termes de temps d'exécution. Il s'agit donc d'apprendre le C pour une alternative pour offrir une
solution à la performance d'un logiciel malgré que c'est plus ardu de produire un programme en C
qu'en Python. De plus, nous verrons dans la semaine 13 suivant le semainier, des techniques qui
permettent d'interfacer le langage C avec Python, c'est-à-dire comment produire des "colles" qui
permettent de lier des instructions en langage C avec ceux de Python. Ainsi, un développeur pourra
utliser Python pour construire un logiciel et le langage C pour coder les parties qui nécessient plus de
performance dans le temps d'exécution.
La dernière semaine est dédiée à une introduction à la programmation par objet en C++, un paradigme
de programmation assez différent de celui utilisé à date. Le langage C++ est une extension du langage
C qui permet de pratiquer ce nouveau paradigme de production de logiciels.
Enfin, nous profitons pour rappeler que l'accomplissement des travaux pratiques est une activité vitale
dans le cadre de notre cours. C'est pourquoi le travail qu'ils impliquent est considérable. N'hésitez
surtout pas à nous contacter si vous avez de la difficulté dans votre apprentissage. La clé de la réussite
est de réagir vite, i.e. contacter votre enseignant, dès qu'une difficulté surgira, peu importe sa nature.
Dans tous les cas, votre enseignant est entièrement à votre entière disposition pour vous aider à
comprendre la matière et à réaliser vos travaux pratiques et autres exercices.
Voici la description des 15 semaines qui compose le cours. Vous trouverez sur le site Web du cours,
dans la section Semainier, le contenu très détaillé du travail à faire et autres activités hebdomadaires.
Semaine 1- Introduction
Programmation et ordinateur. Environnement matériel et logiciel. Langage machine, de
programmation. Les langages de programmation. Compilation et interprétation. Travail de l'analyste
programmeur. Mise au point d'un programme et recherche des erreurs. Exigence du génie logiciel.
Performance algorithmique et temps de production d'une solution. Justification du choix des langages
de programmation utilisés dans le cours.
Semaine 2- Premiers pas avec Python - Énoncés et syntaxe
Environnement de développement. Données et variables.Affectation. Afficher la valeur d'une variable:
la fonction print(). Interaction avec l'utilisateur : la fonction input(). Typage dynamique des variables.
Opérateurs arithmétiques, relationnels et logiques. Priorité des opérations. Expressions, composition et
3/13
séquences d'instruction. Structures de contrôle: Sélection et Énoncés répétitifs. Importer un module de
fonctions prédéfinies. Les fichiers scripts Python. Utilisation de l'aide help() dans l'interpréteur
Python.
Semaine 3- Les types de données dans Python
Les types numériques. La bibliothèque mathématique. Le type string. Les instructions is et in.
L'instruction for…in. Les listes. La fonction range(). Aliasing. Référence vs copie. Les tuples. Les
dictionnaires. Les ensembles. Les fichiers. Écriture et lecture séquentielle dans un fichier texte. Le
module pickle de Python. La programmation orienté objet en tant qu'utilisateur.
Semaine 4- Fonctions et récursivité dans Python
Fonctions dans Python. Fonction avec et sans paramètres. Typage des paramètres. L'instruction return.
Arguments par défauts. Arguments avec étiquettes. Variables locales et globales.Portée des variables.
Usine à fonctions.Forme * et **. Fonctions anonymes (énoncé lambda). Fonctions génératrices
(énoncé yield). Définition récursive d'un problème. Technique: diviser pour régner. Récursion,
conditions d'arrêt et convergence. Efficacité et inefficacité des algorithmes récursifs.
Semaine 5- Modules, gestion des exceptions, normes de programmation et complexité
algorithmique
Créer et tester ses modules. Architecture d'un programme Python. L'espace des noms. Groupe de
modules (package). Les modules standards de Python. Gestion des exceptions. Les énoncés try /
except, else et finally. Lever une exception. Les énoncés as et assert. Principales classes d'exception
dans Python. Complexité algorithmique. Mesure de la complexité d'un algorithme. Notation O
(big-oh). Comparaison entre les classes de complexité. Normes de programmation. La documentation
automatisée.
Semaine 6- Langage C - Éléments de programmation de base
Représentation et typage des données. Déclaration et utilisation des variables. Les types entier, réel et
caractère. Les constantes explicites et symboliques. L'affectation. Les opérateurs arithmétiques,
relationnels et logiques. Les expressions et leur évaluation. Instructions et séquencement. Les
alternatives (structures sélectives). Les boucles (structures itératives). Conversion de types. Les
entrées/sorties. Fichiers de caractères. Structure d'un programme sans fonctions.
Semaine 7- Langage C - Fonctions et pointeurs
Les fonctions en langage C. Définition et prototype. Spécification à l'aide de commentaires. Variables
locales et pile d'exécution. Le type void. Passage de paramètres par valeur. Les pointeurs. Notion
d'adresse mémoire. Adresse d'une variable. Adresse et pointeur. Opérateurs * et &. Passage de
paramètres dans une fonction par adresse. Gestion des exceptions à l'aide d'un pointeur.
Semaine 8- Normes et programmation modulaire en C
Programmation modulaire. Les commentaires de spécification dans un programme. Spécifications
d'implémentation. Spécifications d'interface. Fiabilisation des programmes et gestion des exceptions.
Normes de programmation.
Semaine 9- Semaine de lecture
4/13
Semaine 10- Les types composés en langage C (première partie)
Les tableaux à une dimension en langage C. Déclaration et utilisation. Les tableaux comme paramètre
d'entrée et de sortie de fonction. Les tableaux à plusieurs dimensions. Chaînes de caractères en C.
Représentation en mémoire des chaînes de caractères. Fonctions portant sur les chaînes de caractères.
Semaine 11- Les types composés en langage C (deuxième partie)
Enregistrements. Déclaration de structs. Notation pointée et l'accès aux structs. structs en paramètres
d'entrée et comme valeur de sortie d'une fonction. Introduction à la modélisation de données à l'aide de
structs. Les fichiers typés ou binaires.
Semaine 12- Pointeurs avancés - Gestion dynamique de la mémoire
Pointeurs. Arithmétique des pointeurs. Utilisations des pointeurs. Outils pour la gestion dynamique de
la mémoire. Listes simplement chaînées.
Semaine 13- Interfaçage C - Python
Motivations. Performances Python vs. C. Interfaçages Python – C: utilisation des modules ctypes et
SWIG. Langage Cython. Exemple d'application. Comparaison quantitative des 3 techniques.
Semaine 14. Du langage C au C++
Du C au C++. Espace de nommage. Les références. Surcharge de fonctions et arguments par défaut.
Notion de classe. Constructeurs et destructeur. Constructeur par copie. Surcharge d'opérateurs. Gestion
des exceptions.
Semaine 15- révision générale
Modalités d'évaluation
Examen Date Heure Pondération de
la note finale Document(s) autorisé(s)
Examen intra Samedi 3 mars 2012 09h00 à 11h50 30.00% Une feuille manuscrite recto-verso
Examen final Samedi 21 avril 2012 09h00 à 11h50 30.00% Une feuille manuscrite recto-verso
Travail Équipes Date Heure Pondération de
la note finale
TP#1 1 à 2 Lundi 30 janvier 2012 17h00 4.00%
TP#2 1 à 2 Mercredi 8 février 2012 17h00 4.00%
TP#3 1 à 2 Mardi 21 février 2012 17h00 7.00%
TP#4 1 à 2 Mercredi 14 mars 2012 17h00 8.00%
TP#5 1 à 2 Mercredi 4 avril 2012 17h00 8.00%
5/13
1 / 13 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !