[SoMachine] Variable de fonctions dans biblio
- pach30
- Générateur de blocs fonctions

- Messages : 116
- Enregistré le : 26 mars 2019, 14:20
- Localisation : ben le Sud de ?
[SoMachine] Variable de fonctions dans biblio
bonjour,
je souhaite me créer une bibliothèque contenant certaines fonctions que j'utilise de façon récurrentes mais j'ai un comportement avec les variables que je ne comprends pas
la la partie déclaration
//----------------------------------------------------------------------
FUNCTION RegLin : CoeffRegLineaire
VAR_INPUT
TabData : ARRAY [0..10]OF point ;
END_VAR
VAR
n :INT; // nombre de point
fSumX :REAL ; // somme des X
fSumY :REAL; //somme des Y
fSumXY :REAL; //sommme des XY
fSumX2 :REAL; //somme des X²
i: INT;
END_VAR
//--------------------------------------------------------------------
la partie code
//---------------------------------------------------------------------
n:=SIZEOF(TabData)/SIZEOF (Point) ;
fSumX := 0.0 ;
fSumY := 0.0 ;
fSumXY := 0.0 ;
fSumX2 := 0.0 ;
FOR i:=0 TO n -1 DO
fSumX := fSumX + TabData.x ;
fSumy := fSumy + TabData.y;
fSumXY := fSumXY + ( TabData.x * tabData.y);
fsumX2:= fsumX2 + (TabData.x * TabData.x ) ;
END_FOR
regLin.a := ((fSumx*fSumY )- n*fSumXY)/((fSumX * fSumX) - (n * fsumX2));
Quand j'exécute ce code , mes variables fSum* qui sont supposées contenir la sommation de valeurs ne contient que la derniere valeur .
quand je prends en mode "pas à pas" , même à la l'intérieur de la boucle FOR , c'est le comportement que j'observe .
Ces variables sont definies commes de variables locales mais pour obtenir un résultat , il faut que je les déclare en VAR_STAT ce qui est un non sens !!
Quelqu'un a une idée ?
je souhaite me créer une bibliothèque contenant certaines fonctions que j'utilise de façon récurrentes mais j'ai un comportement avec les variables que je ne comprends pas
la la partie déclaration
//----------------------------------------------------------------------
FUNCTION RegLin : CoeffRegLineaire
VAR_INPUT
TabData : ARRAY [0..10]OF point ;
END_VAR
VAR
n :INT; // nombre de point
fSumX :REAL ; // somme des X
fSumY :REAL; //somme des Y
fSumXY :REAL; //sommme des XY
fSumX2 :REAL; //somme des X²
i: INT;
END_VAR
//--------------------------------------------------------------------
la partie code
//---------------------------------------------------------------------
n:=SIZEOF(TabData)/SIZEOF (Point) ;
fSumX := 0.0 ;
fSumY := 0.0 ;
fSumXY := 0.0 ;
fSumX2 := 0.0 ;
FOR i:=0 TO n -1 DO
fSumX := fSumX + TabData.x ;
fSumy := fSumy + TabData.y;
fSumXY := fSumXY + ( TabData.x * tabData.y);
fsumX2:= fsumX2 + (TabData.x * TabData.x ) ;
END_FOR
regLin.a := ((fSumx*fSumY )- n*fSumXY)/((fSumX * fSumX) - (n * fsumX2));
Quand j'exécute ce code , mes variables fSum* qui sont supposées contenir la sommation de valeurs ne contient que la derniere valeur .
quand je prends en mode "pas à pas" , même à la l'intérieur de la boucle FOR , c'est le comportement que j'observe .
Ces variables sont definies commes de variables locales mais pour obtenir un résultat , il faut que je les déclare en VAR_STAT ce qui est un non sens !!
Quelqu'un a une idée ?
- itasoft
- Mi homme - Mi automate

- Messages : 7807
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: [SoMachine] Variable de fonctions dans biblio
slts,
il faut mettre un mouchard et voir la valeur de X en sortie de la boucle EX:
--------
X:INT;
i: INT;
END_VAR
//--------------------------------------------------------------------
la partie code
//---------------------------------------------------------------------
n:=SIZEOF(TabData)/SIZEOF (Point) ;
fSumX := 0.0 ;
fSumY := 0.0 ;
fSumXY := 0.0 ;
fSumX2 := 0.0 ;
X:=0;
FOR i:=0 TO n -1 DO
X:=X+1;
fSumX := fSumX + TabData.x ;
fSumy := fSumy + TabData.y;
fSumXY := fSumXY + ( TabData.x * tabData.y);
fsumX2:= fsumX2 + (TabData.x * TabData.x ) ;
END_FOR
il faut mettre un mouchard et voir la valeur de X en sortie de la boucle EX:
--------
X:INT;
i: INT;
END_VAR
//--------------------------------------------------------------------
la partie code
//---------------------------------------------------------------------
n:=SIZEOF(TabData)/SIZEOF (Point) ;
fSumX := 0.0 ;
fSumY := 0.0 ;
fSumXY := 0.0 ;
fSumX2 := 0.0 ;
X:=0;
FOR i:=0 TO n -1 DO
X:=X+1;
fSumX := fSumX + TabData.x ;
fSumy := fSumy + TabData.y;
fSumXY := fSumXY + ( TabData.x * tabData.y);
fsumX2:= fsumX2 + (TabData.x * TabData.x ) ;
END_FOR
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
-
philou77
- Mi homme - Mi automate

- Messages : 2142
- Enregistré le : 21 oct. 2015, 10:00
- Localisation : Ile de France
Re: [SoMachine] Variable de fonctions dans biblio
Salut !
Puisque c’est une boucle pour parcourir les éléments d’un tableau, je vois pas d’index sur le tabdata, je me trompe ?
Puisque c’est une boucle pour parcourir les éléments d’un tableau, je vois pas d’index sur le tabdata, je me trompe ?
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! 
- itasoft
- Mi homme - Mi automate

- Messages : 7807
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: [SoMachine] Variable de fonctions dans biblio
----------
exact , ça devrait donner une erreur ????????
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
- pach30
- Générateur de blocs fonctions

- Messages : 116
- Enregistré le : 26 mars 2019, 14:20
- Localisation : ben le Sud de ?
Re: [SoMachine] Variable de fonctions dans biblio
non, je vous vous rassure tabdata est bien indexé
j'ai fait le test de coller cette fonction directement dans un prog et ça fonctionne en variable locale . je ne vois donc pas pourquoi le comportement serait différent à partir du moment ou on la colle dans une librairie !!
edition : l'indexage est supprimé ( certainement interprété ) par PHPBB quand on colle
Code : Tout sélectionner
n:=SIZEOF(TabData)/SIZEOF (Point) ;
fSumX := 0.0 ;
fSumY := 0.0 ;
fSumXY := 0.0 ;
fSumX2 := 0.0 ;
FOR i:=0 TO n -1 DO
fSumX := fSumX + TabData[i].x ;
fSumy := fSumy + TabData[i].y;
fSumXY := fSumXY + ( TabData[i].x * tabData[i].y);
fsumX2:= fsumX2 + (TabData[i].x * TabData[i].x ) ;
END_FOR
regLin.a := ((fSumx*fSumY )- n*fSumXY)/((fSumX * fSumX) - (n * fsumX2));
edition : l'indexage est supprimé ( certainement interprété ) par PHPBB quand on colle
[ i ] et que l'on n'est pas dans un bloc!!Code : Tout sélectionner
- Bruce33
- Dieu du process

- Messages : 932
- Enregistré le : 28 oct. 2015, 06:54
- Localisation : Pas-de-Calais
Re: [SoMachine] Variable de fonctions dans biblio
Bonjour,
Quelle est la définition du type Point ? Et où se trouve sa déclaration ?
Quelle est la définition du type Point ? Et où se trouve sa déclaration ?
- pach30
- Générateur de blocs fonctions

- Messages : 116
- Enregistré le : 26 mars 2019, 14:20
- Localisation : ben le Sud de ?
Re: [SoMachine] Variable de fonctions dans biblio
@bruce33 -> point structure de 2 reels x et y
(et fait partie de la librairie)
(et fait partie de la librairie)
- pach30
- Générateur de blocs fonctions

- Messages : 116
- Enregistré le : 26 mars 2019, 14:20
- Localisation : ben le Sud de ?
Re: [SoMachine] Variable de fonctions dans biblio
Le même code , l'un est dans une fonction du programme , l'autre dans une librairie !!
le coeffpompe ( la fonction dans le prog) est correct
le coeffpompe ( la fonction dans le prog) est correct
- itasoft
- Mi homme - Mi automate

- Messages : 7807
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: [SoMachine] Variable de fonctions dans biblio
slts
tu as mis le mouchard ??
tu as mis le mouchard ??
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
- pach30
- Générateur de blocs fonctions

- Messages : 116
- Enregistré le : 26 mars 2019, 14:20
- Localisation : ben le Sud de ?
Re: [SoMachine] Variable de fonctions dans biblio
@itasoft
pas besoin d'un mouchard , je fais du pas à pas et je vois bien , via la librairie, que la sommation ne se fait pas , comme si à chaque itération de la boucle , il réadressait les variables locales !
Bizarre cette différence de traitement entre une fonction dans le programme et la même fonction dans une librairie !!
pas besoin d'un mouchard , je fais du pas à pas et je vois bien , via la librairie, que la sommation ne se fait pas , comme si à chaque itération de la boucle , il réadressait les variables locales !
Bizarre cette différence de traitement entre une fonction dans le programme et la même fonction dans une librairie !!