Page 1 sur 2

[SoMachine] Variable de fonctions dans biblio

Posté : 27 août 2021, 11:06
par pach30
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 ?

Re: [SoMachine] Variable de fonctions dans biblio

Posté : 27 août 2021, 12:47
par itasoft
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

Re: [SoMachine] Variable de fonctions dans biblio

Posté : 27 août 2021, 12:51
par philou77
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 ?

Re: [SoMachine] Variable de fonctions dans biblio

Posté : 27 août 2021, 13:04
par itasoft
philou77 a écrit : 27 août 2021, 12:51 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 ?
----------
exact , ça devrait donner une erreur ????????

Re: [SoMachine] Variable de fonctions dans biblio

Posté : 27 août 2021, 13:48
par pach30
non, je vous vous rassure tabdata est bien indexé

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));

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
[ i ] et que l'on n'est pas dans un bloc !!

Re: [SoMachine] Variable de fonctions dans biblio

Posté : 27 août 2021, 14:03
par Bruce33
Bonjour,

Quelle est la définition du type Point ? Et où se trouve sa déclaration ?

Re: [SoMachine] Variable de fonctions dans biblio

Posté : 27 août 2021, 14:12
par pach30
@bruce33 -> point structure de 2 reels x et y

(et fait partie de la librairie)

Re: [SoMachine] Variable de fonctions dans biblio

Posté : 27 août 2021, 14:28
par pach30
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
CaptureCOEFF.JPG

Re: [SoMachine] Variable de fonctions dans biblio

Posté : 27 août 2021, 15:26
par itasoft
slts
tu as mis le mouchard ??

Re: [SoMachine] Variable de fonctions dans biblio

Posté : 27 août 2021, 16:05
par pach30
@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 !!