All pastes #2123640 Raw Edit

Untitled

public text v1 · immutable
#2123640 ·published 2012-03-03 03:23 UTC
rendered paste body
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Random;



public class MainTp1Math {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
        question1a();
        question1b();
        question1c();
//        question2a();
//        question2b();
//        question3a();
//        question3b();
	}
	



    //==========================================================================
    // Début Question 1a
    //==========================================================================
	private static void question1a() {
		System.out.print("1a: ");
		calculAnniversaire(30);
	}

	public static void calculAnniversaire(int nb) {
		BigDecimal p = new BigDecimal(1);
		for (double n = 364; n > 365 - nb; n--) {
			//p *= n / 365.;
			p = p.multiply(BigDecimal.valueOf(n/365.));
		}
		p = (BigDecimal.valueOf(1).subtract(p)).multiply(BigDecimal.valueOf(100));
		System.out.print("Pour "+nb+" personnes, il y a "+p+"% de chance d'avoir une collition\n");
	}

    //==========================================================================
    // Début Question 1b
    //==========================================================================
	private static void question1b() {
		for (int i = 5; i < 405; i += 5) {
			System.out.print("1b: ");
			calculAnniversaire(i);
		}
	}

	// ==========================================================================
	// Début Question 1c
	// ==========================================================================
	private static void question1c() {
		Random gen = new Random(System.currentTimeMillis());
		int nbDoubles = 0;
		HashSet<Integer> dates = new HashSet<>();
		for (int i = 0; i < 1000; i++) { // faire l'expérience 1000 fois

			for (int j = 0; j < 30; j++) { // générer 30 fois
				dates.add(gen.nextInt(365));
			}
			if (dates.size() != 30) 
				nbDoubles++;
			dates.clear();
		}
		System.out.printf("\n1C:\nIl y a eu %d doublons dans les 1000 expériences, ce qui est un pourcentage de %f%%",nbDoubles, nbDoubles / 10.);

	}

	// ==========================================================================
	// Début Question 2
	// ==========================================================================
	private static final class ResultatQ2 {

		public ResultatQ2(char meneur, int changements, int affiles) {
			this.meneur = meneur;
			this.changements = changements;
			this.affiles = affiles;
		}

		public char meneur;
		public int changements;
		public int affiles;

	}
   
    //==========================================================================
    // Début Question 2a
    //==========================================================================
	private static void question2a() {
		ResultatQ2 res = question2_test();
		System.out.format("\n\n2a: Meneur = %c, Changements = %d, Affilés = %d\n",
				res.meneur, res.changements, res.affiles);
	}

	private static ResultatQ2 question2_test() {
		char meneur = '\0';
		int affiles = 0, changements = 0, nbP = 0, nbF = 0;
		Random gen = new Random();
		for (int i = 0; i < 1000; i++) {
			// incrémentation des nombres
			if (gen.nextInt(2) == 0)
				nbP++;
			else
				nbF++;
			// detection d'un changement
			if (i == 0) {
				meneur = nbP > nbF ? 'P' : 'F';
			} else {
				if (meneur == 'P' && nbF >= nbP) {
					changements++;
					meneur = 'F';
				} else if (meneur == 'F' && nbP >= nbF) {
					changements++;
					meneur = 'P';
				} else if (nbP == nbF) {
					affiles = 0;
					meneur = '\0';
				} else {
					affiles++;
				}
			}
		}
		return new ResultatQ2(meneur, changements, affiles);
	}
   
	// ==========================================================================
	// Début Question 2b
	// ==========================================================================
	private static void question2b() {
		double x = 0;
		for (int i = 0; i < 20; i++) {
			x += question2_test().affiles;
		}
		System.out.format("\n2b: Moyenne = %.2f\n", x / 20);
	}

	// ==========================================================================
	// Début Question 3a
	// ==========================================================================
	private static final void question3a() {
		for (int i = 1; i <= 100; i++) {
			System.out.println("3a: " + question3a_cat(i));
		}
	}

	private static BigDecimal question3a_cat(int n) {
		return BigDecimal.valueOf(1. / ((double) n + 1.)).multiply(
				choisir(n, 2 * n));
	}

	// ==========================================================================
	// Début Question 3b
	// ==========================================================================
	private static void question3b() {
		for (int i = 1; i <= 100; i++) {
			System.out.println("3b: " + question3b_cat(i));
		}
	}

	private static BigDecimal question3b_cat(int n) {
		return BigDecimal.valueOf((4. * n - 2) / ((double) n + 1.)).multiply(question3a_cat(n - 1));
	}
   
    //==========================================================================
	// Début Question 3c
	// ==========================================================================
	private static void question3c() {
		for (int i = 1; i <= 5; i++) {
			System.out.println(question3c_cat(i));
		}
	}

	private static BigDecimal question3c_cat(int n) {
		BigDecimal cat = BigDecimal.ONE;
		return cat;
	}

	private static BigDecimal fact(int n) {
		BigDecimal fact = BigDecimal.ONE;
		for (int i = 1; i <= n; i++) {
			fact = fact.multiply(BigDecimal.valueOf(i));
		}
		return fact;
	}

	private static BigDecimal choisir(int r, int n) {
		return fact(n).divide((fact(r).multiply(fact(n - r))));
	}
}