InfoCommune MP PC PSI PT 1&2
InfoCommune MP PC PSI PT 1&2
InfoCommune MP PC PSI PT 1&2
3 juin 2020
1
Table des matières
1 Programme du premier semestre 5
A Langage Python 10
Compétences visées Ce programme vise à développer les six grandes compétences suivantes :
analyser et modéliser un problème ou une situation, notamment en utilisant les objets conceptuels de
l’informatique pertinents (table relationnelle, graphe, dictionnaire, etc.) ;
imaginer et concevoir une solution, décomposer en blocs, se ramener à des sous-problèmes simples et
indépendants, adopter une stratégie appropriée, décrire une démarche, un algorithme ou une struc-
ture de données permettant de résoudre le problème ;
décrire et spécifier les caractéristiques d’un processus, les données d’un problème, ou celles manipu-
lées par un algorithme ou une fonction ;
mettre en œuvre une solution, par la traduction d’un algorithme ou d’une structure de données dans
un langage de programmation ou un langage de requête ;
justifier et critiquer une solution, que ce soit en démontrant un algorithme par une preuve mathéma-
tique ou en développant des processus d’évaluation, de contrôle, de validation d’un code que l’on a
produit ;
communiquer à l’écrit ou à l’oral, présenter des travaux informatiques, une problématique et sa solu-
tion ; défendre ses choix ; documenter sa production et son implémentation.
La pratique régulière de la résolution de problèmes par une approche algorithmique et des activités de pro-
grammation qui en résultent constitue un aspect essentiel de l’apprentissage de l’informatique. Les exemples
ou les exercices d’application peuvent être choisis au sein de l’informatique elle-même ou en lien avec d’autres
champs disciplinaires.
Sur les partis pris par le programme Ce programme impose aussi souvent que possible des choix de vo-
cabulaire ou de notation de certaines notions. Les choix opérés ne présument pas la supériorité de l’option
retenue. Ils ont été précisés dans l’unique but d’aligner les pratiques d’une classe à une autre et d’éviter l’in-
troduction de longues définitions récapitulatives préliminaires à un exercice ou un problème. De même, ce
programme nomme aussi souvent que possible l’un des algorithmes possibles parmi les classiques qui ré-
pondent à un problème donné. Là encore, le programme ne défend pas la prééminence d’un algorithme ou
d’une méthode par rapport à un autre mais il invite à faire bien plutôt que beaucoup.
Mode d’emploi Ce programme a été rédigé par semestre pour assurer une certaine homogénéité de la for-
mation. Le premier semestre permet d’asseoir les bases de programmation vues au lycée et les concepts as-
sociés. L’organisation de la progression au sein des semestres relève de la responsabilité pédagogique de la
professeure ou du professeur et le tissage de liens entre les thèmes contribue à la valeur de son enseignement.
Les notions étudiées lors d’un semestre précédent sont régulièrement revisitées tout au long des deux années
d’enseignement.
Notions Commentaires
Instruction et expression. Effet de bord. On peut signaler par exemple que le fait que l’affectation soit une
instruction est un choix des concepteurs du langage Python et
en expliquer les conséquences.
Spécification des données attendues en On entraîne les étudiants à accompagner leurs programmes et
entrée, et fournies en sortie/retour. leurs fonctions d’une spécification. Les signatures des fonctions
sont toujours précisées.
Annotation d’un bloc d’instructions Ces annotations se font à l’aide de commentaires.
par une précondition, une postcondi-
tion, une propriété invariante.
Assertion. L’utilisation d’assertions est encouragée par exemple pour vali-
der des entrées. La levée d’une assertion entraîne l’arrêt du pro-
gramme. Ni la définition ni le rattrapage des exceptions ne sont
au programme.
Explicitation et justification des choix Les parties complexes de codes ou d’algorithmes font l’objet de
de conception ou programmation. commentaires qui l’éclairent en évitant la paraphrase. Le choix
des collections employées (par exemple, liste ou dictionnaire)
est un choix éclairé.
Terminaison. Correction partielle. Cor- La correction est partielle quand le résultat est correct lorsque
rection totale. Variant. Invariant. l’algorithme s’arrête, la correction est totale si elle est partielle et
si l’algorithme termine.
On montre sur plusieurs exemples que la terminaison peut se
démontrer à l’aide d’un variant de boucle.
Sur plusieurs exemples, on explicite, sans insister sur aucun for-
malisme, des invariants de boucles en vue de montrer la correc-
tion des algorithmes.
Jeu de tests associé à un programme. Il n’est pas attendu de connaissances sur la génération automa-
tique de jeux de tests ; un étudiant doit savoir écrire un jeu de
tests à la main, donnant à la fois des entrées et les sorties cor-
respondantes attendues. On sensibilise, par des exemples, à la
notion de partitionnement des domaines d’entrée et au test des
limites.
Complexité. On aborde la notion de complexité temporelle dans le pire cas en
ordre de grandeur. On peut, sur des exemples, aborder la notion
de complexité en espace.
Notions Commentaires
Représentation des entiers positifs sur La conversion d’une base à une autre n’est pas un objectif de for-
des mots de taille fixe. mation.
Représentation des entiers signés sur Complément à deux.
des mots de taille fixe.
Notions Commentaires
Vocabulaire des graphes. Graphe orienté, graphe non orienté. Sommet (ou nœud) ; arc,
arête. Boucle. Degré (entrant et sortant). Chemin d’un sommet
à un autre. Cycle. Connexité dans les graphes non orientés.
On présente l’implémentation des graphes à l’aide de listes d’ad-
jacence (rassemblées par exemple dans une liste ou dans un dic-
tionnaire) et de matrice d’adjacence. On n’évoque ni multi-arcs
ni multi-arêtes.
Notations. Graphe 𝐺 = (𝑆, 𝐴), degrés 𝑑(𝑠) (pour un graphe non orienté),
𝑑+ (𝑠) et 𝑑− (𝑠) (pour un graphe orienté).
Pondération d’un graphe. Étiquettes On motive l’ajout d’information à un graphe par des exemples
des arcs ou des arêtes d’un graphe. concrets.
Parcours d’un graphe. On introduit à cette occasion les piles et les files ; on souligne les
problèmes d’efficacité posés par l’implémentation des files par
les listes de Python et l’avantage d’utiliser un module dédié tel
que collections.deque.
Détection de la présence de cycles ou de la connexité d’un
graphe non orienté.
Recherche d’un plus court chemin dans Algorithme de Dijkstra. Algorithme A*. On peut se contenter
un graphe pondéré avec des poids posi- d’un modèle de file de priorité naïf pour extraire l’élément mi-
tifs. nimum d’une collection.
Notions Commentaires
Vocabulaire des bases de données : On présente ces concepts à travers de nombreux exemples. On
tables ou relations, attributs ou co- s’en tient à une notion sommaire de domaine : entier, flottant,
lonnes, domaine, schéma de tables, en- chaîne ; aucune considération quant aux types des moteurs SQL
registrements ou lignes, types de don- n’est au programme. Aucune notion relative à la représentation
nées. des dates n’est au programme ; en tant que de besoin on s’appuie
sur des types numériques ou chaîne pour lesquels la relation
d’ordre coïncide avec l’écoulement du temps. Toute notion re-
lative aux collations est hors programme ; on se place dans l’hy-
pothèse que la relation d’ordre correspond à l’ordre lexicogra-
phique usuel. NULL est hors programme.
Clé primaire. Une clé primaire n’est pas forcément associée à un unique attri-
but même si c’est le cas le plus fréquent. La notion d’index est
hors programme.
Entités et associations, clé étrangère. On s’intéresse au modèle entité–association au travers de cas
concrets d’associations 1 − 1, 1 − ∗, ∗ − ∗. Séparation d’une as-
sociation ∗ − ∗ en deux associations 1 − ∗. L’utilisation de clés
primaires et de clés étrangères permet de traduire en SQL les as-
sociations 1 − 1 et 1 − ∗.
Requêtes SELECT avec simple clause Les opérateurs au programme sont +, -, *, / (on passe outre les
WHERE (sélection), projection, renom- subtilités liées à la division entière ou flottante), =, <>, <, <=, >,
mage AS. >=, AND, OR, NOT.
Utilisation des mots-clés DISTINCT,
LIMIT, OFFSET, ORDER BY.
Opérateurs ensemblistes UNION,
INTERSECT et EXCEPT, produit carté-
sien.
Jointures internes 𝑇1 JOIN 𝑇2 … On présente les jointures en lien avec la notion de relations entre
JOIN 𝑇𝑛 ON 𝜙. Autojointure. tables. On se limite aux équi-jointures : 𝜙 est une conjonction
d’égalités.
Agrégation avec les fonctions MIN, MAX, Pour la mise en œuvre des agrégats, on s’en tient à la norme
SUM, AVG et COUNT, y compris avec SQL99. On présente quelques exemples de requêtes imbriquées.
GROUP BY.
Filtrage des agrégats avec HAVING. On marque la différence entre WHERE et HAVING sur des
exemples.
Mise en œuvre
La création de tables et la suppression de tables au travers du langage SQL sont hors programme.
La mise en œuvre effective se fait au travers d’un logiciel permettant d’interroger une base de données à
l’aide de requêtes SQL. Récupérer le résultat d’une requête à partir d’un programme n’est pas un objectif.
Même si aucun formalisme graphique précis n’est au programme, on peut décrire les entités et les as-
sociations qui les lient au travers de diagrammes sagittaux informels.
Sont hors programme : la notion de modèle logique vs physique, les bases de données non relation-
nelles, les méthodes de modélisation de base, les fragments DDL, TCL et ACL du langage SQL, les tran-
sactions, l’optimisation de requêtes par l’algèbre relationnelle.
Notions Commentaires
Dictionnaires, clés et valeurs. On présente les principes du hachage, et les limitations qui en
découlent sur le domaine des clés utilisables.
Usage des dictionnaires en program- Syntaxe pour l’écriture des dictionnaires. Parcours d’un diction-
mation Python. naire.
Programmation dynamique. Propriété La mémoïsation peut être implémentée à l’aide d’un diction-
de sous-structure optimale. Chevau- naire. On souligne les enjeux de complexité en mémoire.
chement de sous-problèmes. Exemples : partition équilibrée d’un tableau d’entiers positifs,
Calcul de bas en haut ou par mémoïsa- ordonnancement de tâches pondérées, plus longue sous-suite
tion. Reconstruction d’une solution op- commune, distance d’édition (Levenshtein), distances dans un
timale à partir de l’information calcu- graphe (Floyd-Warshall).
lée.
Mise en œuvre
Les exemples proposés ne forment une liste ni limitative ni impérative. Les cas les plus complexes de
situations où la programmation dynamique peut être utilisée sont guidés. On met en rapport le statut
de la propriété de sous-structure optimale en programmation dynamique avec sa situation en stratégie
gloutonne vue en première année.
Notions Commentaires
Algorithme des 𝑘 plus proches voisins Matrice de confusion. Lien avec l’apprentissage supervisé.
avec distance euclidienne.
Algorithme des 𝑘-moyennes. Lien avec l’apprentissage non-supervisé.
La démonstration de la convergence n’est pas au programme.
On observe des convergences vers des minima locaux.
Jeux d’accessibilité à deux joueurs On considère des jeux à deux joueurs (𝐽1 et 𝐽2 ) modélisés par des
sur un graphe. Stratégie. Stratégie graphes bipartis (l’ensemble des états contrôlés par 𝐽1 et l’en-
gagnante. Position gagnante. semble des états contrôlés par 𝐽2 ). Il y a trois types d’états finals :
Détermination des positions gagnantes les états gagnants pour 𝐽1 , les états gagnants pour 𝐽2 et les états
par le calcul des attracteurs. Construc- de match nul.
tion de stratégies gagnantes. On ne considère que les stratégies sans mémoire.
Notion d’heuristique. Algorithme min- L’élagage alpha-beta n’est pas au programme.
max avec une heuristique.
Mise en œuvre
La connaissance dans le détail des algorithmes de cette section n’est pas un attendu du programme.
Les étudiants acquièrent une familiarité avec les idées sous-jacentes qu’ils peuvent réinvestir dans des
situations où les modélisations et les recommandations d’implémentation sont guidées, notamment
dans leurs aspects arborescents.
Traits généraux
— Typage dynamique : l’interpréteur détermine le type à la volée lors de l’exécution du code.
— Principe d’indentation.
— Portée lexicale : lorsqu’une expression fait référence à une variable à l’intérieur d’une fonction, Python
cherche la valeur définie à l’intérieur de la fonction et à défaut la valeur dans l’espace global du module.
— Appel de fonction par valeur : l’exécution de 𝑓(𝑥)évalue d’abord 𝑥 puis exécute 𝑓 avec la valeur calculée.
Types de base
— Opérations sur les entiers (int) : +, -, *, //, **, % avec des opérandes positifs.
— Opérations sur les flottants (float) : +, -, *, /, **.
— Opérations sur les booléens (bool) : not, or, and (et leur caractère paresseux).
— Comparaisons ==, !=, <, >, <=, >=.
Types structurés
— Structures indicées immuables (chaînes, tuples) : len, accès par indice positif valide, concaténation
+, répétition *, tranche.
— Listes : création par compréhension [𝑒 for 𝑥 in 𝑠], par [𝑒] * 𝑛, par append successifs ; len, ac-
cès par indice positif valide ; concaténation +, extraction de tranche, copie (y compris son caractère
superficiel) ; pop en dernière position.
— Dictionnaires : création, accès, insertion, len, copy.
Structures de contrôle
— Instruction d’affectation avec =. Dépaquetage de tuples.
— Instruction conditionnelle : if, elif, else.
— Boucle while (sans else). break, return dans un corps de boucle.
— Boucle for (sans else) et itération sur range(𝑎, 𝑏), une chaîne, un tuple, une liste, un dictionnaire
au travers des méthodes keys et items.
— Définition d’une fonction def 𝑓(𝑝1 , …, 𝑝𝑛 ), return.
Divers
— Introduction d’un commentaire avec #.
— Utilisation simple de print, sans paramètre facultatif.
— Importation de modules avec import module, import module as alias, from module import 𝑓 , 𝑔, …
— Manipulation de fichiers texte (la documentation utile de ces fonctions doit être rappelée ; tout pro-
blème relatif aux encodages est éludé) : open, read, readline, readlines, split, write, close.
— Assertion : assert (sans message d’erreur).