ESIEE - Unité IN3S02

publicité
ESIEE - Unité IN3S02
Unité IN3S02
Exemple de sujet de contrôle final (partie Java)
Enoncé
Conditions d'examen : 2h30, sur feuille blanche, sans document, notation sur 20 points
Consignes générales
Les solutions sont attendues en Java. Elles seront évaluées sur les plans sémantique, syntaxique
et de la qualité de programmation. Tout élément de programme (classe, méthode, variable, ...)
mis en oeuvre doit être défini par ou en Java. L’utilisation de bibliothèques standard, sauf
indication contraire, est admis. Le non respect des « contraintes de programmation »
éventuellement spécifiées sera santionné comme du hors sujet.
<!--[endif]-->
EXERCICE 1 ( 4 points)
On considère la classe Integer (un extrait de la documentation est fourni en annexe) :




<!--[if !supportLists]--> <!--[endif]-->Quel différence y a-t-il entre les types int et Integer
? Qu'apporte Integer par rapport à int ?
De quelle(s) classe(s) hérite la classe Integer ?
<!--[endif]-->A quel paquetage appartient la classe Integer ? Ecrire la directive
d’importation à insérer dans le fichier utilisant la classe Integer.
<!--[endif]-->Dans le descriptif de la méthode toOctalString :
o <!--[endif]-->comment expliquer le traitement subi par un argument négatif (“The
unsigned integer value is the argument plus 232 if the argument is negative”) ?
o <!--[endif]-->que signifie et représente '\u0030' ? Quel rapport y a-t-il en entre '0'
et '\u0030' ?
<!--[if !supportLists]-->
<!--[endif]-->
Ecrire une fonction main d’essai, permettant d’obtenir une application indépendante et
répondant aux spécifications suivantes 
o
affiche la table de multiplication en octal [0 .. 7] x [0 .. 7] suivante :
x
0
1
2
3
0
0
0
0
0
7
0
1
0
1
2
3
…
7
2
0
2
4
6
3
0
3
6
11
…
…
…
…
…
7
0
7
16
25
16
25
…
61
<!--[if !supportEmptyParas]--><!--[endif]-->
o
<!--[if !supportLists]--> <!--[endif]-->contraintes de programmation :
- la table sera d'abord mémorisée dans une matrice 8x8 avant d'être
affichée
- les produits seront calculés en décimal et convertis en octal par appel à la
méthode toOctalString de la classe Integer
<!--[endif]-->
EXERCICE 2 ( 8 points)
(source @author)
2.1- Modéliser des compteurs kilométriques
Un compteur kilométrique se compose d’un enregistrement totalisateur et d’un enregistrement
partiel. Ces deux enregistrements conservent les distances parcourues sous la forme d’un nombre
réel.
Quand un compteur est créé, la valeur de ces deux enregistrements est toujours nulle.
L’enregistrement partiel peut être remis à zéro (mais pas à une autre valeur). Outre cette
opération, la seule façon de modifier la valeur des deux enregistrements est d’ajouter des
kilomètres en roulant.
Définir en Java une classe Compteur comportant :






<!--[if !supportLists]--><!--[endif]-->deux champs d’instance : totalisateur et partiel
<!--[endif]-->un constructeur sans paramètre
<!--[endif]-->les méthodes publiques de lecture de chacun de ces champs : double
getTotalisateur() et double getPartiel(), retournant la valeur du champ
<!--[endif]-->une méthode publique void resetPartiel() de remise à zéro du champ partiel
<!--[endif]-->une méthode publique void add(double km) d’incrémentation des deux
champs de la valeur spécifiée en paramètre
<!--[endif]-->la méthode générique toString(), qui retourne une représentation textuelle
d’un compteur et de son état conforme à l’exemple suivant :
compteur = [ totalisateur = 500 | partiel = 108 ]
2.2- Modéliser des véhicules
Un véhicule se compose d’un numéro d’immatriculation, d’un compteur, d’un réservoir, et d’une
consommation kilométrique. Les véhicules seront représentés par des instances de la classe
Vehicule.
Le numéro d’immatriculation d’un nouveau véhicule est déterminé par la valeur d’un registre
commun à tous les véhicules ; la valeur de ce registre est automatiquement incrémentée de 1 à
chaque création d’un nouveau véhicule. Ce registre ne doit pas être accessible en dehors de la
classe Vehicule. Le numéro d’immatriculation d’un véhicule ne doit pas être non plus accessible
en dehors de la classe, mais sa valeur peut être obtenue par une méthode de lecture à partir de
n’importe quelle classe.
Le compteur kilométrique est celui modélisé à la question 2.1 précédente. Il est créé à la création
d’un véhicule. On obtient une référence à ce compteur par une méthode getCompteur() de la
classe Vehicule. On accède aux enregistrements de son compteur en invoquant les méthodes
publiques de la classe Compteur sur cette référence.
La capacité du réservoir est de 50.0 litres pour tous les véhicules et ne doit pas être accessible de
l’extérieur de la classe. La jauge du réservoir, propre à chaque véhicule, ne doit pas être
accessible de l’extérieur de la classe, mais sa valeur peut être obtenue par une méthode de lecture
getJauge() à partir de n’importe quelle classe. Cette jauge peut-être remise à la valeur de la
capacité du réservoir, à chaque fois qu’on fait le plein ; il n’est pas possible de ne remplir qu’une
fraction du réservoir.
La consommation d’un véhicule (nombre de litres de carburant par kilomètre parcouru) est propre
à chaque véhicule et est fixée à la création du véhicule. Cette consommation ne doit pas être
accessible de l’extérieur de la classe.
Les deux opérations que l’on peut faire sur un véhicule sont : faire le plein et rouler sur une
certaine distance. En roulant on consomme du carburant, donc on ne peut rouler que sur la
distance permise par le réservoir et la consommation du véhicule ; le compteur n’est incrémenté
que de la distance effectivement parcourue.
Définir en Java une classe Vehicule comportant :







<!--[if !supportLists]--> <!--[endif]-->les attributs de classe
<!--[endif]-->les attributs d’instance
<!--[endif]-->un constructeur ayant pour paramètre la consommation
des méthodes d’accès en lecture aux champs d’instance, selon le degré d’accessibilité
prescrit ci-avant
<!--[endif]-->une méthode void faireLePlein()
<!--[endif]-->une méthode double rouler(double km), qui prend en paramètre la distance
que l’on souhaite parcourir, et qui retourne la distance effectivement parcourue
<!--[endif]-->la méthode générique toString(), qui retourne une représentation textuelle
d’un véhicule et de son état, conforme à l’exemple suivant :
Véhicule 4 : compteur = [ totalisateur = 500 | partiel = 108 ] ; jauge = 9.00533

<!--[if !supportLists]--><!--[endif]-->la méthode générique equals(Object o), qui teste
l’égalité de deux véhicules selon le numéro d’immatriculation
On précisera bien le degré d’accessibilité (private, …) requis pour ces champs et méthodes.
<!--[if !supportEmptyParas]-->
EXERCICE 3 ( 4 points)
Ecrire en Java une méthode circularRightShift répondant aux spécifications suivantes :




<!--[if !supportLists]--> <!--[endif]-->procédure
<!--[endif]-->paramètre : un tableau t d’éléments de type String
<!--[endif]-->comportement : réalise, sans perte d’élément, un « décalage droite
circulaire » de tous les éléments du tableau (i.e. in fine chaque élément aura été décalé
d’une place « vers la droite », c’est-à-dire dans le sens des indices croissants, le
« dernier » élément étant ramené en « première » place )
<!--[endif]-->exemple :
avec le tableau initial
le tableau final sera

t = [“one”, “two”, “three”, “four”, “five”]
t = [“five” , “one”, “two”, “three”, “four”]
<!--[if !supportLists]--><!--[endif]-->contrainte de programmation : aucun autre tableau
que t
EXERCICE 4 ( 4 points)
Ecrire en Java une méthode digitCounts répondant aux spécifications suivantes :





<!--[if !supportLists]--> <!--[endif]-->fonction de type « tableau d’entiers »
paramètre : un entier n
<!--[endif]-->valeur de retour : un tableau de 10 entiers tel que « pour tout indice i,
l’élément d’indice i égale le nombre d’occurrences du chiffre i dans l’entier n »
<!--[endif]-->exemple : avec n = 233060, le résultat vaut [2, 0, 1, 2, 0, 0, 1, 0, 0, 0]
<!--[endif]-->contrainte de programmation : pas d’utilisation explicite d’une fonction
puissance
<!--[endif]-->
ANNEXE
<!--[if !supportEmptyParas]--><!--[endif]-->
Extrait de la documentation de la classe Integer
http://java.sun.com/j2se/1.4.2/docs/api/index.html
___________
<!--[if !supportEmptyParas]--><!--[endif]-->
java.lang
Class Integer
java.lang.Object
java.lang.Number
java.lang.Integer
All Implemented Interfaces:
Comparable, Serializable
public final class Integer
extends Number
implements Comparable
<!--[endif]-->
<!--[endif]-->
<!--[endif]-->
<!--[if !supportEmptyParas]-->
Method Detail
toOctalString
public static String toOctalString(int i)
Returns a string representation of the integer argument as an unsigned integer in base 8.
The unsigned integer value is the argument plus 232 if the argument is negative; otherwise,
it is equal to the argument. This value is converted to a string of ASCII digits in octal
(base 8) with no extra leading 0s.
If the unsigned magnitude is zero, it is represented by a single zero character '0'
('\u0030'); otherwise, the first character of the representation of the unsigned magnitude
will not be the zero character. The following characters are used as octal digits:
01234567
These are the characters '\u0030' through '\u0037'.
Parameters:
i - an integer to be converted to a string.
Returns:
the string representation of the unsigned integer value represented by the argument in
octal (base 8).
<!--[endif]-->
<!--[if !supportEmptyParas]--><!--[endif]-->
<!--[endif]-->
<!--[if !supportEmptyParas]--><!--[endif]-->
Téléchargement