Université Pierre Mendès France U.F.R. Sciences de l’Homme et de la Société Master IC2A DCISS Algorithmique T.D. n° 8 Séquences intermédiaires et tableaux Exercice 1 : Mots terminés pas s Écrire un algorithme qui affiche le nombre de mots dans une séquence de caractères représentée dans un fichier ne contenant que des lettres ou des espaces, et éventuellement vide, puis affiche le nombre de mots se terminant par un 's'. Exemple : fichier résultat qui sont ces serpents qui sifflent sur nos le fichier comporte 9 mots le fichier comporte 4 mots se terminant par un 's' têtes Exercice 2 : Phrase palindrome On considère un texte de longueur L représenté dans un tableau défini sur l'intervalle [1 .. Lmax]. On supposera dans les questions ci-dessous que le tableau considéré contient déjà le texte, sa saisie dans le tableau n'est donc pas à faire. Ecrire un algorithme qui affiche un message indiquant si le texte donné est un palindrome (une fois les espaces supprimés, le texte se lit de gauche à droite comme de droite à gauche). Exemples de palindrome : esope reste ici et se repose tu l as trop ecrase cesar ce port salut Exercice 3 : Décalage circulaire On considère une séquence d'entiers de longueur L représentée dans un tableau T d'entiers défini sur l'intervalle [1…Lmax], 0 ≤ L ≤ Lmax. On supposera dans les questions ci-dessous que le tableau considéré contient déjà la séquence, l’enregistrement de la séquence dans le tableau n'est donc pas à faire. Ecrire un algorithme qui réalise le décalage circulaire à droite de T selon la spécification suivante : soient A et B les valeurs initiale et finale du tableau T. Le décalage est caractérisé par l'assertion : B[1] = A[L] et ∀ k ∈ [2…n], B[k]= A[k-1]. a) Ecrire une première solution dans laquelle le problème est sérialisé en deux étapes : on crée tout d'abord un tableau intermédiaire Z, puis on recopie Z dans T. b) Ecrire une deuxième solution sans recourir à un tableau intermédiaire. Exemple : Avant décalage circulaire à droite (L = 6) : T = [2, 3, 29, 54, -3, 12] Après décalage circulaire à droite (L = 6) : T = [12, 2, 3, 29, 54, -3] Exercice 4 : Cryptage On veut écrire un algorithme qui effectue le cryptage d’un texte en utilisant la table de cryptage suivante : Tcrypt 1 2 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A Z E R T Y U I O P Q S D F G H J K L M W X C V B N 1 26 a) Pour faciliter l’écriture de l’algorithme de cryptage, réaliser la fonction de cryptage d’un caractère : Cryptage : fonction (X : caractère, T : TableCryptage ) ⎯→ caractère { Cryptage (X) désigne le caractère correspondant à X dans la table de cryptage T } avec : TableCryptage : type tableau sur [1..2] de tableaux sur [1..26] de caractères Pour notre problème, le paramètre formel T correspondra au paramètre effectif TCRYPT. 11-2010 1/2 JMA & JG Exemples : Cryptage(‘G’, TCRYPT) = ‘U’ Cryptage(‘Z’, TCRYPT) = ‘N’ b) Réaliser la fonction opposée Décryptage qui effectue le décryptage : Décryptage : fonction (X : caractère, T : TableCryptage ) ⎯→ caractère { Décryptage (X) désigne le caractère correspondant au cryptage X dans la table de cryptage T } c) Ecrire une action paramétrée CrypterFichier qui effectue le cryptage d’un texte formé d’espaces et de lettres représenté dans un fichier de caractères. Les mots sont séparés par un ou plusieurs espaces. Le fichier peut commencer ou se terminer par des espaces. L’action crée un fichier de caractères qui contiendra le texte crypté. Les espaces ne sont pas cryptés, mais on souhaite ne pas avoir d’espace redondant dans le fichier créé, c’est-à-dire que les mots ne sont séparés que par un espace et un seul, et que les espaces de début et de fin de fichier sont supprimés. CrypterFichier : action (Elaboré FD : fichier de caractères, Elaboré FR : fichier de caractères, Consulté T : TableCryptage) Exercice 5 { fichier lu } { fichier créé } On considère un texte formé d’espaces et de lettres représenté dans un fichier de caractères. Ce texte comporte au moins deux caractères (marque de fin de fichier non comprise). On veut compter le nombre d'occurrences du premier couple de caractères du texte, dans ce texte. On construit l'algorithme en représentant le couple de caractères cherché par les informations nommées PC et SC (premier caractère et second caractère). Commenter la solution proposée ci-dessous : - l’algorithme est-il correct ? si oui le prouver par des assertions, si non indiquer pourquoi et donner éventuellement un contre exemple ; - en cas d'erreur, peut-on corriger simplement l'algorithme ? si oui, proposer cette correction, si non expliquer pourquoi il faut tout refaire. Les commentaires doivent être brefs et précis. lexique principal F : fichier de caractères { fichier comportant le texte à parcourir } PC : caractère { premier caractère du couple recherché } SC : caractère { second caractère du couple recherché } NBC : un entier ≥ 0 { nombre de couples déjà reconnus } ILYAPC : un booléen { indique si le caractère précédant le caractère courant est égal à PC } e : écran algorithme principal F.LirePremier ; PC ←⎯ FC.EC F.LireSuivant ; SC ←⎯ FC.EC NBC ←⎯ 0 tantque non F.FDF faire selon F.EC, PC, SC F.EC = PC : ILYAPC ←⎯ vrai F.EC = SC : selon ILYAPC ILYAPC : NBC ←⎯ NBC + 1 non ILYAPC : { action vide } fselon F.EC ≠ PC : ILYAPC ←⎯ faux fselon F.LireSuivant ftq e.écrire (NBC) 11-2010 2/2 JMA & JG