Corrigé 5
Prérequis
1. Langage Java
|
1. |
Une variable chaîne de caractères est une variable ayant la classe String comme type. La déclaration est la suivante : String uneChaine; |
|
2. |
Une constante chaîne de caractères s’écrit entre guillemets. Pour y insérer un guillemet, il faut le faire précéder d’un antislash (\). Pour y insérer un antislash, il faut aussi faire précéder ce dernier d’un autre antislash (\ \). |
|
3. |
Il suffit d’affecter la constante chaîne de caractères à la variable. Par exemple : uneChaine = "abcde"; |
|
4. |
C’est la méthode charAt de la classe String. |
|
5. |
La méthode indexof(String str) renvoie la position de la première occurrence de la chaîne str dans la chaîne recevant l’appel de la méthode, ou -1 si cette chaîne str n’est pas trouvée. |
|
6. |
Il s’agit de l’opérateur +. Par exemple : uneChaine = uneChaine + "abcde"; ou encore uneChaine += "abcde"; |
|
7. |
Il faut également utiliser l’opérateur +. Ce dernier permet effectivement de concaténer un caractère à une chaîne ou une chaîne à un caractère. Par exemple : uneChaine = ’a’ + "abcde" + ’b’; |
|
8. |
c. Le but de la méthode toString est de transformer le contenu d’un objet en une chaîne de caractères. Cette méthode est utilisée pour afficher les objets. |
2. Langage Python
|
9. |
Une variable chaîne de caractères peut être déclarée en utilisant le type str et initialisée avec des guillemets simples (’), doubles (") ou triples (’’’ ou """). Il n’y... |
Corrigé 5.1 : Comptage des voyelles et des consonnes dans un mot
Le programme Java qui affiche le nombre de voyelles non accentuées et de consonnes d’un mot est présenté ci-dessous. La fonction compteVoyelles teste si chaque caractère du mot est une voyelle. Le test se fait en appelant la méthode indexof sur la chaîne voyelles (qui contient toutes les voyelles non accentuées). La méthode indexof renvoie l’indice d’un caractère dans une chaîne ou -1 si le caractère ne figure pas dans la chaîne. Si le retour de cette méthode est différent de -1, le caractère figure dans la chaîne, c’est donc une voyelle.
La fonction compteConsonnes teste si le caractère est une lettre (majuscule ou minuscule) et si ce n’est pas une voyelle (test du résultat de la méthode indexof à -1).
import java.util.Scanner;
public class ComptageVoyellesConsonnes {
static String voyelles = "aeiouyAEIOUY";
public static int compteVoyelles(String mot) {
int resultat = 0;
for (int i = 0; i < mot.length(); i++)
if (voyelles.indexOf(mot.charAt(i)) != -1)
resultat++;
...Corrigé 5.2 : Le palindrome
Le programme Java suivant lit un texte au clavier et appelle la fonction palindrome qui prend une chaîne en paramètre et renvoie le résultat du test sous la forme d’un booléen.
Cette fonction commence par recréer le texte sans espace puis teste si chaque caractère de la première moitié en partant du début de la chaîne correspond à un caractère de la seconde moitié en partant de la fin de la chaîne.
import java.util.Scanner;
public class LePalindrome {
public static boolean palindrome(String texte) {
String texteSansEspace;
texteSansEspace = "";
for (int i = 0; i < texte.length(); i++) {
char c = texte.charAt(i);
if (c != ' ')
texteSansEspace = texteSansEspace + c;
}
int i = 0;
int len = texteSansEspace.length();
while ((i < len / 2) &&
(texteSansEspace.charAt(i) ==
...Corrigé 5.3 : Conversion d’un entier en chaîne
La classe Entier introduit l’attribut valeur, le constructeur et trois méthodes. La méthode versChaine convertit l’attribut valeur en une chaîne. Cette conversion se fait en divisant la valeur absolue par dix jusqu’à ce qu’elle soit nulle. Chaque reste de la division est le nouveau chiffre à ajouter à gauche du résultat en cours de construction. La conversion d’un chiffre en caractère se fait à l’aide d’un transtypage comme indiqué dans l’énoncé. Un test sur le nombre de chiffres déjà ajoutés permet d’ajouter le cas échéant un espace entre les milliers.
À la fin de la fonction, un test sur la valeur permet d’ajouter le signe négatif si nécessaire. Le cas particulier de la valeur nulle est également pris en compte.
public class Entier {
int valeur;
public Entier(int valeur) {
this.valeur = valeur;
}
public int getValeur() {
return valeur;
}
public void setValeur(int valeur) {
this.valeur = valeur;
} ...Corrigé 5.4 : Conversion d’une chaîne en entier
Pour la conversion d’une chaîne en entier, le principe est de ne prendre en compte que les caractères qui ne sont pas des espaces et de les balayer de gauche à droite. Le premier caractère peut être un signe moins. Ensuite, tous les autres caractères doivent être des chiffres. À défaut, une erreur est signalée. La conversion d’un caractère contenant un chiffre en un entier est réalisée comme indiqué dans l’énoncé.
Le code Java réalisant ce principe de conversion au sein de la classe Entier est le suivant (méthode depuisChaine).
public class Entier {
int valeur;
...
public void depuisChaine(String s) {
int valeurTemp, signe;
valeurTemp = 0;
signe = 1;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c != ' ') {
if ((i == 0) && (c == '-'))
signe = -1; ...Corrigé 5.5 : Chiffrement d’un texte par rotation 13
Le code suivant contient la définition de la classe TexteChiffre qui met en œuvre le chiffrement par rotation 13 en Java. Cette classe introduit l’attribut texte, les méthodes pour lire et écrire cet attribut puis la méthode de chiffrement. Celui-ci s’effectue en convertissant les caractères qui sont des lettres (minuscules ou majuscules) en leur rang alphabétique. Ensuite ce rang est décalé de 13 sans dépasser 26. Puis une conversion du rang vers le caractère correspondant est réalisée.
public class TexteChiffre {
String texte;
public TexteChiffre(String texte) {
this.texte = texte;
}
public String getTexte() {
return texte;
}
public void setTexte(String texte) {
this.texte = texte;
}
public void chiffre() {
String nouveauTexte = "";
for (int i = 0; i < texte.length(); i++) {
char c = texte.charAt(i);
...Corrigé 5.6 : Représentation lisible d’un objet
En Java, la représentation lisible d’un objet est déterminée par la méthode toString() introduite dans la classe Object. Cette méthode peut être redéfinie dans une sous-classe pour adapter la représentation lisible aux spécificités de la classe. La classe Complexe de l’exercice 4.3 est modifiée pour y ajouter la méthode toString dont le code source se trouve ci-dessous :
public class Complexe {
...
public String toString() {
return "Partie réelle : " + reel + " ; partie imaginaire :
" + imaginaire;
}
}
Le programme principal de l’exercice 4.3 est fourni ci-après. Les nombres complexes sont dorénavant directement affichés dans les méthodes d’affichage print et println. Ces méthodes effectuent l’affichage des nombres complexes en invoquant la méthode toString de ces derniers.
import java.util.Scanner;
public class TestComplexe {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
double reel, imaginaire;
...Corrigé 5.7 : Recherche de numéro de téléphone
La solution pour l’exercice de recherche de numéro de téléphone peut être décomposée en plusieurs fonctions :
-
une fonction qui vérifie la présence de deux chiffres à une position du texte ;
-
une fonction qui vérifie la présence de deux chiffres et un point à une position du texte en s’appuyant sur la fonction précédente ;
-
une fonction qui vérifie la présence d’un numéro de téléphone à une position du texte en s’appuyant sur les deux fonctions précédentes.
Le code Java de la solution est donné ci-après. Dans ce code, les fonctions deuxChiffres, deuxChiffresUnPoint et numeroTel correspondent respectivement aux fonctions décrites précédemment. Ces trois fonctions effectuent leur test dans la chaîne texte à la position transmise en paramètre. Chacune d’elle vérifie tout d’abord qu’il y a assez de caractères à partir de la position de test pour effectuer les tests.
La fonction rechercheNumTel effectue une boucle afin de trouver le premier numéro de téléphone dans la chaîne. Si un tel numéro est retrouvé, il est renvoyé comme résultat de la fonction. Il convient de remarquer que cette fonction arrête la recherche lorsque le nombre de caractères à tester devient insuffisant pour trouver un numéro de téléphone.
Enfin le programme principal met en œuvre les interactions avec l’utilisateur pour invoquer la fonction rechercheNumTel.
import java.util.Scanner;
public class RechercheNumeroTelephone {
public static boolean deuxChiffres(String...Corrigé 5.8 : Distance de Levenshtein
Dans le code Java qui suit, la distance de Levenshtein est calculée dans la fonction distanceLevenshtein. Après initialisation de la première ligne et de la première colonne, le calcul de chaque élément de la matrice est réalisé au sein de deux boucles imbriquées. Le minimum de trois nombres est obtenu en appelant deux fois Math.min().
import java.util.Scanner;
public class Levenshtein {
public static int distanceLevenshtein(String s1, String s2) {
int[][] M = new int[s1.length() + 1][s2.length() + 1];
for (int i = 0; i <= s1.length(); i++)
M[i][0] = i;
for (int j = 0; j <= s2.length(); j++)
M[0][j] = j;
for (int i = 1; i <= s1.length(); i++)
for (int j = 1; j <= s2.length(); j++) {
int diff;
if (s1.charAt(i - 1) == s2.charAt(j - 1))
diff = 0;
else
...