Algorithmique et programmation
Consolidation du programme de Terminale : variables, conditions, boucles, fonctions ; listes en extension, par ajouts successifs et en compréhension ; parcours et manipulation des listes ; programmation modulaire et algorithmes du programme (triangle de Pascal, simulations, seuils).
Le programme de Terminale ne comporte pas de notion nouvelle : il consolide variables, types, affectation, conditions, boucles, fonctions et listes, avec l’accent sur la programmation modulaire. Les algorithmes s’écrivent en Python ou en langage naturel (affectation notée ←).
Définitions
Définition 1 — Algorithme, fonction. Un algorithme est une suite finie d’instructions qui résout un problème. Une fonction reçoit des paramètres et renvoie une valeur avec return (print se contente d’afficher). La programmation modulaire consiste à découper une tâche complexe en fonctions simples, testées séparément puis combinées.
Définition 2 — Liste. Suite ordonnée de valeurs : L[i] est l’élément d’indice i, le premier étant L[0] et le dernier L[len(L) - 1] (ou L[-1]). Un tableau à deux dimensions est une liste de listes : T[i][j] (ligne i, colonne j).
Définition 3 — Les trois constructions d’une liste. En extension : L = [2, 3, 5, 7]. Par ajouts successifs : partir de [] et utiliser append dans une boucle. En compréhension : [expression for variable in iterable if condition], comme l’ensemble .
Théorèmes et propriétés
Propriété 1 — indices et range. Les indices vont de 0 à len(L) - 1. range(a, b) parcourt les entiers de a à b - 1 (la borne b est exclue) ; range(n) équivaut à range(0, n).
Propriété 2 — boucles et return. Une boucle for répète un nombre de tours connu ; une boucle while répète tant que sa condition est vraie et doit modifier une variable de cette condition pour s’arrêter. return termine immédiatement la fonction. = est une affectation, == un test d’égalité.
Propriété 3 — opérations sur les listes. L.append(x) ajoute en fin ; L.pop(i) retire et renvoie l’élément d’indice i (L.pop(0) retire l’élément d’indice 0, pas la valeur 0) ; del L[i] supprime ; L.insert(i, x) insère ; len(L) longueur ; x in L appartenance ; L[a:b] sous-liste des indices a à b - 1.
Propriété 4 — simulation d’une épreuve de Bernoulli. random() renvoie un réel uniforme de : le test random() < p est vrai avec probabilité exactement (longueur de l’intervalle ).
Méthodes
Méthode 1 — parcourir une liste et accumuler.
def somme(L):
s = 0 # accumulateur
for x in L: # itérer sur les éléments
s = s + x
return s # moyenne : s / len(L)
Exemple. s = 0 puis for i in range(1, 6): s = s + i donne .
Méthode 2 — rechercher dans une liste (maximum, position).
def maximum(L):
m = L[0] # meilleur candidat rencontré
for x in L:
if x > m:
m = x
return m
def recherche(L, x): # indice de x dans L, ou -1
for i in range(len(L)): # parcours par indices
if L[i] == x:
return i # trouvé : on sort immédiatement
return -1 # atteint seulement si x est absent
Exemple. maximum([4, 7, 2, 9]) renvoie 9 ; recherche([2, 5, 8, 12], 12) renvoie 3.
Méthode 3 — compter, filtrer (compteur).
def nb_pairs(L):
c = 0 # compteur
for x in L:
if x % 2 == 0: # condition
c = c + 1
return c
Exemple. Fréquence d’une valeur k dans un échantillon E : compter ses occurrences puis diviser par len(E).
Méthode 4 — générer une liste (ajouts successifs, compréhension).
carres = []
for k in range(10):
carres.append(k**2) # par ajouts successifs
pairs = [k**2 for k in range(10) if k % 2 == 0] # en compréhension, avec filtre
Exemple. [k for k in range(1, 21) if k % 3 == 0] donne les multiples de 3 de 1 à 20 : [3, 6, 9, 12, 15, 18].
Méthode 5 — recherche de seuil avec while.
def seuil(p, alpha): # plus petit n tel que (1 - p)**n <= alpha
n = 0
q = 1 # invariant : q vaut (1 - p)**n
while q > alpha: # tant que le seuil n'est pas atteint
q = q * (1 - p)
n = n + 1
return n
Exemple. seuil(0.5, 0.01) renvoie 7 car .
Méthode 6 — boucles imbriquées (paires d’indices).
for i in range(n):
for j in range(i + 1, n): # j > i : chaque paire une seule fois
...
Exemple. Pour , la boucle interne s’exécute fois.
Méthode 7 — simulation (programmation modulaire).
from random import random
def bernoulli(p): # 1 avec probabilité p, 0 sinon (Propriété 4)
if random() < p:
return 1
return 0
def binomiale(n, p): # nombre de succès en n épreuves
s = 0
for _ in range(n):
s = s + bernoulli(p)
return s
def echantillon(N, n, p): # N valeurs de B(n, p)
return [binomiale(n, p) for _ in range(N)]
Exemple. Marche aléatoire : accumuler choice([-1, 1]) à chaque pas. Permutation aléatoire : retirer avec pop un élément d’indice randint(0, len(reste) - 1) jusqu’à épuisement.
Méthode 8 — dichotomie dans une liste triée.
def dichotomie(L, x):
g = 0
d = len(L) - 1
while g <= d:
m = (g + d) // 2 # indice du milieu
if L[m] == x:
return m
elif L[m] < x:
g = m + 1 # on élimine la moitié gauche
else:
d = m - 1 # on élimine la moitié droite
return -1
Exemple. Au plus 10 étapes pour 1000 éléments, car .
Méthode 9 — ligne du triangle de Pascal.
def ligne_pascal(n):
ligne = [1]
for _ in range(n): # n passages à la ligne suivante
suivante = [1]
for k in range(len(ligne) - 1):
suivante.append(ligne[k] + ligne[k + 1]) # relation de Pascal
suivante.append(1)
ligne = suivante
return ligne
Exemple. ligne_pascal(4) renvoie [1, 4, 6, 4, 1], les coefficients .
Quiz — Algorithmique et programmation
10 questions · correction immédiate · sans inscription