commit c58ffc2ea6742e3ca411c2a75652c2d68fd775e4 Author: Maxime Menault Date: Wed Oct 21 08:17:46 2026 +0200 Téléverser les fichiers vers "/" diff --git a/R5A04_Algorithmique_MM.pdf b/R5A04_Algorithmique_MM.pdf new file mode 100644 index 0000000..ee99392 Binary files /dev/null and b/R5A04_Algorithmique_MM.pdf differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..ae9be0d --- /dev/null +++ b/README.md @@ -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 ` vérifie l'empreinte et mesure le temps. + La complexité cyclomatique est calculée à la main et vérifiée par l'enseignant. diff --git a/evaluer.sh b/evaluer.sh new file mode 100644 index 0000000..15b204a --- /dev/null +++ b/evaluer.sh @@ -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