Informatique commune

Deuxième année

Cours

Les entrées sorties [STD082]
Une machine ou un programme informatique communique avec le monde extérieur uniquement en échangeant des flux de caractères.
Fonctions et contextes locaux [JBY285]
Les fonctions sont les briques de base d'un code modulaire et bien structuré. Elles permettent d'écrire du code lisible, modulaire, débogable et réutilisable. On s'intéresse ici à la façon dont l'interpréteur Python exécute les fonctions en abordant les notions de contextes locaux et de pile d'appels.
Récursivité [VWT234]
Nous oublions un moment le mot-clé `while` pour penser et concevoir les algorithmes d'une nouvelle façon.
Complexité [SXL643]
Il ne suffit pas d'écrire du code correct, il faut aussi que ce code soit efficace. On s'intéresse plus précisément ici au temps d'exécution en introduisant la notion de complexité en temps d'un algorithme.
Listes versus tableaux Numpy [XYF147]
Le langage python possède un type `list` et un type `array` Numpy. Ces deux types ont chacun leurs intérêts et leurs limites. Nous proposons ici une petite synthèse des opérations principales que l'on peut effectuer sur chacun d'eux en soulignant la complexité en temps de ces opérations ainsi que les pièges à éviter. À vous de choisir le type le mieux adapté au problème que vous avez à résoudre.
Tris récursifs [ZLV637]
Le problème du tri d'un tableau est un exemple instructif de mise en application de la pensée récursive. Nous commençons par écrire une version récursive du tri par insertion, puis nous étudions de nouvelles idées récursives pour trier un tableau de façon efficace.

Travaux dirigés

Communes françaises [QKN830]
Lecture/écriture de fichiers de texte en Python. Manipulation du format CSV
Effet Doppler [PQM726]
Un peu de physique avec Python

Travaux pratiques

Météorites [MFF718]
Analyse de données issues d'un fichier CSV. Représentation graphique avec matplotlib. Représentation de cartes géographiques avec ipyleaflet. L'une des questions du TP traite d'un problème de base de géométrie algorithmique. La dernière partie du TP s'intéresse à la trajectoire d'une météorite dans l'atmosphère
Jupyter [TFU644]
L'objectif du TP est de vous familiariser avec l'environnement Jupyter/Ubuntu/Linux afin d'exploiter au mieux cet outil de travail tout au long de l'année.
Cryptographie [FPD852]
Algorithme de chiffrement monoalphabétique, algorithme de Vigenère, cryptanalyse
Traitement d'image [DVE662]
Quelques manipulations élémentaires sur les images matricielles. Cette activité est aussi l'occasion de se familiariser avec les tableaux Numpy.
Algorithme A* [OOW696]
La recherche d'un chemin optimal dans un graphe est un problème algorithmique classique qui se décline dans de nombreuses applications. Nous étudions ici l'algorithme A* mis en oeuvre en particulier dans beaucoup de jeux vidéo.
Tri par insertion [UMM628]
L'algorithme du tri par insertion est un algorithme classique pour trier les éléments d'un tableau.
Monsieur le président, avez-vous vraiment gagné cette élection ? [TWJ174]
Un bon programmeur cherche à identifier des sous-problèmes et à les résoudre par des sous-fonctions générales qui pourront être utilisées dans plusieurs situations particulières. Il cherche aussi à concevoir des structures de données qui permettent de résoudre son problème de façon simple et efficace. Une structure de dictionnaire nous sera ici bien utile.
Diffusion moléculaire [MQS945]
La diffusion moléculaire est modélisée par une marche aléatoire à une dimension. Le coefficient de diffusion permet de faire le lien avec l'équation de la chaleur.
Sudoku [KNG828]
Après avoir écrit quelques fonctions utilitaires sur des grilles de Sudoku on s'attaque au problème de la recherche d'une solution. On met en oeuvre pour cela la méthode du backtracking ou retour sur trace.
Équation de la chaleur [TBH161]
La traduction d'un modèle continu en un modèle discret d'un phénomène physique est un passage obligé pour envisager une simulation numérique. La démarche est illustrée ici sur l'exemple de l'équation de la chaleur.