Institut Supérieur d’Informatique et de Multimédia de Gabès A.U.
2022/2023
Session : Principale Date : 03/11/2022
Régime : RM Matière : Programmation OO Java
Enseignant : Sofiane HACHICHA Durée : 1h
Classe(s) : CPI2 Documents : Non autorisés
Barème : 6+6+8 Nombre des pages : 3
Devoir Surveillé
Exercice 1
Créez la classe Note qui représente une note obtenue par un étudiant.
Une note peut être soit une valeur comprise entre 0 et 20 ou bien correspondre à une absence
de résultat.
La classe Note contiendra les attributs, méthodes et constructeurs suivants :
• private static final int MAX_NOTE : un attribut statique représentant la valeur de la
note maximale qui est égal à 20.
• private double value : la valeur de la note.
• private boolean isAbsent : un booléen indiquant si la note est absente ou pas : égal à
true si la note est absente et false sinon.
• public Note(double value, boolean isAbsent) : constructeur initialisant les attributs
value et isAbsent.
• public Note() : constructeur créant une note absente de valeur 0.
• public Note(double value) : constructeur créant une note présente (pas absente) de
valeur value.
• public boolean isAbsent() : retourne true si la note est absente et false sinon.
• public double getValue() : retourne la valeur value de la note.
• public String affiche() : retourne une représentation de la note sous forme de chaîne de
caractères. Pour une note présente de valeur 18, cette méthode devra retourner
"18.0/20" et pour une note absente "ABS".
Exercice 2
La classe BigInteger du package [Link] permet de représenter des entiers de longueur
quelconque. Voici une classe de démonstration qui illustre les principales méthodes fournies
par la classe BigInteger :
import [Link];
public class DemoBigInteger {
public static void main(String[] args) {
long lg = 229_299_229;
// constructeur BigInteger à partir d’un entier long
BigInteger y = [Link](lg);
// comparaison long/BigInteger
BigInteger x = [Link](Long.MAX_VALUE);
long u = Long.MAX_VALUE;
_________________________________________________________________________________________
Page 1/3
Institut Supérieur d’Informatique et de Multimédia de Gabès A.U. 2022/2023
[Link](u);
[Link](2 * u);
[Link](x);
// calcul de 2*x en BigInteger (et donc résultat exact)
[Link]([Link]([Link](2)));
// addition en BigInteger
[Link]([Link](y));
// soustraction en BigInteger
[Link]([Link](y));
// quotient de la division euclidienne en BigInteger
[Link]([Link](y));
// reste de la division euclidienne en BigInteger
[Link]([Link](y));
// moins unaire en BigInteger
[Link]([Link]());
// puissance (entière) en BigInteger
[Link]([Link](3));
}
}
L'affichage produit par le programme est le suivant :
9223372036854775807
-2
9223372036854775807
18446744073709551614
9223372037084075036
9223372036625476578
40224173788
104366355
-9223372036854775807
784637716923335095224261902710254454442933591094742482943
1. Ajoutez, à la classe DemoBigInteger, une méthode déclarée de la façon suivante :
public static BigInteger fact(long n) qui calcule la factorielle d'un long en utilisant
les BigIntegers sachant que : 𝒏! = 𝟏 × 𝟐 × 𝟑 × ⋯ × (𝒏 − 𝟏) × 𝒏.
2. Ajoutez, à la classe DemoBigInteger, une méthode déclarée de la façon suivante :
𝒑 𝒏!
public static BigInteger Cnp(long n, long p) qui calcule le coefficient 𝑪𝒏 =
𝒑!(𝒏−𝒑)!
en utilisant les BigIntegers.
Exercice 3
1. Créez la classe MaDate qui permet de représenter le format de date suivant :
31/10/2022.
Cette classe doit contenir trois attributs d’instances (jour, mois, année) de types
entiers, un constructeur initialisant ces attributs et les méthodes suivantes :
_________________________________________________________________________________________
Page 2/3
Institut Supérieur d’Informatique et de Multimédia de Gabès A.U. 2022/2023
• boolean bissextile() : Permet de vérifier si l’année est bissextile (si l’année est
divisible par 4 alors elle est bissextile sauf si elle est divisible par 100 et pas
par 400). Par exemple, les années 2000 et 2020 sont bissextiles tandis que les
années 2022 et 2100 ne sont pas bissextiles.
• int nombreJours() : Donne le nombre de jours pour le mois d'une date.
• boolean dateValide() : Permet de vérifier si une date est valide.
• MaDate lendemain() : Donne la date de demain.
2. Écrivez la méthode main dans une classe TesterMaDate qui :
a. crée une date à partir des valeurs jour, mois et année introduites à partir de la
ligne de commande.
b. affiche cette date sous le format précisé ci-avant.
c. si la date est valide
• affiche le nombre de jours du mois de cette date
• affiche la date de demain
sinon
• affiche un message d'erreur
Remarques :
1. Respectez le principe d'encapsulation en déclarant les attributs et les méthodes.
2. Complétez la classe MaDate par d'autres méthodes si c'est nécessaire.
BON TRAVAIL
_________________________________________________________________________________________
Page 3/3