Algorithmique TD n° 8 - Université Grenoble Alpes

publicité
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
Téléchargement