Université de Nice Sophia-Antipolis
DU IG - Introduction à la programmation objet

Contrôle du 27 octobre 2010 - Durée : 1h.

Seuls documents autorisés : photocopies des transparents distribués en cours. Les énoncés et corrections des TP sont interdits. Éteignez les téléphones portables.

Important : la présentation et la lisibilité du code compteront dans la note finale. Vous êtes autorisé à écrire le code (et seulement le code) avec un crayon à papier si c'est parfaitement lisible (pas de crayon trop clair).

Ajoutez des commentaires quand vous pensez que ça peut être utile au correcteur. Ne mettez pas de commentaires évidents qui n'ajoutent rien à votre code.

Respectez le découpage en questions et l'ordre des questions. Les numéros des questions devront apparaître clairement sur votre feuille.

Exercice 1 (12 points)

Écrivez une classe Multiple dont la méthode main peut afficher le plus petit multiple de 19 supérieur à 3859, ou le plus petit multiple de 57 supérieur à 23456. Vous comprenez que cette classe pourra afficher le bon résultat, quels que soient les 2 nombres mis dans cette phrase en caractères gras. Il est interdit d'utiliser la division.

Les deux nombres seront entrés au clavier par l'utilisateur au début de l'exécution du programme ; pour cela vous utiliserez la classe Console donnée en TP.

Attention à bien prendre en compte le type de cas suivant : afficher le plus petit multiple de 4567 supérieur à 3859.

Pour fixer les idées : le plus petit multiple de 3 supérieur à 28 est 30 car 3 x 10 = 30 et 3 x 9 = 27.

Et voici ce qui devra être affiché par le programme (28 et 3 sont tapés par l'utilisateur) :

Borne inférieure : 28
Nombre à multiplier : 3
Le plus petit multiple de 3 supérieur à 28 est 30

Correction

/**
 * Affiche plus petit multiple supérieur à un nombre.
 */
public class Multiple {

  public static void main(String[] args) {
    System.out.print("Borne inférieure : ");
    int borneInf = Console.readInt();
    System.out.print("Nombre à multiplier : ");
    int nb = Console.readInt();
    int multiple = nb;
    while (multiple <= borneInf) {
      multiple += nb; // ou multiple = multiple + nb;
    }
    System.out.println("Le plus petit multiple de " + nb 
        + " supérieur à " + borneInf + " est " + multiple);
  }
}

Exercice 2 (8 points)

Voici du code à compléter :

public class Lettres {

  /**
   * Affiche le nombre de voyelles et de consonnes d'une phrase
   */
  public static void main(String[] args) {
    String phrase = "bonjour les amis";
    // Code 1 à écrire
    
    for (int i = 0; i < phrase.length(); i++) {
      char caractere = phrase.charAt(i);
      // Code 2 à écrire
      
      
      
      
    }
    System.out.println("Nombre de voyelles : " + nbVoyelles);
    System.out.println("Nombre de consonnes : " + nbConsonnes);    
  }

}

Évidemment, votre programme devra fonctionner pour n'importe quelle chaîne de caractères mise dans la variable phrase. Pour simplifier vous supposerez que la phrase ne contient que des lettres minuscules non accentuées ou des espaces. Vous noterez ' ' un espace en Java (un espace entouré d'apostrophes).

Le code phrase.length() renvoie le nombre de caractères contenus dans la chaîne de caractères phrase. Le code phrase.charAt(i) renvoie le ième caractère de la chaîne de caractères phrase (i = 0 correspond au premier caractère de phrase).

Dans cet exercice, pensez à la portée des variables.

  1. Donnez le code 1.
  2. Donnez le code 2.

Correction

/**
 * Affiche le nombre de voyelles et de consonnes d'une phrase.
 * Pour simplifier on suppose que la phrase ne contient
 * que des lettres minuscules non accentuées et des espaces.
 */
public class Lettres {

  public static void main(String[] args) {
    String phrase = "bonjour les amis";
    int nbVoyelles = 0, nbConsonnes = 0;
    for (int i = 0; i < phrase.length(); i++) {
      char caractere = phrase.charAt(i);
      switch (caractere) {
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
      case 'y' :
        nbVoyelles++;
        break;
      case ' ':
        break;
      default:
        nbConsonnes++;
      }
    }
    System.out.println("Nombre de voyelles : " + nbVoyelles);
    System.out.println("Nombre de consonnes : " + nbConsonnes);
  }
}