Vous êtes sur la page 1sur 6

Master Spécialisé Mécatronique

Solution Tp N°3

Exo 2.2
Fichier Point.java :

public class Point {


private double x, y;

public Point(double a, double b) {


x = a;
y = b;
}
public double x() {
return x;
}
public double y() {
return y;
}
public double rho() {
return Math.sqrt(x * x + y * y);
}
public double theta() {
return Math.atan2(y, x);
}
public void homothétie(double k) {
x *= k;
y *= k;
}
public void translation(double dx, double dy) {
x += dx;
y += dy;
}
public void rotation(double a) {
double cosa = Math.cos(a);
double sina = Math.sin(a);
double x1 = cosa * x - sina * y;
y = sina * x + cosa * y;
x = x1;
}
public String toString() {
return "(" + x + "," + y + ")";
}
}

Fichier LignePol.java :

import java.util.Vector;

class LignePol {
private Vector points = new Vector();
Master Spécialisé Mécatronique

public void ajouterPoint(Point p) {


points.addElement(p);
}
public void homothétie(double k) {
for (int i = 0; i < points.size(); i++)
((Point) points.elementAt(i)).homothétie(k);
}
public void translation(double dx, double dy) {
for (int i = 0; i < points.size(); i++)
((Point) points.elementAt(i)).translation(dx, dy);
}
public void rotation(double a) {
for (int i = 0; i < points.size(); i++)
((Point) points.elementAt(i)).rotation(a);
}
public String toString() {
return points.toString();
}
static public void main(String[] args) {
LignePol l = new LignePol();
for (int i = 0; i < 6; i++)
l.ajouterPoint(new Point(i, 2 * i));
System.out.println(l);
l.translation(10, -10);
System.out.println(l);
}
}
Une autre manière de faire qu'un objet LignePol contienne un objet Vector :
import java.util.Vector;

class LignePol extends Vector {

public void ajouterPoint(Point p) {


addElement(p);
}
public void homothétie(double k) {
for (int i = 0; i < size(); i++)
((Point) elementAt(i)).homothétie(k);
}
public void translation(double dx, double dy) {
for (int i = 0; i < size(); i++)
((Point) elementAt(i)).translation(dx, dy);
}
public void rotation(double a) {
for (int i = 0; i < size(); i++)
((Point) elementAt(i)).rotation(a);
}

static public void main(String[] args) {


LignePol l = new LignePol();
for (int i = 0; i < 6; i++)
l.ajouterPoint(new Point(i, 2 * i));
System.out.println(l);
l.translation(10, -10);
System.out.println(l);
Master Spécialisé Mécatronique

}
}
Dans un cas comme dans l'autre, une autre manière d'obtenir le parcours du vecteur :
import java.util.*;

class LignePol {
private Vector points = new Vector();

public void ajouterPoint(Point p) {


points.addElement(p);
}
public void homothétie(double k) {
Iterator iter = points.iterator();
while (iter.hasNext())
((Point) iter.next()).homothétie(k);
}
public void translation(double dx, double dy) {
Iterator iter = points.iterator();
while (iter.hasNext())
((Point) iter.next()).translation(dx, dy);
}
etc.
}
Essai sommaire : fichier TestLignePol.java :
public class TestLignePol {
public static void main(String[] args) {
LignePol ligne = new LignePol();
for (int i = 0; i < 10; i++)
ligne.ajouterPoint(new Point(Math.random(), Math.random()));
System.out.println("avant : " + ligne);

/* Exemple de transformation: rotation de 45 degrés */


/* autour du point (1, 1) */
ligne.translation(-1, -1);
ligne.rotation(Math.PI / 4);
ligne.translation(1, 1);
System.out.println("après : " + ligne);
}
}
Nouveau fichier Point.java :
public class Point {
private double r, t;

public Point(double x, double y) {


r = Math.sqrt(x * x + y * y);
t = Math.atan2(y, x);
}
public double x() {
return r * Math.cos(t);
}
public double y() {
return r * Math.sin(t);
}
public double rho() {
return r;
}
Master Spécialisé Mécatronique

public double theta() {


return t;
}
public void homothétie(double k) {
r *= k;
}
public void translation(double dx, double dy) {
double x = x() + dx;
double y = y() + dy;
r = Math.sqrt(x * x + y * y);
t = Math.atan2(y, x);
}
public void rotation(double a) {
t += a;
}
public String toString() {
return r + " $" + t; // ou une autre notation...
}

Exo 2.3
Fichier Mangenombres.java :

class Mangenombres {
int valeur;
Mangenombres suivant;

Mangenombres(int v) {
valeur = v;
suivant = null;
System.out.print(valeur + " ");
}

void manger(int n) {
if (n % valeur != 0)
if (suivant != null)
suivant.manger(n);
else
suivant = new Mangenombres(n);
}

public static void main(String[] args) {


int n = Integer.parseInt(args[0]);
Mangenombres deux = new Mangenombres(2);
for (int i = 3; i < n; i++)
deux.manger(i);
}
}

Exo 2.4
Fichier Ensemble.java :
Master Spécialisé Mécatronique

public class Ensemble {


static public int N = 32;

private int[] tab = new int[N];


private int nbr = 0;

public int cardinal() {


return nbr;
}

public boolean contient(int x) {


for (int i = 0; i < nbr; i++)
if (tab[i] == x)
return true;
return false;
}

public void ajout(int x) {


if ( ! contient(x))
tab[nbr++] = x;
}

public String toString() {


if (nbr == 0)
return "{}";
else {
String r = "{" + tab[0];
for (int i = 1; i < nbr; i++)
r += "," + tab[i];
return r + "}";
}
}

static public void main(String[] args) {


Ensemble e = new Ensemble();

int x = Lire.entier("x ? ");


while (x >= 0) {
e.ajout(x);
x = Lire.entier("x ? ");
}
System.out.println("e = " + e);
}
}

Classe auxiliaire Lire.java :

import java.io.*;

public class Lire {


static public int entier(String prompt) {
System.out.print(prompt);
try {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
return Integer.parseInt(in.readLine());
Master Spécialisé Mécatronique

}
catch (Exception e) {
System.out.println("Erreur de lecture " + e.getMessage());
System.exit(-1);
}
return 0;
}
}

Deuxième implémentation des ensembles. Un autre fichier Ensemble.java :

import java.util.Vector;
import java.util.Iterator;

public class Ensemble {


Vector table = new Vector();

public int cardinal() {


return table.size();
}

public boolean contient(int x) {


return table.contains(new Integer(x));
}

public void ajout(int x) {


if ( ! contient(x))
table.add(new Integer(x));
}

public String toString() {


if (table.size() == 0)
return "{}";
else {
Iterator it = table.iterator();
String r = "{" + it.next();
while (it.hasNext())
r += "," + it.next();
return r + "}";
}
}

static public void main(String[] args) {


...
}
}

Vous aimerez peut-être aussi