FONCTIONS ET PROCEDURES Exercice 11.1 Écrivez une fonction qui renvoie la somme

FONCTIONS ET PROCEDURES Exercice 11.1 Écrivez une fonction qui renvoie la somme de cinq nombres fournis en argument. Exercice 11.2 Écrivez une fonction qui renvoie le nombre de voyelles contenues dans une chaîne de caractères passée en argument. Au passage, notez qu'une fonction a tout à fait le droit d'appeler une autre fonction. Exercice 11.3 Réécrivez la fonction Trouve, vue précédemment, à l’aide des fonctions Mid et Len (comme quoi, Trouve, à la différence de Mid et Len, n’est pas une fonction indispensable dans un langage). Exercice 11.4 Ecrivez une fonction qui purge une chaîne d'un caractère, la chaîne comme le caractère étant passés en argument. Si le caractère spécifié ne fait pas partie de la chaîne, celle-ci devra être retournée intacte. Par exemple :  Purge("Bonjour","o") renverra "Bnjur"  Purge("J'ai horreur des espaces"," ") renverra "J'aihorreurdesespaces"  Purge("Moi, je m'en fous", "y") renverra "Moi, je m'en fous" Exercice 11.5 Même question que précédement, mais cette fois, on doit pouvoir fournir un nombre quelconque de caractères à supprimer en argument. Exercice 11.6 Ecrire un traitement qui effectue le tri d'un tableau envoyé en argument (on considère que le code appelant devra également fournir le nombre d'éléments du tableau). Exercice 11.7 Ecrire un traitement qui informe si un un tableau envoyé en argument est formé ou non d'éléments tous rangés en ordre croissant. Exercice 11.8 Ecrire un traitement qui inverse le contenu de deux valeurs passées en argument. Exercice 11.9 reprendre l'exercice 11.6, mais cette fois la procédure comprendra un troisième paramètre, de type booléen. VRAI, celui-ci indiquera que le tri devra être effectué dans l'ordre croissant, FAUX dans l'ordre décroissant. Corrigé Exercice 11.1 Voilà un début en douceur... Fonction Sum(a, b, c, d, e) Renvoyer a + b + c + d + e FinFonction Exercice 11.2 Fonction NbVoyelles(Mot en Caractère) Variables i, nb en Numérique nb ← 0 Pour i ← 1 à Len(Mot) Si T rouve("aeiouy", Mid(Mot, i, 1)) <> 0 Alors nb ← nb + 1 FinSi i suivant Renvoyer nb FinFonction Exercice 11.3 Fonction Trouve(a, b) Variable i en Numérique Début i ← 1 TantQue i < Len(a) - Len(b) et b <> Mid(a, i, Len(b)) i ← i + 1 FinTantQue Si b <> Mid(a, i, Len(b)) Alors Renvoyer 0 Sinon Renvoyer i FinFonction Exercice 11.4 Fonction PurgeSimple(a, b) Variable Sortie en Caractère Variable i en Numérique Début Sortie ← '' Pour i ← 1 à Len(a) Si Mid(a, i, 1) <> b Alors Sortie ← Sortie & Mid(a, i, 1) FinSi i suivant Renvoyer Sortie FinFonction Exercice 11.5 Fonction PurgeMultiple(a, b) Variable Sortie en Caractère Variable i en Numérique Début Sortie ← '' Pour i ← 1 à Len(a) Si Trouve(b, Mid(a, i, 1)) = 0 Alors Sortie ← Sortie & Mid(a, i, 1) FinSi i suivant Renvoyer Sortie FinFonction Exercice 11.6 Fonction T riT ableau(T, n) Variables i, posmini, temp en Numérique Début Pour i ← 0 à n-2 posmini ← i Pour j ← i + 1 à n-1 Si t(j) < t(posmini) Alors posmini ← j Finsi j suivant temp ← T(posmini) T(posmini) ← T(i) T(i) ← temp i suivant Renvoyer T FinFonction Exercice 11.7 Fonction T ableauCroissant(T, n) Variable i en Numérique Variable Flag en Booléen Début Flag ← VRAI i ← 0 TantQue Flag et i < n-1 Flag ← T(i) < T(i+1) i ← i+1 FinTantQue Renvoyer Flag FinFonction Exercice 11.8 Procédure Inversion(X en Numérique par référence, Y en Numérique par référence) Variable T emp en Numérique Début T emp ← X X ← Y Y ← T emp FinProcédure Exercice 11.9 Fonction T riT ableau(T, n, Croissant) Variables i, pos, temp en Numérique Début Pour i ← 0 à n-2 pos ← i Pour j ← i + 1 à n-1 Si Croissant Alors Si t(j) < t(pos) Alors pos ← j Finsi Sinon Si t(j) > t(pos) Alors pos ← j Finsi Finsi j suivant temp ← T(pos) T(pos) ← T(i) T(i) ← temp i suivant Renvoyer T FinFonction Fonction ChoixDuMot Quelques explications : on lit intégralement le fichier contenant la liste des mots. Au fur et à mesure, on range ces mots dans le tableau Liste, qui est redimensionné à chaque tour de boucle. Un tirage aléatoire intervient alors, qui permet de renvoyer un des mots au hasard. Fonction ChoixDuMot() Tableau Liste() en Caractère Variables Nbmots, Choisi en Numérique Ouvrir "Dico.txt" sur 1 en Lecture Nbmots ← -1 Tantque Non EOF(1) Nbmots ← Nbmots + 1 Redim Liste(Nbmots) LireFichier 1, Liste(Nbmots) FinTantQue Fermer 1 Choisi ← Ent(Alea() * Nbmots) Renvoyer Liste(Choisi) FinFonction Fonction PartieFinie On commence par vérifier le nombre de mauvaises réponses, motif de défaite. Ensuite, on regarde si la partie est gagnée, traitement qui s’apparente à une gestion de Flag : il suffit que l’une des lettres du mot à deviner n’ait pas été trouvée pour que la partie ne soit pas gagnée. La fonction aura besoin, comme arguments, du tableau Verif, de son nombre d’éléments et du nombre actuel de mauvaises réponses. Fonction PartieFinie(t() en Booleen, n, x en Numérique) Variables i, issue en Numerique Si x = 10 Alors Renvoyer 2 Sinon Issue ← 1 Pour i ← 0 à n Si Non t(i) Alors Issue ← 0 FinSi i suivant Renvoyer Issue FinSi FinFonction Procédure AffichageMot Une même boucle nous permet de considérer une par une les lettres du mot à trouver (variable m), et de savoir si ces lettres ont été identifiées ou non. Procédure AffichageMot(m en Caractère par Valeur, t() en Booléen par Valeur) Variable Af en Caractere Variable i en Numerique Af ← "" Pour i ← 0 à len(m) - 1 Si Non t(i) Alors Af ← Af & "-" Sinon Af ← Af & Mid(mot, i + 1, 1) FinSi i suivant Ecrire Af FinProcédure Remarque : cette procédure aurait également pu être écrite sous la forme d'une fonction, qui aurait renvoyé vers la procédure principale la chaîne de caractères Aff. L'écriture à l'écran de cette chaîne Aff aurait alors été faite par la procédure principale. Voilà donc une situation où on peut assez indifféremment opter pour une sous-procédure ou pour une fonction. Procédure SaisieLettre On vérifie que le signe entré (paramètre b) est bien une seule lettre, qui ne figure pas dans les propositions précédemment effectuées (paramètre a) Procédure SaisieLettre(a, b en Caractère par Référence) Variable Correct en Booleen Variable Alpha en Caractere Début Correct ← Faux Alpha ← "ABCDEFGHIJKLMNOPQRSTUVWXYZ" TantQue Non Correct Ecrire "Entrez la lettre proposée : " Lire b Si T rouve(alpha, b) = 0 Ou len(b) <> 1 Alors Ecrire "Ce n’est pas une lettre !" SinonSi Trouve(a, b) <> 0 Alors Ecrire "Lettre déjà proposée !" Sinon Correct ← Vrai a ← a & b FinSi FinTantQue Fin Procédure Procédure VerifLettre Les paramètres se multiplient… L est la lettre proposée, t() le tableau de booléens, M le mot à trouver et N le nombre de mauvaises propositions. Il n’y a pas de difficulté majeure dans cette procédure : on examine les lettres de M une à une, et on en tire les conséquences. Le flag sert à savoir si la lettre proposée faisait ou non partie du mot à deviner. Procédure VerifLettre(L, M en Caractère par Valeur, t() en Booléen par Référence, N en Numérique par Référence) Variable Correct en Booleen Début Correct ← Faux Pour i ← 1 à Len(M) Si Mid(M, i, 1) = L Alors Correct ← Vrai T(i - 1) ← Vrai FinSi FinTantQue Si Non Correct Alors N ← N + 1 FinSi Fin Procédure Procédure Epilogue Procédure Epilogue(M en Caractère par Valeur, N en Numérique par Valeur) Début Si N = 2 Alors Ecrire "Une mauvaise proposition de trop… Partie terminée !" Ecrire "Le mot à deviner était : ", M Sinon Ecrire "Bravo ! Vous avez trouvé !" FinSi Fin Procédure Procédure Principale Procédure Principale Variables Lettre, Mot, Propos en Caractere Variables g i, MovRep en Numérique Tableau Verif() en Booleen Début Mot ← ChoixDuMot() Propos ← "" Lettre ← "" Redim Verif(Len(Mot)-1) Pour i ← 0 à Len(Mot)-1 Verif(i) ← Faux i suivant k ← 0 Tantque k = 0 AffichageMot(Mot, Verif()) SaisieLettre(Propos, Lettre) VerifLettre(Lettre, Mot, Verif(), MovRep) k ← PartieFinie(Verif(), len(mot), MovRep) FinTantQue Epilogue(Mot, k) Fin FICHIERS Exercice 10.1 Quel résultat cet algorithme produit-il ? Variable T ruc en Caractère Début Ouvrir "Exemple.txt" sur 5 en Lecture Tantque Non EOF(5) LireFichier 5, T ruc Ecrire T ruc FinTantQue Fermer 5 Fin Exercice 10.2 Ecrivez l’algorithme qui produit un résultat similaire au précédent, mais le fichier texte "Exemple.txt" est cette fois de type délimité (caractère de délimitation : /). On produira à l'écran un affichage où pour des raisons esthétiques, ce caractère sera remplacé avec des espaces. Exercice 10.3 On travaille avec le fichier du carnet d’adresses en champs de largeur fixe. Ecrivez un algorithme qui permet à l’utilisateur de saisir au clavier un nouvel individu qui sera ajouté à ce carnet d’adresses. Exercice 10.4 Même question, mais cette fois le carnet est supposé être trié par ordre alphabétique. L’individu doit uploads/Philosophie/ ex-corrigac-fonctions-et-procedures.pdf

  • 23
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager