public class TP2 {

	public static String dayOfWeek(int n) {
		switch (n) {
		case 0:
			return "dimanche";
		case 1:
			return "lundi";
		case 2:
			return "mardi";
		case 3:
			return "mercredi";
		case 4:
			return "jeudi";
		case 5:
			return "vendredi";
		case 6:
			return "samedi";
		default:
			return "erreur";
		}
	}

	public static int zellerCongruence(int j, int m, int ss, int aa) {
		if (m == 1) {
			m = 11;
			if(aa > 0)
				aa = aa - 1;
				else
				{
				ss = ss - 1;
				aa = 99;
				}
		} else if (m == 2) {
			m = 12;
			if(aa > 0)
				aa = aa - 1;
				else
				{
				ss = ss - 1;
				aa = 99;
				}
		} else {
			m = m - 2;
		}
		return ((13 * m - 1) / 5 + j + aa + aa / 4 + ss / 4 - 2 * ss) % 7;
	}

	public static double machinFormula() {
		int k = 0;
		double s5 = 16.0 / 5.0;
		double s239 = 4.0 / 239.0;
		double pi = s5 - s239;
		double diff;
		do {
			k = k + 1;
			s5 = s5 / 25.0; // S5 = 16/5^(2*k+1)
			s239 = s239 / 239.0 / 239.0; // S239 = 4/239^(2*k+1)
			diff = s5 - s239;
			if (k % 2 == 1) {// k impair
				pi = pi - diff / (2 * k + 1);
			} else {// k pair
				pi = pi + diff / (2 * k + 1);
			}
		} while (diff != 0);
		return pi;
	}


	public static double machinFormula(int n) {
		double s5 = 16.0 / 5.0;
		double s239 = 4.0 / 239.0;
		double pi = s5 - s239;
		double diff;
		for (int k = 1; k < n; k++) {
			s5 /= 25.0;
			s239 /= 239.0*239.0;
			diff = s5 - s239;
			if (k % 2 == 1) // k impair
				pi -= diff / (2 * k + 1);
				else // k pair
				pi += diff / (2 * k + 1);
		}
		return pi;
	}

	public static void main(String[] args) {
		for (int i = 1; i <= 7; i++) {
			System.out.println(dayOfWeek(i % 7));
		}
		System.out.println("Le 27 janvier 2015 est un "
				+ dayOfWeek(zellerCongruence(27, 1, 20, 15)));
		System.out.println("Approximation de pi : " + machinFormula());
		System.out.println("Approximation de pi : " + machinFormula(16));
	}

}
