Mission 3: QCM


Question 1: Appel de méthodes de la classe Math

La classe Math, décrite dans la section 2.3.1 : Built-in Subroutines and Functions du livre contient différentes méthodes de calcul. Celles-ci sont définies plus en détails dans http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html. Parmi les fragments de programme ci-dessous, quels sont ceux qui sont corrects :

Question 2: Les nombres amicaux

Deux nombres entiers positifs sont dits amicaux si la somme des diviseurs entiers de l'un est égal à la somme des diviseurs entiers de l'autre. Pour vérifier si deux nombres sont amicaux, le plus simple est d'utiliser une méthode qui calcule la somme des diviseurs entiers d'un nombre et d'ensuite comparer les deux sommes. Supposons que cette méthode existe et est définie comme suit :

/*
 * @pre : n>0
 * @post : retourne la somme des diviseurs entiers de n
 */
public static int sdiv(int n) {
  // code non fourni
}

Laquelle des méthodes ci-dessous retourne-t-elle true lorsque les deux nombres passés en argument sont amicaux et false sinon ?

Question 3: Utilisation de méthodes

Un étudiant écrit dans un programme Java le code suivant :

double d=123.45;
int i=12;
if( f(d,i) ) { ... }

Quelle doit être la déclaration de la méthode f pour que ce fragment de programme soit valide ?

Question 4: Méthodes permettant d'afficher

Un étudiant souhaite une méthode affiche permettant d'afficher n fois le caractère X à l'écran. La spécification de cette méthode est

/*
 * @pre n>0
 * @post affiche n fois le caractère 'X' sur une ligne
 */

Il souhaite pouvoir utiliser cette méthode de la façon suivante :

int n=17;
affiche(n);

Lors de son exécution, cette méthode affiche à l'écran

XXXXXXXXXXXXXXXXX

Parmi les méthodes définies ci-dessous, laquelle est une implémentation (signature et corps) correct de cette méthode affiche ?

Question 5: Méthodes void

En Java, les méthodes de type void sont souvent utilisées lorsqu'il faut exécuter une suite d'instructions qui ne doit pas retourner de valeur. On souhaite écrire une méthode afficheSomme qui affiche à l'écran la somme entre deux nombres entiers. Par exemple, en exécutant afficheSomme(3,4), la valeur 7 est affichée à l'écran. La spécification de cette méthode est

/*
 * @pre -
 * @post Affiche à l'écran la somme des deux entiers passés en arguments
 */
Question 6: Déclarations de méthodes

En Java, la déclaration d'une méthode nous renseigne sur le type de valeur qui est retourné par cette méthode. Considérons les définitions de méthodes ci-dessous.

public static void v(int i)  {
  // code non fourni
}
public static void w()  {
  // code non fourni
}
public static int f(int i)  {
  // code non fourni
}
public static int g(boolean b)  {
  // code non fourni
}
public static int h()  {
  // code non fourni
}

Une seule des séquences d'instructions ci-dessous est valide. Pourriez-vous indiquer laquelle ?

Question 7: Méthodes retournant un nombre

La classe Math de java contient la méthode Math.min. Celle-ci prend deux arguments de type double et retourne le plus petit des deux nombres passés en argument. Laquelle de ces méthodes reprises ci-dessous est-elle une implémentation correcte de cette méthode min dont la spécification est

/*
 * @pre -
 * @post retourne le minimum entre les deux arguments
 */
Question 8: Méthodes retournant un booléen

Lorsque l'on doit manipuler des conditions complexes dans une instruction conditionnelle ou une boucle, il peut être intéressant d'écrire des méthodes qui retournent un booléen. Sachant que l'expression a%b retourne le reste de la division euclidienne de la valeur de la variable entière a par b, laquelle des méthodes ci-dessous est-elle une implémentation de la spécification suivante

/*
 * @pre n>0
 * @post retourne true lorsque le nombre passé en argument est pair et false dans le cas contraire
 */
Question 9: Calcul du maximum

La classe Math contient de nombreuses méthodes. Vous trouverez notamment la méthode Math.max(double a, double b) qui calcule le maximum entre les deux nombres passés en argument. Laquelle des méthodes ci-dessous est-elle une implémentation de la spécification suivante

/*
 * @pre -
 * @post retourne le maxium entre les deux réels passés en arguments
 */
Question 10: Calcul de la valeur absolue

Dans le programme Java suivant, un étudiant souhaite utiliser une méthode abs permettant de calculer la valeur absolue d'un nombre.

int i=1401;
double d=-112.4;
double j=d+abs(2*d);

Information

Author(s) Olivier BONAVENTURE
Deadline No deadline
Submission limit No limitation

Sign in