ECAM 2 – Année 2024-25 – Semestre 2
Exemple de Sujet d’informatique - Corrigé
Exercice 1 – 22-NSIJ1PO1 - Bac Polynésie 2022, Jour 1
1. a. Oui, la fonction A() est récursive car elle s’appelle elle-même (dans le return).
1. b. Si la fonction choice((True, False)) renvoie False un trop grand nombre de fois, la fonction A() va
dépasser la limite d’empilement d’une fonction récursive et provoquer une erreur d’exécution.
2. a. Nouvelle fonction A() :
def A(n) :
if n <= 0 or choice((True, False)) :
return "a"
else :
return "a" + A(n-1) + "a"
2. b. Un appel de la forme A(n) avec n entier positif inférieur à 50 terminera
toujours car, même si la fonction choice((True, False)) renvoie False tout le temps,
la valeur de n va descendre jusqu’à 0, qui renvoie à la fin "a".
Donc, la fonction A(n) ne pourra pas s’appeler plus de 50 fois, il n’y a
plus de risque de dépassement de la limite d’appel d’une fonction récursive.
3. L’appel de B(0) renvoie : "b" + A(-1) + "b" donc : "bab"
L’appel de B(1) renvoie : "b" + A(0) + "b" (si True) donc : "bab"
ou "b" + B(0) + "b" (si False) ou "bbabb"
L’appel de B(2) renvoie : "b" + A(1) + "b" (si True) donc : "bab" ou "baaab"
ou "b" + B(1) + "b" (si False) ou "bbabb" ou "bbbabbb"
4. a. Fonction regleA(chaine) :
def regleA(n) :
n = len(chaine)
if n >= 2 :
return chaine[0] == "a" and chaine[n-1] == "a" and regleA(raccourcir(chaine))
else :
return chaine == "a"
4. b. Fonction regleB(chaine) :
def regleB(n) :
n = len(chaine)
if n > 2 :
return chaine[0] == "b" and chaine[n-1] == "b"
and (regleA(raccourcir(chaine)) or regleB(raccourcir(chaine)))
else :
return False
La Salle Passy Buzenval
1
Exercice 2 – 23-NSIJ1AS1 - Bac Amérique du Sud 2023, Jour 1
1. Chaque pixel étant codé par 3 composantes (RVB) chacune stockée sur 1 octet, de plus, une image de
1 000 pixels de haut sur 1 500 pixels de large contient 1 500 000 pixels, donc une telle image nécessite
4 500 000 octets, c’est-à-dire : 4,5 Mo.
2. i étant l’indice d’une ligne, et l’image comportant n lignes (en hauteur), on a donc : 0 i < n.
j étant l’indice d’une colonne, et l’image comportant m colonnes (en largeur), on a donc : 0 j < m.
3. a. La variable tab_energie renvoyée par la fonction calcule_tab_energie(img) est du type <list>, c’est
une liste de n listes de m nombres positifs (des « énergies de pixels »), où n est le nombre de lignes, m le
nombre de colonnes de l’image img.
3. b. la fonction energie est située à l’intérieur de la boucle « for j in range(m) » qui, elle-même, se trouve
à l’intérieur de la boucle « for i in range(n) », elle est donc appelée m n fois.
4. Fonction calcule_energie(couture, tab_energie) : def calcule_energie(couture, tab_energie) :
""" Somme des energies des pixels de la couture """
somme = 0
for (i, j) in couture :
somme += tab_energie[i][j]
return somme
5. Fonction indices_proches(m, i, j) : def indices_proches(m, i, j) :
(Beaucoup d’autres façons de faire…) """ Liste des indices (i,j-1), (i,j), (i,j+1) compatibles """
liste_proche = []
for k in (-1, 0, 1) :
if 0 <= j+k < m :
liste_proche.append((i,j+k))
return liste_proche
6. Fonction calcule_couture(j, tab_energie) :
def calcule_couture(j, tab_energie) :
n = len(tab_energie)
m = len(tab_energie[0])
couture = []
[Link]((0, j))
for i in range(1, n) :
i_min, j_min = min_energie(tab_energie, indices_proches(m, i, j))
[Link]((i, j_min))
j = j_min
return couture
7. Fonction meilleure_couture(tab_energie) :
def meilleure_couture(tab_energie) :
""" Renvoie la couture d’energie minimale """
m = len(tab_energie[0])
cou_min = calcule_couture(0, tab_energie)
ene_min = calcule_energie(cou_min, tab_energie)
for j in range(1, m) :
cou = calcule_couture(j, tab_energie)
ene = calcule_energie(cou, tab_energie)
if ene < ene_min :
ene_min = ene
cou_min = cou
return cou_min
La Salle Passy Buzenval
2