//je veux réutiliser du code entre les fonctions p1, p2 et p3
value_type set_x(state & s) {
s.x = 0;
while (r < s.n) {
r += 2*s.x+1;
++s.x;
}
return r;
}
set_y(state & s, value_type & r) {
//pas besoin d'entourer un while (condition) par un if(condition), car while teste la condition.
while (r > s.n) {
r -= 2*s.y +1;
++s.y;
}
return r;
}
state p1(value_type n) {
state s {n, 0, 0};
set_x(s);
}
state p2(random_value_type n) {
state s {n, 0, 0};
auto r = set_x(s);
set_y(s, r);
return s;
}
state p3(random_value_type n) {
state s {n, 0, 0};
auto r = set_x(s);
while (r > s.n) {
const auto rsave = r;
r = set_y(s, r);
if (r < s.n) {
s.r = rsave + 2*s.x+1;
++s.x;
}
}
return s;
}
int randomgeneration(int n) {
const auto partSize = 1 + (n == RAND_MAX ? 0 : (RAND_MAX - n) / (n + 1));
const auto maxUsefull = partSize * n + (partSize - 1);
int draw;
do {
draw = rand();
} while (draw > maxUsefull);
return draw / partSize;
}
int main() {
auto const testdatasize = 4000;
// compteurs qui s'incrémente chaque fois que les résultats fourni par le programme satisfait la condition qui est exprimée dans le procedure bool R(N=x2-y2)et (0<=y<x)
std::array<int, 3> counters;
for(int testindex=1; testindex <= testdatasize; ++testindex) {
// pas de déclaration sans initialiseur, il faut définir une variable quand on sait que mettre dedans.
// inutile de créer un inits intermédiaire juste pour stocker un n sans le x et le y correspondant.
auto const n = randomgeneration(10000);
std::cout << "n : " << n << '\t';