forked from menault/2026_TD2_DEV51_Qualite_Algo
4.9 KiB
4.9 KiB
Ugo Faye Cléo Camille Mathis Leclere
Compte rendu – TD Complexité cyclomatique (R5.A.04)
Formules utilisées :
- avec le graphe : M = E − N + 2P (E arêtes, N sommets, P = 1)
- en comptant : M = décisions + 1
Classement selon la grille du cours : 1–10 simple, 11–20 modéré, 21–50 complexe, > 50 très risqué.
Partie C – exercices.c
C1 – carre
- complexite = 0 decisions + 1 = 1
Classement:
Simple
C2 – moyenne
- complexite = 9 aretes − 8 sommets + 2 = 3
- complexite = 2 decisions + 1 = 3
Cas particuliers:
- ternaire
n > 0 ? ... : 0: compte pour 1
Classement:
Simple
C3 – est_bissextile
- complexite = 2 decisions + 1 = 3
Cas particuliers:
&&et||sansif: 1 decision chacun (evaluation paresseuse)
Classement:
Simple
C4 – nom_jour
- complexite = 16 aretes − 10 sommets + 2 = 8
- complexite = 7 decisions + 1 = 8
Cas particuliers:
- 7
case: 1 decision chacun default: ne compte pas
Classement:
Simple
C5 – compter_mots
- complexite = 7 decisions + 1 = 8
Cas particuliers:
while: 1separateur = (... || ... || ... || ... || ...): 4||sansifif+else if: 2
Classement:
Simple
C6 – date_valide
- complexite = 10 decisions + 1 = 11
Cas particuliers:
- 1er
if+ 3||: 4 if (mois == 2)+if (est_bissextile): 2else if+ 3||: 4- l'appel a
est_bissextilene compte pas (M est calcule par fonction)
Classement:
Modéré
Partie Java – Bibliotheque.java
J1 – nombreDeLivres
- complexite = 0 decisions + 1 = 1
Classement:
Simple
J2 – estDisponible
- complexite = 5 aretes − 4 sommets + 2 = 3
- complexite = 2 decisions + 1 = 3
Cas particuliers:
- 2
&&sansif: 1 decision chacun
Classement:
Simple
J3 – peutEmprunter
- complexite = 8 decisions + 1 = 9
Cas particuliers:
- 4
if+ 2else if - ternaire
a.etudiant ? 8 : 5: +1 l.reserve && !a.etudiant: +1
Classement:
Simple
J4 – calculerPenalite
- complexite = 8 decisions + 1 = 9
Cas particuliers:
- 4
if+ 1else if+ 1for joursRetard <= 0 || nbLivres <= 0: +1- ternaire
penalite > 50 ? 50 : penalite: +1 else: ne compte pas
Classement:
Simple
J5 – rechercher
- complexite = 10 decisions + 1 = 11
Cas particuliers:
- 1
for+ 5if genre != null && ...: +1disponiblesSeulement && ...: +1motCle == null || ...: +1titre.contains(m) || auteur.contains(m): +1continue: ne compte pas- l'appel a
estDisponiblene compte pas
Classement:
Modéré
J6 – importer
- complexite = 21 aretes − 15 sommets + 2 = 8
- complexite = 7 decisions + 1 = 8
Cas particuliers:
- 2 :
for - 3/4 :
if+|| - 7 :
if - 10/11 :
if+&& - 13 :
catch continue: ne compte pas
Classement:
Simple
Partie Python – exercices.py
P1 – celsius_vers_fahrenheit
- complexite = 0 decisions + 1 = 1
Classement:
Simple
P2 – signe
- complexite = 7 aretes − 6 sommets + 2 = 3
- complexite = 2 decisions + 1 = 3
Cas particuliers:
if+elif
Classement:
Simple
P3 – notes_valides
- complexite = 6 aretes − 5 sommets + 2 = 3
- complexite = 2 decisions + 1 = 3
Cas particuliers:
- comprehension de liste = 1
for+ 1if 0 <= n <= 20: comparaison chainee comptee comme 1 seule condition
Classement:
Simple
P4 – mention
- complexite = 2 decisions + 1 = 3
Cas particuliers:
- le dictionnaire remplace une cascade de
if/elif(qui aurait donne M = 5)
Classement:
Simple
P5 – analyser_mot_de_passe
- complexite = 15 decisions + 1 = 16
Cas particuliers:
- 2
for, 8if, 2elif majuscule and minuscule: +1login and login.lower() in ...: +1- ternaire
"moyen" if ... else "faible": +1 elseetbreak: ne comptent pas
Classement:
Modéré
Récapitulatif
| Fonction | M | Classement |
|---|---|---|
C1 carre |
1 | Simple |
C2 moyenne |
3 | Simple |
C3 est_bissextile |
3 | Simple |
C4 nom_jour |
8 | Simple |
C5 compter_mots |
8 | Simple |
C6 date_valide |
11 | Modéré |
J1 nombreDeLivres |
1 | Simple |
J2 estDisponible |
3 | Simple |
J3 peutEmprunter |
9 | Simple |
J4 calculerPenalite |
9 | Simple |
J5 rechercher |
11 | Modéré |
J6 importer |
8 | Simple |
P1 celsius_vers_fahrenheit |
1 | Simple |
P2 signe |
3 | Simple |
P3 notes_valides |
3 | Simple |
P4 mention |
3 | Simple |
P5 analyser_mot_de_passe |
16 | Modéré |





