Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format
PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
utilisateurs:hypathie:tutos:algo-exo-constructions-d-algorithmes-de-procedure [29/11/2014 17:32] Hypathie créée |
utilisateurs:hypathie:tutos:algo-exo-constructions-d-algorithmes-de-procedure [30/11/2014 11:30] Hypathie [Exo 3 : procédure rechercher un palindrome] |
||
---|---|---|---|
Ligne 6: | Ligne 6: | ||
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
- | ===== Exo 1 : procédure "compter le nombre de caractères dans une phrase" ===== | + | ===== Exo 1 : procédure "compter le nombre de caractères dans une chaîne" ===== |
+ | //**Soit une chaîne de caractères terminée par un caractère '.'.\\ Donnez l'algorithme d'un programme qui compte la longueur de cette chaîne ("." non compris).**// | ||
+ | ====1) Définir la procédure (la moulinette)==== | ||
+ | |||
+ | chaine de caractères ---->| calcul des caractères de la chaîne |---> nombre de lettres de la phrase | ||
+ | |||
+ | ====2) Définition des données==== | ||
+ | |||
+ | <code> | ||
+ | CONSTANTE | ||
+ | point = '.' // caractère d'arrêt | ||
+ | | ||
+ | nbremax = 100 // nombre max de caractères | ||
+ | | ||
+ | TYPE | ||
+ | chaîne tableau[taille] de caractères | ||
+ | |||
+ | VARIABLES | ||
+ | taille_phrase : entier // taille réelle de la chaîne de caractère entrée'' | ||
+ | i : entier // indice de parcours de la phrase | ||
+ | nombre_lettre // Nombre d'occurrence de la lettre cherchée | ||
+ | </code> | ||
+ | |||
+ | ====3) Jeu d'essai==== | ||
+ | |||
+ | ^chainedecaractère ^nombredelettre ^ | ||
+ | | "." | 0 | | ||
+ | | "a." | 1 | | ||
+ | | "ab." | 2 | | ||
+ | | ||
+ | ====4) Interface de procédure=== | ||
+ | //(C'est la notice d'utilisation de la procédure pour le programme qui utilisera cette procédure.)// | ||
+ | |||
+ | **L'interface de procédure** (procédure décrite en pseudo-langage) | ||
+ | |||
+ | <code> | ||
+ | procédure compterchainedecaractère (entrée chainedecaractère : chaine | ||
+ | sortie nombredecaractère : entier) | ||
+ | |||
+ | //compterchainedecaractère : compte le nombre de caractère de la chaîne | ||
+ | //chainedecaractère : suite de plusieurs caractères éventuellement espace d'espace et terminée par un point | ||
+ | //nombredecaractère : nombre de caractère qui ont été" rentrés | ||
+ | |||
+ | </code> | ||
+ | |||
+ | > ''chainedecaractère '' : nom du paramètre | ||
+ | > ''chaine'' : c'est le type tableau créé pour le paramètre "chainedecaractère " | ||
+ | |||
+ | > ''nombredecaractère'' : c'est le nom de la variable de sortie qui aura pour valeur le résultat (elle est de type prédéfini "entier".) | ||
+ | |||
+ | |||
+ | ====5) programme de test==== | ||
+ | |||
+ | <code c> | ||
+ | CONSTANTES | ||
+ | point = '.' // caractère d'arrêt | ||
+ | | ||
+ | nbremax = 100 // nombre max de caractères | ||
+ | | ||
+ | TYPES | ||
+ | chaine = tableau [n] caractere | ||
+ | |||
+ | VARIABLES | ||
+ | chainedecaractere : chaine | ||
+ | nombredelettre : entier | ||
+ | |||
+ | PROCEDURES | ||
+ | procédure compterchainedecaractère (entrée chainedecaractère : chaine ; | ||
+ | sortie nombredecaractère : entier) | ||
+ | |||
+ | //compterchainedecaractère : compte le nombre de caractère de la chaîne | ||
+ | //chainedecaractère : suite de plusieurs caractères éventuellement espace d'espace et terminée par un point | ||
+ | //nombredecaractère : nombre de caractère qui ont été" rentrés | ||
+ | |||
+ | début | ||
+ | |||
+ | écrire ('entrez une phrase') | ||
+ | lire (chainedecaractère) | ||
+ | |||
+ | compterchainedecaractère (chainedecaractère, nombredelettre) | ||
+ | |||
+ | écrire ('le nombre de caractère est', nombredelettre) | ||
+ | |||
+ | fin | ||
+ | </code> | ||
+ | | ||
+ | ====6) Algorithme de la procédure compterchainedecaractère==== | ||
+ | |||
+ | <code c> | ||
+ | procédure compterchainedecaractère (ENTREE chainedecaractère : chaine ; | ||
+ | SORTIE nombredecaractère : entier) | ||
+ | | ||
+ | // entrée et sortie sont des mots réservés | ||
+ | |||
+ | //compterchainedecaractère : compte le nombre de caractère de la chaîne | ||
+ | //chainedecaractère : suite de plusieurs caractères éventuellement espace d'espace et terminée par un point | ||
+ | //nombredecaractère : nombre de caractère qui ont été" rentrés | ||
+ | |||
+ | i : entier //indice | ||
+ | |||
+ | début | ||
+ | | ||
+ | i := 1 | ||
+ | | ||
+ | tantque chainedecaractere [i] <> point faire | ||
+ | | ||
+ | i := i + 1 | ||
+ | | ||
+ | fintantque | ||
+ | nombredecaractère := i-1 | ||
+ | fin | ||
+ | | ||
+ | </code> | ||
+ | |||
+ | <note tip> | ||
+ | Ne pas faire "parler la procédure" : elle ne doit rien faire de plus que ce qu'elle permet fait dans tout programme qui l'utilisera. | ||
+ | </note> | ||
===== Exo 2 : procédure "compter occurrences de deux caractères successifs" ===== | ===== Exo 2 : procédure "compter occurrences de deux caractères successifs" ===== | ||
+ | //**Rechercher si deux lettres choisies par l'utilisateur sont dans une phrase entrée par l'utilisateur.**// | ||
+ | |||
+ | ====1) Schéma de la procédure (la moulinette)==== | ||
+ | <code> | ||
+ | schéma procédure | ||
+ | | | | ||
+ | phrase ----------->|cherche si deux |------> si caractère1 ET caractère2 sont dans la phrase et successifs | ||
+ | | | alors terminateur | ||
+ | |lettres succ | deuxlettres = VRAIE | ||
+ | caractère 1 ------->| dans | | ||
+ | caractère 2 ------> | cette phrase | | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ====2) Définition des données==== | ||
+ | |||
+ | <code> | ||
+ | CONSTANTES\\ | ||
+ | terminateur = '.' // caractère d'arrêt\\ | ||
+ | |||
+ | | ||
+ | TYPES\\ | ||
+ | chainetableau tableau[MAX] caractère\\ | ||
+ | |||
+ | VARIABLES\\ | ||
+ | phrase : caractère\\ | ||
+ | car1 : caractère\\ | ||
+ | car2 : caractère\\ | ||
+ | nbr : entier\\ | ||
+ | </code> | ||
+ | |||
+ | ====3) Jeu d'essai==== | ||
+ | |||
+ | ^phrase ^terminateur ^caractère1 ^caractère2 ^nombre ^ | ||
+ | |blablobli. | <nowiki>'.'</nowiki> | "l" | "r" | 0 | | ||
+ | |bonjour. | <nowiki>'.'</nowiki> | "b" | "." | 0 | | ||
+ | |blablo. | <nowiki>'.'</nowiki> | "b" | "l" | 2 | | ||
+ | |blablobli. | <nowiki>'.'</nowiki> | "b" | "l" | 3 | | ||
+ | |||
+ | | ||
+ | ====4) Interface (définir la procédure)==== | ||
+ | |||
+ | //vérifier si une phrase contient deux lettres// | ||
+ | |||
+ | PROCEDURE | ||
+ | |||
+ | <code> | ||
+ | procédure DeuxLettresID ( entrée phrase : chainetableau ;\\ | ||
+ | sortie nbreoccurrence : entier )\\ | ||
+ | |||
+ | // CompterDeuxLettres : procédure qui recherche deux lettres successives et définies extérieurement dans une phrase terminée par un point\\ | ||
+ | // phrase : phrase saisie par l'utilisateur\\ | ||
+ | //nbreoccurrence : décompte du nombre d'occurrence de mot contenant deux lettres successives\\ | ||
+ | </code> | ||
+ | ''chainetableau'' : c'est le type créé\\ | ||
+ | |||
+ | ====5) Programme de test==== | ||
+ | <code c> | ||
+ | CONSTANTES | ||
+ | max = 100 | ||
+ | |||
+ | TYPES | ||
+ | chaine tableau[MAX] caractère | ||
+ | |||
+ | VARIABLES | ||
+ | phrase : chaine | ||
+ | lettre 1 : caractère | ||
+ | lettre 2 : caractère | ||
+ | nbreoccurrence : entier | ||
+ | |||
+ | |||
+ | début | ||
+ | |||
+ | écrire ("entrez une phrase terminée par un point") | ||
+ | |||
+ | lire (phrase) | ||
+ | |||
+ | écrire ("entrez une première lettre") | ||
+ | |||
+ | lire (lettre 1) | ||
+ | |||
+ | écrire ("entrez une deuxième lettre") | ||
+ | |||
+ | lire (lettre 2) | ||
+ | |||
+ | DeuxLettresID ( entrée phrase : chainetableau , sortie nbreoccurrence : entier ) | ||
+ | | ||
+ | écrire ("le nombre d'occurrences des lettres choisies dans la phrase donnée est", nbreoccurrence") | ||
+ | |||
+ | fin | ||
+ | </code> | ||
+ | |||
+ | ====6) Procédure compter deux lettres==== | ||
+ | |||
+ | <code c> | ||
+ | CompterDeuxLettres( lettre phrase chaine | ||
+ | entrée | ||
+ | car1 : caractère | ||
+ | car2 : caractère | ||
+ | FIN : caractère | ||
+ | sortie occurrence : entier | ||
+ | |||
+ | VARIABLE | ||
+ | |||
+ | i : entier | ||
+ | occurrence : 0 | ||
+ | |||
+ | début | ||
+ | |||
+ | i := 1 | ||
+ | occurrence := 0 | ||
+ | |||
+ | tantque (phrase [i] <> FIN) | ||
+ | |||
+ | si (phrase[i] = car1) | ||
+ | |||
+ | si (phrase [i + 1] = car2 | ||
+ | |||
+ | occurrence + 1 | ||
+ | |||
+ | finsi | ||
+ | |||
+ | finsi | ||
+ | |||
+ | i := i + 1 | ||
+ | | ||
+ | fintantque | ||
+ | |||
+ | fin | ||
+ | |||
+ | </code> | ||
===== Exo 3 : procédure "rechercher un palindrome" ===== | ===== Exo 3 : procédure "rechercher un palindrome" ===== | ||
+ | //**Procédure pour déterminer si une chaîne de caractère terminée par un point est un palindrome.**// | ||
+ | |||
+ | ====1) Moulinette (schéma de la procédure)==== | ||
+ | |||
+ | chaîne. ---> | recherche palindrome | ---> palindr : booléen (Vrai ou FAUX) | ||
+ | |||
+ | <code> | ||
+ | i (indice ->) | ||
+ | 1 2 3 4 5 | 6 |... | MAX | ||
+ | ---------------------------------- | ||
+ | | L | A | V | A | L | . | | ||
+ | j (indice <-|.| ) | ||
+ | </code> | ||
+ | | ||
+ | ====2) Jeu d'essai==== | ||
+ | |||
+ | ^ ^ ^ | ||
+ | | '.' | c'est un palindrome | | ||
+ | | 'a.' | c'est un palindrome | | ||
+ | |'aa.' | c'est un palindrome | | ||
+ | | 'aba.' | c'est un palindrome | | ||
+ | | 'acb' | ce n'est pas un palindrome | | ||
+ | | 'aacba.'| ce n'est pas un palindrome | | ||
+ | |'aacab | ce n'est pas un palindrome | | ||
+ | |||
+ | ====3) Définition des données du problème==== | ||
+ | <code> | ||
+ | CONSTANTES | ||
+ | taille =80 //nombre max de caractères de la chaîne | ||
+ | carterm ='.' // caractère terminaleur de la chaîne | ||
+ | |||
+ | TYPE | ||
+ | chaine =tableau[taille] de caractères // type crée pour contenir une liste | ||
+ | |||
+ | VARIABLES | ||
+ | phrase : chaine // phrase où une symétrie est recherchée | ||
+ | i : entier // | ||
+ | j : entier // indice de parcours de la phrase depuis la fin. | ||
+ | </code> | ||
+ | |||
+ | ====4)Interface (notice) de la procédure ==== | ||
+ | |||
+ | ====5)Programme de test ==== | ||
+ | |||
+ | ====6)Algorithme de la procédure Palindrome terminé par un point==== | ||
+ | |||
+ | <code> | ||
+ | CONSTANTES | ||
+ | taille =80 //nombre max de caractères de la chaine | ||
+ | carterm = '.' // caractère terminateur | ||
+ | |||
+ | TYPES | ||
+ | chaîne =tableau[taille] de caractère | ||
+ | |||
+ | VARIABLES | ||
+ | phrase :chaîne //phrase dont on va déterminer la symétrie | ||
+ | i :entier //indice de parcours de la phrase par le début | ||
+ | j :entier //indice de parcours de la phrase par la fin | ||
+ | |||
+ | Début | ||
+ | | ||
+ | écrire('Donnez une phrase." | ||
+ | lire(phrase) | ||
+ | | ||
+ | j := 1 | ||
+ | | ||
+ | TantQue phrase[j] <> carterm FAIRE | ||
+ | | ||
+ | j := j + 1 //arrêt car on est sur terminateur | ||
+ | | ||
+ | FinTantQue | ||
+ | | ||
+ | //Parcours par les deux bouts | ||
+ | j := j - 1 | ||
+ | i := 1 | ||
+ | | ||
+ | TantQue (i<j) ET (phrase[i] = phrase[j]) FAIRE | ||
+ | | ||
+ | j := i + 1 | ||
+ | i := j - 1 | ||
+ | FinTantQue | ||
+ | | ||
+ | //Affichage du résultat | ||
+ | | ||
+ | SI i >= j ALORS // Fin du parcours | ||
+ | écrire("C'est un palindrome") | ||
+ | SINON | ||
+ | ecrire("Ce n'est pas un palindrome") | ||
+ | FinSI | ||
+ | | ||
+ | Fin | ||
+ | </code> | ||
+ | |||
+ | Autre solution : | ||
+ | <code> | ||
+ | CONSTANTES | ||
+ | carterm ='.' | ||
+ | |||
+ | TYPES | ||
+ | phrase =tableau[i,j] de caractères | ||
+ | |||
+ | VARIABLES | ||
+ | i : entier // indice de début du tableau | ||
+ | j : entier //indice de fin | ||
+ | resultat : booléen // VRAI si symétrie | ||
+ | |||
+ | |||
+ | Début | ||
+ | | ||
+ | //initialisation | ||
+ | i := phrase[1] | ||
+ | j := phrase[carterm - 1] | ||
+ | | ||
+ | SI (carterm) ALORS | ||
+ | lire(phrase[i,j]) | ||
+ | | ||
+ | SI (phrase[i] = phrase[j]) ALORS | ||
+ | | ||
+ | resultat = VRAI | ||
+ | |||
+ | i := i + 1 // Parcours dans les deux sens | ||
+ | j := j - 1 | ||
+ | | ||
+ | TQ (i < j) ET (resultat = VRAI) FAIRE | ||
+ | écrire("C'est un palindrome") | ||
+ | FINTQ | ||
+ | |||
+ | SINON | ||
+ | resultat = FAUX | ||
+ | écrire("Ce n'est pas un palindrome") | ||
+ | FINSI | ||
+ | FINSI | ||
+ | | ||
+ | fin | ||
+ | </code> |