Adloun

Les chemins qui n'existent pas

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 4 — Discipline de programmation, validation et test

Énoncé

Combien de chemins syntaxiques cette fonction possède-t-elle ? Combien sont faisables ? Qu'en conclut-on sur la couverture des chemins ?


int f(int x) {
    int r = 0;
    if (x > 10) { r = r + 1; }
    if (x < 5)  { r = r + 2; }
    return r;
}

Corrigé

Quatre chemins syntaxiques, trois faisables. Deux conditionnelles en séquence donnent combinaisons ; le balayage de sur en atteint trois :


aucun corps    (5 <= x <= 10)  : faisable   -- ex. x = 7,  f(7) = 0
second seul    (x < 5)         : faisable   -- ex. x = 0,  f(0) = 2
premier seul   (x > 10)        : faisable   -- ex. x = 20, f(20) = 1
LES DEUX       (x > 10 et x < 5) : INFAISABLE

Le quatrième demanderait et : les deux conditions sont incompatibles.

Conclusion sur la couverture des chemins. Le critère se formule toujours « sur les chemins faisables » — c'est la précision du programme officiel, et elle n'est pas décorative. Sans elle, aucun jeu de tests n'atteindrait jamais , et le critère serait inutilisable.

Déterminer la faisabilité d'un chemin est en général indécidable : il n'existe aucun algorithme qui réponde pour tout programme (chapitre chap:decidabilite). C'est pourquoi le programme officiel limite l'exercice « à des exemples simples pour lesquels les cas possibles se décèlent dès la lecture ».

Et avec une boucle, l'affaire empire. Une boucle while engendre une infinité de chemins : zéro tour, un tour, deux tours, … La couverture des chemins devient inatteignable par principe, et non plus par difficulté. Le compromis usuel consiste à couvrir , et « au moins » tours — le problème 4.5 montre pourquoi le troisième cas est indispensable.

CritèreForceAtteignable ?
sommetsla plus faibleoui
arcsimplique les sommetsoui
chemins sans cycleimplique les arcssur les chemins faisables
chemins avec cyclela plus fortenon, en général

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.