/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.