class AlgoMyst { /* Implémentation de l'algorithme mystère. */ static int f(int a, int b) { int c, d, e; d = b; e = a; c = 1; while (d > 0) { if (d % 2 == 0) { d = d / 2; } else { d = (d - 1) / 2; c = c * e; } e = e * e; } return c; } /* Affiche une ligne séparatrice du tableau */ static void afficheLigne(int longueur) { for (int i = 0; i < longueur - 1; i++) { switch (i) { case 0: case 8: System.out.print('+'); break; default: System.out.print('-'); } } System.out.println("+"); } public static void main(String[] args) { final int aMin = 1; final int aMax = 10; final int bMin = 0; final int bMax = 5; /* Affiche les valeurs de f(a, b) en faisant varier a entre aMin * et aMax, et b entre bMin et bMax. L'affichage est fait sous * forme de tableau : les valeurs de a en ligne et les valeurs de * b en colonne. */ /* Lors des affichages, le caractère spécial '\t', appelé * tabulation, décale le curseur vers la droite jusqu'à la * prochaine colonne multiple de 8. Il est utilisé ici pour * aligner les colonnes. */ final int largeur = 1 + 8 * (bMax - bMin + 3); // affichage de la ligne d'en-tête afficheLigne(largeur); System.out.print("| a \\ b |"); for (int paramB = bMin; paramB <= bMax; paramB++) System.out.print("\t" + paramB); System.out.println("\t|"); afficheLigne(largeur); // affichage des lignes for (int paramA = aMin; paramA <= aMax; paramA++) { System.out.print("| " + paramA + "\t|"); for (int paramB = bMin; paramB <= bMax; paramB++) System.out.print("\t" + f(paramA, paramB)); System.out.println("\t|"); } afficheLigne(largeur); } }