forked from menault/2026_TD3_DEV51_Qualite_Algo
Téléverser les fichiers vers "/"
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,31 @@
|
|||||||
|
# TD3 — Complexité algorithmique (R5.A.04)
|
||||||
|
|
||||||
|
## Fichiers
|
||||||
|
|
||||||
|
- `banque.c` : le programme à analyser et à optimiser
|
||||||
|
- `evaluer.sh` : vérifie votre solution et mesure son temps d'exécution pour le concours
|
||||||
|
|
||||||
|
## Démarrage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gcc -O2 banque.c -o banque
|
||||||
|
time ./banque # notez le temps et l'empreinte
|
||||||
|
gcc -O0 -g -pg banque.c -o banque_pg
|
||||||
|
./banque_pg && gprof ./banque_pg gmon.out > profil_avant.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
## Règles
|
||||||
|
|
||||||
|
- L'empreinte affichée doit rester `ff68d260a7a58441`.
|
||||||
|
- Interdit : modifier les constantes, `alea`, `generer_transactions` ou le format du rapport,
|
||||||
|
écrire les résultats en dur, utiliser des threads ou des bibliothèques externes.
|
||||||
|
- Autorisé : changer les signatures, réorganiser `main`, ajouter fonctions et structures,
|
||||||
|
utiliser la bibliothèque standard du C.
|
||||||
|
|
||||||
|
## Rendu
|
||||||
|
|
||||||
|
- Un commit par optimisation.
|
||||||
|
- `COMPTE_RENDU.md` à la racine : complexités avant / après de F1 à F10, profils gprof avant / après,
|
||||||
|
justification de chaque optimisation.
|
||||||
|
- Concours : `./evaluer.sh banque.c <votre_nom>` vérifie l'empreinte et mesure le temps.
|
||||||
|
La complexité cyclomatique est calculée à la main et vérifiée par l'enseignant.
|
||||||
+40
@@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# R5.A.04 - TD Complexité algorithmique : évaluation d'une solution pour le concours
|
||||||
|
# Usage : ./evaluer.sh [fichier.c] [nom]
|
||||||
|
# Ajoute une ligne au fichier resultats.csv : nom;ccn_max;temps_ms
|
||||||
|
# (ccn_max vaut - si Lizard n'est pas installé : elle est alors vérifiée par l'enseignant)
|
||||||
|
|
||||||
|
SRC=${1:-banque.c}
|
||||||
|
NOM=${2:-$(whoami)}
|
||||||
|
ATTENDU="ff68d260a7a58441"
|
||||||
|
EXCLUS="alea|generer_transactions" # fonctions de génération, non modifiables
|
||||||
|
|
||||||
|
gcc -O2 -o banque_eval "$SRC" || { echo "Erreur de compilation"; exit 1; }
|
||||||
|
|
||||||
|
# 1. Empreinte
|
||||||
|
EMPREINTE=$(./banque_eval | awk '/Empreinte/ {print $NF}')
|
||||||
|
if [ "$EMPREINTE" != "$ATTENDU" ]; then
|
||||||
|
echo "Empreinte incorrecte : $EMPREINTE (attendu $ATTENDU). Solution refusée."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Empreinte correcte"
|
||||||
|
|
||||||
|
# 2. Temps d'exécution : médiane de 5 exécutions, en millisecondes
|
||||||
|
TEMPS=$(for i in 1 2 3 4 5; do
|
||||||
|
debut=$(date +%s%N); ./banque_eval > /dev/null; fin=$(date +%s%N)
|
||||||
|
echo $(( (fin - debut) / 1000000 ))
|
||||||
|
done | sort -n | sed -n 3p)
|
||||||
|
echo "Temps (médiane de 5) : $TEMPS ms"
|
||||||
|
|
||||||
|
# 3. Complexité cyclomatique maximale (optionnel : seulement si Lizard est installé)
|
||||||
|
if command -v lizard > /dev/null; then
|
||||||
|
CCN=$(lizard --csv "$SRC" 2>/dev/null | awk -F, -v ex="^\"($EXCLUS)\"$" '$8 !~ ex {if ($2 > m) m = $2} END {print m}')
|
||||||
|
echo "Complexité cyclomatique max : $CCN"
|
||||||
|
else
|
||||||
|
CCN="-"
|
||||||
|
echo "Complexité cyclomatique : vérifiée par l'enseignant"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$NOM;$CCN;$TEMPS" >> resultats.csv
|
||||||
|
echo "Ligne ajoutée à resultats.csv : $NOM;$CCN;$TEMPS"
|
||||||
|
rm -f banque_eval
|
||||||
Reference in New Issue
Block a user