1. Procédure vs Fonction
- Fonction : Renvoie exactement un résultat (via
RETOURNER). S’utilise dans une expression (y ← f(x) + 2). - Procédure : Ne renvoie rien ou modifie plusieurs variables. C’est une action (
AfficherMenu()).
Portée et Passage de paramètres
- Variable Locale : Existe uniquement dans la fonction.
- Variable Globale : Existe partout (à éviter si possible).
- Passage par Valeur : La fonction travaille sur une copie (l’original n’est pas modifié).
- Passage par Référence : La fonction modifie l’original (couteux mais puissant).
2. TD : Détection d’Anagrammes
Objectif : Vérifier si deux tableaux de caractères (tab1, tab2) sont des anagrammes (contiennent les mêmes lettres, ordre différent).
Stratégie optimisée :
- Vérifier si les tailles sont identiques.
- Pour chaque lettre de
tab1, la chercher danstab2. - Si trouvée : Supprimer la lettre de
tab2(ou l’échanger avec la fin et réduire la taille) pour éviter de la compter deux fois.
Solution Algorithmique
FONCTION EstAnagramme(tab1: TAB CAR, n1: ENTIER, tab2: TAB CAR, n2: ENTIER) : BOOLEEN
VARIABLES
i, j : ENTIER
tailleRestante : ENTIER
trouvé, resultat : BOOLEEN
temp : CARACTERE
copieT2 : TAB CAR // On travaille sur une copie pour ne pas détruire l'original
DEBUT
// 1. Vérification rapide taille
SI n1 ≠ n2 ALORS
RETOURNER FAUX
FINSI
// 2. Copie du tableau 2 (pour le modifier)
tailleRestante ← n2
POUR i DE 1 A n2 FAIRE
copieT2[i] ← tab2[i]
FINPOUR
resultat ← VRAI
i ← 1
// 3. Parcours du premier tableau
TANT QUE (i <= n1) ET (resultat = VRAI) FAIRE
trouvé ← FAUX
j ← 1
// Recherche de tab1[i] dans copieT2
TANT QUE (j <= tailleRestante) ET (trouvé = FAUX) FAIRE
SI tab1[i] = copieT2[j] ALORS
trouvé ← VRAI
// ASTUCE : On échange la lettre trouvée avec la dernière
// du tableau virtuel, et on réduit la taille.
// Cela "supprime" la lettre des recherches futures.
temp ← copieT2[j]
copieT2[j] ← copieT2[tailleRestante]
copieT2[tailleRestante] ← temp
tailleRestante ← tailleRestante - 1
SINON
j ← j + 1
FINSI
FINTANTQUE
// Si on a parcouru tout T2 sans trouver la lettre de T1
SI trouvé = FAUX ALORS
resultat ← FAUX
SINON
i ← i + 1
FINSI
FINTANTQUE
RETOURNER resultat
FIN