Bonjour,
Soit la boucle informatique
Dif = X (avec X > 0 et Entier): Pas = Y (avec Y > 0, impair et Entier)
While Dif > 0
.......Dif = Dif - Pas: Pas = Pas + 2
Wend
Fin-Dif = Dif: Fin-Pas = Pas
Je cherche à connaitre le nombre de fois NbBcl qu’un programme effectue cette boucle mais sans la faire réellement, ainsi que les valeurs de sortie Fin-Dif et Fin-Pas.
Par exemple avec Dif = 3131 et Pas = 159 après 18 boucles on arrive à Fin-Dif = -37 et Fin-Pas = 195
Cette arrivée est la même que si on partait d’un Dif2 = Dif + ((Pas-1) * (Pas-1))/4) et d’un Pas2 = 1
Par exemple Dif2 = 3131 + (158 * 158)/4 = 9372 et Pas2 = 1 après 97 boucles on arrive aussi à -37 et 195
A partir de là on a: NbBcl = (Fin-Pas – Pas)/2. Ex: NbBcl = (195 – 159)/2 = 18
Quand dans une telle boucle on part d’un Pas égal à 1 on peut déterminer le nombre de boucles NbBcl et les valeurs de sortie Fin-Dif et Fin-Pas par une autre méthode.
Il faut chercher le carré Z² immédiatement et strictement inférieur à Dif.
Par exemple le carré immédiatement inférieur à 9372 est 9216 soit 96*96.
On a Alors: Nombre de boucles NbBcl = Z + 1, Valeurs d’arrivée Fin-Dif = Dif – Z² - 2Z – 1 et Fin-Pas = 2Z + 3.
Dans l’exemple NbBcl = 96 + 1 = 97, Fin-Dif = 9372 – 9216 – 192 – 1 = -37, Fin-Pas = 192 + 3.
Je voudrais un algorithme qui trouve le carré immédiatement inférieur à un nombre donné et savoir comment ça marche (je n’ai pas vraiment trouvé sur le Net). En VBA il y a la fonction Z = Int(Sqr(Nb)).