0% ont trouvé ce document utile (0 vote)
48 vues9 pages

Exercice

Transféré par

dathdiouldeamina
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
48 vues9 pages

Exercice

Transféré par

dathdiouldeamina
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

1Cré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;
}
}

2Test 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]();

}
}

3Exécution de la classe Main

Vous aimerez peut-être aussi