class Cible {
  private int dedans;

  private static double f(double x)
       // x doit être compris entre -1 et 1
  {
    return Math.sqrt(1 - x*x);
  }

  Cible()
  {
    dedans = 0;
  }

  int compter()
  {
    return dedans;
  }

  void lancer()
       // tirage d'un point dans le carré [0,1[ X [0,1[
  {
    double u = Math.random();
    double v = Math.random();
    if (v <= f(u)) dedans++;
  }
}

class Simulation {
  private static double calculAire(int n)
       // évalue l'aire sous f par une méthode de Monte-Carlo
  {
    Cible cible = new Cible();
    for (int i=0; i<n; i++) cible.lancer();
    return (double)cible.compter()/n;
  }

  public static void main(String[] argv) {
    int tirages = 100000;
    double pi = 4 * calculAire(tirages);
    System.out.println("Pi = " + pi);
  }
}

