2.12.22 (851)

Cours scientifiques 1A - CSC_3GIN1_TA : Informatique : Programmation impérative

Descriptif

L’objectif des enseignements d’informatique est de fournir à tous les élèves des bases en informatique et en développement logiciel afin d'être capable d’écrire a minima des programmes de taille modérée, résolvant des problèmes de complexité modérée, avec une bonne efficacité. Le lien est également fait entre les aspects matériels et logiciels afin que les élèves soient conscients que leurs programmes tournent sur des architectures dépendantes de contraintes physiques, et comprennent en retour l’apparition de certaines contraintes logicielles. Outre des compétences en développement, ces enseignements permettent aux élèves d'acquérir une compréhension des problématiques abordées dans le développement informatique, contribuant ainsi à leur formation généraliste. Cet aspect n'est pas à négliger car, en tant que potentiels futurs ingénieurs pilotant des équipes multi-domaines, la compréhension des problèmes de divers domaines métiers est un atout précieux pour la bonne réussite des projets industriels (qui, de nos jours comportent très souvent une composante informatique).

À ce titre, le cours de langage C présente des aspects très techniques, un langage de programmation assez rudimentaire mais qui permet de ne pas masquer la réalité algorithmique derrière des constructions « magiques » dont le coût (en mémoire ou en temps, donc en énergie) peut passer inaperçu. Être capable de transcrire un algorithme en langage C garantit d’en être capable quel que soit le langage utilisé.

Une fois ces compétences de programmation acquises, la prise de conscience des étapes précises de la traduction d’un algorithme, la prise de conscience du coût des traitements, les élèves pourront, dans le futur, utiliser des langages de plus haut niveau mais en étant mieux armés contre la tentation de ne pas se soucier de l’efficacité et de la maintenabilité.

Ce cours servira de base au cours « Algorithmique et résolution de problèmes » dans lequel les questions de modélisation de problèmes, décomposition d’un problème en sous-problèmes, conception de structures de données seront étudiées, aboutissant à la rédaction de programmes en langage C. Le choix de ce langage est ainsi motivé par la possibilité (et la nécessité) de décrire finement un algorithme afin qu’il soit correct, efficace, maintenable et agnostique du langage d’implantation. Un algorithme bien conçu doit pouvoir être implanté quel que soit le langage support et non piloté par les fonctions, constructions ou bibliothèques particulières disponibles dans tel ou tel langage.

Objectifs pédagogiques

L’objectif des enseignements d’informatique est de fournir à tous les élèves des bases en informatique et en développement logiciel afin d'être capable d’écrire a minima des programmes de taille modérée, résolvant des problèmes de complexité modérée, avec une bonne efficacité. Le lien est également fait entre les aspects matériels et logiciels afin que les élèves soient conscients que leurs programmes tournent sur des architectures dépendantes de contraintes physiques, et comprennent en retour l’apparition de certaines contraintes logicielles. Outre des compétences en développement, ces enseignements permettent aux élèves d'acquérir une compréhension des problématiques abordées dans le développement informatique, contribuant ainsi à leur formation généraliste. Cet aspect n'est pas à négliger car, en tant que potentiels futurs ingénieurs pilotant des équipes multi-domaines, la compréhension des problèmes de divers domaines métiers est un atout précieux pour la bonne réussite des projets industriels (qui, de nos jours comportent très souvent une composante informatique).

À ce titre, le cours de langage C présente des aspects très techniques, un langage de programmation assez rudimentaire mais qui permet de ne pas masquer la réalité algorithmique derrière des constructions « magiques » dont le coût (en mémoire ou en temps, donc en énergie) peut passer inaperçu. Être capable de transcrire un algorithme en langage C garantit d’en être capable quel que soit le langage utilisé.

Une fois ces compétences de programmation acquises, la prise de conscience des étapes précises de la traduction d’un algorithme, la prise de conscience du coût des traitements, les élèves pourront, dans le futur, utiliser des langages de plus haut niveau mais en étant mieux armés contre la tentation de ne pas se soucier de l’efficacité et de la maintenabilité.

Ce cours servira de base au cours « Algorithmique et résolution de problèmes » dans lequel les questions de modélisation de problèmes, décomposition d’un problème en sous-problèmes, conception de structures de données seront étudiées, aboutissant à la rédaction de programmes en langage C. Le choix de ce langage est ainsi motivé par la possibilité (et la nécessité) de décrire finement un algorithme afin qu’il soit correct, efficace, maintenable et agnostique du langage d’implantation. Un algorithme bien conçu doit pouvoir être implanté quel que soit le langage support et non piloté par les fonctions, constructions ou bibliothèques particulières disponibles dans tel ou tel langage.

18 heures en présentiel

effectifs minimal / maximal:

140/260

Diplôme(s) concerné(s)

UE de rattachement

Pour les étudiants du diplôme (FIG) Diplôme d'Ingénieur de l'Ecole Nationale Supérieure de Techniques Avancées

Connaissances des constructions générales de base d’un langage de programmation (variables, scalaires, tableaux – et non listes –, fonctions, conditionnelle, boucles).

Format des notes

Numérique sur 20

Pour les étudiants du diplôme (FIG) Diplôme d'Ingénieur de l'Ecole Nationale Supérieure de Techniques Avancées

Vos modalités d'acquisition :

Évaluation sur machine, rédaction de programmes,

Le rattrapage est autorisé (Note de rattrapage conservée)
  • le rattrapage est obligatoire si :
    Note initiale < 6
  • le rattrapage peut être demandé par l'étudiant si :
    6 ≤ note initiale < 10

Le coefficient de l'UE est : 1.5

L'UE est évaluée par les étudiants.

Programme détaillé

  1. Motivation et historique
  2. Créer un programme : compilation
  3. Types et variables
  4. Expressions et instructions
  5. Branchements et boucles
  6. Pointeurs
  7. Fonction, passage par valeur, passage par adresse
  8. Entrées/Sorties
  9. Structures
  10. Chaînes de caractères
  11. Tableaux
  12. Passage d'arguments par la ligne de commande
  13. Pile (Stack)
  14. Tas (Heap)
  15. Types énumérés
  16. Constantes littérales
  17. Variables - initialisation, débordement, conversions
  18. Débogage manuelle (sans débuggeur)

Méthodes pédagogiques

Capsules vidéo (?), CMs, polycopié, TDs.
Veuillez patienter