Utilitaires Chaînétique [sr01] - Outils Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 9 avril 2015 Table des matières 1 Utilitaires Chaînétique / sr01outils1 1 1.1 Fonction cvascii (caractère ascii d un chiffre)................ 1 1.2 Fonction estblanc (test de caractère blanc)................. 1 1.3 Procédure compressertexte (compression des soulignés).......... 1 1.4 Procédures de décalage (décalage d une chaîne).............. 2 1.5 Fonction cvchiffre (caractère chiffre en entier)............... 2 1.6 Fonction anagrammique (test d anagrammie)................ 3 1.7 Fonction anagramme (anagramme aux blancs près)............ 3 1.8 Fonction estchiffre (test caractère chiffre).................. 4 1.9 Fonction minuscules (minuscule d une chaîne)............... 4 1.10 Fonction majuscules (majuscule d une chaîne)............... 4 1.11 Fonction nnenchaine (entier à deux chiffres en chaîne).......... 4 1.12 Fonction palindromique (test de palindromie)............... 5 1.13 Fonction palindrome (palindrome aux blancs près)............. 5 1.14 Fonction nreplicatats (replicatat d un caractère).............. 6 1.15 Fonction positioncarac (position d un caractère).............. 6 1.16 Procédure permuter2c (permutation de caractères)............. 6 1.17 Procédure permuter2s (permutation dans une chaîne)........... 7 1.18 Procédure renversertexte (renverse une chaîne).............. 7 1.19 Procédure saisirtexte (saisie d un texte).................. 7 1.20 t : miroirtexte (miroir d une chaine).................... 8 1.21 u,v,w...................................... 8 1.22 Opérations de base (sur une chaine)..................... 8 1.23 Fonction cvchaine (entier en chaine)..................... 8 1.24 Fonction cvnombre (chaîne en entier).................... 8 1 Utilitaires Chaînétique / sr01outils1 1.1 Fonction cvascii (caractère ascii d un chiffre) Un chiffre est un entier dans [0..9]. 1
Unisciel algoprog Utilitaires Chaînétique / sr01outils1 (alg, TD) 2 Écrivez une fonction cvascii(n) qui calcule et renvoie le caractère ascii d un chiffre n. Exemple : cvascii(3) ==> 3 Outil alg La fonction CaractèreAscii(x) renvoie une chaîne d un seul caractère dont l entier x a été passé en paramètre et la fonction CodeAscii(c) renvoie le code ascii d un caractère c. 1.2 Fonction estblanc (test de caractère blanc) Écrivez une fonction estblanc(c) qui teste et renvoie Vrai si un caractère c est un blanc, Faux sinon. Définissez comme «blanc» le caractère espace, la virgule et le point-virgule (par exemple). 1.3 Procédure compressertexte (compression des soulignés) Écrivez une procédure compressertexte(txt) qui compresse une chaine de caractères txt en mettant tous les soulignés en fin de chaine. 1.4 Procédures de décalage (décalage d une chaîne) Écrivez une procédure decalergauche(txt) qui décale d un cran vers la gauche les caractères d un texte txt. Exemple : message deroulant ==> essage deroulantm Aide simple Utilisez une boucle Pour (son équivalent en programmation). Aide méthodologique Il faut opérer en trois temps : 1. Sauvegardez le caractère le plus à gauche dans une variable temporaire tmp. 2. Décalez le reste du texte (c.-à-d. du deuxième au dernier caractère) d un cran vers la gauche. 3. Placez le caractère sauvé tmp à l extrême droite.
Unisciel algoprog Utilitaires Chaînétique / sr01outils1 (alg, TD) 3 Écrivez une procédure decalerdroite(txt) qui décale d un cran vers la droite les caractères d un texte txt. Exemple : message deroulant ==> tmessage deroulan Aide simple Utilisez une boucle Pour (son équivalent en programmation). Aide méthodologique Idem ci-dessus mais dans l autre sens : 1. Sauvegardez le caractère le plus à droite dans une variable temporaire tmp. 2. Décalez le reste du texte d un cran vers la droite (c.-à-d. par pas décroissant de l avant dernier au premier caractère). 3. Placez le caractère sauvé tmp à l extrême gauche. 1.5 Fonction cvchiffre (caractère chiffre en entier) Les caractères des chiffres 0, 1,..., 9 se suivent dans le jeu de caractères de la machine. Étant donné un caractère c contenant l un des caractères de chiffre, comment pouvezvous obtenir la valeur numérique qu il représente, c.-à-d. l entier 0, 1,..., 9? Écrivez une fonction cvchiffre(c) qui calcule et renvoie la valeur numérique d un caractère c représentant un chiffre. Outil alg La fonction CodeAscii(c) renvoie le code ascii d un caractère c. 1.6 Fonction anagrammique (test d anagrammie) Chaînes anagrammes Deux chaines de caractères sont anagrammes l une l autre si et seulement si tout caractère de l une est dans l autre et réciproquement. Écrivez une fonction anagrammique(a,b) qui teste et renvoie Vrai si deux chaînes de caractères a et b sont anagrammes l une l autre, Faux sinon. La fonction ne doit pas trier les deux chaines puis les comparer (ceci n est pas efficace).
Unisciel algoprog Utilitaires Chaînétique / sr01outils1 (alg, TD) 4 1.7 Fonction anagramme (anagramme aux blancs près) Chaînes anagrammes aux blancs près Deux chaînes de caractères sont anagrammes l une l autre aux blancs près si après compression elles sont anagrammes l une l autre. Soit la fonction estblanc(c) quirenvoie Vrai si un caractère c est un blanc, Faux sinon. Sont définis comme «blanc» le caractère espace, la virgule et le point-virgule. alg @[estblanca1.alg] Écrivez une fonction anagramme(a,b) qui teste et renvoie Vrai si deux chaînes de caractères a et b sont anagrammes l une l autre aux blancs près, Faux sinon. La fonction ne doit ni compresser les deux chaînes, ni les trier : ceci n est pas efficace../images/sr01exerc0g.png Figure 1 Graphe des appels 1.8 Fonction estchiffre (test caractère chiffre) Écrivez une fonction estchiffre(c) qui teste et renvoie Vrai si un caractère c représente un chiffre, Faux sinon. 1.9 Fonction minuscules (minuscule d une chaîne) Une lettre est un caractère A à Z ou a à z. Écrivez une fonction minuscule(c) qui calcule et renvoie la minuscule d une lettre c, le caractère c sinon. Déduisez une fonction minuscules(txt) qui calcule et renvoie la minuscule d une chaine de caractères txt.
Unisciel algoprog Utilitaires Chaînétique / sr01outils1 (alg, TD) 5 1.10 Fonction majuscules (majuscule d une chaîne) Une lettre est un caractère A à Z ou a à z. Écrivez une fonction majuscule(c) qui calcule et renvoie la majuscule d une lettre c, le caractère c sinon. Déduisez une fonction majuscules(txt) qui calcule et renvoie la majuscule d une chaine de caractères txt. 1.11 Fonction nnenchaine (entier à deux chiffres en chaîne) Ce problème traduit un nombre à deux chiffres en chaîne. Écrivez une fonction chiffreenchaine(n) qui calcule et renvoie la caractère ascii d un chiffre n (entier dans [0..9]). Écrivez une fonction nnenchaine(n,b) qui calcule et renvoie la traduction d un entier n de deux chiffres en chaîne. Si le booléen b est Vrai, l éventuel zéro des dizaines est traduit. Exemples : nnenchaine(6,vrai) ==> "06" nnenchaine(6,faux) ==> "6" Outil alg L opérateur de concaténation de chaîne est noté &. 1.12 Fonction palindromique (test de palindromie) Chaîne palindrome Une chaîne de caractères est un palindrome si la chaîne est égale à son renversé, ce qui se traduit aussi par sa lecture de la gauche vers la droite est identique à la lecture de la droite vers la gauche. Exemples : Radar, Rotor, Kayak, Ressasser
Unisciel algoprog Utilitaires Chaînétique / sr01outils1 (alg, TD) 6 Écrivez une fonction palindromique(txt) qui teste et renvoie Vrai si une chaîne de caractères txt est un palindrome, Faux sinon. La fonction ne doit pas modifier txt, ni créer de chaîne de caractères temporaire (qui serait le renversé de txt). 1.13 Fonction palindrome (palindrome aux blancs près) Chaîne palindrome aux blancs près Une chaîne de caractères est un palindrome aux blancs près si après compression des caractères uniquement, la chaîne est égale à son renversé, ce qui se traduit aussi par sa lecture de la gauche vers la droite est identique à la lecture de la droite vers la gauche. Exemple : engage le jeu que je le gagne ==> Vrai Écrivez une fonction palindrome(txt) qui teste et renvoie Vrai si une chaîne de caractères txt est un palindrome aux blancs près, Faux sinon. La fonction ne doit pas modifier txt, ni créer de chaîne de caractères temporaire. Aide méthodologique Utilisez un indice j parcourant la chaîne de la gauche vers la droite et un indice k parcourant la chaîne de la droite vers la gauche. Initialement la chaîne est un palindrome. Tant que la chaîne est un palindrome et que j est inférieur ou égal à k, effectuez les trois actions suivantes : Avancez l indice j vers la droite tant que le caractère en j est un blanc. Avancez l indice k vers la gauche tant que le caractère en k est un blanc. Comparez les caractères en j et k qui doivent être identiques pour que ce soit un palindrome. Notez que les trois actions ne sont valides que si j est inférieur ou égal à k. 1.14 Fonction nreplicatats (replicatat d un caractère) Écrivez une fonction nreplicatats(n,c) qui calcule et renvoie une chaîne de n (nombre de replicatats) caractères c (caractère à reproduire). Exemples : nreplicatats(3, * ) ==> "***" nreplicatats(5, a ) ==> "aaaaa"
Unisciel algoprog Utilitaires Chaînétique / sr01outils1 (alg, TD) 7 1.15 Fonction positioncarac (position d un caractère) Écrivez une fonction positioncarac(txt,c,n) qui recherche et renvoie l indice le plus à droite d un caractère c dans les n caractères d une chaine de caractères txt. Dans le cas d une recherche infructueuse, la fonction renvoie -1. 1.16 Procédure permuter2c (permutation de caractères) Écrivez une procédure permuter2c(c1,c2) qui permute les contenus des caractères c1 et c2. Pour permuter deux variables, il faut passer par une variable tem- Rappel de cours poraire. 1.17 Procédure permuter2s (permutation dans une chaîne) Écrivez une procédure permuter2s(txt,j,k) qui permute le contenu des caractères en position j (entier) et k (entier) d une chaîne de caractères txt. 1.18 Procédure renversertexte (renverse une chaîne) Ce problème utilise la procédure permuter2s. Écrivez une procédure renversertexte(txt) qui renverse une chaîne de caractères txt, c.-à-d. qui permute son premier avec son dernier caractère, son deuxième avec son avant dernier caractère, etc.
Unisciel algoprog Utilitaires Chaînétique / sr01outils1 (alg, TD) 8 1.19 Procédure saisirtexte (saisie d un texte) Écrivez une procédure saisirtexte(txt) qui demande et saisit un texte dans txt (chaine de caractères) et remplace les caractères soulignés _ par des espaces. 1.20 t : miroirtexte (miroir d une chaine) 1.21 u,v,w 1.22 Opérations de base (sur une chaine) Ce problème définit les primitives d accès et de modification d un caractère dans une chaîne indépendamment d un langage de programmation. Écrivez une fonction evalcarac(txt,p) qui renvoie le p-ème caractère d un texte txt (chaine de caractères). Écrivez une procédure fixercarac(txt,p,c) qui fixe le p-ème caractère d un texte txt (chaine de caractères) au caractère c. 1.23 Fonction cvchaine (entier en chaine) Écrivez une fonction cvchaine(n) qui convertit un entier n en une chaine de caractères qui est sa représentation en base 10 et renvoie cette chaîne. 1.24 Fonction cvnombre (chaîne en entier) Écrivez une fonction cvnombre(s) qui convertit une chaîne numérique s (supposée valide) représentant un entier en base 10 et renvoie cet entier.