[Précédent] |
5.8 |
Loi de Benford - Corrigé | Niveau 1 |
||
Fichiers: |
Benford.java |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
class Benford { /* METHODES UTILTAIRES FOURNIES*/ // affichage d'un tableau d'entiers public static void print(int[] tab) { for (int i = 0; i < tab.length; ++i) { System.out.print(tab[i] + " "); } System.out.println(); } // affichage d'un tableau de doubles public static void print(double[] tab) { for (int i = 0; i < tab.length; ++i) { System.out.print(tab[i] + " "); } System.out.println(); } public static void main(String[] args) { int[] frequencies = new int[9]; double[] numbers = new double[25]; // TEST 1.1 System.out.println("Test 1.1 : "); fillWithSquare(numbers); print(numbers); System.out.println(); // FIN TEST 1.1 //TEST 1.2 System.out.println("Test 1.2 : "); System.out.println(extractMaxDigit(0)); System.out.println(extractMaxDigit(632)); System.out.println(extractMaxDigit(-221)); System.out.println(extractMaxDigit(-554.15)); System.out.println(extractMaxDigit(0.00421)); System.out.println(); // FIN TEST 1.2 // TEST 1.3 System.out.println("Test 1.3 : "); analyze(numbers, frequencies); print(frequencies); System.out.println(); // FIN TEST 1.3 // TEST 1.4 System.out.println("Test 1.4 : "); // NE DECOMMENTEZ CETTE PARTIE // QUE SI VOUS N'AVEZ PAS REUSSI LA PARTIE PRECEDENTE // int tab = {7, 4, 3, 5, 2, 2, 0, 1, 1} //frequencies = tab; testBenford(frequencies, numbers.length); // FIN TEST 1.4 } public static int extractMaxDigit(double number) { if (number == 0) { return 0; } else if (number < 0) { number = -number; } while (number < 1) { number *= 10; } while (number >= 10) { number /= 10; } return (int)number; } public static void fillWithSquare(double[] numbers) { for (int i = 0, j = 0; i < numbers.length; ++i) { j = i + 1; numbers[i] = j * j / 100.0; } } public static void analyze(double[] numbers, int[] frequencies) { for (int i = 0; i < numbers.length; ++i) { int j = extractMaxDigit(numbers[i]); ++frequencies[j-1]; } } public static void testBenford(int[] frequencies, int size) { System.out.println("Comparaison des frequences avec les predictions de la loi de Benford :"); for (int i = 0; i < 9; ++i){ System.out.print( (i+1) + " : " + 100*(frequencies[i]/(double)size) + "%, "); System.out.println( "Benford : " + Math.log10(1 + 1.0/(i+1))*100 + "%"); } } } |
[Précédent] |