Retrouvez l'univers nintendo sous toutes ses faces !! |
| | TP2 - Caractères, chaînes, mots et lettres | |
| | Auteur | Message |
---|
Sorell Stratège
Nombre de messages : 521 Localisation : Quel part où le sang coule. Date d'inscription : 01/05/2008
Feuille de personnage Surnom dans la team: Sénéchal Noir Victoire/défaite: (0/0)
| Sujet: TP2 - Caractères, chaînes, mots et lettres Lun 26 Nov - 18:33 | |
| Remarques préliminaires Certains corrigés sont présentés sous deux versions : - version "algorithmique", très proche de l'algorithme correspondant,
- version "concise", beaucoup plus "professionnelle", mais plus difficile à lire par des programmeurs inexpérimentés ...
Dans une première lecture, la seconde version peut être ignorée. Il est cependant conseillé de la travailler pour être capable de la comprendre, puis pour en adopter petit à petit le "style". La seconde version d'un corrigé se distingue de la première par l'identificateur du fichier, terminé par le postfixe N, comme par exemple CharEtCodeASCII.cxx et CharEtCodeASCIIN.cxx. | |
| | | Sorell Stratège
Nombre de messages : 521 Localisation : Quel part où le sang coule. Date d'inscription : 01/05/2008
Feuille de personnage Surnom dans la team: Sénéchal Noir Victoire/défaite: (0/0)
| Sujet: Re: TP2 - Caractères, chaînes, mots et lettres Lun 26 Nov - 18:47 | |
| 1) - Lecture de strings Objectifs Les objectifs de cet exercice sont : - de placer un '"' dans une chaîne,
- d'initialiser un string avec un littéral au moyen du constructeur,
- de comparer deux strings.
Sujet Créer le répertoire tp/tpC++/tp_02, qui sera le répertoire courant. Dans l'espace de noms anonyme du fichier LectureStrings.cxx (ou du fichier tp_02.cxx), écrire la fonction LectureStrings() qui lit des chaînes de caractères (strings) au clavier jusqu'à la chaîne "fin". Le programme doit
- afficher à l'écran, seul sur une ligne, le titre de l'exercice suivant
- Code:
-
Lecture de chaînes jusqu'à "fin"
- séparée par une ligne vierge de la ligne précédente, afficher "l'invite" (le message) suivante :
- Code:
-
Tapez une chaine ("fin" pour terminer le programme) :
- passer à la ligne suivante et lire la chaîne au clavier (elle va s'afficher seule sur cette nouvelle ligne au fur et à mesure de la saisie),
- si ce n'est pas la chaîne "fin", l'afficher sur la ligne suivante en la faisant précéder du "libellé" suivant
- Code:
-
Chaine lue : et recommencer en 2,
- terminer le programme si c'est la chaîne "fin".
Le résultat de l'exécution pourrait être par exemple : - Code:
-
Lecture de chaînes jusqu'à "fin"
Tapez une chaine ("fin" pour terminer le programme) : Bonjour Chaine lue : Bonjour
Tapez une chaine ("fin" pour terminer le programme) : Adieu Chaine lue : Adieu
Tapez une chaine ("fin" pour terminer le programme) : fin Algorithme L'algorithme peut être écrit : - Code:
-
algorithme Saisir_Chaine_jusqua_FIN debut afficher (Le_titre_de_l_exercice);
boucle declarer ChaineLue : string; afficher (l_invite); saisir (ChaineLue);
si (ChaineLue vaut "fin") sortie;
afficher (le_libellé); afficher (ChaineLue); ligne_suivante; fboucle
fin
Exécution Essayer le programme en tapant des lignes contenant des espaces, par exemple Au revoir. Essayer aussi des lignes vides (un "New Line" <NL> simple) ou formées d'espaces, de tabulations. Le comportement peut-être un peu surprenant sera expliqué ultérieurement. Corrigé | |
| | | Sorell Stratège
Nombre de messages : 521 Localisation : Quel part où le sang coule. Date d'inscription : 01/05/2008
Feuille de personnage Surnom dans la team: Sénéchal Noir Victoire/défaite: (0/0)
| Sujet: Re: TP2 - Caractères, chaînes, mots et lettres Lun 26 Nov - 19:19 | |
| 2) - Taille des chaînes et sgnirts Objectifs Les objectifs de cet exercice sont : - parcourir un tableau (ou un string),
- injecter un caractère dans cout,
- appeler des méthodes d'une classe notation pointée,
- utiliser les méthodes length() et size(),
- rappeler l'utilisation de setw().
- utiliser la fonction standard swap()
Sujet Dans l'espace de noms anonyme du fichier LongueurStrings.cxx (ou du fichier tp_02.cxx), écrire la fonction LongueurStrings() qui lit des chaînes de caractères (strings) au clavier jusqu'à la chaîne "fin". Le programme doit - afficher à l'écran, seul sur une ligne, le titre de l'exercice suivant :
- Code:
-
Longueur d'une chaîne "tableau de caractères"
- afficher "l'invite" (le message) suivante (séparée par une ligne vierge de la ligne précédente) ;
- Code:
-
Tapez une chaine ("fin" pour terminer le programme) :
- lire la chaîne au clavier (elle va s'afficher à la suite sur la même ligne),
- si ce n'est pas la chaîne "fin", afficher sur la ligne suivante :
- le libellé :
- Code:
-
Chaine inversée :
- le nombre de caractères de la chaîne lue, sur une largeur de 4 caractères, suivi d'un '-' entre deux espaces,
- la chaîne à l'envers.
et recommencer en 2,
Utiliser alternativement les méthodes length() et size() de la classe string (elles sont équivalentes). Pour le point 4.3., essayer les trois méthodes proposées en algorithmique :
- affichage à l'envers "à la volée" (parcours à l'envers de la chaîne lue et affichage des caractères rencontrés),
- création et affichage d'une nouvelle chaîne inversée en concaténant les caractères de la chaîne initiale parcourue à l'envers,
- inversion de la chaîne lue par permutations successives, puis affichage. La fonction standard swap() doit être utilisée. Elle est décrite (= déclarée) dans le fichier algorithm (à inclure).
Algorithme L'algorithme ci-dessous met en oeuvre la troisième solution (inversion de la chaîne sur elle-même puis affichage). Lui ajouter l'affichage de la longueur de la chaîne. Enoncé de l'exercice d'algorithmique du Td 04 - Tableaux (III) : "Lire et inverser des chaînes de caractères" - Code:
-
procedure PermuterCaract (E1 : in_out caractere, E2 : in_out caractere) debut declarer KE1 : constante caractere <- E1;
E1 <- E2; E2 <- KE1;
fin
algorithme AfficherChaineInversee debut
boucle declarer ChaineLue : string; afficher ("Tapez une ligne (vide pour terminer) : "); saisir (ChaineLue); si (taille (ChaineLue) vaut 0) sortie;
afficher ("Ligne lue : ", ChaineLue); ligne_suivante; declarer j : entier_naturel; j <- taille (ChaineLue) - 1; pour (i variant_de 0 a taille (ChaineLue) / 2 - 1) faire PermuterCaract (ChaineLuej, ChaineLuei); j <- j - 1; ffaire
afficher ("Inversée : ", ChaineLue); ligne_suivante;
fboucle
fin Remarques concernant les deux autres solutions d'affichage ("à la volée" et par construction d'une nouvelle chaîne inversée) qui nécessitent toutes deux la totalité de la chaîne. Rappelons que la traduction de ce schéma algorithmique en C++ par l'instruction for ( ; ; ) n'est qu'approximative : - la déclaration du type de l'indice doit être explicite. Ici, i doit appartenir à l'intervalle semi_ouvert [0, taille (Chaine)[ (ou à l'intervalle fermé [0, taille (Chaine) - 1]). Le type qui s'impose donc pour i est le type entier_naturel.
- la condition de continuation de boucle doit figurer explicitement dans l'instruction for ( ; ; ) : elle correspond à
- Code:
-
tant_que (i >= 0) - puisque la valeur nulle de i doit aussi être traîtée. Mais tester si i est positif ou nul suppose qu'il peut devenir négatif, ce qui est impossible puisque son type est entier_naturel !
- Une solution de facilité est de changer son type en entier tout court, mais c'est absurde !
Une autre solution possible a été vue : - Code:
-
... pour (i variant_de taille (Chaine) a 1 descendant) faire afficher (Chainei-1); ffaire ... Ce décalage entre l'indice de boucle et l'indice du tableau ne me paraît pas souhaitable. Je préfère la solution suivante : - Code:
-
... declarer i : entier_naturel; i <- taille (Chaine);
// i est le nombre de caractères qu'il reste à afficher
tant_que (i > 0) faire i <- i - 1; afficher (Chainei);
// i est le nombre de caractères qu'il reste à afficher
ffaire; ... On notera que cet algorithme est juste même si la chaîne est vide. Exécution Le résultat de l'exécution pourrait être par exemple - Code:
-
Longueur d'une chaîne "tableau de caractères"
Tapez une chaine ("fin" pour terminer le programme) Bonjour Chaine inversée : 7 - ruojnoB
Tapez une chaine ("fin" pour terminer le programme) Adieu Chaine inversée : 5 - ueidA
Tapez une chaine ("fin" pour terminer le programme) anticonstitutionnel Chaine inversée : 19 - lennoitutitsnocitna
Tapez une chaine ("fin" pour terminer le programme) fin Corrigé | |
| | | Sorell Stratège
Nombre de messages : 521 Localisation : Quel part où le sang coule. Date d'inscription : 01/05/2008
Feuille de personnage Surnom dans la team: Sénéchal Noir Victoire/défaite: (0/0)
| Sujet: Re: TP2 - Caractères, chaînes, mots et lettres Lun 17 Déc - 11:33 | |
| 3) - Caractères et entiers Objectifs Les objectifs de cet exercice sont : d'utiliser le type char, de montrer que char est un entier (opérations entières possibles), de montrer qu'une opération sur un char donne un entier (sauf si on passe par un caractère intermédiaire), de mettre en oeuvre la structure répétitive repeter ... tant_que. Sujet Dans l'espace de noms anonyme du fichier CharEtCodeASCII.cxx (ou du fichier tp_02.cxx), écrire la fonction CharEtCodeASCII(). Dans une première boucle, remplir un tableau de toutes les minuscules. Afficher le contenu du tableau. Dans une seconde boucle, construire une chaîne contenant tous les chiffres dans l'ordre inverse de l'ordre lexicographique ('9', '8', ..., '0'). Afficher la chaine. Dans une troisième boucle (utiliser le schéma repeter ...tant_que ...), afficher les couples majuscule/minuscule séparés par un espace. Pour cela, utiliser comme variable de boucle un entier NbCouples représentant le nombre de couples déjà affichés et "calculer" chaque lettre par décalage du 'A' et du 'a'. Terminer la boucle lorsque 26 couples de lettres ont été écrits. Dans une quatrième boucle analogue à la précédente, afficher les valeurs ASCII des couples majuscule/minuscule séparés par un espace, la valeur de la minuscule étant séparée de celle de la majuscule par un '/'. Pour cela, utiliser comme variable de boucle un entier NbCouples représentant le nombre de couples déjà affichés et injecter directement dans le flux le résultat du décalage du 'A' et du 'a'. Algorithme On pourra s'inspirer de l'exercice d'algorithmique suivant : énoncé de l'exercice d'algorithmique du Td 04 - Tableaux (III) : "Générer des sous-ensembles de caractères" - Code:
-
... // minuscules
declarer TabMinusc : tableau_de caractere; // supposé de taille nulle declarer Car : caractere; Car <- 'a'; declarer NbCar : entier_naturel; NbCar <- 0; boucle allonger (TabMinusc, 1); TabMinuscNbCar <- Car; NbCar <- NbCar + 1; si (Car vaut 'z') sortie; Car <- succ (Car); fboucle
// chiffres inversés
Car <- '9'; declarer TabChiffre : string; // supposée de taille nulle boucle TabChiffre <- TabChiffre + Car; // concaténation si (Car vaut '0') sortie; Car <- pred (Car); fboucle ... Attention : un tableau ne pouvant pas être redimensionné en C++, il faut lui donner sa taille définitive dès la déclaration. Exécution Le résultat de l'exécution doit être celui-ci - Code:
-
Caractères <--> Entiers
Les minuscules :
abcdefghijklmnopqrstuvwxyz
Les chiffres à l'envers :
9876543210
Les couples majuscules/minuscules :
Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz
Valeurs ASCII des couples majuscules/minuscules :
65/97 66/98 67/99 68/100 69/101 70/102 71/103 72/104 73/105 74/106 7 .........
Corrigés | |
| | | Sorell Stratège
Nombre de messages : 521 Localisation : Quel part où le sang coule. Date d'inscription : 01/05/2008
Feuille de personnage Surnom dans la team: Sénéchal Noir Victoire/défaite: (0/0)
| Sujet: Re: TP2 - Caractères, chaînes, mots et lettres Lun 17 Déc - 11:49 | |
| 4) - Lecture de lignes - majusc. <--> minusc. Objectifs Les objectifs de cet exercice sont : utiliser les fonctions getline() et empty(). écrire des conditions doubles, avec les opérateurs &&, opérateurs <= et >= écrire des prédicats, écrire des fonctions qui ont une chaîne de caractères comme paramètre donnée-résultat et comme valeur de retour, illustrer la notion de surcharge de sous-programmes, puis d'utiliser les fonctions standard de traitement des caractères. Sujet Version 1 Dans l'espace de noms anonyme du fichier MajuscMinuscV1.cxx (ou du fichier tp_02.cxx), écrire les prédicats IsUpper() et IsLower() qui renvoient true si le caractère qui leur est passé en paramètre est respectivement une majuscule ou une minuscule. Ajouter les fonctions ToUpper() et ToLower() qui transforment le caractère qui leur est passé en paramètre respectivement en majuscule ou en minuscule (seulement si nécessaire). Ajouter les fonctions ToUpper() et ToLower() qui transforment la chaîne qui leur est passée en paramètre (donnée/résultat) respectivement en majuscule ou en minuscule (seulement si nécessaire), et qui renvoient aussi cette chaîne. On remarquera qu'ils s'agit de surcharges des deux fonctions précédentes, dont l'utilisation est sans ambiguïté puisqu'elles n'ont pas le même profil. Ajouter la fonction MajuscMinusc() qui affiche à l'écran, seul sur une ligne, le titre de l'exercice suivant : - Code:
-
Majuscules <--> Minuscules puis lit des lignes (strings) au clavier jusqu'à une ligne vide, précédées de l'affichage de "l'invite" (le message) suivante : - Code:
-
Tapez une ligne (ligne vide pour terminer le programme) : Pour chaque ligne lue (non vide), le programme doit - afficher le libellé :
- Code:
-
Ligne lue : suivi de la ligne lue,
- sur la ligne suivante, afficher le libellé :
- Code:
-
Ligne en majuscules : ainsi que la ligne lue transformée en majuscules,
- réafficher la ligne lue (pour vérifier qu'elle a bien été transformée),
- sur la ligne suivante, afficher le libellé :
- Code:
-
Ligne en minuscules : ainsi que la ligne lue transformée en minuscules, Version 2Dans l'espace de noms anonyme du fichier MajuscMinuscV2.cxx (ou du fichier tp_02.cxx), modifier la fonction MajuscMinusc() en utilisant exclusivement les fonctions standard du C/C++ applicables aux caractères toupper() et tolower(), incluses dans le fichier cctype). Algorithme S'inspirer de l' énoncé de l'exercice d'algorithmique du Td 04 - Tableaux (III) : "Mise de chaînes de caractères en minuscules ou en majuscules" - Code:
-
fonction IsLower (C : in caractere) renvoie booleen
debut
renvoie 'a' <= C ET_ALORS C <= 'z';
fin - Code:
-
fonction IsUpper (C : in caractere) renvoie booleen
debut
renvoie 'A' <= C ET_ALORS C <= 'Z';
fin - Code:
-
algorithme Lignes_lues_en_majuscules_minuscules debut
boucle declarer LigneLue : string; saisir (LigneLue); si (taille (LigneLue) vaut 0) sortie;
afficher ("Nouvelle ligne"); ligne_suivante; afficher (LigneLue); ligne_suivante;
// Mise en majuscules
pour (i variant_de 0 a taille (LigneLue) - 1) faire si (IsLower (LigneLuei)) LigneLuei <- toupper (LigneLuei); fsi ffaire
afficher (LigneLue); ligne_suivante;
// Mise en minuscules
pour (i variant_de 0 a taille (LigneLue) - 1) faire si (IsUpper (LigneLuei)) LigneLuei <- tolower (LigneLuei); fsi ffaire
afficher (LigneLue); ligne_suivante; fboucle
fin ExécutionL'exécution du programme pourrait ressembler à ceci : - Code:
-
Majuscules <--> Minuscules
Tapez une ligne (ligne vide pour terminer le programme) : qsfdqzsdfqsdSQDFSQDFSQDF21312312312 LigneLue lue : qsfdqzsdfqsdSQDFSQDFSQDF21312312312 LigneLue en majuscules : QSFDQZSDFQSDSQDFSQDFSQDF21312312312 LigneLue lue : QSFDQZSDFQSDSQDFSQDFSQDF21312312312 LigneLue en minuscules : qsfdqzsdfqsdsqdfsqdfsqdf21312312312
Tapez une ligne (ligne vide pour terminer le programme) : Corrigés | |
| | | Contenu sponsorisé
| Sujet: Re: TP2 - Caractères, chaînes, mots et lettres | |
| |
| | | | TP2 - Caractères, chaînes, mots et lettres | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|