UNIVERSITÉ CHEIKH ANTA DIOP DE DAKAR
ECOLE SUPERIEURE POLYTECHNIQUE
DEPARTEMENT GENIE INFORMATIQUE
DIC 1 INFORMATIQUE
Activité 1 Algorithmique et Programmation Avancée
Année Universitaire : 2024-2025
Etudiante :
Dioulde Aminata DATH
Exercice 1: copie superficielle & copie profonde
creation de la classe Point
public class Point {
private int x;
private int y;
//constructeur
public Point (int x,int y){
this.x = x;
this.y = y;
}
//getteurs et setteurs
public int getX(){
return x;
}
public void setX(int x){
this.x=x;
}
public int getY(){
return y;
}
public void setY(int y){
this.y =y;
}
//Methode pour afficher les coordonnees du point
public void afficher(){
[Link]("Point("+x+" ,"+y+")");
}
}
Création de la classe cercle qui dépends de Point ou sera fait la copie profonde et la
copie superficielle
public class Cercle {
private Point centre;
private double rayon;
//constructeur
public Cercle (Point centre,double rayon){
[Link]=centre;
[Link] = rayon;
}
//getteurs et setteurs
public Point getCentre(){
return centre;
}
public void setCentre(Point centre){
[Link]=centre;
}
public double getRayon(){
return rayon;
}
public void setRayon(double rayon){
[Link] =rayon;
}
//Methode pour afficher le cercle
public void afficher(){
[Link]("Cercle de centre ");
[Link]();
[Link](" et de rayon " + rayon);
}
// Methode de copie superficielle
public Cercle copieSuperficielle(){
return new Cercle([Link],[Link]);
}
//Methode de copie profonde
public Cercle copieProfonde(){
Point nouveauCentre = new Point([Link](), [Link]());
return new Cercle(nouveauCentre,[Link]);
}
Création de la classe qui contient la méthode Main
public class Main {
public static void main(String[] args) {
// Création d'un point pour le centre
Point centre = new Point(5, 10);
// Création d'un cercle avec ce centre
Cercle cercle1 = new Cercle(centre, 7.5);
[Link]("Cercle original :");
[Link]();
// Création d'une copie superficielle
Cercle copieSuperficielle = [Link]();
[Link]("Copie superficielle :");
[Link]();
// Création d'une copie profonde
Cercle copieProfonde = [Link]();
[Link]("Copie profonde :");
[Link]();
// Modification du centre du cercle original
[Link](20);
[Link](30);
[Link]("\nAprès modification du centre de l'original :");
[Link]("Cercle original :");
[Link]();
[Link]("Copie superficielle :");
[Link]();
[Link]("Copie profonde :");
[Link]();
}
}
Exécution du programme
Explication
Copie superficielle : copieSuperficielle() dans Cercle réutilise la même instance de Point pour
le centre, donc si le centre du cercle original change, la copie superficielle change aussi.
#
Copie profonde : copieProfonde() crée une nouvelle instance de Point avec les mêmes
coordonnées, ce qui rend la copie indépendante des modifications sur le cercle [Link]
si le cercle original change ,lui ne change pas !
Exercice 2 : Fraction en mettant en œuvre l’encapsulation
1Création de la classe Fraction qui permet de gérer des fractions (Addition-Soustraction-
Multiplication-Division-Inversion) tout en mettant en œuvre l’encapsulation
public class Fraction {
// Attributs encapsulés
private int numerateur;
private int denominateur;
// Constructeur
public Fraction(int numerateur, int denominateur) {
if (denominateur == 0) {
throw new IllegalArgumentException("Le dénominateur ne peut être nul.");
}
[Link] = numerateur;
[Link] = denominateur;
simplifier();
}
//getteurs et setteurs
// Méthode pour obtenir le numérateur
public int getNumerateur() {
return numerateur;
}
// Méthode pour définir le numérateur
public void setNumerateur(int numerateur) {
[Link] = numerateur;
simplifier();
}
// Méthode pour obtenir le dénominateur
public int getDenominateur() {
return denominateur;
}
// Méthode pour définir le dénominateur
public void setDenominateur(int denominateur) {
if (denominateur == 0) {
throw new IllegalArgumentException("Le dénominateur ne peut pas être nul.");
}
[Link] = denominateur;
simplifier();
}
// Méthode pour simplifier la fraction
private void simplifier() {
int pgcd = pgcd([Link](numerateur), [Link](denominateur));
numerateur /= pgcd;
denominateur /= pgcd;
if (denominateur < 0) { // le signe du dénominateur ne doit etre négatif
numerateur = -numerateur;
denominateur = -denominateur;
}
}
// Methode pour calculer le plus grand diviseur commun(PGCD)
private int pgcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// Methode d'addition de fractions
public Fraction addition(Fraction autre) {
int num = [Link] * [Link] + [Link] * [Link];
int den = [Link] * [Link];
return new Fraction(num, den);
}
// Méthode de soustraction de fractions
public Fraction soustraction(Fraction autre) {
int num = [Link] * [Link] - [Link] * [Link];
int den = [Link] * [Link];
return new Fraction(num, den);
}
// Méthode de multiplication de fractions
public Fraction multiplication(Fraction autre) {
int num = [Link] * [Link];
int den = [Link] * [Link];
return new Fraction(num, den);
}
// Méthode de division de fractions
public Fraction division(Fraction autre) {
if ([Link] == 0) {
throw new ArithmeticException("Division par une fraction nulle est impossible.");
}
int num = [Link] * [Link];
int den = [Link] * [Link];
return new Fraction(num, den);
}
// Methode d'inversion de Fraction
public Fraction inverser() {
if (numerateur == 0) {
throw new ArithmeticException("Impossible d'inverser une fraction avec un
numérateur nul.");
}
return new Fraction(denominateur, numerateur);
}
// Méthode pour afficher la fraction sous forme "numerateur/denominateur"
public void afficher() {
[Link](numerateur + "/" + denominateur);
}
// Méthode pour obtenir la fraction sous forme de chaîne
public String toString() {
return numerateur + "/" + denominateur;
}
}
2Test avec la classe Main
public class Main {
public static void main(String[] args) {
// Creation de fractions pour tester
Fraction f1 = new Fraction(3, 4);
Fraction f2 = new Fraction(2, 5);
Fraction f3 = new Fraction(10, 20);
// Affichage des fractions initiales
[Link]("Fraction 1 : ");
[Link]();
[Link]("Fraction 2 : ");
[Link]();
[Link]("Fraction 3 simplifiee : ");//simplification automatique
[Link]();
// Test de l'addition
Fraction additionResult = [Link](f2);
[Link]("Résultat de l'addition f1 + f2 : ");
[Link]();
// Test de la soustraction
Fraction soustractionResult = [Link](f2);
[Link]("Résultat de la soustraction f1 - f2 : ");
[Link]();
// Test de la multiplication
Fraction multiplicationResult = [Link](f2);
[Link]("Résultat de la multiplication f1 * f2 : ");
[Link]();
// Test de la division
Fraction divisionResult = [Link](f2);
[Link]("Résultat de la division f1 / f2 : ");
[Link]();
// inversion de f1
Fraction inverseResult = [Link]();
[Link]("Inverse de f1 : ");
[Link]();
//test des setters pour modifier les valeurs de f1
[Link](6);
[Link](8);
[Link]("f1 après modification (simplifiee) : ");
[Link]();
// fraction avec un dénominateur negatif
Fraction f4 = new Fraction(3, -4);
[Link]("Fraction 4 avec dénominateur négatif : ");
[Link]();
// fraction avec un denominateur nul
Fraction f5 = new Fraction(4, 0);
[Link]("Fraction 5 avec denominateur nul : ");
[Link]();
}
}
3Exécution de la classe Main