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