| [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] |