Page 1 sur 1

Problème de calcul

Posté : mar. 05 déc. 2017 11:49
par Koumla
Bonjour à tous.

J’ai un souci de résultat dans un calcul et je ne comprends pas pourquoi !

J’ai toujours le même résultat pour la ligne 95 quand je rajoute « * $saut_angle »

Normalement celui-ci devrait varier ?

Bien à vous

Koumla

Code : Tout sélectionner

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <ButtonConstants.au3>
#include <ProgressConstants.au3>
#include <SliderConstants.au3>
#include <GuiSlider.au3>
#include "GIFAnimation.au3"
;------------------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------------------
#Region ### START Koda GUI section ### Form=C:\Dropbox\Ale\Form1.kxf
$Form1 = GUICreate("Form1", @DesktopWidth , @DesktopHeight, 0, 0)
GUISetCursor (0)
GUISetBkColor(0x008080)

GUISetState(@SW_SHOWMAXIMIZED)
;------------------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------------------
Global $couleur_americain = 0x0043FF
Global $couleur_japonais = 0xFFD800
Global $couleur_ideal = 0x4CFF00

Global $ecran_hauteur = @DesktopHeight
Global $ecran_lageur = @DesktopWidth

; taille du graphique
Global $hauteur = @DesktopHeight
Global $Largeur = @DesktopWidth
;--------------------------------------------------
Global $population_mondiale = 7.5E+9

Global $population_americain = 7.5E+9
Global $population_japonais = 7.5E+9
Global $population_ideal = 7.5E+9

Global $natalite_americain = 1.84
Global $natalite_japonais = 1.46
Global $natalite_ideal = 2.01
;--------------------------------------------------
Global $nourriture_consommation_annuelle_americain = 3.41E+8
Global $nourriture_gaspillage_annuelle_americain = 1.3E+12

Global $nourriture_consommation_annuelle_japonais = 6.09E+6
Global $nourriture_gaspillage_annuelle_japonais = 1.3E+12

Global $nourriture_consommation_annuelle_ideal = 3.11E+7
Global $nourriture_gaspillage_annuelle_ideal = 0
;--------------------------------------------------

GUICtrlCreateGraphic(0, 0, @DesktopWidth, @DesktopHeight, 0) ; gauche top largeur hauteur

GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xFFFFFF)

$pos_x = 200
$pox_y = 200
$rayon = 100

camenbert_2()

;GUISetState(@SW_SHOW)
;------------------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------------------
While 1

	$nMsg = GUIGetMsg()

		Switch $nMsg

				Case $GUI_EVENT_CLOSE

				Exit

		EndSwitch

WEnd
;------------------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------------------
Func camenbert_2()

for $x = 1 to 10

ConsoleWrite("--------------------------------------------------" & @CRLF)
ConsoleWrite("tour : " & $x & @CRLF)
ConsoleWrite("--------------------------------------------------" & @CRLF)

;--------------------------------------------------
$total_conso = ($population_mondiale * ($natalite_americain * $x)) + ($population_mondiale * ($natalite_japonais * $x)) + ($population_mondiale * ($natalite_ideal * $x))
ConsoleWrite("total_conso : " & $total_conso & @CRLF)

$saut_angle = 360 / $total_conso
ConsoleWrite("saut_angle : " & $saut_angle & @CRLF)

Global $am = ($population_mondiale * ($natalite_americain * $x)) * $saut_angle
ConsoleWrite("am : " & $am & @CRLF)

Global $aj = ($population_mondiale * ($natalite_japonais * $x))
ConsoleWrite("aj : " & $aj & @CRLF)

Global $ai = ($population_mondiale * ($natalite_ideal * $x))
ConsoleWrite("ai : " & $ai & @CRLF)
;--------------------------------------------------
GUISetState(@SW_HIDE)

GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xFFFFFF)

; americain
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $couleur_americain, $couleur_americain)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, $pos_x, $pox_y, $rayon, 90, int($am)) ; x / y / rayon / position angle de depart / taille de l'angle

; japonais
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $couleur_japonais, $couleur_japonais)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, $pos_x, $pox_y, $rayon, 90 + int($am), int($aj)) ; x / y / rayon / position angle de depart / taille de l'angle

; calcul pour finir correctement le camenbert
Global $angle_manquant = 360 - (int($am) + int($aj) + int($ai))
$ai = $ai + $angle_manquant

; ideal
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $couleur_ideal, $couleur_ideal)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, $pos_x, $pox_y, $rayon, 90 + int($am) + int($aj), int($ai)) ; x / y / rayon / position angle de depart / taille de l'angle

GUISetState(@SW_SHOW)

sleep (100)

Next

EndFunc

Re: Problème de calcul

Posté : mar. 05 déc. 2017 21:17
par Tlem
Bonsoir.
êtes vous sur d'utiliser des nombres. ^^

Re: Problème de calcul

Posté : mer. 06 déc. 2017 12:03
par Koumla
Bonjour, Thierry

J’ai retourné le problème dans tous les sens depuis plus d’une heure ce matin, et hier soir après lecture de votre message, et je sens le mal de tête qui arrive.

Je sèche sur place.

Koumla

Re: Problème de calcul

Posté : mer. 06 déc. 2017 15:05
par Tlem
Autant pour moi, j'ai cru que vous récupériez des informations par GUI ...

Concernant votre problème, il semble que ce soit la valeur $saut_angle qui provoque le problème ...
9.03954802259887e-009 est un double alors que les autres nombres sont convertit en entier 32bits ...

Autre remarque, le fait de déclarer des variables en global dans une boucle qui est elle même dans une fonction, ça ne ce fait pas !!!
Déclarez d'abord vos variables en dehors de la fonction ou si elles doivent être réinitialisées, déclarez les en local au début de la fonction (mais dans ce cas pas de déclaration globale).

Re: Problème de calcul

Posté : mer. 06 déc. 2017 19:16
par jchd
Bonsoir,

Revoyez vos formules, car $x est en numérateur _et_ en dénominateur de la valeur calculée ; celle-ci ne varie donc pas.

Re: Problème de calcul

Posté : jeu. 07 déc. 2017 11:09
par Koumla
Merci, pour votre aide.

2 tubes d’aspirine après, je en trouve pas.

Ma fille et son amie, vont se passé du programme pour leur exposé scolaire, se sera moins fun pour eux.

Koumla

Re: Problème de calcul

Posté : jeu. 07 déc. 2017 13:28
par jchd
Je reprends votre bout de code :

Code : Tout sélectionner

		$total_conso = ($population_mondiale * ($natalite_americain * $x)) + ($population_mondiale * ($natalite_japonais * $x)) + ($population_mondiale * ($natalite_ideal * $x))
		ConsoleWrite("total_conso : " & $total_conso & @CRLF)

		$saut_angle = 360 / $total_conso
		ConsoleWrite("saut_angle : " & $saut_angle & @CRLF)

		Global $am = ($population_mondiale * ($natalite_americain * $x)) * $saut_angle
Vous faites donc, en mettant les facteurs commun en forme :

$total_conso = $population_mondiale * $x * ($natalite_americain + $natalite_japonais + $natalite_ideal)
$saut_angle = 360 / $total_conso
$am = ($population_mondiale * ($natalite_americain * $x)) * $saut_angle

soit :

$am = $population_mondiale * $natalite_americain * $x * 360 / $total_conso

soit encore :

$am = $population_mondiale * $x * $natalite_americain * 360 / ($population_mondiale * $x * ($natalite_americain + $natalite_japonais + $natalite_ideal))

Après simplification, car $population_mondiale * $x est un facteur figurant à la fois au numérateur et au dénominateur :

$am = $natalite_americain * 360 / ($natalite_americain + $natalite_japonais + $natalite_ideal)

Cette valeur est constante tout au long de la boucle For car elle ne dépend pas de $x.
Pas besoin d'acide pour ça, surtout que deux tubes pourraient se révéler une dose dangereuse :shock:

Re: Problème de calcul

Posté : jeu. 07 déc. 2017 21:51
par mikell
jchd a écrit : jeu. 07 déc. 2017 13:28 Pas besoin d'acide pour ça
parce que c'est basique ... :mrgreen:

Re: Problème de calcul

Posté : ven. 08 déc. 2017 03:16
par jchd
Du coup ça ne manque pas de sel !

Re: Problème de calcul  

Posté : ven. 08 déc. 2017 11:35
par Koumla
Merci les gars pour votre aide.

Je viens enfin de comprendre.

Pour moi les math c’est 1+1=11.

Merci encore.

Koumla

Re: Problème de calcul

Posté : ven. 08 déc. 2017 17:06
par Tlem
Huummm, là effectivement il faut arrêter l'acide.

Vous auriez dit 1 et 1 font 11,ca passe (bien que pour un matheu ça passe pas). Mais 1+1=11 aie, aie, aie.

Envoyé de mon appareil mobile en utilisant Tapatalk


Re: Problème de calcul

Posté : ven. 08 déc. 2017 22:01
par mikell
et pour un matheu le $x c'est important, finalement ...

Re: Problème de calcul

Posté : ven. 08 déc. 2017 23:53
par Tlem
Effectivement. Le correcteur l'avait proposé et je ne sais pas pourquoi, j'ai trouvé que ça ne faisait pas très Jojo, du coup je l'ai oublié.
Après c'est moins pire que 1+1=11 ^^

Envoyé de mon appareil mobile en utilisant Tapatalk