/*************************************************************************************************************************************/
/* */
/* E T U D E D E S V A R I A T I O N S D ' U N E F O N C T I O N { X(i) , Y(i) } */
/* D E F I N I E P A R D E U X F I C H I E R S N U M E R I Q U E S : */
/* */
/* */
/* Nota : */
/* */
/* Ce programme repose historiquement */
/* sur le programme 'v $xtc/var_fonc.01$c'. */
/* On notera le 20120618112700 l'importance */
/* des arguments : */
/* */
/* valeurs=FAUX */
/* variations=FAUX */
/* resume=FAUX */
/* titre_graphe=FAUX */
/* renormaliser_graphe=VRAI */
/* zero=FAUX */
/* */
/* si l'on souhaite visualiser au mieux les */
/* variations (et leurs details) d'une fonction */
/* et elles seules... */
/* */
/* */
/* Author of '$xrv/variation.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 19991118085803). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
@define PRAGMA_CL_____MODULE_NON_OPTIMISABLE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N S D E B A S E E T U N I V E R S E L L E S : */
/* */
/*************************************************************************************************************************************/
#include xrv/dimensionnement.01.vv.I"
/* Introduit le 20111209173845... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* V A L E U R S I M P L I C I T E S D E S P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define EDITER_LES_ANOMALIES_RENCONTREES_DANS_LES_FICHIERS \
VRAI \
/* Faut-il signaler les anomalies de type {DUPLIQUEES,EXTRAPOLEES,UNDEFINIES} lors de la */ \
/* lecture des fichiers. Ceci a ete introduit le 20000125121521. */
#define TRAITER_LES_FICHIERS_MEME_S_IL_Y_A_DES_ANOMALIES \
VRAI \
/* Faut-il traiter un fichier contenant au moins une anomalie ('VRAI') ou pas ('FAUX') ? */
#define NOMBRE_MINIMAL_D_ELEMENTS_A_TRAITER_DANS_LE_FICHIER \
DEUX
#define NOMBRE_MAXIMAL_D_ELEMENTS_A_TRAITER_DANS_LE_FICHIER \
nombre_maximal_d_elements_dans_le_fichier
/* Afin de pouvoir traiter le fichier que si son nombre d'elements est compris dans un */
/* segment [min,max] donne... */
#define TITRE_A_EDITER \
C_VIDE \
/* Dans le cas ou il n'y a pas eu d'anomalies de lecture de fichiers, titre a editer a */ \
/* condition qu'il soit different de 'C_VIDE'... */
#define FIXER_LES_EXTREMA_DE_L_ABSCISSE_AVEC_LES_EXTREMA_DE_LA_FONCTION \
FAUX \
/* Faut-il fixer les extrema de l'abscisse avec les extrema de la fonction ('VRAI') ou */ \
/* bien forcer les valeurs [abscisse_maximale,abscisse_maximale] arbitraires ('FAUX') ? */ \
/* Cette option a ete ajoutee le 20000120155034 et permet aux deux axes d'avoir les memes */ \
/* proportions ; cela fait que la derivee premiere, le rapport et la temperature deviennent */ \
/* des grandeurs "homothetiques" (conservees si la composante 'Y' est multipliee par un */ \
/* facteur arbitraire)... */
#define ABSCISSE_MINIMALE \
COORDONNEE_BARYCENTRIQUE_MINIMALE
#define ABSCISSE_MAXIMALE \
COORDONNEE_BARYCENTRIQUE_MAXIMALE
/* Abscisses extremales. */
#define RENORMALISER_LA_FONCTION \
FAUX \
/* Faut-il renormaliser la fonction ('VRAI') ou pas ('FAUX') ? */
#define RENORMALISER_ARBITRAIREMENT_LA_FONCTION \
FAUX \
/* Lorsque 'IL_FAUT(renormaliser_la_fonction)' cette renormalisation doit-elle etre */ \
/* arbitraire ('VRAI') ou bien utiliser les extrema reels de la fonction ('FAUX') ? */
#define MINIMUM_ARBITRAIRE_DE_LA_FONCTION \
COORDONNEE_BARYCENTRIQUE_MINIMALE
#define MAXIMUM_ARBITRAIRE_DE_LA_FONCTION \
COORDONNEE_BARYCENTRIQUE_MAXIMALE
/* Lorsque 'IL_FAUT(renormaliser_arbitrairement_la_fonction)', valeur des extrema a */
/* utiliser. */
#define TRAITER_LA_LONGUEUR_DE_LA_FONCTION_HOMOTHETIQUEMENT \
FAUX \
/* La longueur doit-elle etre "renormaliser" en fonction du nombre de points de la fonction */ \
/* ('VRAI') ou laissee tel quel ('FAUX') ? */
#define FACTEUR_D_HOMOTHETIE_DE_LA_LONGUEUR \
FLOT(MILLE) \
/* Lorsque 'IL_FAUT(traiter_la_longueur_de_la_fonction_homothetiquement)' facteur */ \
/* multiplicatif a appliquer a la longueur apres division par le nombre de points de la */ \
/* fonction. */
#define FORMAT_FLOTTANT_D_EDITION \
"+.^^^"
#undef FORMAT_FLOTTANT_D_EDITION
#define FORMAT_FLOTTANT_D_EDITION \
"+f"
/* Format d'edition des valeurs flottantes. */
/* */
/* Le 20060105161614, le format "16g" est passe a "^^g" pour plus de souplesse... */
/* */
/* Le 20091123123611, le format "^^g" est passe a "^^^" pour plus de souplesse... */
#define EDITER_LES_MESSAGES_D_EN_TETE \
VRAI \
/* Controle de l'edition. */
#define AUTORISER_L_EDITION_DES_DIFFERENTES_VALEURS \
VRAI \
/* Controle globalement l'edition des differentes valeurs calculees. */
#define EDITER_MALGRE_TOUT_LES_VALEURS_FONDAMENTALES \
FAUX \
/* Si 'IL_NE_FAUT_PAS(autoriser_l_edition_des_differentes_valeurs)', doit-on malgre tout */ \
/* editer les valeurs fondamentales (introduit le 20001108125230) ? */
#define EDITER_LE_NOMBRE_D_ELEMENTS_DES_FICHIERS \
VRAI \
/* Doit-on editer le nombre d'elements (reels) des fichiers ? */
#define EDITER_LE_MINIMUM_DE_L_ABSCISSE \
VRAI \
/* Doit-on editer le minimum de l'abscisse ? */
#define EDITER_LE_MAXIMUM_DE_L_ABSCISSE \
VRAI \
/* Doit-on editer le maximum de l'abscisse ? */
#define EDITER_L_AMPLITUDE_DE_L_ABSCISSE \
VRAI \
/* Doit-on editer l'amplitude (maximum-minimum) de l'abscisse ? */
#define EDITER_LA_MOYENNE_DE_L_ABSCISSE \
VRAI \
/* Doit-on editer la moyenne de l'abscisse ? */
#define EDITER_L_ECART_TYPE_DE_L_ABSCISSE \
VRAI \
/* Doit-on editer l'ecart type de l'abscisse ? */
#define RAPPORTER_L_ECART_TYPE_DE_L_ABSCISSE_AUX_EXTREMA_DE_L_ABSCISSE \
FAUX \
/* Doit-on rapporter l'ecart-type de l'abscisse a l'amplitude du segment [Xmin,Xmax] */ \
/* ('VRAI') ou bien la laisser tel quel ('FAUX') ? */
#define EDITER_LE_MINIMUM_DE_LA_FONCTION \
VRAI \
/* Doit-on editer le minimum de la fonction ? */
#define EDITER_LE_MAXIMUM_DE_LA_FONCTION \
VRAI \
/* Doit-on editer le maximum de la fonction ? */
#define EDITER_L_AMPLITUDE_DE_LA_FONCTION \
VRAI \
/* Doit-on editer l'amplitude (maximum-minimum) de la fonction ? */
#define EDITER_LA_MOYENNE_DE_LA_FONCTION \
VRAI \
/* Doit-on editer la moyenne de la fonction ? */
#define EDITER_L_ECART_TYPE_DE_LA_FONCTION \
VRAI \
/* Doit-on editer l'ecart type de la fonction ? */
#define RAPPORTER_L_ECART_TYPE_DE_LA_FONCTION_AUX_EXTREMA_DE_LA_FONCTION \
FAUX \
/* Doit-on rapporter l'ecart-type de la fonction a l'amplitude du segment [Ymin,Ymax] */ \
/* ('VRAI') ou bien la laisser tel quel ('FAUX') ? */
#define EDITER_LA_DERIVEE_PREMIERE_MOYENNE \
VRAI \
/* Doit-on editer la derivee premiere moyenne ? */
#define RENORMALISER_LA_DERIVEE_PREMIERE_MOYENNE \
FAUX
#define FACTEUR_DE_RENORMALISATION_DE_LA_DERIVEE_PREMIERE_MOYENNE \
FU
/* Doit-on renormaliser la derivee premiere moyenne ? */
#define EDITER_LE_MINIMUM_DE_LA_DERIVEE_PREMIERE \
VRAI \
/* Doit-on editer le minimum de la derivee premiere ? */
#define EDITER_LE_MAXIMUM_DE_LA_DERIVEE_PREMIERE \
VRAI \
/* Doit-on editer le maximum de la derivee premiere ? */
#define EDITER_LA_DERIVEE_SECONDE_MOYENNE \
VRAI \
/* Doit-on editer la derivee seconde moyenne ? */
#define RENORMALISER_LA_DERIVEE_SECONDE_MOYENNE \
FAUX
#define FACTEUR_DE_RENORMALISATION_DE_LA_DERIVEE_SECONDE_MOYENNE \
FU
/* Doit-on renormaliser la derivee seconde moyenne ? */
#define EDITER_LE_MINIMUM_DE_LA_DERIVEE_SECONDE \
VRAI \
/* Doit-on editer le minimum de la derivee premiere ? */
#define EDITER_LE_MAXIMUM_DE_LA_DERIVEE_SECONDE \
VRAI \
/* Doit-on editer le maximum de la derivee premiere ? */
#define VALIDER_LES_EXTREMA_POUR_LE_CALCUL_DU_RAPPORT_DES_PENTES_EXTREMES \
VRAI \
/* Doit-on valider les extrema des coordonnees lors du calcul du rapport des pentes */ \
/* extremes (introduit ele 20031211175847) ? */
#define EDITER_LA_PENTE_DES_EXTREMA \
VRAI \
/* Doit-on editer la pente des extrema ? */
#define EDITER_LE_RAPPORT_DES_PENTES_EXTREMES \
VRAI \
/* Doit-on editer le rapport des pentes extremes ? */
#define EDITER_LA_LONGUEUR_DE_LA_DIAGONALE \
VRAI \
/* Doit-on editer la longueur de la diagonale ? */
#define EDITER_LE_DEMI_PERIMETRE_DU_DOMAINE \
VRAI \
/* Doit-on editer le demi-perimetre du domaine (rectangulaire) ? */
#define EDITER_LA_LONGUEUR_DE_LA_FONCTION \
VRAI \
/* Doit-on editer la longueur de la fonction ? */
#define EDITER_LE_RAPPORT_DE_LA_LONGUEUR_DE_LA_FONCTION_AU_DEMI_PERIMETRE_DU_DOMAINE \
VRAI \
/* Doit-on editer le rapport de la longueur de la fonction au demi-perimetre du domaine ? */
#define EDITER_LE_RAPPORT_DE_LA_LONGUEUR_DE_LA_FONCTION_A_LA_LONGUEUR_DE_LA_DIAGONALE \
VRAI \
/* Doit-on editer le rapport de la longueur de la fonction a la longueur de la diagonale ? */
#define RENORMALISER_LE_RAPPORT_LONGUEUR_FONCTION_A_LONGUEUR_DIAGONALE \
FAUX
#define FACTEUR_DE_RENORMALISATION_DU_RAPPORT_LONGUEUR_FONCTION_A_LONGUEUR_DIAGONALE \
FU
/* Doit-on renormaliser le rapport de la longueur de la fonction a la longueur de la */
/* diagonale ? */
#define EDITER_LA_TEMPERATURE \
VRAI \
/* Doit-on editer la temperature de la fonction ? */
#define RENORMALISER_LA_TEMPERATURE \
FAUX
#define FACTEUR_DE_RENORMALISATION_DE_LA_TEMPERATURE \
FU
/* Doit-on renormaliser la temperature de la fonction ? */
#define RAPPORTER_L_AIRE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE_AUX_EXTREMA_DE_LA_FONCTION \
VRAI \
/* Doit-on rapporter l'aire signee entre la fonction et la diagonale a l'aire du rectangle */ \
/* [Xmin,Xmax]x[Ymin,Ymax] ('VRAI') ou bien la laisser tel quel ('FAUX') ? */ \
/* Cette option a ete ajoutee le 20000120160355 et permet de rendre "homothetique" l'aire */ \
/* ce qui fait que deux fonctions dont les 'Y' different par un facteur multiplicatif */ \
/* auront alors la meme aire. Le 20001108072607, ce parametre est passe de 'FAUX' a 'VRAI', */ \
/* ce qui n'est pas genant car c'est ainsi qu'il etait utilise jusqu'a present ainsi que */ \
/* le montre 'v $xrF/files.01$vv$Y Ra=VRAI'. */
#define CALCULER_LA_VALEUR_ABSOLUE_DE_L_AIRE_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE \
FAUX \
/* Est-ce en fait la valeur absolue de l'aire signee entre la fonction et la diagonale qui */ \
/* est interessante ? Ceci a ete introduit le 20000126105144 car la valeur absolue semble */ \
/* parfois plus interessante que la valeur signee... */
#define EDITER_L_AIRE_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE \
VRAI \
/* Doit-on editer l'aire signee entre la fonction et la diagonale ? */
#define EDITER_L_AIRE_NON_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE \
VRAI \
/* Doit-on editer l'aire non signee entre la fonction et la diagonale ? */
#define RENORMALISER_L_AIRE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE \
FAUX
#define FACTEUR_DE_RENORMALISATION_DE_L_AIRE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE \
FU
/* Doit-on renormaliser l'aire signee entre la fonction et la diagonale ? */
#define EDITER_LA_SYNTHESE_DES_RESULTATS \
VRAI \
/* Doit-on editer la synthese qualitative des resultats ? */
#define EDITER_LE_RESUME_DE_LA_SYNTHESE_DES_RESULTATS \
VRAI \
/* Doit-on editer le resume de la synthese qualitative des resultats ? */
#define EDITER_L_INDICE_GLOBAL \
VRAI \
/* Doit-on editer la valeur de l'indice global (indice introduit le 20000126102622) ? */
#define FACTEUR_DE_L_INDICE_GLOBAL \
NEGA(FU) \
/* Facteur de l'indice global (introduit le 20000215115140). */
#define PONDERATION_DANS_L_INDICE_GLOBAL_DE_LA_DERIVEE_PREMIERE_MOYENNE \
NEUT(GRO2(FU))
#define PONDERATION_DANS_L_INDICE_GLOBAL_DE_LA_DERIVEE_SECONDE_MOYENNE \
FZERO
#define PONDERATION_DANS_L_INDICE_GLOBAL_DU_RAPPORT_LONGUEUR_FONCTION_A_LONGUEUR_DIAGONALE \
NEUT(FRA4(FU))
#define PONDERATION_DANS_L_INDICE_GLOBAL_DE_LA_TEMPERATURE \
FZERO
#define PONDERATION_DANS_L_INDICE_GLOBAL_DE_L_AIRE_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE \
NEGA(FRA2(FU))
/* Ponderations des differentes composantes de l'indice global introduit le 20000126102622. */
/* Les valeurs par defaut ont ete affinees afin d'obtenir de bons resultats de detection de */
/* decroissance le 20000127140212 ('v $xrF/files.01$vv$Y 20000127140212'). On notera que */
/* tous les signes ont ete inverses le 20000215115140, apres l'introduction du nouveau */
/* parametre 'facteur_de_l_indice_global'. */
#define TRANSLATION_DE_L_INDICE_GLOBAL \
FZERO \
/* Translation de l'indice global introduit. */
#define EDITER_LE_GRAPHE_DE_LA_FONCTION \
VRAI \
/* Doit-on editer le graphe de la fonction ? */
#define EDITER_LE_TITRE_DU_GRAPHE_DE_LA_FONCTION \
VRAI \
/* Doit-on editer le titre du graphe de la fonction (introduit le 20021018100938) ? */
#define EDITER_L_INDEX_DU_GRAPHE_DE_LA_FONCTION \
VRAI
#define EDITER_LES_ABSCISSES_DU_GRAPHE_DE_LA_FONCTION \
FAUX
#define EDITER_LES_ORDONNEES_DU_GRAPHE_DE_LA_FONCTION \
VRAI
/* Doit-on editer l'index (edition introduite le 20021018103123), les abscisses et les */
/* ordonnees du graphe de la fonction ? */
#define CONSERVER_LE_ZERO_DE_LA_FONCTION \
VRAI \
/* Doit-on conserver alors le zero de la fonction ? */
#define TABULATION_1_DU_GRAPHE_DE_LA_FONCTION \
GRO1(DIX)
#define TABULATION_2_DU_GRAPHE_DE_LA_FONCTION \
GRO1(VINGT)
#define TABULATION_3_DU_GRAPHE_DE_LA_FONCTION \
GRO1(VINGT)
/* Definition des tabulations. */
#define DEFINITION_DE_L_AXE_HORIZONTAL \
K_MOINS
#define DEFINITION_DU_GRADUATEUR_DE_L_AXE_HORIZONTAL \
K_PIPE
#define PERIODE_DE_GRADUATION_DE_L_AXE_HORIZONTAL \
INFINI
#define DEFINITION_DE_L_AXE_VERTICAL \
K_PIPE
#define DEFINITION_DE_LA_FONCTION \
K_ETOILE
/* Definition des caracteres utiles au trace du graphe de la fonction. */
#define RENORMALISER_LA_FONCTION_POUR_TRACER_SON_GRAPHE \
VRAI \
/* Doit-on renormaliser la fonction dans [0,1] pour tracer son graphe ('VRAI') ou pas */ \
/* ('FAUX'). Ceci a ete introduit le 20031214170250 afin d'etre utilise dans */ \
/* 'v $xiMo/CATALOGUE$Z renormaliser_graphe='. */
#define FACTEUR_DU_GRAPHE_DE_LA_FONCTION \
FLOT(QUATORZE) \
/* Facteur multiplicatif de la fonction lors du trace du graphe. Le 20000121182104 la */ \
/* valeur est passee de 'SEIZE' a 'QUATORZE' de facon a garantir qu'une fonction de */ \
/* pente +1 ou -1 ait un graphe bien regulier... */
#define UTILISER_LA_TEMPERATURE_PLUTOT_QUE_LE_RAPPORT \
FAUX \
/* Lors des tests qualitatifs, vaut-il mieux utiliser la temperature ('VRAI') ou le */ \
/* rapport ('FAUX'). Ceci a ete introduit le 20000126143542. Le 20000127140212 la */ \
/* valeur est passee de 'VRAI' a 'FAUX'. */
#define RAPPORT_BAS \
ADD2(CHAOTICITE_DE_LA_FONCTION(FLOT__QUELCONQUE,FLOT__QUELCONQUE),PARE(0.01))
#define RAPPORT_ELEVE \
ADD2(CHAOTICITE_DE_LA_FONCTION(FLOT__QUELCONQUE,FLOT__QUELCONQUE),PARE(20))
/* Seuils du rapport (introduit le 20000126143542). */
#define TEMPERATURE_BASSE \
ADD2(TEMPERATURE_DE_LA_FONCTION(FLOT__QUELCONQUE,FLOT__QUELCONQUE),PARE(0.01))
#define TEMPERATURE_ELEVEE \
ADD2(TEMPERATURE_DE_LA_FONCTION(FLOT__QUELCONQUE,FLOT__QUELCONQUE),PARE(20))
/* Seuils de temperature. Depuis le 20000126142409 (apres le 20000117102635 date a laquelle */
/* la definition de 'TEMPERATURE_DE_LA_FONCTION(...)' a change et possede un minimum de 1) */
/* 'TEMPERATURE_BASSE' a augmente (alors qu'avant il valait 'PARE(0.01)'). Par symetrie, */
/* il en a ete de meme pour 'TEMPERATURE_ELEVEE'... */
#define SEUIL_DE_LA_DERIVEE_PREMIERE \
PARE(1.0e-1) \
/* Seuil de la derivee premiere. */
#define SEUIL_DE_LA_DERIVEE_SECONDE \
PARE(1.0e-1) \
/* Seuil de la derivee seconde. */
#define SEUIL_DE_L_AIRE_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE \
PARE(1.0e-1) \
/* Seuil de l'aire signee entre la fonction et la diagonale. */
#define SEUIL_DE_L_AMPLITUDE_DE_LA_FONCTION \
PARE(1.0e-1) \
/* Seuil de l'amplitude (maximum-minimum). */
#define POINT_INFERIEUR_DE_DISCONTINUITE_FRANCHE \
SOUS(FU,FRA10(FU))
#define POINT_SUPERIEUR_DE_DISCONTINUITE_FRANCHE \
ADD2(FU,FRA10(FU))
/* Point (1.0) au voisinage duquel il y assez certainement "discontinuite franche", */
/* a condition que la chaoticite soit superieure au seuil */
/* 'seuil_de_chaoticite_pour_une_discontinuite_franche'. */
#define SEUIL_DE_CHAOTICITE_POUR_UNE_DISCONTINUITE_FRANCHE \
ADD2(FU,FRA10(FU)) \
/* Seuil de chaoticite utilise pour la detection d'une "discontinuite franche". */
#define SEUIL_AIRE_NON_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE_POUR_DISCONTINUITE_FRANCHE \
GRO1(FRA10(FU)) \
/* Seuil de l'aire non signee entre la fonction et la diagonale utilise pour la detection */
/* d'une "discontinuite franche". */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S T E X T E S S E R V A N T S I M U L T A N E M E N T */
/* A L ' A C T I V A T I O N D E S O P T I O N S D ' E D I T I O N E T A */
/* L ' I N T R O D U C T I O N D E L ' E D I T I O N D E S V A L E U R S C O R R E S P O N D A N T E S : */
/* */
/*************************************************************************************************************************************/
#define TITRE_egal \
"="
#define TITRE_nombre \
"nombre"
#define TITRE_minimum_X \
"minimum_X"
#define TITRE_maximum_X \
"maximum_X"
#define TITRE_amplitude_X \
"amplitude_X"
#define TITRE_moyenne_X \
"moyenne_X"
#define TITRE_sigma_X \
"sigma_X"
#define TITRE_minimum_Y \
"minimum_Y"
#define TITRE_maximum_Y \
"maximum_Y"
#define TITRE_amplitude_Y \
"amplitude_Y"
#define TITRE_moyenne_Y \
"moyenne_Y"
#define TITRE_sigma_Y \
"sigma_Y"
#define TITRE_derivee_premiere_Y \
"derivee_premiere_Y"
#define TITRE_minimum_derivee_premiere_Y \
"minimum_derivee_premiere_Y"
#define TITRE_maximum_derivee_premiere_Y \
"maximum_derivee_premiere_Y"
#define TITRE_derivee_seconde_Y \
"derivee_seconde_Y"
#define TITRE_minimum_derivee_seconde_Y \
"minimum_derivee_seconde_Y"
#define TITRE_maximum_derivee_seconde_Y \
"maximum_derivee_seconde_Y"
#define TITRE_pente_extrema \
"pente_extrema"
#define TITRE_rapport_pentes_extremes \
"rapport_pentes_extremes"
#define TITRE_longueur_diagonale \
"longueur_diagonale"
#define TITRE_demi_perimetre_du_domaine \
"demi_perimetre_du_domaine"
#define TITRE_longueur \
"longueur"
#define TITRE_discontinuite_franche \
"discontinuite_franche"
#define TITRE_chaoticite \
"chaoticite"
#define TITRE_temperature \
"temperature"
#define TITRE_valeur_absolue_aire_signee \
"valeur_absolue_aire_signee"
#define TITRE_aire_signee \
"aire_signee"
#define TITRE_aire_non_signee \
"aire_non_signee"
#define TITRE_indice_global \
"indice_global"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S E D I T I O N S : */
/* */
/*************************************************************************************************************************************/
#define FORMAT_COMPLET_COURANT_D_EDITION \
chain_Aconcaten2(C_POUR_CENT,format_flottant_d_edition) \
/* Format courant d'edition des valeurs flottantes... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S F I C H I E R S : */
/* */
/*************************************************************************************************************************************/
#include xrv/ARITHMET.1d.I"
/* Passage a l'allocation dynamique le 20060214210311... */
#include xrv/ARITHMET.21.I"
#include xrv/champs_5.41.I"
#define ABSCISSE_IMPLICITE \
FZERO
gGENERATION_D_UN_FICHIER(fichier_LISTE_ABSCISSE,liste_initiale_des_ABSCISSE);
#define ACCES_ABSCISSE(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_ABSCISSE,index)
gGENERATION_D_UN_FICHIER(fichier_LISTE_ABSCISSE_triee_inutile,liste_triee_des_ABSCISSE);
#define ACCES_ABSCISSE_TRIEE(index) \
gELEMENT_DU_FICHIER(liste_triee_des_ABSCISSE,index)
/* Definition des abscisses. */
#define ORDONNEE_IMPLICITE \
FZERO
gGENERATION_D_UN_FICHIER(fichier_LISTE_ORDONNEE,liste_initiale_des_ORDONNEE);
#define ACCES_FONCTION(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_ORDONNEE,index)
gGENERATION_D_UN_FICHIER(fichier_LISTE_ORDONNEE_triee_inutile,liste_triee_des_ORDONNEE);
#define ACCES_FONCTION_TRIEE(index) \
gELEMENT_DU_FICHIER(liste_triee_des_ORDONNEE,index)
/* Definition des ordonnees. */
#define PONDERATION_DE_LA_DERIVEE_PREMIERE_IMPLICITE \
FU
gGENERATION_D_UN_FICHIER(fichier_LISTE_PONDERATION_DE_LA_DERIVEE_PREMIERE,liste_initiale_des_PONDERATION_DE_LA_DERIVEE_PREMIERE);
#define ACCES_PONDERATION_DE_LA_DERIVEE_PREMIERE(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_PONDERATION_DE_LA_DERIVEE_PREMIERE,index)
/* Definition des ponderations de la derivee premiere. */
#define PONDERATION_DE_LA_DERIVEE_SECONDE_IMPLICITE \
FU
gGENERATION_D_UN_FICHIER(fichier_LISTE_PONDERATION_DE_LA_DERIVEE_SECONDE,liste_initiale_des_PONDERATION_DE_LA_DERIVEE_SECONDE);
#define ACCES_PONDERATION_DE_LA_DERIVEE_SECONDE(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_PONDERATION_DE_LA_DERIVEE_SECONDE,index)
/* Definition des ponderations de la derivee seconde. */
#define PONDERATION_DE_LA_LONGUEUR_FONCTION_IMPLICITE \
FU
gGENERATION_D_UN_FICHIER(fichier_LISTE_PONDERATION_DE_LA_LONGUEUR_FONCTION,liste_initiale_des_PONDERATION_DE_LA_LONGUEUR_FONCTION);
#define ACCES_PONDERATION_DE_LA_LONGUEUR_FONCTION(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_PONDERATION_DE_LA_LONGUEUR_FONCTION,index)
/* Definition des ponderations de la longueur de la fonction. */
#define PONDERATION_DE_LA_LONGUEUR_DIAGONALE_IMPLICITE \
FU
gGENERATION_D_UN_FICHIER(fichier_LISTE_PONDERATION_DE_LA_LONGUEUR_DIAGONALE,liste_initiale_des_PONDERATION_DE_LA_LONGUEUR_DIAGONALE);
#define ACCES_PONDERATION_DE_LA_LONGUEUR_DIAGONALE(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_PONDERATION_DE_LA_LONGUEUR_DIAGONALE,index)
/* Definition des ponderations de la longueur de la diagonale. */
#define PONDERATION_DE_L_AIRE_IMPLICITE \
FU
gGENERATION_D_UN_FICHIER(fichier_LISTE_PONDERATION_DE_L_AIRE,liste_initiale_des_PONDERATION_DE_L_AIRE);
#define ACCES_PONDERATION_DE_L_AIRE(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_PONDERATION_DE_L_AIRE,index)
/* Definition des ponderations de l'aire signee entre la fonction et la diagonale. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E S O U T I L S D ' E T U D E D E S V A R I A T I O N S : */
/* */
/*************************************************************************************************************************************/
#define DERIVEE_PREMIERE_IMPLICITE \
FZERO
gGENERATION_D_UN_FICHIER(fichier_LISTE_DERIVEE_PREMIERE,liste_initiale_des_DERIVEE_PREMIERE);
#define ACCES_DERIVEE_PREMIERE(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_DERIVEE_PREMIERE,index) \
/* Definition de la derivee premiere. */
#define DERIVEE_SECONDE_IMPLICITE \
FZERO
gGENERATION_D_UN_FICHIER(fichier_LISTE_DERIVEE_SECONDE,liste_initiale_des_DERIVEE_SECONDE);
#define ACCES_DERIVEE_SECONDE(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_DERIVEE_SECONDE,index) \
/* Definition de la derivee seconde. */
#define DIAGONALE_IMPLICITE \
FZERO
gGENERATION_D_UN_FICHIER(fichier_LISTE_DIAGONALE,liste_initiale_des_DIAGONALE);
#define ACCES_DIAGONALE(index) \
gELEMENT_DU_FICHIER(liste_initiale_des_DIAGONALE,index) \
/* Definition de la diagonale. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#include xrv/variation.11.I"
#define RECHERCHE_DES_EXTREMA_DE_L_ABSCISSE \
Bblock \
EGAL(minimum_de_l_abscisse,F_INFINI); \
EGAL(maximum_de_l_abscisse,F_MOINS_L_INFINI); \
EGAL(moyenne_de_l_abscisse,FZERO); \
\
DoIn(index \
,PREMIER_ELEMENT_D_UN_FICHIER \
,DERNIER_ELEMENT_D_UN_FICHIER \
,I \
) \
Bblock \
DEFV(Float,INIT(valeur_courante_de_l_abscisse,ACCES_ABSCISSE(index))); \
\
EGAL(minimum_de_l_abscisse,MIN2(valeur_courante_de_l_abscisse,minimum_de_l_abscisse)); \
EGAL(maximum_de_l_abscisse,MAX2(valeur_courante_de_l_abscisse,maximum_de_l_abscisse)); \
/* Recherche des extrema de l'abscisse. On notera que depuis le 20000217100842, avec */ \
/* l'introduction de 'GENERATION_D_UNE_LISTE_TRIEE_VERSION_N_AU_CARRE(...)', il a une */ \
/* certaine redondance de ce calcul des extrema avec ce que calcule cette procedure... */ \
/* Mais comme il y a autre chose de calcule, on conserve cette sequence... */ \
\
INCR(moyenne_de_l_abscisse,valeur_courante_de_l_abscisse); \
/* Recherche de la moyenne de l'abscisse. */ \
Eblock \
EDoI \
\
GENERATION_D_UNE_LISTE_TRIEE_VERSION_N_AU_CARRE(liste_triee_des_ABSCISSE \
,liste_initiale_des_ABSCISSE \
,PREMIER_ELEMENT_D_UN_FICHIER \
,DERNIER_ELEMENT_D_UN_FICHIER \
); \
/* Tri de la liste des ABSCISSEs afin d'identifier des extrema identiques... */ \
\
Test(IFEQ(ACCES_ABSCISSE_TRIEE(NEUT(PREMIER_ELEMENT_D_UN_FICHIER)) \
,ACCES_ABSCISSE_TRIEE(SUCC(PREMIER_ELEMENT_D_UN_FICHIER)) \
) \
) \
Bblock \
PRINT_ATTENTION("la liste des ABSCISSEs contient au moins deux minima identiques"); \
CAL1(Prer1("(=%+g)\n",ACCES_ABSCISSE_TRIEE(NEUT(PREMIER_ELEMENT_D_UN_FICHIER)))); \
PRINT_ATTENTION("le calcul du 'rapport des pentes extremes' risque donc d'etre incoherent"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFEQ(ACCES_ABSCISSE_TRIEE(PRED(DERNIER_ELEMENT_D_UN_FICHIER)) \
,ACCES_ABSCISSE_TRIEE(NEUT(DERNIER_ELEMENT_D_UN_FICHIER)) \
) \
) \
Bblock \
PRINT_ATTENTION("la liste des ABSCISSEs contient au moins deux maxima identiques"); \
CAL1(Prer1("(=%+g)\n",ACCES_ABSCISSE_TRIEE(NEUT(DERNIER_ELEMENT_D_UN_FICHIER)))); \
PRINT_ATTENTION("le calcul du 'rapport des pentes extremes' risque donc d'etre incoherent"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
EGAL(amplitude_de_l_abscisse,SOUS(maximum_de_l_abscisse,minimum_de_l_abscisse)); \
/* Calcul de l'amplitude de l'abscisse. */ \
EGAL(moyenne_de_l_abscisse,DIVI(moyenne_de_l_abscisse,nombre_d_elements)); \
/* Recherche de la moyenne de l'abscisse. */ \
\
EGAL(ecart_type_de_l_abscisse,FZERO); \
/* Initialisation de l'ecart type de l'abscisse. */ \
\
DoIn(index \
,PREMIER_ELEMENT_D_UN_FICHIER \
,DERNIER_ELEMENT_D_UN_FICHIER \
,I \
) \
Bblock \
INCR(ecart_type_de_l_abscisse,EXP2(SOUS(ACCES_ABSCISSE(index),moyenne_de_l_abscisse))); \
/* Recherche de l'ecart type de l'abscisse. */ \
Eblock \
EDoI \
\
EGAL(ecart_type_de_l_abscisse,RACX(DIVI(ecart_type_de_l_abscisse,nombre_d_elements))); \
/* Calcul final de l'ecart type de l'abscisse. */ \
Eblock \
/* Recherche des extrema de l'abscisse. */
#define RECHERCHE_DES_EXTREMA_DE_LA_FONCTION \
Bblock \
EGAL(minimum_de_la_fonction,F_INFINI); \
EGAL(maximum_de_la_fonction,F_MOINS_L_INFINI); \
EGAL(moyenne_de_la_fonction,FZERO); \
/* Cette (re-)initialisation a ete ajoutee le 19991126164130 car, en effet, a partir de */ \
/* cette date, on peut editer le graphe de la fonction qui demande un eventuel nouvel */ \
/* appel de 'RECHERCHE_DES_EXTREMA_DE_LA_FONCTION'... */ \
\
DoIn(index \
,PREMIER_ELEMENT_D_UN_FICHIER \
,DERNIER_ELEMENT_D_UN_FICHIER \
,I \
) \
Bblock \
DEFV(Float,INIT(valeur_courante_de_la_fonction,ACCES_FONCTION(index))); \
\
EGAL(minimum_de_la_fonction,MIN2(valeur_courante_de_la_fonction,minimum_de_la_fonction)); \
EGAL(maximum_de_la_fonction,MAX2(valeur_courante_de_la_fonction,maximum_de_la_fonction)); \
/* Recherche des extrema de la fonction. On notera que depuis le 20000217100842, avec */ \
/* l'introduction de 'GENERATION_D_UNE_LISTE_TRIEE_VERSION_N_AU_CARRE(...)', il a une */ \
/* certaine redondance de ce calcul des extrema avec ce que calcule cette procedure... */ \
/* Mais comme il y a autre chose de calcule, on conserve cette sequence... */ \
\
Test(IFEQ(valeur_courante_de_la_fonction,minimum_de_la_fonction)) \
Bblock \
EGAL(abscisse_du_minimum_de_la_fonction,ACCES_ABSCISSE(index)); \
/* Calcul de l'abscisse du minimum de la fonction. */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFEQ(valeur_courante_de_la_fonction,maximum_de_la_fonction)) \
Bblock \
EGAL(abscisse_du_maximum_de_la_fonction,ACCES_ABSCISSE(index)); \
/* Calcul de l'abscisse du maximum de la fonction. */ \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
INCR(moyenne_de_la_fonction,valeur_courante_de_la_fonction); \
/* Recherche de la moyenne de la fonction. */ \
Eblock \
EDoI \
\
GENERATION_D_UNE_LISTE_TRIEE_VERSION_N_AU_CARRE(liste_triee_des_ORDONNEE \
,liste_initiale_des_ORDONNEE \
,PREMIER_ELEMENT_D_UN_FICHIER \
,DERNIER_ELEMENT_D_UN_FICHIER \
); \
/* Tri de la liste des ORDONNEEs afin d'identifier des extrema identiques... */ \
\
Test(IL_FAUT(valider_les_extrema_pour_le_calcul_du_rapport_des_pentes_extremes)) \
/* Test introduit le 20031211175847 pour 'v $xiMo/CATALOGUE$Z valider_extrema='. */ \
Bblock \
Test(IFEQ(ACCES_FONCTION_TRIEE(NEUT(PREMIER_ELEMENT_D_UN_FICHIER)) \
,ACCES_FONCTION_TRIEE(SUCC(PREMIER_ELEMENT_D_UN_FICHIER)) \
) \
) \
Bblock \
PRINT_ATTENTION("la liste des ORDONNEEs contient au moins deux minima identiques"); \
CAL1(Prer1("(=%+g)\n" \
,ACCES_FONCTION_TRIEE(NEUT(PREMIER_ELEMENT_D_UN_FICHIER)) \
) \
); \
PRINT_ATTENTION("le calcul du 'rapport des pentes extremes' risque donc d'etre incoherent"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Test(IFEQ(ACCES_FONCTION_TRIEE(PRED(DERNIER_ELEMENT_D_UN_FICHIER)) \
,ACCES_FONCTION_TRIEE(NEUT(DERNIER_ELEMENT_D_UN_FICHIER)) \
) \
) \
Bblock \
PRINT_ATTENTION("la liste des ORDONNEEs contient au moins deux maxima identiques"); \
CAL1(Prer1("(=%+g)\n" \
,ACCES_FONCTION_TRIEE(NEUT(DERNIER_ELEMENT_D_UN_FICHIER)) \
) \
); \
PRINT_ATTENTION("le calcul du 'rapport des pentes extremes' risque donc d'etre incoherent"); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
EGAL(amplitude_de_la_fonction,SOUS(maximum_de_la_fonction,minimum_de_la_fonction)); \
/* Calcul de l'amplitude de la fonction. */ \
EGAL(moyenne_de_la_fonction,DIVI(moyenne_de_la_fonction,nombre_d_elements)); \
/* Recherche de la moyenne de la fonction. */ \
\
EGAL(ecart_type_de_la_fonction,FZERO); \
/* Initialisation de l'ecart type de la fonction. */ \
\
DoIn(index \
,PREMIER_ELEMENT_D_UN_FICHIER \
,DERNIER_ELEMENT_D_UN_FICHIER \
,I \
) \
Bblock \
INCR(ecart_type_de_la_fonction,EXP2(SOUS(ACCES_FONCTION(index),moyenne_de_la_fonction))); \
/* Recherche de l'ecart type de la fonction. */ \
Eblock \
EDoI \
\
EGAL(ecart_type_de_la_fonction,RACX(DIVI(ecart_type_de_la_fonction,nombre_d_elements))); \
/* Calcul final de l'ecart type de la fonction. */ \
Eblock \
/* Recherche des extrema de la fonction. */
#define CHAOTICITE_DE_LA_FONCTION(longueur_de_la_fonction,longueur_de_la_diagonale) \
DIVI(longueur_de_la_fonction \
,longueur_de_la_diagonale \
) \
/* Chaoticite de la fonction. */
#define gTEMPERATURE_DE_LA_FONCTION(longueur_de_la_fonction,longueur_de_la_diagonale) \
INVZ(LOGX(DIVI(DOUB(longueur_de_la_fonction) \
,SOUS(DOUB(longueur_de_la_fonction),longueur_de_la_diagonale) \
) \
) \
) \
/* Temperature de la fonction. */
#define TEMPERATURE_DE_LA_FONCTION(longueur_de_la_fonction,longueur_de_la_diagonale) \
ADD2(SOUS(gTEMPERATURE_DE_LA_FONCTION(longueur_de_la_fonction,longueur_de_la_diagonale) \
,gTEMPERATURE_DE_LA_FONCTION(FLOT__QUELCONQUE,FLOT__QUELCONQUE) \
) \
,CHAOTICITE_DE_LA_FONCTION(FLOT__QUELCONQUE,FLOT__QUELCONQUE) \
) \
/* Temperature translatee de facon que 'CHAOTICITE_DE_LA_FONCTION(...)' et */ \
/* 'TEMPERATURE_DE_LA_FONCTION(...)' ait la meme valeur lorsque 'longueur_de_la_fonction' */ \
/* et 'longueur_de_la_diagonale' sont egales. Ceci a ete introduit le 20000117102635 pour */ \
/* permettre a 'CHAOTICITE_DE_LA_FONCTION(...)' et 'TEMPERATURE_DE_LA_FONCTION(...)' d'etre */ \
/* interchangeables ('v $xrF/files.01$vv$Y analyse'). */
#define RENORMALISATION_HYPERBOLIQUE(valeur,renormaliser,facteur_de_renormalisation) \
COND(IL_NE_FAUT_PAS(renormaliser) \
,valeur \
,TANH(MUL2(facteur_de_renormalisation,valeur)) \
) \
/* Renormalisation "hyperbolique" de certaines valeurs calculees... */
#define EDITER_LES_VALEURS_FONDAMENTALES \
IL_FAUT(editer_malgre_tout_les_valeurs_fondamentales)
#define NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES \
TOUJOURS_FAUX
/* Pour positionner l'indicateur 'il_faut_editer_malgre_tout' ci-apres... */
#define EDITER_UNE_VALEUR_QUELCONQUE(valeur,editer_cette_valeur,il_faut_editer_malgre_tout,format,message_d_en_tete,sequence_edit) \
Bblock \
Test(IFOU(IFET(IL_FAUT(autoriser_l_edition_des_differentes_valeurs),IL_FAUT(editer_cette_valeur)) \
,IFET(IL_NE_FAUT_PAS(autoriser_l_edition_des_differentes_valeurs),il_faut_editer_malgre_tout) \
) \
) \
Bblock \
Test(IL_FAUT(editer_les_messages_d_en_tete)) \
Bblock \
CAL2(Prin1("%s=",message_d_en_tete)); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
BLOC(sequence_edit); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Procedure d'edition conditionnelle d'une valeur quelconque. */
#define EDITER_UNE_VALEUR(valeur,editer_cette_valeur,il_faut_editer_malgre_tout,format,message_d_en_tete) \
Bblock \
EDITER_UNE_VALEUR_QUELCONQUE(valeur \
,editer_cette_valeur \
,il_faut_editer_malgre_tout \
,format \
,message_d_en_tete \
,BLOC(Test(IL_FAUT(formater_le_resultat_de_l_operation_sur_les_valeurs_courantes)) \
Bblock \
CAL2(Prin2(Cara(chain_Aconcaten5(C_POUR_CENT \
,valeurs_signees \
,".*" \
,format_d_edition \
,"\n" \
) \
) \
,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) \
,MULTIPLE_DE(ENTIER_FLOTTANT(valeur)) \
) \
); \
Eblock \
ATes \
Bblock \
CAL2(Prin1(Cara(chain_Aconcaten2(format,"\n")),valeur)); \
Eblock \
ETes \
) \
); \
Eblock \
/* Procedure d'edition conditionnelle d'une valeur numerique. */
#define EDITER_UN_TEXTE(texte,editer_ce_texte,il_faut_editer_malgre_tout,format,message_d_en_tete) \
Bblock \
EDITER_UNE_VALEUR_QUELCONQUE(texte \
,editer_ce_texte \
,il_faut_editer_malgre_tout \
,format \
,message_d_en_tete \
,BLOC(CAL2(Prin1(Cara(chain_Aconcaten2(format,"\n")),texte)); \
) \
); \
Eblock \
/* Procedure d'edition conditionnelle d'un texte. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* E T U D E D E S V A R I A T I O N S D ' U N F I C H I E R N U M E R I Q U E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
#include xci/valeurs.03.I"
DEFV(Int,INIT(nombre_d_elements,NOMBRE_D_ELEMENTS));
/* Nombre d'elements attendus a priori dans le fichier. */
DEFV(Int,INIT(index,UNDEF));
/* Index de l'element courant dans le fichier. */
DEFV(Logical,INIT(editer_les_anomalies_rencontrees_dans_les_fichiers,EDITER_LES_ANOMALIES_RENCONTREES_DANS_LES_FICHIERS));
/* Faut-il signaler les anomalies de type {DUPLIQUEES,EXTRAPOLEES,UNDEFINIES} lors de la */
/* lecture des fichiers. Ceci a ete introduit le 20000125121521. */
DEFV(Logical,INIT(traiter_les_fichiers_meme_s_il_y_a_des_anomalies,TRAITER_LES_FICHIERS_MEME_S_IL_Y_A_DES_ANOMALIES));
/* Faut-il traiter un fichier contenant au moins une anomalie ('VRAI') ou pas ('FAUX') ? */
DEFV(Logical,INIT(il_y_a_des_anomalies_dans_les_fichiers,FAUX));
/* A priori, il n'y a pas (encore) d'anomalies dans les fichiers... */
DEFV(Int,INIT(nombre_minimal_d_elements_a_traiter_dans_le_fichier,NOMBRE_MINIMAL_D_ELEMENTS_A_TRAITER_DANS_LE_FICHIER));
DEFV(Int,INIT(nombre_maximal_d_elements_a_traiter_dans_le_fichier,NOMBRE_MAXIMAL_D_ELEMENTS_A_TRAITER_DANS_LE_FICHIER));
/* Afin de pouvoir traiter le fichier que si son nombre d'elements est compris dans un */
/* segment [min,max] donne... */
DEFV(CHAR,INIC(POINTERc(titre_a_editer),TITRE_A_EDITER));
/* Dans le cas ou il n'y a pas eu d'anomalies de lecture de fichiers, titre a editer a */
/* condition qu'il soit different de 'C_VIDE'... */
DEFV(Logical,INIT(fixer_les_extrema_de_l_abscisse_avec_les_extrema_de_la_fonction
,FIXER_LES_EXTREMA_DE_L_ABSCISSE_AVEC_LES_EXTREMA_DE_LA_FONCTION
)
);
/* Faut-il fixer les extrema de l'abscisse avec les extrema de la fonction ('VRAI') ou */
/* bien forcer les valeurs [abscisse_maximale,abscisse_maximale] arbitraires ('FAUX') ? */
/* Cette option a ete ajoutee le 20000120155034 et permet aux deux axes d'avoir les memes */
/* proportions ; cela fait que la derivee premiere, le rapport et la temperature deviennent */
/* des grandeurs "homothetiques" (conservees si la composante 'Y' est multipliee par un */
/* facteur arbitraire)... */
DEFV(Float,INIT(abscisse_minimale,ABSCISSE_MINIMALE));
DEFV(Float,INIT(abscisse_maximale,ABSCISSE_MAXIMALE));
/* Abscisses extremales. */
DEFV(Logical,INIT(renormaliser_la_fonction,RENORMALISER_LA_FONCTION));
/* Faut-il renormaliser la fonction ('VRAI') ou pas ('FAUX') ? */
DEFV(Logical,INIT(renormaliser_arbitrairement_la_fonction,RENORMALISER_ARBITRAIREMENT_LA_FONCTION));
/* Lorsque 'IL_FAUT(renormaliser_la_fonction)' cette renormalisation doit-elle etre */
/* arbitraire ('VRAI') ou bien utiliser les extrema reels de la fonction ('FAUX') ? */
DEFV(Float,INIT(minimum_arbitraire_de_la_fonction,MINIMUM_ARBITRAIRE_DE_LA_FONCTION));
DEFV(Float,INIT(maximum_arbitraire_de_la_fonction,MAXIMUM_ARBITRAIRE_DE_LA_FONCTION));
/* Lorsque 'IL_FAUT(renormaliser_arbitrairement_la_fonction)', valeur des extrema a */
/* utiliser. */
DEFV(Logical,INIT(traiter_la_longueur_de_la_fonction_homothetiquement,TRAITER_LA_LONGUEUR_DE_LA_FONCTION_HOMOTHETIQUEMENT));
/* La longueur doit-elle etre "renormaliser" en fonction du nombre de points de la fonction */
/* ('VRAI') ou laissee tel quel ('FAUX') ? */
DEFV(Float,INIT(facteur_d_homothetie_de_la_longueur,FACTEUR_D_HOMOTHETIE_DE_LA_LONGUEUR));
/* Lorsque 'IL_FAUT(traiter_la_longueur_de_la_fonction_homothetiquement)' facteur */
/* multiplicatif a appliquer a la longueur apres division par le nombre de points de la */
/* fonction. */
DEFV(CHAR,INIC(POINTERc(format_flottant_d_edition),FORMAT_FLOTTANT_D_EDITION));
/* Format d'edition des valeurs flottantes. */
DEFV(Logical,INIT(editer_les_messages_d_en_tete,EDITER_LES_MESSAGES_D_EN_TETE));
/* Controle de l'edition. */
DEFV(Logical,INIT(autoriser_l_edition_des_differentes_valeurs,AUTORISER_L_EDITION_DES_DIFFERENTES_VALEURS));
/* Controle globalement l'edition des differentes valeurs calculees. */
DEFV(Logical,INIT(editer_malgre_tout_les_valeurs_fondamentales,EDITER_MALGRE_TOUT_LES_VALEURS_FONDAMENTALES));
/* Si 'IL_NE_FAUT_PAS(autoriser_l_edition_des_differentes_valeurs)', doit-on malgre tout */
/* editer les valeurs fondamentales (introduit le 20001108125230) ? */
DEFV(Logical,INIT(editer_le_nombre_d_elements_des_fichiers,EDITER_LE_NOMBRE_D_ELEMENTS_DES_FICHIERS));
/* Doit-on editer le nombre d'elements (reels) des fichiers ? */
DEFV(Logical,INIT(editer_le_minimum_de_l_abscisse,EDITER_LE_MINIMUM_DE_L_ABSCISSE));
/* Doit-on editer le minimum de l'abscisse ? */
DEFV(Logical,INIT(editer_le_maximum_de_l_abscisse,EDITER_LE_MAXIMUM_DE_L_ABSCISSE));
/* Doit-on editer le maximum de l'abscisse ? */
DEFV(Logical,INIT(editer_l_amplitude_de_l_abscisse,EDITER_L_AMPLITUDE_DE_L_ABSCISSE));
/* Doit-on editer l'amplitude (maximum-minimum) de l'abscisse ? */
DEFV(Logical,INIT(editer_la_moyenne_de_l_abscisse,EDITER_LA_MOYENNE_DE_L_ABSCISSE));
/* Doit-on editer la moyenne de l'abscisse ? */
DEFV(Logical,INIT(editer_l_ecart_type_de_l_abscisse,EDITER_L_ECART_TYPE_DE_L_ABSCISSE));
/* Doit-on editer l'ecart type de l'abscisse ? */
DEFV(Logical,INIT(rapporter_l_ecart_type_de_l_abscisse_aux_extrema_de_l_abscisse
,RAPPORTER_L_ECART_TYPE_DE_L_ABSCISSE_AUX_EXTREMA_DE_L_ABSCISSE
)
);
/* Doit-on rapporter l'ecart-type de l'abscisse a l'amplitude du segment [Xmin,Xmax] */
/* ('VRAI') ou bien la laisser tel quel ('FAUX') ? */
DEFV(Logical,INIT(editer_le_minimum_de_la_fonction,EDITER_LE_MINIMUM_DE_LA_FONCTION));
/* Doit-on editer le minimum de la fonction ? */
DEFV(Logical,INIT(editer_le_maximum_de_la_fonction,EDITER_LE_MAXIMUM_DE_LA_FONCTION));
/* Doit-on editer le maximum de la fonction ? */
DEFV(Logical,INIT(editer_l_amplitude_de_la_fonction,EDITER_L_AMPLITUDE_DE_LA_FONCTION));
/* Doit-on editer l'amplitude (maximum-minimum) de la fonction ? */
DEFV(Logical,INIT(editer_la_moyenne_de_la_fonction,EDITER_LA_MOYENNE_DE_LA_FONCTION));
/* Doit-on editer la moyenne de la fonction ? */
DEFV(Logical,INIT(editer_l_ecart_type_de_la_fonction,EDITER_L_ECART_TYPE_DE_LA_FONCTION));
/* Doit-on editer l'ecart type de la fonction ? */
DEFV(Logical,INIT(rapporter_l_ecart_type_de_la_fonction_aux_extrema_de_la_fonction
,RAPPORTER_L_ECART_TYPE_DE_LA_FONCTION_AUX_EXTREMA_DE_LA_FONCTION
)
);
/* Doit-on rapporter l'ecart-type de la fonction a l'amplitude du segment [Ymin,Ymax] */
/* ('VRAI') ou bien la laisser tel quel ('FAUX') ? */
DEFV(Logical,INIT(editer_la_derivee_premiere_moyenne,EDITER_LA_DERIVEE_PREMIERE_MOYENNE));
/* Doit-on editer la derivee premiere moyenne ? */
DEFV(Logical,INIT(renormaliser_la_derivee_premiere_moyenne
,RENORMALISER_LA_DERIVEE_PREMIERE_MOYENNE
)
);
DEFV(Float,INIT(facteur_de_renormalisation_de_la_derivee_premiere_moyenne
,FACTEUR_DE_RENORMALISATION_DE_LA_DERIVEE_PREMIERE_MOYENNE
)
);
/* Doit-on renormaliser la derivee premiere moyenne ? */
DEFV(Logical,INIT(editer_le_minimum_de_la_derivee_premiere,EDITER_LE_MINIMUM_DE_LA_DERIVEE_PREMIERE));
/* Doit-on editer le minimum de la derivee premiere ? */
DEFV(Logical,INIT(editer_le_maximum_de_la_derivee_premiere,EDITER_LE_MAXIMUM_DE_LA_DERIVEE_PREMIERE));
/* Doit-on editer le maximum de la derivee premiere ? */
DEFV(Logical,INIT(editer_la_derivee_seconde_moyenne,EDITER_LA_DERIVEE_SECONDE_MOYENNE));
/* Doit-on editer la derivee seconde moyenne ? */
DEFV(Logical,INIT(renormaliser_la_derivee_seconde_moyenne
,RENORMALISER_LA_DERIVEE_SECONDE_MOYENNE
)
);
DEFV(Float,INIT(facteur_de_renormalisation_de_la_derivee_seconde_moyenne
,FACTEUR_DE_RENORMALISATION_DE_LA_DERIVEE_SECONDE_MOYENNE
)
);
/* Doit-on renormaliser la derivee seconde moyenne ? */
DEFV(Logical,INIT(editer_le_minimum_de_la_derivee_seconde,EDITER_LE_MINIMUM_DE_LA_DERIVEE_SECONDE));
/* Doit-on editer le minimum de la derivee premiere ? */
DEFV(Logical,INIT(editer_le_maximum_de_la_derivee_seconde,EDITER_LE_MAXIMUM_DE_LA_DERIVEE_SECONDE));
/* Doit-on editer le maximum de la derivee premiere ? */
DEFV(Logical,INIT(valider_les_extrema_pour_le_calcul_du_rapport_des_pentes_extremes
,VALIDER_LES_EXTREMA_POUR_LE_CALCUL_DU_RAPPORT_DES_PENTES_EXTREMES
)
);
/* Doit-on valider les extrema des coordonnees lors du calcul du rapport des pentes */
/* extremes (introduit ele 20031211175847) ? */
DEFV(Logical,INIT(editer_la_pente_des_extrema,EDITER_LA_PENTE_DES_EXTREMA));
/* Doit-on editer la pente des extrema ? */
DEFV(Logical,INIT(editer_le_rapport_des_pentes_extremes,EDITER_LE_RAPPORT_DES_PENTES_EXTREMES));
/* Doit-on editer le rapport des pentes extremes ? */
DEFV(Logical,INIT(editer_la_longueur_de_la_diagonale,EDITER_LA_LONGUEUR_DE_LA_DIAGONALE));
/* Doit-on editer la longueur de la diagonale ? */
DEFV(Logical,INIT(editer_le_demi_perimetre_du_domaine,EDITER_LE_DEMI_PERIMETRE_DU_DOMAINE));
/* Doit-on editer le demi-perimetre du domaine (rectangulaire) ? */
DEFV(Logical,INIT(editer_la_longueur_de_la_fonction,EDITER_LA_LONGUEUR_DE_LA_FONCTION));
/* Doit-on editer la longueur de la fonction ? */
DEFV(Logical,INIT(editer_le_rapport_de_la_longueur_de_la_fonction_au_demi_perimetre_du_domaine
,EDITER_LE_RAPPORT_DE_LA_LONGUEUR_DE_LA_FONCTION_AU_DEMI_PERIMETRE_DU_DOMAINE
)
);
/* Doit-on editer le rapport de la longueur de la fonction au demi-perimetre du domaine ? */
DEFV(Logical,INIT(editer_le_rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale
,EDITER_LE_RAPPORT_DE_LA_LONGUEUR_DE_LA_FONCTION_A_LA_LONGUEUR_DE_LA_DIAGONALE
)
);
/* Doit-on editer le rapport de la longueur de la fonction a la longueur de la diagonale ? */
DEFV(Logical,INIT(renormaliser_le_rapport_longueur_fonction_a_longueur_diagonale
,RENORMALISER_LE_RAPPORT_LONGUEUR_FONCTION_A_LONGUEUR_DIAGONALE
)
);
DEFV(Float,INIT(facteur_de_renormalisation_du_rapport_longueur_fonction_a_longueur_diagonale
,FACTEUR_DE_RENORMALISATION_DU_RAPPORT_LONGUEUR_FONCTION_A_LONGUEUR_DIAGONALE
)
);
/* Doit-on renormaliser le rapport de la longueur de la fonction a la longueur de la */
/* diagonale ? */
DEFV(Logical,INIT(editer_la_temperature,EDITER_LA_TEMPERATURE));
/* Doit-on editer la temperature de la fonction ? */
DEFV(Logical,INIT(renormaliser_la_temperature
,RENORMALISER_LA_TEMPERATURE
)
);
DEFV(Float,INIT(facteur_de_renormalisation_de_la_temperature
,FACTEUR_DE_RENORMALISATION_DE_LA_TEMPERATURE
)
);
/* Doit-on renormaliser la temperature de la fonction ? */
DEFV(Logical,INIT(rapporter_l_aire_entre_la_fonction_et_la_diagonale_aux_extrema_de_la_fonction
,RAPPORTER_L_AIRE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE_AUX_EXTREMA_DE_LA_FONCTION
)
);
/* Doit-on rapporter l'aire signee entre la fonction et la diagonale a l'aire du rectangle */
/* [Xmin,Xmax]x[Ymin,Ymax] ('VRAI') ou bien la laisser tel quel ('FAUX') ? */
/* Cette option a ete ajoutee le 20000120160355 et permet de rendre "homothetique" l'aire */
/* ce qui fait que deux fonctions dont les 'Y' different par un facteur multiplicatif */
/* auront alors la meme aire... */
DEFV(Logical,INIT(calculer_la_valeur_absolue_de_l_aire_signee_entre_la_fonction_et_la_diagonale
,CALCULER_LA_VALEUR_ABSOLUE_DE_L_AIRE_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE
)
);
/* Est-ce en fait la valeur absolue de l'aire signee entre la fonction et la diagonale qui */
/* est interessante ? Ceci a ete introduit le 20000126105144 car la valeur absolue semble */
/* parfois plus interessante que la valeur signee... */
DEFV(Logical,INIT(editer_l_aire_signee_entre_la_fonction_et_la_diagonale
,EDITER_L_AIRE_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE
)
);
/* Doit-on editer l'aire signee entre la fonction et la diagonale ? */
DEFV(Logical,INIT(editer_l_aire_non_signee_entre_la_fonction_et_la_diagonale
,EDITER_L_AIRE_NON_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE
)
);
/* Doit-on editer l'aire non signee entre la fonction et la diagonale ? */
DEFV(Logical,INIT(renormaliser_l_aire_entre_la_fonction_et_la_diagonale
,RENORMALISER_L_AIRE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE
)
);
DEFV(Float,INIT(facteur_de_renormalisation_de_l_aire_entre_la_fonction_et_la_diagonale
,FACTEUR_DE_RENORMALISATION_DE_L_AIRE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE
)
);
/* Doit-on renormaliser l'aire signee entre la fonction et la diagonale ? */
DEFV(Logical,INIT(editer_la_synthese_des_resultats,EDITER_LA_SYNTHESE_DES_RESULTATS));
/* Doit-on editer la synthese qualitative des resultats ? */
DEFV(Logical,INIT(editer_le_resume_de_la_synthese_des_resultats,EDITER_LE_RESUME_DE_LA_SYNTHESE_DES_RESULTATS));
/* Doit-on editer le resume de la synthese qualitative des resultats ? */
DEFV(Logical,INIT(editer_l_indice_global,EDITER_L_INDICE_GLOBAL));
/* Doit-on editer la valeur de l'indice global (indice introduit le 20000126102622) ? */
DEFV(Float,INIT(facteur_de_l_indice_global,FACTEUR_DE_L_INDICE_GLOBAL));
/* Facteur de l'indice global (introduit le 20000215115140). */
DEFV(Float,INIT(ponderation_dans_l_indice_global_de_la_derivee_premiere_moyenne
,PONDERATION_DANS_L_INDICE_GLOBAL_DE_LA_DERIVEE_PREMIERE_MOYENNE
)
);
DEFV(Float,INIT(ponderation_dans_l_indice_global_de_la_derivee_seconde_moyenne
,PONDERATION_DANS_L_INDICE_GLOBAL_DE_LA_DERIVEE_SECONDE_MOYENNE
)
);
DEFV(Float,INIT(ponderation_dans_l_indice_global_du_rapport_longueur_fonction_a_longueur_diagonale
,PONDERATION_DANS_L_INDICE_GLOBAL_DU_RAPPORT_LONGUEUR_FONCTION_A_LONGUEUR_DIAGONALE
)
);
DEFV(Float,INIT(ponderation_dans_l_indice_global_de_la_temperature
,PONDERATION_DANS_L_INDICE_GLOBAL_DE_LA_TEMPERATURE
)
);
DEFV(Float,INIT(ponderation_dans_l_indice_global_de_l_aire_signee_entre_la_fonction_et_la_diagonale
,PONDERATION_DANS_L_INDICE_GLOBAL_DE_L_AIRE_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE
)
);
/* Ponderations des differentes composantes de l'indice global introduit le 20000126102622. */
/* Les valeurs par defaut ont ete affinees afin d'obtenir de bons resultats de detection de */
/* decroissance le 20000127140212 ('v $xrF/files.01$vv$Y 20000127140212'). On notera que */
/* tous les signes ont ete inverses le 20000215115140, apres l'introduction du nouveau */
/* parametre 'facteur_de_l_indice_global'. */
DEFV(Float,INIT(translation_de_l_indice_global,TRANSLATION_DE_L_INDICE_GLOBAL));
/* Translation de l'indice global introduit. */
DEFV(Logical,INIT(editer_le_graphe_de_la_fonction,EDITER_LE_GRAPHE_DE_LA_FONCTION));
/* Doit-on editer le graphe de la fonction ? */
DEFV(Logical,INIT(editer_le_titre_du_graphe_de_la_fonction,EDITER_LE_TITRE_DU_GRAPHE_DE_LA_FONCTION));
/* Doit-on editer le titre du graphe de la fonction (introduit le 20021018100938) ? */
DEFV(Logical,INIT(editer_l_index_du_graphe_de_la_fonction,EDITER_L_INDEX_DU_GRAPHE_DE_LA_FONCTION));
DEFV(Logical,INIT(editer_les_abscisses_du_graphe_de_la_fonction,EDITER_LES_ABSCISSES_DU_GRAPHE_DE_LA_FONCTION));
DEFV(Logical,INIT(editer_les_ordonnees_du_graphe_de_la_fonction,EDITER_LES_ORDONNEES_DU_GRAPHE_DE_LA_FONCTION));
/* Doit-on editer l'index (edition introduite le 20021018103123), les abscisses et les */
/* ordonnees du graphe de la fonction ? */
DEFV(Logical,INIT(conserver_le_zero_de_la_fonction,CONSERVER_LE_ZERO_DE_LA_FONCTION));
/* Doit-on conserver alors le zero de la fonction ? */
DEFV(Int,INIT(tabulation_1_du_graphe_de_la_fonction,TABULATION_1_DU_GRAPHE_DE_LA_FONCTION));
DEFV(Int,INIT(tabulation_2_du_graphe_de_la_fonction,TABULATION_2_DU_GRAPHE_DE_LA_FONCTION));
DEFV(Int,INIT(tabulation_3_du_graphe_de_la_fonction,TABULATION_3_DU_GRAPHE_DE_LA_FONCTION));
/* Definition des tabulations. */
DEFV(CHAR,INIT(definition_de_l_axe_horizontal,DEFINITION_DE_L_AXE_HORIZONTAL));
DEFV(CHAR,INIT(definition_du_graduateur_de_l_axe_horizontal,DEFINITION_DU_GRADUATEUR_DE_L_AXE_HORIZONTAL));
DEFV(Positive,INIT(periode_de_graduation_de_l_axe_horizontal,PERIODE_DE_GRADUATION_DE_L_AXE_HORIZONTAL));
DEFV(CHAR,INIT(definition_de_l_axe_vertical,DEFINITION_DE_L_AXE_VERTICAL));
DEFV(CHAR,INIT(definition_de_la_fonction,DEFINITION_DE_LA_FONCTION));
/* Definition des caracteres utiles au trace du graphe de la fonction. */
DEFV(Logical,INIT(renormaliser_la_fonction_pour_tracer_son_graphe,RENORMALISER_LA_FONCTION_POUR_TRACER_SON_GRAPHE));
/* Doit-on renormaliser la fonction dans [0,1] pour tracer son graphe ('VRAI') ou pas */
/* ('FAUX'). Ceci a ete introduit le 20031214170250 afin d'etre utilise dans */
/* 'v $xiMo/CATALOGUE$Z renormaliser_graphe='. */
DEFV(Float,INIT(facteur_du_graphe_de_la_fonction,FACTEUR_DU_GRAPHE_DE_LA_FONCTION));
/* Facteur multiplicatif de la fonction lors du trace du graphe. */
DEFV(Logical,INIT(utiliser_la_temperature_plutot_que_le_rapport,UTILISER_LA_TEMPERATURE_PLUTOT_QUE_LE_RAPPORT));
/* Lors des tests qualitatifs, vaut-il mieux utiliser la temperature ('VRAI') ou le */
/* rapport ('FAUX'). Ceci a ete introduit le 20000126143542. */
DEFV(Float,INIT(rapport_bas,RAPPORT_BAS));
DEFV(Float,INIT(rapport_eleve,RAPPORT_ELEVE));
/* Seuils du rapport (introduit le 20000126143542). */
DEFV(Float,INIT(temperature_basse,TEMPERATURE_BASSE));
DEFV(Float,INIT(temperature_elevee,TEMPERATURE_ELEVEE));
/* Seuils de temperature. */
DEFV(Float,INIT(seuil_de_la_derivee_premiere,SEUIL_DE_LA_DERIVEE_PREMIERE));
/* Seuil de la derivee premiere. */
DEFV(Float,INIT(seuil_de_la_derivee_seconde,SEUIL_DE_LA_DERIVEE_SECONDE));
/* Seuil de la derivee seconde. */
DEFV(Float,INIT(seuil_de_l_aire_signee_entre_la_fonction_et_la_diagonale
,SEUIL_DE_L_AIRE_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE
)
);
/* Seuil de l'aire signee entre la fonction et la diagonale. */
DEFV(Float,INIT(seuil_de_l_amplitude_de_la_fonction,SEUIL_DE_L_AMPLITUDE_DE_LA_FONCTION));
/* Seuil de l'amplitude (maximum-minimum). */
DEFV(Float,INIT(point_inferieur_de_discontinuite_franche,POINT_INFERIEUR_DE_DISCONTINUITE_FRANCHE));
DEFV(Float,INIT(point_superieur_de_discontinuite_franche,POINT_SUPERIEUR_DE_DISCONTINUITE_FRANCHE));
/* Point (1.0) au voisinage duquel il y assez certainement "discontinuite franche", */
/* a condition que la chaoticite soit superieure au seuil */
/* 'seuil_de_chaoticite_pour_une_discontinuite_franche'. */
DEFV(Float,INIT(seuil_de_chaoticite_pour_une_discontinuite_franche,SEUIL_DE_CHAOTICITE_POUR_UNE_DISCONTINUITE_FRANCHE));
/* Seuil de chaoticite utilise pour la detection d'une "discontinuite franche". */
DEFV(Float,INIT(seuil_aire_non_signee_entre_la_fonction_et_la_diagonale_pour_discontinuite_franche
,SEUIL_AIRE_NON_SIGNEE_ENTRE_LA_FONCTION_ET_LA_DIAGONALE_POUR_DISCONTINUITE_FRANCHE
)
);
/* Seuil de l'aire non signee entre la fonction et la diagonale utilise pour la detection */
/* d'une "discontinuite franche". */
DEFV(Float,INIT(minimum_de_l_abscisse,F_INFINI));
DEFV(Float,INIT(maximum_de_l_abscisse,F_MOINS_L_INFINI));
/* Extrema de l'abscisse. */
DEFV(Float,INIT(moyenne_de_l_abscisse,FZERO));
/* Moyenne de l'abscisse. */
DEFV(Float,INIT(amplitude_de_l_abscisse,FLOT__UNDEF));
/* Amplitude de l'abscisse. */
DEFV(Float,INIT(ecart_type_de_l_abscisse,FZERO));
/* Ecart type de l'abscisse. */
DEFV(Float,INIT(delta_x,FLOT__UNDEF));
/* Pas sur l'axe 'OX'. */
DEFV(Float,INIT(abscisse_du_minimum_de_la_fonction,FLOT__UNDEF));
DEFV(Float,INIT(minimum_de_la_fonction,F_INFINI));
DEFV(Float,INIT(abscisse_du_maximum_de_la_fonction,FLOT__UNDEF));
DEFV(Float,INIT(maximum_de_la_fonction,F_MOINS_L_INFINI));
/* Extrema de la fonction. */
DEFV(Float,INIT(moyenne_de_la_fonction,FZERO));
/* Moyenne de la fonction. */
DEFV(Float,INIT(amplitude_de_la_fonction,FLOT__UNDEF));
/* Amplitude de la fonction. */
DEFV(Float,INIT(ecart_type_de_la_fonction,FZERO));
/* Ecart type de la fonction. */
DEFV(Float,INIT(moyenne_de_la_derivee_premiere,FZERO));
/* Moyenne de la derivee premiere. */
DEFV(Float,INIT(minimum_de_la_derivee_premiere,F_INFINI));
DEFV(Float,INIT(maximum_de_la_derivee_premiere,F_MOINS_L_INFINI));
/* Extrema de la derivee premiere. */
DEFV(Float,INIT(moyenne_de_la_derivee_seconde,FZERO));
/* Moyenne de la derivee seconde. */
DEFV(Float,INIT(minimum_de_la_derivee_seconde,F_INFINI));
DEFV(Float,INIT(maximum_de_la_derivee_seconde,F_MOINS_L_INFINI));
/* Extrema de la derivee seconde. */
DEFV(Float,INIT(pente_des_extrema,FLOT__UNDEF));
DEFV(Float,INIT(rapport_des_pentes_extremes,FLOT__UNDEF));
/* "Rapport des pentes extremes". */
DEFV(Float,INIT(longueur_de_la_fonction,FZERO));
/* Longueur de la fonction. */
DEFV(Float,INIT(longueur_de_la_diagonale,FLOT__UNDEF));
/* Longueur de la diagonale. */
DEFV(Float,INIT(demi_perimetre_du_domaine,FLOT__UNDEF));
/* Demi-perimetre du domaine (rectangulaire). */
DEFV(Float,INIT(discontinuite_franche,FLOT__UNDEF));
/* Rapport de la longueur de la fonction au demi-perimetre du domaine (rectangulaire). */
DEFV(Float,INIT(rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale,FLOT__UNDEF));
/* Rapport de la longueur de la fonction a la longueur de la diagonale (ou "chaoticite"). */
DEFV(Float,INIT(temperature_de_la_fonction,FLOT__UNDEF));
/* Temperature de la fonction. */
DEFV(Float,INIT(aire_signee_entre_la_fonction_et_la_diagonale,FZERO));
/* Aire signee entre la fonction et la diagonale. */
DEFV(Float,INIT(aire_non_signee_entre_la_fonction_et_la_diagonale,FZERO));
/* Aire non signee entre la fonction et la diagonale. */
DEFV(Float,INIT(indice_global,FLOT__UNDEF));
/* Indice global reunissant plusieurs composantes. A la date du 20000127140212 il est */
/* defini par : */
/* */
/* Chaoticite AireSignee */
/* I = -(2.DeriveePremiereMoyenne + ------------ - ------------) */
/* 4 2 */
/* */
/* en notant donc que 'd2' et 'T' ne sont pas utilises... */
/*..............................................................................................................................*/
GET_ARGUMENTS_(nombre_d_arguments
,BLOC(GET_ARGUMENT_L("anomalies=",editer_les_anomalies_rencontrees_dans_les_fichiers);
/* ATTENTION : l'entree de ce parametre doit evidemment preceder la lecture des fichiers... */
PROCESS_ARGUMENT_I("nombre_elements=""ne=",nombre_d_elements
,BLOC(VIDE;)
,BLOC(Bblock
PRINT_AVERTISSEMENT("'ne=' doit etre defini avant toute entree de fichiers");
Eblock
)
);
PROCESS_ARGUMENTS_DE_DEFINITION_DES_FICHIERS_01;
PROKESF_ARGUMENT_C("fichierX=",fichier_LISTE_ABSCISSE
,BLOC(VIDE;)
,BLOC(VIDE;)
,BLOC(Bblock
lTRANSFORMAT_0d(fichier_LISTE_ABSCISSE
,liste_initiale_des_ABSCISSE
,ABSCISSE_IMPLICITE
);
Test(I3OU(IZNE(FonctionI_Fload_____compteur_valeurs_numeriques_DUPLIQUEES)
,IZNE(FonctionI_Fload_____compteur_valeurs_numeriques_EXTRAPOLEES)
,IZNE(FonctionI_Fload_____compteur_valeurs_numeriques_UNDEFINIES)
)
)
Bblock
EGAL(il_y_a_des_anomalies_dans_les_fichiers,VRAI);
Eblock
ATes
Bblock
Eblock
ETes
Test(IFET(IL_FAUT(editer_les_anomalies_rencontrees_dans_les_fichiers)
,EST_VRAI(il_y_a_des_anomalies_dans_les_fichiers)
)
)
Bblock
PRINT_ERREUR("il y a des anomalies concernant les valeurs dans 'fichierX'");
CAL1(Prer0("ce fichier contient :\n\n"));
EDITER_UNE_VALEUR(FonctionI_Fload_____compteur_valeurs_numeriques_DUPLIQUEES
,editer_les_anomalies_rencontrees_dans_les_fichiers
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,"%d"
,"valeurs_DUPLIQUEES."
);
EDITER_UNE_VALEUR(FonctionI_Fload_____compteur_valeurs_numeriques_EXTRAPOLEES
,editer_les_anomalies_rencontrees_dans_les_fichiers
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,"%d"
,"valeurs_EXTRAPOLEES"
);
EDITER_UNE_VALEUR(FonctionI_Fload_____compteur_valeurs_numeriques_UNDEFINIES
,editer_les_anomalies_rencontrees_dans_les_fichiers
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,"%d"
,"valeurs_UNDEFINIES."
);
CAL1(Prer0("\n\n"));
Eblock
ATes
Bblock
Eblock
ETes
Eblock
)
,BLOC(iGENERATION_D_UN_FICHIER(liste_initiale_des_ABSCISSE,ABSCISSE_IMPLICITE);)
);
PROKESF_ARGUMENT_C("fichierY=",fichier_LISTE_ORDONNEE
,BLOC(VIDE;)
,BLOC(VIDE;)
,BLOC(Bblock
lTRANSFORMAT_0d(fichier_LISTE_ORDONNEE
,liste_initiale_des_ORDONNEE
,ORDONNEE_IMPLICITE
);
Test(I3OU(IZNE(FonctionI_Fload_____compteur_valeurs_numeriques_DUPLIQUEES)
,IZNE(FonctionI_Fload_____compteur_valeurs_numeriques_EXTRAPOLEES)
,IZNE(FonctionI_Fload_____compteur_valeurs_numeriques_UNDEFINIES)
)
)
Bblock
EGAL(il_y_a_des_anomalies_dans_les_fichiers,VRAI);
Eblock
ATes
Bblock
Eblock
ETes
Test(IFET(IL_FAUT(editer_les_anomalies_rencontrees_dans_les_fichiers)
,EST_VRAI(il_y_a_des_anomalies_dans_les_fichiers)
)
)
Bblock
PRINT_ERREUR("il y a des anomalies concernant les valeurs dans 'fichierY'");
CAL1(Prer0("ce fichier contient :\n\n"));
EDITER_UNE_VALEUR(FonctionI_Fload_____compteur_valeurs_numeriques_DUPLIQUEES
,editer_les_anomalies_rencontrees_dans_les_fichiers
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,"%d"
,"valeurs_DUPLIQUEES."
);
EDITER_UNE_VALEUR(FonctionI_Fload_____compteur_valeurs_numeriques_EXTRAPOLEES
,editer_les_anomalies_rencontrees_dans_les_fichiers
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,"%d"
,"valeurs_EXTRAPOLEES"
);
EDITER_UNE_VALEUR(FonctionI_Fload_____compteur_valeurs_numeriques_UNDEFINIES
,editer_les_anomalies_rencontrees_dans_les_fichiers
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,"%d"
,"valeurs_UNDEFINIES."
);
CAL1(Prer0("\n\n"));
Eblock
ATes
Bblock
Eblock
ETes
Eblock
)
,BLOC(iGENERATION_D_UN_FICHIER(liste_initiale_des_ORDONNEE,ORDONNEE_IMPLICITE);)
);
PROKESF_ARGUMENT_FICHIER("fichier_PONDERATION_d1="
,fichier_LISTE_PONDERATION_DE_LA_DERIVEE_PREMIERE
,liste_initiale_des_PONDERATION_DE_LA_DERIVEE_PREMIERE
,PONDERATION_DE_LA_DERIVEE_PREMIERE_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("fichier_PONDERATION_d2="
,fichier_LISTE_PONDERATION_DE_LA_DERIVEE_SECONDE
,liste_initiale_des_PONDERATION_DE_LA_DERIVEE_SECONDE
,PONDERATION_DE_LA_DERIVEE_SECONDE_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("fichier_PONDERATION_lf="
,fichier_LISTE_PONDERATION_DE_LA_LONGUEUR_FONCTION
,liste_initiale_des_PONDERATION_DE_LA_LONGUEUR_FONCTION
,PONDERATION_DE_LA_LONGUEUR_FONCTION_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("fichier_PONDERATION_ld="
,fichier_LISTE_PONDERATION_DE_LA_LONGUEUR_DIAGONALE
,liste_initiale_des_PONDERATION_DE_LA_LONGUEUR_DIAGONALE
,PONDERATION_DE_LA_LONGUEUR_DIAGONALE_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
PROKESF_ARGUMENT_FICHIER("fichier_PONDERATION_a="
,fichier_LISTE_PONDERATION_DE_L_AIRE
,liste_initiale_des_PONDERATION_DE_L_AIRE
,PONDERATION_DE_L_AIRE_IMPLICITE
,lTRANSFORMAT_0d
,iGENERATION_D_UN_FICHIER
);
GET_ARGUMENT_L("traiter=",traiter_les_fichiers_meme_s_il_y_a_des_anomalies);
GET_ARGUMENT_I("minimum=",nombre_minimal_d_elements_a_traiter_dans_le_fichier);
GET_ARGUMENT_I("maximum=",nombre_maximal_d_elements_a_traiter_dans_le_fichier);
GET_ARGUMENT_C("titre=",titre_a_editer);
GET_ARGUMENT_L("abscisse_fonction=",fixer_les_extrema_de_l_abscisse_avec_les_extrema_de_la_fonction);
GET_ARGUMENT_F("xm=""x0=""Xm=""X0=",abscisse_minimale);
GET_ARGUMENT_F("xN=""xM=""XN=""XM=",abscisse_maximale);
GET_ARGUMENT_L("renormaliser=",renormaliser_la_fonction);
GET_ARGUMENT_L("renormaliser_arbitrairement=""arbitraire=",renormaliser_arbitrairement_la_fonction);
GET_ARGUMENT_F("minimum_arbitraire=""ma=",minimum_arbitraire_de_la_fonction);
GET_ARGUMENT_F("maximum_arbitraire=""Ma=",maximum_arbitraire_de_la_fonction);
GET_ARGUMENT_L("homothetique=",traiter_la_longueur_de_la_fonction_homothetiquement);
GET_ARGUMENT_F("facteur=",facteur_d_homothetie_de_la_longueur);
GET_ARGUMENT_C("format_flottant=""ff=",format_flottant_d_edition);
GET_ARGUMENT_L("messages=""message=""Men_tete=",editer_les_messages_d_en_tete);
/* Le 20050623172751, "en_tete=" a ete remplace par "Men_tete=" (double definition...). */
GET_ARGUMENT_L("valeurs=""editer=""autoriser=",autoriser_l_edition_des_differentes_valeurs);
GET_ARGUMENT_L("fondamentales=",editer_malgre_tout_les_valeurs_fondamentales);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_nombre,TITRE_egal))
,editer_le_nombre_d_elements_des_fichiers
);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_minimum_X,TITRE_egal))
,editer_le_minimum_de_l_abscisse
);
GET_ARGUMENT_L("Aminimum=""Am=",editer_le_minimum_de_l_abscisse);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_maximum_X,TITRE_egal))
,editer_le_maximum_de_l_abscisse
);
GET_ARGUMENT_L("Amaximum=""AM=",editer_le_maximum_de_l_abscisse);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_amplitude_X,TITRE_egal))
,editer_l_amplitude_de_l_abscisse
);
GET_ARGUMENT_L("Aamplitude=""Aa=",editer_l_amplitude_de_l_abscisse);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_moyenne_X,TITRE_egal))
,editer_la_moyenne_de_l_abscisse
);
GET_ARGUMENT_L("Amoyenne=""Ad=",editer_la_moyenne_de_l_abscisse);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_sigma_X,TITRE_egal))
,editer_l_ecart_type_de_l_abscisse
);
GET_ARGUMENT_L("Asigma=""As=""Aecart_type=",editer_l_ecart_type_de_l_abscisse);
GET_ARGUMENT_L("RAs=",rapporter_l_ecart_type_de_l_abscisse_aux_extrema_de_l_abscisse);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_minimum_Y,TITRE_egal))
,editer_le_minimum_de_la_fonction
);
GET_ARGUMENT_L("Fminimum=""Fm=",editer_le_minimum_de_la_fonction);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_maximum_Y,TITRE_egal))
,editer_le_maximum_de_la_fonction
);
GET_ARGUMENT_L("Fmaximum=""FM=",editer_le_maximum_de_la_fonction);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_amplitude_Y,TITRE_egal))
,editer_l_amplitude_de_la_fonction
);
GET_ARGUMENT_L("Famplitude=""Fa=",editer_l_amplitude_de_la_fonction);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_moyenne_Y,TITRE_egal))
,editer_la_moyenne_de_la_fonction
);
GET_ARGUMENT_L("Fmoyenne=""Fd=",editer_la_moyenne_de_la_fonction);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_sigma_Y,TITRE_egal))
,editer_l_ecart_type_de_la_fonction
);
GET_ARGUMENT_L("Fsigma=""Fs=""Fecart_type=",editer_l_ecart_type_de_la_fonction);
GET_ARGUMENT_L("RFs=",rapporter_l_ecart_type_de_la_fonction_aux_extrema_de_la_fonction);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_derivee_premiere_Y,TITRE_egal))
,editer_la_derivee_premiere_moyenne
);
GET_ARGUMENT_L("derivee_premiere=""d1=",editer_la_derivee_premiere_moyenne);
GET_ARGUMENT_L("rd1=",renormaliser_la_derivee_premiere_moyenne);
GET_ARGUMENT_F("fd1=",facteur_de_renormalisation_de_la_derivee_premiere_moyenne);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_minimum_derivee_premiere_Y,TITRE_egal))
,editer_le_minimum_de_la_derivee_premiere
);
GET_ARGUMENT_L("d1minimum=""d1m=",editer_le_minimum_de_la_derivee_premiere);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_maximum_derivee_premiere_Y,TITRE_egal))
,editer_le_maximum_de_la_derivee_premiere
);
GET_ARGUMENT_L("d1maximum=""d1M=",editer_le_maximum_de_la_derivee_premiere);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_derivee_seconde_Y,TITRE_egal))
,editer_la_derivee_seconde_moyenne
);
GET_ARGUMENT_L("derivee_seconde=""d2=",editer_la_derivee_seconde_moyenne);
GET_ARGUMENT_L("rd2=",renormaliser_la_derivee_seconde_moyenne);
GET_ARGUMENT_F("fd2=",facteur_de_renormalisation_de_la_derivee_seconde_moyenne);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_minimum_derivee_seconde_Y,TITRE_egal))
,editer_le_minimum_de_la_derivee_seconde
);
GET_ARGUMENT_L("d2minimum=""d2m=",editer_le_minimum_de_la_derivee_seconde);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_maximum_derivee_seconde_Y,TITRE_egal))
,editer_le_maximum_de_la_derivee_seconde
);
GET_ARGUMENT_L("d2maximum=""d2M=",editer_le_maximum_de_la_derivee_seconde);
GET_ARGUMENT_L("valider_extrema=",valider_les_extrema_pour_le_calcul_du_rapport_des_pentes_extremes);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_pente_extrema,TITRE_egal))
,editer_la_pente_des_extrema
);
GET_ARGUMENT_L("pe=",editer_la_pente_des_extrema);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_rapport_pentes_extremes,TITRE_egal))
,editer_le_rapport_des_pentes_extremes
);
GET_ARGUMENT_L("rpe=",editer_le_rapport_des_pentes_extremes);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_longueur_diagonale,TITRE_egal))
,editer_la_longueur_de_la_diagonale
);
GET_ARGUMENT_L("ld=",editer_la_longueur_de_la_diagonale);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_demi_perimetre_du_domaine,TITRE_egal))
,editer_le_demi_perimetre_du_domaine
);
GET_ARGUMENT_L("lp=",editer_le_demi_perimetre_du_domaine);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_longueur,TITRE_egal))
,editer_la_longueur_de_la_fonction
);
GET_ARGUMENT_L("longueur_fonction=""lf=",editer_la_longueur_de_la_fonction);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_discontinuite_franche,TITRE_egal))
,editer_le_rapport_de_la_longueur_de_la_fonction_au_demi_perimetre_du_domaine
);
GET_ARGUMENT_L("ldf=",editer_le_rapport_de_la_longueur_de_la_fonction_au_demi_perimetre_du_domaine);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_chaoticite,TITRE_egal))
,editer_le_rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale
);
GET_ARGUMENT_L("rapport=""r="
,editer_le_rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale
);
GET_ARGUMENT_L("rr=",renormaliser_le_rapport_longueur_fonction_a_longueur_diagonale);
GET_ARGUMENT_F("fr=",facteur_de_renormalisation_du_rapport_longueur_fonction_a_longueur_diagonale);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_temperature,TITRE_egal))
,editer_la_temperature
);
GET_ARGUMENT_L("t=",editer_la_temperature);
GET_ARGUMENT_L("rt=",renormaliser_la_temperature);
GET_ARGUMENT_F("ft=",facteur_de_renormalisation_de_la_temperature);
GET_ARGUMENT_L("Ra=",rapporter_l_aire_entre_la_fonction_et_la_diagonale_aux_extrema_de_la_fonction);
GET_ARGUMENT_L("vaa=""VAa=",calculer_la_valeur_absolue_de_l_aire_signee_entre_la_fonction_et_la_diagonale);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_aire_signee,TITRE_egal))
,editer_l_aire_signee_entre_la_fonction_et_la_diagonale
);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_valeur_absolue_aire_signee,TITRE_egal))
,editer_l_aire_signee_entre_la_fonction_et_la_diagonale
);
GET_ARGUMENT_L("as=""a=",editer_l_aire_signee_entre_la_fonction_et_la_diagonale);
GET_ARGUMENT_L("ra=",renormaliser_l_aire_entre_la_fonction_et_la_diagonale);
GET_ARGUMENT_F("fa=",facteur_de_renormalisation_de_l_aire_entre_la_fonction_et_la_diagonale);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_aire_non_signee,TITRE_egal))
,editer_l_aire_non_signee_entre_la_fonction_et_la_diagonale
);
GET_ARGUMENT_L("ans=",editer_l_aire_non_signee_entre_la_fonction_et_la_diagonale);
GET_ARGUMENT_L("variations=""synthese=""resultats=",editer_la_synthese_des_resultats);
GET_ARGUMENT_L("resume=""conclusion=",editer_le_resume_de_la_synthese_des_resultats);
GET_ARGUMENT_L(Cara(chain_Aconcaten2(TITRE_indice_global,TITRE_egal))
,editer_l_indice_global
);
GET_ARGUMENT_L("ig=",editer_l_indice_global);
GET_ARGUMENT_F("fig=",facteur_de_l_indice_global);
GET_ARGUMENT_F("pd1=",ponderation_dans_l_indice_global_de_la_derivee_premiere_moyenne);
GET_ARGUMENT_F("pd2=",ponderation_dans_l_indice_global_de_la_derivee_seconde_moyenne);
GET_ARGUMENT_F("pr=",ponderation_dans_l_indice_global_du_rapport_longueur_fonction_a_longueur_diagonale);
GET_ARGUMENT_F("pt=",ponderation_dans_l_indice_global_de_la_temperature);
GET_ARGUMENT_F("pa=",ponderation_dans_l_indice_global_de_l_aire_signee_entre_la_fonction_et_la_diagonale);
GET_ARGUMENT_F("tig=",translation_de_l_indice_global);
GET_ARGUMENT_L("graphe=",editer_le_graphe_de_la_fonction);
GET_ARGUMENT_L("titre_graphe=",editer_le_titre_du_graphe_de_la_fonction);
GET_ARGUMENT_L("grapheN=",editer_l_index_du_graphe_de_la_fonction);
GET_ARGUMENT_L("grapheX=",editer_les_abscisses_du_graphe_de_la_fonction);
GET_ARGUMENT_L("grapheY=",editer_les_ordonnees_du_graphe_de_la_fonction);
GET_ARGUMENT_L("zero=",conserver_le_zero_de_la_fonction);
GET_ARGUMENT_I("tabulation_1=""tab1=",tabulation_1_du_graphe_de_la_fonction);
GET_ARGUMENT_I("tabulation_2=""tab2=",tabulation_2_du_graphe_de_la_fonction);
GET_ARGUMENT_I("tabulation_3=""tab3=",tabulation_3_du_graphe_de_la_fonction);
GET_ARGUMENT_K("KaxeH=",definition_de_l_axe_horizontal);
GET_ARGUMENT_K("KGaxeH=",definition_du_graduateur_de_l_axe_horizontal);
GET_ARGUMENT_I("graduation=",periode_de_graduation_de_l_axe_horizontal);
GET_ARGUMENT_K("KaxeV=",definition_de_l_axe_vertical);
GET_ARGUMENT_K("Kfonction=",definition_de_la_fonction);
GET_ARGUMENT_L("rg=""renormaliser_graphe=",renormaliser_la_fonction_pour_tracer_son_graphe);
GET_ARGUMENT_F("facteur_graphe=",facteur_du_graphe_de_la_fonction);
GET_ARGUMENT_L("tr=""temperature_plutot_rapport=",utiliser_la_temperature_plutot_que_le_rapport);
GET_ARGUMENT_F("rb=""bas=",rapport_bas);
GET_ARGUMENT_F("rh=""re=""eleve=",rapport_eleve);
GET_ARGUMENT_F("tb=""basse=",temperature_basse);
GET_ARGUMENT_F("th=""te=""elevee=",temperature_elevee);
GET_ARGUMENT_F("seuil_derivee_premiere=""sd1=",seuil_de_la_derivee_premiere);
GET_ARGUMENT_F("seuil_derivee_seconde=""sd2=",seuil_de_la_derivee_seconde);
GET_ARGUMENT_F("seuil_aire=""sas=",seuil_de_l_aire_signee_entre_la_fonction_et_la_diagonale);
/* Le 20050624092517, "sa=" a ete remplace par "sas=" (double definition...). */
GET_ARGUMENT_F("seuil_amplitude=""saf=",seuil_de_l_amplitude_de_la_fonction);
/* Le 20050624092517, "sa=" a ete remplace par "saf=" (double definition...). */
GET_ARGUMENT_F("pidf=",point_inferieur_de_discontinuite_franche);
GET_ARGUMENT_F("psdf=",point_superieur_de_discontinuite_franche);
GET_ARGUMENT_F("scdf=",seuil_de_chaoticite_pour_une_discontinuite_franche);
GET_ARGUMENT_F("sansdf=",seuil_aire_non_signee_entre_la_fonction_et_la_diagonale_pour_discontinuite_franche);
GET_ARGUMENT_L("formater=",formater_le_resultat_de_l_operation_sur_les_valeurs_courantes);
PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
/* Cette procedure fut introduite le 20061226192927... */
)
);
iGENERATION_D_UN_FICHIER(liste_initiale_des_DERIVEE_PREMIERE,DERIVEE_PREMIERE_IMPLICITE);
/* Initialisation de la derivee premiere. */
iGENERATION_D_UN_FICHIER(liste_initiale_des_DERIVEE_SECONDE,DERIVEE_SECONDE_IMPLICITE);
/* Initialisation de la derivee seconde. */
iGENERATION_D_UN_FICHIER(liste_initiale_des_DIAGONALE,DIAGONALE_IMPLICITE);
/* Initialisation de la diagonale. */
iGENERATION_D_UN_FICHIER(liste_triee_des_ABSCISSE,FLOT__UNDEF);
iGENERATION_D_UN_FICHIER(liste_triee_des_ORDONNEE,FLOT__UNDEF);
/* Ceci est rendu obligatoire par l'allocation dynamique de la memoire (le 20060214210311). */
Test(IFOU(IFLT(nombre_maximal_d_elements_a_traiter_dans_le_fichier,nombre_minimal_d_elements_a_traiter_dans_le_fichier)
,IFLT(nombre_minimal_d_elements_a_traiter_dans_le_fichier,DEUX)
)
)
Bblock
PRINT_ERREUR("la definition du nombre d'elements acceptables est incorrecte");
PRINT_ERREUR("or il en faut au moins deux pour l'etude des variations");
PRINT_ERREUR("(trois etant encore mieux a cause du calcul des derivees secondes)");
PRINT_ERREUR("les valeurs par defaut sont donc retablies");
EGAL(nombre_minimal_d_elements_a_traiter_dans_le_fichier,NOMBRE_MINIMAL_D_ELEMENTS_A_TRAITER_DANS_LE_FICHIER);
EGAL(nombre_maximal_d_elements_a_traiter_dans_le_fichier,NOMBRE_MAXIMAL_D_ELEMENTS_A_TRAITER_DANS_LE_FICHIER);
CAL1(Prer2("le minimum vaut %d alors que le maximum vaut %d\n\n"
,nombre_minimal_d_elements_a_traiter_dans_le_fichier
,nombre_maximal_d_elements_a_traiter_dans_le_fichier
)
);
Eblock
ATes
Bblock
Eblock
ETes
Test(IFGT(point_inferieur_de_discontinuite_franche,point_superieur_de_discontinuite_franche))
Bblock
PRINT_ERREUR("le detecteur de discontinuites franches ne peut pas fonctionner correctement");
Eblock
ATes
Bblock
Eblock
ETes
Test(IFET(IFOU(IL_FAUT(traiter_les_fichiers_meme_s_il_y_a_des_anomalies)
,EST_FAUX(il_y_a_des_anomalies_dans_les_fichiers)
)
,IFINff(nombre_d_elements
,nombre_minimal_d_elements_a_traiter_dans_le_fichier
,nombre_maximal_d_elements_a_traiter_dans_le_fichier
)
)
)
Bblock
EDITER_UN_TEXTE(titre_a_editer
,IFNE_chaine(titre_a_editer,C_VIDE)
,IFET(EDITER_LES_VALEURS_FONDAMENTALES,IFNE_chaine(titre_a_editer,C_VIDE))
,"%s"
,"titre"
);
#if ( (defined(SYSTEME_APC_LinuxDebian_GCC)) \
|| (defined(SYSTEME_APC_LinuxMandrake_GCC)) \
|| (defined(SYSTEME_APC_LinuxRedHat_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_ICC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_GCC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_ICC)) \
)
# define VALIDATION_CHAOTICITE_TEMPERATURE(chaoticite,temperature) \
IFNE_a_peu_pres_absolu(chaoticite,temperature,GRAND_EPSILON)
#Aif ( (defined(SYSTEME_APC_LinuxDebian_GCC)) \
|| (defined(SYSTEME_APC_LinuxMandrake_GCC)) \
|| (defined(SYSTEME_APC_LinuxRedHat_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_ICC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_GCC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_ICC)) \
)
# define VALIDATION_CHAOTICITE_TEMPERATURE(chaoticite,temperature) \
IFNE(chaoticite,temperature)
#Eif ( (defined(SYSTEME_APC_LinuxDebian_GCC)) \
|| (defined(SYSTEME_APC_LinuxMandrake_GCC)) \
|| (defined(SYSTEME_APC_LinuxRedHat_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_ICC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_GCC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_ICC)) \
)
Test(VALIDATION_CHAOTICITE_TEMPERATURE(CHAOTICITE_DE_LA_FONCTION(FLOT__QUELCONQUE,FLOT__QUELCONQUE)
,TEMPERATURE_DE_LA_FONCTION(FLOT__QUELCONQUE,FLOT__QUELCONQUE)
)
)
/* A cause de 'SYSTEME_APC_LinuxRedHat_GCC', 'IFNE_a_peu_pres_absolu(...)' a du etre */
/* introduit a cote de 'IFNE(...)' car sur ce SYSTEME on ne tombe malheureusement pas */
/* sur l'egalite stricte... */
Bblock
PRINT_ERREUR("les definitions de la 'chaoticite' et de la 'temperature' sont incompatibles");
Eblock
ATes
Bblock
/* On notera que depuis le 20000117102635, on soit avoir par definition la propriete : */
/* */
/* CHAOTICITE_DE_LA_FONCTION(x,x) = TEMPERATURE_DE_LA_FONCTION(x,x) */
/* */
/* quel que soit 'x' ; cela signifie donc que pour une fonction lineaire, 'Rapport(...)' */
/* et 'Temperature(...)' donnent la meme valeur. */
Eblock
ETes
#if ( (defined(SYSTEME_APC_LinuxDebian_GCC)) \
|| (defined(SYSTEME_APC_LinuxMandrake_GCC)) \
|| (defined(SYSTEME_APC_LinuxRedHat_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_ICC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_GCC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_ICC)) \
)
# undef VALIDATION_CHAOTICITE_TEMPERATURE
#Aif ( (defined(SYSTEME_APC_LinuxDebian_GCC)) \
|| (defined(SYSTEME_APC_LinuxMandrake_GCC)) \
|| (defined(SYSTEME_APC_LinuxRedHat_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_ICC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_GCC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_ICC)) \
)
# undef VALIDATION_CHAOTICITE_TEMPERATURE
#Eif ( (defined(SYSTEME_APC_LinuxDebian_GCC)) \
|| (defined(SYSTEME_APC_LinuxMandrake_GCC)) \
|| (defined(SYSTEME_APC_LinuxRedHat_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_GCC)) \
|| (defined(SYSTEME_APC_LinuxUbuntu_ICC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_GCC)) \
|| (defined(SYSTEME_APC_LinuxUlmint_ICC)) \
)
Test(IFOU(IL_NE_FAUT_PAS(renormaliser_la_fonction)
,IFET(IL_FAUT(renormaliser_la_fonction)
,IL_NE_FAUT_PAS(renormaliser_arbitrairement_la_fonction)
)
)
)
Bblock
RECHERCHE_DES_EXTREMA_DE_LA_FONCTION;
/* Recherche des extrema reels de la fonction. */
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(renormaliser_la_fonction))
Bblock
Test(IL_FAUT(renormaliser_arbitrairement_la_fonction))
Bblock
EGAL(minimum_de_la_fonction,minimum_arbitraire_de_la_fonction);
EGAL(maximum_de_la_fonction,maximum_arbitraire_de_la_fonction);
/* Lorsque la renormalisation est arbitraire, les extrema reels sont remplaces par des */
/* extrema arbitraires... */
Eblock
ATes
Bblock
Eblock
ETes
Test(IFGT(maximum_de_la_fonction,minimum_de_la_fonction))
Bblock
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
EGAL(ACCES_FONCTION(index)
,NORM(ACCES_FONCTION(index),minimum_de_la_fonction,maximum_de_la_fonction)
);
/* Renormalisation de la fonction... */
Eblock
EDoI
Eblock
ATes
Bblock
PRINT_ATTENTION("la fonction est horizontale et ne peut donc pas etre renormalisee");
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
RECHERCHE_DES_EXTREMA_DE_LA_FONCTION;
/* Recherche des nouveaux extrema de la fonction. */
Test(IL_FAUT(fixer_les_extrema_de_l_abscisse_avec_les_extrema_de_la_fonction))
Bblock
Test(IFGT(maximum_de_la_fonction,minimum_de_la_fonction))
Bblock
EGAL(abscisse_minimale,MIN2(ABSCISSE_MINIMALE,minimum_de_la_fonction));
EGAL(abscisse_maximale,MAX2(ABSCISSE_MINIMALE,maximum_de_la_fonction));
/* Dans ce cas, le domaine de la fonction est donc un pave carre... */
Eblock
ATes
Bblock
PRINT_ATTENTION("la fonction est horizontale et ne permet donc pas de definir les extrema de l'abscisse");
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
EGAL(delta_x,DIVI(SOUA(abscisse_minimale,abscisse_maximale),FLOT(TRMU(nombre_d_elements))));
/* Pas sur l'axe 'OX'. */
Test(IFEQ_chaine(fichier_LISTE_ABSCISSE,NOM_PIPE_Local))
Bblock
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
Test(IFEQ(index,PREMIER_ELEMENT_D_UN_FICHIER))
Bblock
EGAL(ACCES_ABSCISSE(index),abscisse_minimale);
Eblock
ATes
Bblock
EGAL(ACCES_ABSCISSE(index),ADD2(ACCES_ABSCISSE(PRED(index)),delta_x));
/* Initialisation de l'axe 'OX' lorsqu'il n'est pas fourni en argument... */
Eblock
ETes
Eblock
EDoI
Eblock
ATes
Bblock
Eblock
ETes
RECHERCHE_DES_EXTREMA_DE_L_ABSCISSE;
/* Recherche des extrema de l'abscisse. */
RECHERCHE_DES_EXTREMA_DE_LA_FONCTION;
/* Recherche des extrema actuels introduit le 20000210142108 afin de definir (enfin) les */
/* valeurs de {abscisse_du_minimum_de_la_fonction,abscisse_du_maximum_de_la_fonction} */
/* maintenant que l'on a defini 'ACCES_ABSCISSE(...)'. */
EGAL(demi_perimetre_du_domaine
,ADD2(SOUS(maximum_de_la_fonction,minimum_de_la_fonction)
,SOUS(maximum_de_l_abscisse,minimum_de_l_abscisse)
)
);
/* Calcul du demi-perimetre du domaine (rectangulaire). */
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
EGAL(ACCES_DIAGONALE(index)
,BARY(ACCES_FONCTION(PREMIER_ELEMENT_D_UN_FICHIER)
,ACCES_FONCTION(DERNIER_ELEMENT_D_UN_FICHIER)
,NORM(ACCES_ABSCISSE(index),minimum_de_l_abscisse,maximum_de_l_abscisse)
)
);
/* Initialisation de la diagonale de la fonction. ATTENTION, avant le 19991203120455 */
/* la coordonnee barycentrique etait definie par : */
/* */
/* MUL2(SOUS(index,PREMIER_ELEMENT_D_UN_FICHIER),delta_x) */
/* */
/* Depuis que l'axe des abscisses peut etre quelconque, il a fallu changer cela... */
Eblock
EDoI
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
Test(IFEQ(index,PREMIER_ELEMENT_D_UN_FICHIER))
Bblock
EGAL(ACCES_DERIVEE_PREMIERE(index),MUL2(ACCES_PONDERATION_DE_LA_DERIVEE_PREMIERE(index),FZERO));
Eblock
ATes
Bblock
EGAL(ACCES_DERIVEE_PREMIERE(index)
,MUL2(ACCES_PONDERATION_DE_LA_DERIVEE_PREMIERE(index)
,DERIVATION_PARTIELLE(ACCES_FONCTION(PRED(index))
,ACCES_FONCTION(NEUT(index))
,SOUS(ACCES_ABSCISSE(NEUT(index))
,ACCES_ABSCISSE(PRED(index))
)
)
)
);
/* Initialisation de la derivee premiere de la fonction. */
EGAL(minimum_de_la_derivee_premiere,MIN2(ACCES_DERIVEE_PREMIERE(index),minimum_de_la_derivee_premiere));
EGAL(maximum_de_la_derivee_premiere,MAX2(ACCES_DERIVEE_PREMIERE(index),maximum_de_la_derivee_premiere));
/* Recherche des extrema de la derivee premiere de la fonction. */
Eblock
ETes
INCR(moyenne_de_la_derivee_premiere,ACCES_DERIVEE_PREMIERE(index));
Eblock
EDoI
EGAL(moyenne_de_la_derivee_premiere,DIVI(moyenne_de_la_derivee_premiere,TRMU(nombre_d_elements)));
/* Calcul de la moyenne de la derivee premiere. Evidemment cette valeur est aussi egale a : */
/* */
/* f(b) - f(a) */
/* ------------- */
/* b - a */
/* */
/* ou [a,b] est le segment de definition, mais faire le calcul ainsi ouvre la porte a des */
/* extensions futures (par exemple, des ponderations de 'ACCES_DERIVEE_PREMIERE(...)' */
/* qui seraient fonction de 'ACCES_ABSCISSE(...)'). */
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
Test(IFEQ(index,NEUT(PREMIER_ELEMENT_D_UN_FICHIER)))
Bblock
EGAL(ACCES_DERIVEE_SECONDE(index),MUL2(ACCES_PONDERATION_DE_LA_DERIVEE_SECONDE(index),FZERO));
Eblock
ATes
Bblock
Test(IFEQ(index,SUCC(PREMIER_ELEMENT_D_UN_FICHIER)))
Bblock
EGAL(ACCES_DERIVEE_SECONDE(index),MUL2(ACCES_PONDERATION_DE_LA_DERIVEE_SECONDE(index),FZERO));
Eblock
ATes
Bblock
EGAL(ACCES_DERIVEE_SECONDE(index)
,MUL2(ACCES_PONDERATION_DE_LA_DERIVEE_SECONDE(index)
,DERIVATION_PARTIELLE(ACCES_DERIVEE_PREMIERE(PRED(index))
,ACCES_DERIVEE_PREMIERE(NEUT(index))
,SOUS(ACCES_ABSCISSE(NEUT(index))
,ACCES_ABSCISSE(PRED(index))
)
)
)
);
/* Initialisation de la derivee seconde de la fonction. */
EGAL(minimum_de_la_derivee_seconde,MIN2(ACCES_DERIVEE_SECONDE(index),minimum_de_la_derivee_seconde));
EGAL(maximum_de_la_derivee_seconde,MAX2(ACCES_DERIVEE_SECONDE(index),maximum_de_la_derivee_seconde));
/* Recherche des extrema de la derivee seconde de la fonction. */
Eblock
ETes
Eblock
ETes
INCR(moyenne_de_la_derivee_seconde,ACCES_DERIVEE_SECONDE(index));
Eblock
EDoI
Test(IFGE(nombre_d_elements,TROIS))
Bblock
EGAL(moyenne_de_la_derivee_seconde,DIVI(moyenne_de_la_derivee_seconde,TRMU(TRMU(nombre_d_elements))));
/* Calcul de la moyenne de la derivee seconde. Evidemment cette valeur est aussi egale a : */
/* */
/* f'(b) - f'(a) */
/* ------------- */
/* b - a */
/* */
/* ou [a,b] est le segment de definition, mais faire le calcul ainsi ouvre la porte a des */
/* extensions futures (par exemple, des ponderations de 'ACCES_DERIVEE_SECONDE(...)' */
/* qui seraient fonction de 'ACCES_ABSCISSE(...)'). */
Eblock
ATes
Bblock
PRINT_ATTENTION("le fichier contient moins de trois elements, le calcul de la derivee seconde n'a donc pas de sens");
Eblock
ETes
EGAL(pente_des_extrema
,DIV0(SOUS(maximum_de_la_fonction,minimum_de_la_fonction)
,SOUA(abscisse_du_maximum_de_la_fonction,abscisse_du_minimum_de_la_fonction)
,F_INFINI
,FZERO
)
);
/* Pente de la droite joignant le minimum de la fonction a son maximum. On notera que le */
/* cas 0/0 (qui correspond a une fonction "horizontale") donne une pente de 0 (ce qui est */
/* logique...). */
Test(IFET(IZEQ(pente_des_extrema),IZEQ(moyenne_de_la_derivee_premiere)))
Bblock
EGAL(rapport_des_pentes_extremes,COORDONNEE_BARYCENTRIQUE_MINIMALE);
/* Cas d'une fonction "horizontale" : le "rapport" cherche vaut 0. */
Eblock
ATes
Bblock
EGAL(rapport_des_pentes_extremes
,NORM(ATAN(pente_des_extrema
,ABSO(moyenne_de_la_derivee_premiere)
)
,PI_SUR_4
,PI_SUR_2
)
);
/* Calcul du "rapport des pentes extremes". Le "denominateur" de ce "pseudo-rapport" (en */
/* effet, on passe ensuite par un 'ATAN(...)') est la pente de la droite qui joint le */
/* minimum de la fonction a son maximum (soit 'P2'). Le "numerateur" est la moyenne de */
/* derivee premiere (soit 'P1'). Etant donne que l'on utilise des valeurs absolues partout, */
/* l'arc-tangente calcule est donc dans [0,pi/2] et que l'on a evidemment : */
/* */
/* |P2| >= |P1| */
/* */
/* d'ou : */
/* */
/* |P2| */
/* ------ >= 1 */
/* |P1| */
/* */
/* L'arc-tangente calcule est donc dans [pi/4,pi/2]. D'ou le 'NORM(...)'. */
Eblock
ETes
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
Test(IFEQ(index,PREMIER_ELEMENT_D_UN_FICHIER))
Bblock
EGAL(longueur_de_la_fonction,FZERO);
Eblock
ATes
Bblock
INCR(longueur_de_la_fonction
,MUL2(ACCES_PONDERATION_DE_LA_LONGUEUR_FONCTION(index)
,RdisF2D(ACCES_ABSCISSE(PRED(index))
,ACCES_FONCTION(PRED(index))
,ACCES_ABSCISSE(NEUT(index))
,ACCES_FONCTION(NEUT(index))
)
)
);
/* Longueur de la fonction. */
Eblock
ETes
Eblock
EDoI
Test(IL_FAUT(traiter_la_longueur_de_la_fonction_homothetiquement))
Bblock
EGAL(longueur_de_la_fonction
,SCAL(longueur_de_la_fonction,FLOT(nombre_d_elements),facteur_d_homothetie_de_la_longueur)
);
/* Gestion homothetique de le longueur de la fonction. */
Eblock
ATes
Bblock
Eblock
ETes
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
Test(IFEQ(index,PREMIER_ELEMENT_D_UN_FICHIER))
Bblock
EGAL(longueur_de_la_diagonale,FZERO);
Eblock
ATes
Bblock
INCR(longueur_de_la_diagonale
,MUL2(ACCES_PONDERATION_DE_LA_LONGUEUR_DIAGONALE(index)
,RdisF2D(ACCES_ABSCISSE(PRED(index))
,ACCES_DIAGONALE(PRED(index))
,ACCES_ABSCISSE(NEUT(index))
,ACCES_DIAGONALE(NEUT(index))
)
)
);
/* Longueur de la diagonale. */
Eblock
ETes
Eblock
EDoI
EGAL(discontinuite_franche
,DIVI(longueur_de_la_fonction,demi_perimetre_du_domaine)
);
/* Rapport de la longueur de la fonction au demi-perimetre du domaine. Lorsque ce rapport */
/* est proche de 1, cela signifie que la fonction est assez proche d'une ou plusieurs */
/* marches d'escalier (monotone, dans le sens ou il ne fait que descendre ou monter...). */
EGAL(rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale
,CHAOTICITE_DE_LA_FONCTION(longueur_de_la_fonction,longueur_de_la_diagonale)
);
/* Rapport des deux longueurs. */
EGAL(temperature_de_la_fonction
,TEMPERATURE_DE_LA_FONCTION(longueur_de_la_fonction,longueur_de_la_diagonale)
);
/* Temperature de la fonction. */
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
Test(IFEQ(index,PREMIER_ELEMENT_D_UN_FICHIER))
Bblock
EGAL(aire_signee_entre_la_fonction_et_la_diagonale,MUL2(ACCES_PONDERATION_DE_L_AIRE(index),FZERO));
EGAL(aire_non_signee_entre_la_fonction_et_la_diagonale,MUL2(ACCES_PONDERATION_DE_L_AIRE(index),FZERO));
Eblock
ATes
Bblock
DEFV(Float,INIT(aire_de_l_element_courant
,MUL2(ACCES_PONDERATION_DE_L_AIRE(index)
,ADD3(NEUT(MUL2(SOUS(ACCES_FONCTION(PRED(index)),ACCES_DIAGONALE(NEUT(index)))
,SOUS(ACCES_ABSCISSE(NEUT(index)),ACCES_ABSCISSE(PRED(index)))
)
)
,MOIT(MUL2(SOUS(ACCES_DIAGONALE(NEUT(index)),ACCES_DIAGONALE(PRED(index)))
,SOUS(ACCES_ABSCISSE(NEUT(index)),ACCES_ABSCISSE(PRED(index)))
)
)
,MOIT(MUL2(SOUS(ACCES_FONCTION(NEUT(index)),ACCES_FONCTION(PRED(index)))
,SOUS(ACCES_ABSCISSE(NEUT(index)),ACCES_ABSCISSE(PRED(index)))
)
)
)
)
)
);
INCR(aire_signee_entre_la_fonction_et_la_diagonale,NEUT(aire_de_l_element_courant));
INCR(aire_non_signee_entre_la_fonction_et_la_diagonale,ABSO(aire_de_l_element_courant));
/* Aire signee entre la fonction et la diagonale. */
Eblock
ETes
Eblock
EDoI
Test(IFET(IFGT(maximum_de_la_fonction,minimum_de_la_fonction)
,IFGT(maximum_de_l_abscisse,minimum_de_l_abscisse)
)
)
Bblock
Test(IFET(IL_FAUT(rapporter_l_aire_entre_la_fonction_et_la_diagonale_aux_extrema_de_la_fonction)
,IFET(IFNE(minimum_de_l_abscisse,maximum_de_l_abscisse)
,IFNE(minimum_de_la_fonction,maximum_de_la_fonction)
)
)
)
Bblock
DEFV(Float,INIT(aire_du_domaine_de_la_fonction
,MUL2(SOUA(minimum_de_l_abscisse,maximum_de_l_abscisse)
,SOUA(minimum_de_la_fonction,maximum_de_la_fonction)
)
)
);
EGAL(aire_signee_entre_la_fonction_et_la_diagonale
,DIVI(aire_signee_entre_la_fonction_et_la_diagonale
,aire_du_domaine_de_la_fonction
)
);
/* On rapporte alors l'aire signee a l'aire du plus petit rectangle contenant la fonction. */
EGAL(aire_non_signee_entre_la_fonction_et_la_diagonale
,DIVI(aire_non_signee_entre_la_fonction_et_la_diagonale
,aire_du_domaine_de_la_fonction
)
);
/* De meme que l'aire non signee... */
Eblock
ATes
Bblock
Eblock
ETes
Test(IFET(IL_FAUT(rapporter_l_ecart_type_de_l_abscisse_aux_extrema_de_l_abscisse)
,IFNE(minimum_de_l_abscisse,maximum_de_l_abscisse)
)
)
Bblock
EGAL(ecart_type_de_l_abscisse
,DIVI(ecart_type_de_l_abscisse
,SOUA(minimum_de_l_abscisse,maximum_de_l_abscisse)
)
);
/* On rapporte alors l'ecart-type de l'abscisse a l'amplitude du segment [Xmin,Xmax]. */
Eblock
ATes
Bblock
Eblock
ETes
Test(IFET(IL_FAUT(rapporter_l_ecart_type_de_la_fonction_aux_extrema_de_la_fonction)
,IFNE(minimum_de_la_fonction,maximum_de_la_fonction)
)
)
Bblock
EGAL(ecart_type_de_la_fonction
,DIVI(ecart_type_de_la_fonction
,SOUA(minimum_de_la_fonction,maximum_de_la_fonction)
)
);
/* On rapporte alors l'ecart-type de la fonction a l'amplitude du segment [Ymin,Ymax]. */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
PRINT_ATTENTION("la fonction est horizontale");
PRINT_ATTENTION("l'aire signee et les ecart-types ne peuvent donc etre rapportes a ses extrema");
Eblock
ETes
Test(IL_FAUT(calculer_la_valeur_absolue_de_l_aire_signee_entre_la_fonction_et_la_diagonale))
Bblock
EGAL(aire_signee_entre_la_fonction_et_la_diagonale,ABSO(aire_signee_entre_la_fonction_et_la_diagonale));
/* En fait, la valeur absolue de l'aire signee a plus d'interet... */
Eblock
ATes
Bblock
Eblock
ETes
EGAL(indice_global
,MUL2(facteur_de_l_indice_global
,LIN5(ponderation_dans_l_indice_global_de_la_derivee_premiere_moyenne
,RENORMALISATION_HYPERBOLIQUE(moyenne_de_la_derivee_premiere
,renormaliser_la_derivee_premiere_moyenne
,facteur_de_renormalisation_de_la_derivee_premiere_moyenne
)
,ponderation_dans_l_indice_global_de_la_derivee_seconde_moyenne
,RENORMALISATION_HYPERBOLIQUE(moyenne_de_la_derivee_seconde
,renormaliser_la_derivee_seconde_moyenne
,facteur_de_renormalisation_de_la_derivee_seconde_moyenne
)
,ponderation_dans_l_indice_global_du_rapport_longueur_fonction_a_longueur_diagonale
,RENORMALISATION_HYPERBOLIQUE(rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale
,renormaliser_le_rapport_longueur_fonction_a_longueur_diagonale
,facteur_de_renormalisation_du_rapport_longueur_fonction_a_longueur_diagonale
)
,ponderation_dans_l_indice_global_de_la_temperature
,RENORMALISATION_HYPERBOLIQUE(temperature_de_la_fonction
,renormaliser_la_temperature
,facteur_de_renormalisation_de_la_temperature
)
,ponderation_dans_l_indice_global_de_l_aire_signee_entre_la_fonction_et_la_diagonale
,RENORMALISATION_HYPERBOLIQUE(aire_signee_entre_la_fonction_et_la_diagonale
,renormaliser_l_aire_entre_la_fonction_et_la_diagonale
,facteur_de_renormalisation_de_l_aire_entre_la_fonction_et_la_diagonale
)
,translation_de_l_indice_global
)
)
);
/* Temperature de la fonction. */
EDITER_UNE_VALEUR(nombre_d_elements
,editer_le_nombre_d_elements_des_fichiers
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,"%+d"
,TITRE_nombre
);
EDITER_UNE_VALEUR(minimum_de_l_abscisse
,editer_le_minimum_de_l_abscisse
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_minimum_X
);
EDITER_UNE_VALEUR(maximum_de_l_abscisse
,editer_le_maximum_de_l_abscisse
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_maximum_X
);
EDITER_UNE_VALEUR(amplitude_de_l_abscisse
,editer_l_amplitude_de_l_abscisse
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_amplitude_X
);
EDITER_UNE_VALEUR(moyenne_de_l_abscisse
,editer_la_moyenne_de_l_abscisse
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_moyenne_X
);
EDITER_UNE_VALEUR(ecart_type_de_l_abscisse
,editer_l_ecart_type_de_l_abscisse
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_sigma_X
);
EDITER_UNE_VALEUR(minimum_de_la_fonction
,editer_le_minimum_de_la_fonction
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_minimum_Y
);
EDITER_UNE_VALEUR(maximum_de_la_fonction
,editer_le_maximum_de_la_fonction
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_maximum_Y
);
EDITER_UNE_VALEUR(amplitude_de_la_fonction
,editer_l_amplitude_de_la_fonction
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_amplitude_Y
);
EDITER_UNE_VALEUR(moyenne_de_la_fonction
,editer_la_moyenne_de_la_fonction
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_moyenne_Y
);
EDITER_UNE_VALEUR(ecart_type_de_la_fonction
,editer_l_ecart_type_de_la_fonction
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_sigma_Y
);
EDITER_UNE_VALEUR(RENORMALISATION_HYPERBOLIQUE(moyenne_de_la_derivee_premiere
,renormaliser_la_derivee_premiere_moyenne
,facteur_de_renormalisation_de_la_derivee_premiere_moyenne
)
,editer_la_derivee_premiere_moyenne
,EDITER_LES_VALEURS_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_derivee_premiere_Y
);
EDITER_UNE_VALEUR(minimum_de_la_derivee_premiere
,editer_le_minimum_de_la_derivee_premiere
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_minimum_derivee_premiere_Y
);
EDITER_UNE_VALEUR(maximum_de_la_derivee_premiere
,editer_le_maximum_de_la_derivee_premiere
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_maximum_derivee_premiere_Y
);
EDITER_UNE_VALEUR(RENORMALISATION_HYPERBOLIQUE(moyenne_de_la_derivee_seconde
,renormaliser_la_derivee_seconde_moyenne
,facteur_de_renormalisation_de_la_derivee_seconde_moyenne
)
,IFET(editer_la_derivee_seconde_moyenne,IFGE(nombre_d_elements,TROIS))
,EDITER_LES_VALEURS_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_derivee_seconde_Y
);
EDITER_UNE_VALEUR(minimum_de_la_derivee_seconde
,IFET(editer_le_minimum_de_la_derivee_seconde,IFGE(nombre_d_elements,TROIS))
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_minimum_derivee_seconde_Y
);
EDITER_UNE_VALEUR(maximum_de_la_derivee_seconde
,IFET(editer_le_maximum_de_la_derivee_seconde,IFGE(nombre_d_elements,TROIS))
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_maximum_derivee_seconde_Y
);
EDITER_UNE_VALEUR(pente_des_extrema
,editer_la_pente_des_extrema
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_pente_extrema
);
EDITER_UNE_VALEUR(rapport_des_pentes_extremes
,editer_le_rapport_des_pentes_extremes
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_rapport_pentes_extremes
);
EDITER_UNE_VALEUR(longueur_de_la_diagonale
,editer_la_longueur_de_la_diagonale
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_longueur_diagonale
);
EDITER_UNE_VALEUR(demi_perimetre_du_domaine
,editer_le_demi_perimetre_du_domaine
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_demi_perimetre_du_domaine
);
EDITER_UNE_VALEUR(longueur_de_la_fonction
,editer_la_longueur_de_la_fonction
,NE_PAS_EDITER_LES_VALEURS_NON_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_longueur
);
EDITER_UNE_VALEUR(discontinuite_franche
,editer_le_rapport_de_la_longueur_de_la_fonction_au_demi_perimetre_du_domaine
,EDITER_LES_VALEURS_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_discontinuite_franche
);
EDITER_UNE_VALEUR(RENORMALISATION_HYPERBOLIQUE(rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale
,renormaliser_le_rapport_longueur_fonction_a_longueur_diagonale
,facteur_de_renormalisation_du_rapport_longueur_fonction_a_longueur_diagonale
)
,editer_le_rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale
,EDITER_LES_VALEURS_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_chaoticite
);
EDITER_UNE_VALEUR(RENORMALISATION_HYPERBOLIQUE(temperature_de_la_fonction
,renormaliser_la_temperature
,facteur_de_renormalisation_de_la_temperature
)
,editer_la_temperature
,EDITER_LES_VALEURS_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_temperature
);
EDITER_UNE_VALEUR(RENORMALISATION_HYPERBOLIQUE(aire_signee_entre_la_fonction_et_la_diagonale
,renormaliser_l_aire_entre_la_fonction_et_la_diagonale
,facteur_de_renormalisation_de_l_aire_entre_la_fonction_et_la_diagonale
)
,editer_l_aire_signee_entre_la_fonction_et_la_diagonale
,EDITER_LES_VALEURS_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,COND(IL_FAUT(calculer_la_valeur_absolue_de_l_aire_signee_entre_la_fonction_et_la_diagonale)
,TITRE_valeur_absolue_aire_signee
,TITRE_aire_signee
)
);
EDITER_UNE_VALEUR(RENORMALISATION_HYPERBOLIQUE(aire_non_signee_entre_la_fonction_et_la_diagonale
,renormaliser_l_aire_entre_la_fonction_et_la_diagonale
,facteur_de_renormalisation_de_l_aire_entre_la_fonction_et_la_diagonale
)
,editer_l_aire_non_signee_entre_la_fonction_et_la_diagonale
,EDITER_LES_VALEURS_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_aire_non_signee
);
EDITER_UNE_VALEUR(indice_global
,editer_l_indice_global
,EDITER_LES_VALEURS_FONDAMENTALES
,FORMAT_COMPLET_COURANT_D_EDITION
,TITRE_indice_global
);
Test(IL_FAUT(editer_la_synthese_des_resultats))
Bblock
/* On notera que tous les qualificatifs {Variable,Croissante,Decroissante,...} commencent */
/* tous par une majuscule. Ceci est destine a faciliter des post-traitements sur ces textes */
/* et permettre de distinguer sans ambiguite "Croissante" et "Decroissante" (au cas ou il */
/* n'y aurait pas eu de majuscules... */
CAL2(Prin0("\n"));
CAL2(Prin0("la fonction est :"));
CAL2(Prin0("\n\n"));
Test(IFLE(ABSO(moyenne_de_la_derivee_premiere),seuil_de_la_derivee_premiere))
Bblock
Test(IFLE(amplitude_de_la_fonction,seuil_de_l_amplitude_de_la_fonction))
Bblock
CAL2(Prin0("- (Quasi-)Constante\n"));
Eblock
ATes
Bblock
CAL2(Prin0("- Variable\n"));
Eblock
ETes
Eblock
ATes
Bblock
CAL2(Prin0("- Variable\n"));
Test(IZGE(moyenne_de_la_derivee_premiere))
Bblock
CAL2(Prin0("- Croissante\n"));
Eblock
ATes
Bblock
CAL2(Prin0("- Decroissante\n"));
Eblock
ETes
Eblock
ETes
Test(I3ET(IFINff(discontinuite_franche
,point_inferieur_de_discontinuite_franche
,point_superieur_de_discontinuite_franche
)
,IFGT(rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale
,seuil_de_chaoticite_pour_une_discontinuite_franche
)
,IFGT(aire_non_signee_entre_la_fonction_et_la_diagonale
,seuil_aire_non_signee_entre_la_fonction_et_la_diagonale_pour_discontinuite_franche
)
)
)
Bblock
CAL2(Prin0("- A Risque de Discontinuite(s) franche(s)\n"));
Eblock
ATes
Bblock
Eblock
ETes
Test(IFLE(ABSO(aire_signee_entre_la_fonction_et_la_diagonale)
,seuil_de_l_aire_signee_entre_la_fonction_et_la_diagonale
)
)
Bblock
Test(IFLE(ABSO(moyenne_de_la_derivee_premiere),seuil_de_la_derivee_premiere))
Bblock
CAL2(Prin0("- (Quasi-)Periodique\n"));
Eblock
ATes
Bblock
CAL2(Prin0("- Oscillante (autour de la Diagonale)\n"));
Eblock
ETes
Eblock
ATes
Bblock
CAL2(Prin0("- Non-Periodique\n"));
Eblock
ETes
Test(COND(IL_FAUT(utiliser_la_temperature_plutot_que_le_rapport)
,IFGE(temperature_de_la_fonction,temperature_elevee)
,IFGE(rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale,rapport_eleve)
)
)
Bblock
CAL2(Prin0("- Chaotique\n"));
Eblock
ATes
Bblock
CAL2(Prin0("- Reguliere\n"));
Eblock
ETes
Test(IFET(IFLE(ABSO(moyenne_de_la_derivee_seconde),seuil_de_la_derivee_seconde)
,IFLE(amplitude_de_la_fonction,seuil_de_l_amplitude_de_la_fonction)
)
)
Bblock
CAL2(Prin0("- (Quasi-)Plate\n"));
Eblock
ATes
Bblock
CAL2(Prin0("- Incurvee\n"));
Test(IFLE(ABSO(moyenne_de_la_derivee_seconde),seuil_de_la_derivee_seconde))
Bblock
Eblock
ATes
Bblock
Test(IZGE(moyenne_de_la_derivee_seconde))
Bblock
CAL2(Prin0("- Concavite-Haut\n"));
Eblock
ATes
Bblock
CAL2(Prin0("- Concavite-Bas\n"));
Eblock
ETes
Eblock
ETes
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(editer_le_resume_de_la_synthese_des_resultats))
Bblock
CAL2(Prin0("\n"));
CAL2(Prin0("globalement la fonction est de type"));
Test(COND(IL_FAUT(utiliser_la_temperature_plutot_que_le_rapport)
,IFLE(temperature_de_la_fonction,temperature_basse)
,IFLE(rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale,rapport_bas)
)
)
Bblock
CAL2(Prin0(" Lineaire"));
/* Tres faible temperature. */
Test(IFLE(ABSO(moyenne_de_la_derivee_premiere),seuil_de_la_derivee_premiere))
Bblock
CAL2(Prin0(" Constante"));
/* Tres faible temperature et tres faible derivee. */
Eblock
ATes
Bblock
Test(IZGE(moyenne_de_la_derivee_premiere))
Bblock
CAL2(Prin0(" Croissante"));
/* Tres faible temperature et derivee positive significativement. */
Eblock
ATes
Bblock
CAL2(Prin0(" Decroissante"));
/* Tres faible temperature et derivee negative significativement. */
Eblock
ETes
Eblock
ETes
Eblock
ATes
Bblock
Test(IFLE(ABSO(aire_signee_entre_la_fonction_et_la_diagonale)
,seuil_de_l_aire_signee_entre_la_fonction_et_la_diagonale
)
)
Bblock
CAL2(Prin0(" (Quasi-)Periodique"));
/* Temperature significative et aire tres faible. */
Eblock
ATes
Bblock
Test(COND(IL_FAUT(utiliser_la_temperature_plutot_que_le_rapport)
,IFGE(temperature_de_la_fonction,temperature_elevee)
,IFGE(rapport_de_la_longueur_de_la_fonction_a_la_longueur_de_la_diagonale,rapport_eleve)
)
)
Bblock
CAL2(Prin0(" Chaotique"));
/* Temperature tres elevee et aire significative. */
Eblock
ATes
Bblock
Test(IFLE(ABSO(moyenne_de_la_derivee_premiere),seuil_de_la_derivee_premiere))
Bblock
Test(IZGE(moyenne_de_la_derivee_seconde))
Bblock
CAL2(Prin0(" Concavite-Haut"));
/* Derivee seconde positive. */
Eblock
ATes
Bblock
CAL2(Prin0(" Concavite-Bas"));
/* Derivee seconde negative. */
Eblock
ETes
Eblock
ATes
Bblock
Test(IZGE(moyenne_de_la_derivee_premiere))
Bblock
CAL2(Prin0(" Croissante"));
/* Temperature intermediaire, aire significative et derivee premiere assez positive. */
Eblock
ATes
Bblock
CAL2(Prin0(" Decroissante"));
/* Temperature intermediaire, aire significative et derivee premiere assez negative. */
Eblock
ETes
Eblock
ETes
Eblock
ETes
Eblock
ETes
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(editer_le_graphe_de_la_fonction))
Bblock
Test(IL_FAUT(editer_le_titre_du_graphe_de_la_fonction))
Bblock
CAL2(Prin0("\n"));
CAL2(Prin0("\n graphe de la fonction (ATTENTION : 'X' est l'axe VERTICAL et 'Y' est l'axe HORIZONTAL) :\n"));
/* Avant le 20050120192518, le message d'avertissement etait : */
/* */
/* "('X' et 'Y' etant respectivement les axes VERTICAL et HORIZONTAL)" */
/* */
Eblock
ATes
Bblock
Eblock
ETes
RECHERCHE_DES_EXTREMA_DE_LA_FONCTION;
/* Recherche des extrema actuels de la fonction pour etre sur d'etre dans [0,1] ci-apres... */
DoIn(index
,PREMIER_ELEMENT_D_UN_FICHIER
,DERNIER_ELEMENT_D_UN_FICHIER
,I
)
Bblock
DEFV(Int,INIT(abscisse_entiere_courante,UNDEF));
DEFV(Int,INIT(abscisse_entiere_maximale
,INTE(MUL2(facteur_du_graphe_de_la_fonction
,COND(IL_FAUT(renormaliser_la_fonction_pour_tracer_son_graphe)
,NORZ(ACCES_FONCTION(index)
,COND(IFOU(IZLE(minimum_de_la_fonction)
,IL_NE_FAUT_PAS(conserver_le_zero_de_la_fonction)
)
,minimum_de_la_fonction
,FZERO
)
,maximum_de_la_fonction
,minimum_de_la_fonction
)
,SOUS(ACCES_FONCTION(index)
,COND(IFOU(IZLE(minimum_de_la_fonction)
,IL_NE_FAUT_PAS(conserver_le_zero_de_la_fonction)
)
,minimum_de_la_fonction
,FZERO
)
)
)
)
)
)
);
/* Pour parcourir l'axe horizontal... */
#define EN_TETE_NUMERO \
"N="
#define EN_TETE_ABSCISSE \
"X="
#define EN_TETE_ORDONNEE \
"Y="
CAL2(Prin0("\n"));
Test(IL_FAUT(editer_l_index_du_graphe_de_la_fonction))
Bblock
CAL2(Prin3("%s%+-*d"
,EN_TETE_NUMERO
,SOUS(tabulation_1_du_graphe_de_la_fonction,chain_Xtaille(EN_TETE_NUMERO))
,index
)
);
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(editer_les_abscisses_du_graphe_de_la_fonction))
Bblock
CAL2(Prin3("%s%+-*g"
,EN_TETE_ABSCISSE
,SOUS(tabulation_2_du_graphe_de_la_fonction,chain_Xtaille(EN_TETE_ABSCISSE))
,ACCES_ABSCISSE(index)
)
);
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(editer_les_ordonnees_du_graphe_de_la_fonction))
Bblock
CAL2(Prin3(chain_Aconcaten2("%s%+-*",format_d_edition)
,EN_TETE_ORDONNEE
,SOUS(tabulation_3_du_graphe_de_la_fonction,chain_Xtaille(EN_TETE_ORDONNEE))
,ACCES_FONCTION(index)
)
);
/* Le 20020710122604 j'ai introduit 'format_d_edition' pour les ordonnees afin de pouvoir */
/* parametrer leur format de sortie. On notera que cela n'a pas ete fait pour les abscisses */
/* car, en effet, ce sont en general des nombres entiers et qu'il est donc preferable de les */
/* laisser tel quels... */
Eblock
ATes
Bblock
Eblock
ETes
#undef EN_TETE_ORDONNEE
#undef EN_TETE_ABSCISSE
#undef EN_TETE_NUMERO
Test(IZLE(abscisse_entiere_maximale))
Bblock
CAL2(Prin1("%c",definition_de_la_fonction));
Eblock
ATes
Bblock
DEFV(Positive,INIT(compteur_de_graduation,ZERO));
/* Dispositif introduit le 20021019171831 et destine a graduer l'axe horizontal. */
CAL2(Prin1("%c",definition_de_l_axe_vertical));
DoIn(abscisse_entiere_courante
,UN
,abscisse_entiere_maximale
,I
)
Bblock
INCR(compteur_de_graduation,I);
/* Dispositif introduit le 20021019171831 et destine a graduer l'axe horizontal. */
CAL2(Prin1("%c"
,COND(IFLT(abscisse_entiere_courante,abscisse_entiere_maximale)
,COND(NON_DIVISIBLE(compteur_de_graduation,periode_de_graduation_de_l_axe_horizontal)
,definition_de_l_axe_horizontal
,definition_du_graduateur_de_l_axe_horizontal
)
,definition_de_la_fonction
)
)
);
/* ATTENTION : avant le 20021018141219, l'edition de 'definition_de_la_fonction' etait */
/* situee apres le 'EDoI' ce qui donnait une longueur trop grande d'une unite pour la barre */
/* de la fonction a l'abscisse courante... */
Eblock
EDoI
Eblock
ETes
Eblock
EDoI
CAL2(Prin0("\n"));
CAL2(Prin0("\n"));
CAL2(Prin0("\n"));
Eblock
ATes
Bblock
Eblock
ETes
Test(I3OU(IL_FAUT(editer_la_synthese_des_resultats)
,IL_FAUT(editer_le_resume_de_la_synthese_des_resultats)
,IL_FAUT(editer_le_graphe_de_la_fonction)
)
)
Bblock
CAL2(Prin0("\n"));
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Test(IZEQ(nombre_d_elements))
Bblock
PRINT_ERREUR("le fichier est vide");
Eblock
ATes
Bblock
PRINT_ERREUR("le fichier ne contient pas le nombre d'elements attendus");
Eblock
ETes
Eblock
ETes
lGENERATION_D_UN_FICHIER(liste_triee_des_ORDONNEE,FLOT__UNDEF);
lGENERATION_D_UN_FICHIER(liste_triee_des_ABSCISSE,FLOT__UNDEF);
lGENERATION_D_UN_FICHIER(liste_initiale_des_DIAGONALE,DIAGONALE_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_DERIVEE_SECONDE,DERIVEE_SECONDE_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_DERIVEE_PREMIERE,DERIVEE_PREMIERE_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_PONDERATION_DE_L_AIRE,PONDERATION_DE_L_AIRE_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_PONDERATION_DE_LA_LONGUEUR_DIAGONALE,PONDERATION_DE_LA_LONGUEUR_DIAGONALE_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_PONDERATION_DE_LA_LONGUEUR_FONCTION,PONDERATION_DE_LA_LONGUEUR_FONCTION_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_PONDERATION_DE_LA_DERIVEE_SECONDE,PONDERATION_DE_LA_DERIVEE_SECONDE_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_PONDERATION_DE_LA_DERIVEE_PREMIERE,PONDERATION_DE_LA_DERIVEE_PREMIERE_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_ORDONNEE,ORDONNEE_IMPLICITE);
lGENERATION_D_UN_FICHIER(liste_initiale_des_ABSCISSE,ABSCISSE_IMPLICITE);
RETU_Commande;
Eblock
ECommande