|
|
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 + "%");
}
}
} |