/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E C O U P A G E   D ' U N   F I C H I E R  :                                                                             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Pour chaque couple de valeurs successives,                                                                     */
/*                  ce programme rajoute N valeurs intermediaires.                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Exemple d'utilisation :                                                                                                    */
/*                                                                                                                                   */
/*                    Soit le fichier :                                                                                              */
/*                                                                                                                                   */
/*                                                          +1                                                                       */
/*                                                          +2                                                                       */
/*                                                          +3                                                                       */
/*                                                          +4                                                                       */
/*                                                          +5                                                                       */
/*                                                          +6                                                                       */
/*                                                          +7                                                                       */
/*                                                          +8                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                  et voici le resultat du decoupage, suivant les options :                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      Fichier :           dup=FAUX            dup=VRAI            dup=FAUX            dup=VRAI     */
/*                                                          pas=1               pas=1               pas=2               pas=2        */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                                      +1                  +1                  +1                  +1                  +1           */
/*                                                          +1.5                +1.5                +1.5                +1.5         */
/*                                                                                   +1.5                                    +1.5    */
/*                                                                              +2                                                   */
/*                                                                                                                                   */
/*                                      +2                  +2                  +2                                      +2           */
/*                                                          +2.5                +2.5                                                 */
/*                                                                                   +2.5                                            */
/*                                                                              +3                                                   */
/*                                                                                                                                   */
/*                                      +3                  +3                  +3                  +3                  +3           */
/*                                                          +3.5                +3.5                +3.5                +3.5         */
/*                                                                                   +3.5                                    +3.5    */
/*                                                                              +4                                                   */
/*                                                                                                                                   */
/*                                      +4                  +4                  +4                                      +4           */
/*                                                          +4.5                +4.5                                                 */
/*                                                                                   +4.5                                            */
/*                                                                              +5                                                   */
/*                                                                                                                                   */
/*                                      +5                  +5                  +5                  +5                  +5           */
/*                                                          +5.5                +5.5                +5.5                +5.5         */
/*                                                                                   +5.5                                    +5.5    */
/*                                                                              +6                                                   */
/*                                                                                                                                   */
/*                                      +6                  +6                  +6                                      +6           */
/*                                                          +6.5                +6.5                                                 */
/*                                                                                   +6.5                                            */
/*                                                                              +7                                                   */
/*                                                                                                                                   */
/*                                      +7                  +7                  +7                  +7                  +7           */
/*                                                          +7.5                +7.5                +7.5                +7.5         */
/*                                                                                   +7.5                                    +7.5    */
/*                                                                                                                                   */
/*                                      +8                  +8                  +8                  +8                  +8           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Lorsque "dupliquer=VRAI" (soit "dup=VRAI"), les valeurs ci-dessus                                              */
/*                  sont decalees de cinq espaces vers la droite lorsqu'elles sont                                                   */
/*                  editees par le deuxieme 'EDITION_DANS_gOPERATION_SUR_LES_FICHIERS_AVEC_SAUT_DE_LIGNE(...)'                       */
/*                  correspondant a cette option...                                                                                  */
/*                                                                                                                                   */
/*                    On verra a ce propos et avec interet                                                                           */
/*                  'v $xiirv/.REFP.11.1.$U .xrv.decoupage.01.X'.                                                                    */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrv/decoupage.01$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20160802092942).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   NOMBRE_DE_POINTS_INTERMEDIAIRES                                                                                               \
                    UN                                                                                                                  \
                                        /* Nombre de points intermediaires.                                                          */
#define   DUPLIQUER_LES_VALEURS                                                                                                         \
                    VRAI                                                                                                                \
                                        /* Afin de controler la duplication des valeurs intermediaires.                              */

#define   UTILISER_L_INTERPOLATION_LINEAIRE                                                                                             \
                    VRAI                                                                                                                \
                                        /* Afin de controler l'interpolation (introduit le 20201030115430, la valeur par defaut      */ \
                                        /* garantissant la compatibilite anterieure...).                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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"
#include  xrv/ARITHMET.21.I"
#include  xrv/champs_5.41.I"

#define   VALEUR_IMPLICITE                                                                                                              \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_des_valeurs,liste_des_valeurs);
                                        /* Definition en memoire du fichier de coordonnees cartesiennes.                             */

#define   ELEMENT_DU_FICHIER(index)                                                                                                     \
                    gELEMENT_DU_FICHIER(liste_des_valeurs,index)
                                        /* Acces a un element courant du fichier de coordonnees cartesiennes.                        */

#define   DERIVEE_1_IMPLICITE                                                                                                           \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_des_derivees_1,liste_des_derivees_1);
                                        /* Definition en memoire du fichier des derivees 1 (introduit le 20201030115430).            */

#define   ELEMENT_DU_FICHIER_DERIVEE_1(index)                                                                                           \
                    gELEMENT_DU_FICHIER(liste_des_derivees_1,index)
                                        /* Acces a un element courant du fichier des derivees 1 (introduit le 20201030115430).       */

#define   DERIVEE_2_IMPLICITE                                                                                                           \
                    FZERO

gGENERATION_D_UN_FICHIER(fichier_des_derivees_2,liste_des_derivees_2);
                                        /* Definition en memoire du fichier des derivees 2 (introduit le 20201030115430).            */

#define   ELEMENT_DU_FICHIER_DERIVEE_2(index)                                                                                           \
                    gELEMENT_DU_FICHIER(liste_des_derivees_2,index)
                                        /* Acces a un element courant du fichier des derivees 2 (introduit le 20201030115430).       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   index_de_valeur_courante                                                                                                      \
                    NEUT(index)
#define   index_de_valeur_suivante                                                                                                      \
                    SUCC(index)

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D E C O U P A G E   D ' U N   F I C H I E R  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
#include  xrv/ARITHMET.22.I"
#include  xci/valeurs.03.I"

     DEFV(Int,INIT(nombre_de_points_intermediaires,NOMBRE_DE_POINTS_INTERMEDIAIRES));
                                        /* Nombre de points intermediaires.                                                          */
     DEFV(Logical,INIT(dupliquer_les_valeurs,DUPLIQUER_LES_VALEURS));
                                        /* Afin de controler la duplication des valeurs intermediaires.                              */

     DEFV(Logical,INIT(utiliser_l_interpolation_lineaire,UTILISER_L_INTERPOLATION_LINEAIRE));
                                        /* Afin de controler l'interpolation (introduit le 20201030115430, la valeur par defaut      */
                                        /* garantissant la compatibilite anterieure...).                                             */
     /*..............................................................................................................................*/
#include  xrv/champs_5.1A.I"

     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(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_FICHIER("fichier="
                                                 ,fichier_des_valeurs
                                                 ,liste_des_valeurs
                                                 ,VALEUR_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );

                         PROKESF_ARGUMENT_FICHIER("derivees1="
                                                 ,fichier_des_derivees_1
                                                 ,liste_des_derivees_1
                                                 ,DERIVEE_1_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                         PROKESF_ARGUMENT_FICHIER("derivees2="
                                                 ,fichier_des_derivees_2
                                                 ,liste_des_derivees_2
                                                 ,DERIVEE_2_IMPLICITE
                                                 ,lTRANSFORMAT_0d
                                                 ,iGENERATION_D_UN_FICHIER
                                                  );
                                        /* Parametres introduits le 20201030115430...                                                */

                         GET_ARGUMENT_I("nombre_points=""nombre=""n=",nombre_de_points_intermediaires);
                         GET_ARGUMENT_L("dupliquer=""dup=""d=",dupliquer_les_valeurs);

                         GET_ARGUMENT_L("interpolation_lineaire=""il=",utiliser_l_interpolation_lineaire);
                         GET_ARGUMENT_N("interpolation_cubique=""ic=",utiliser_l_interpolation_lineaire);
                                        /* Parametres introduits le 20201030115430...                                                */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_3;
                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_5;
                                        /* Cette procedure fut introduite le 20211005105445...                                       */
                         )
                    );

     Test(IFGE(nombre_d_elements,DEUX))
          Bblock
          DoIn(index
              ,premier_element_d_un_fichier
              ,DERNIER_ELEMENT_D_UN_FICHIER
              ,pas_de_parcours_d_un_fichier
               )
               Bblock
               DEFV(Float,INIT(valeur_courante,ELEMENT_DU_FICHIER(index_de_valeur_courante)));

               Test(IFLT(index_de_valeur_courante,DERNIER_ELEMENT_D_UN_FICHIER))
                    Bblock
                    DEFV(Float,INIT(valeur_suivante,ELEMENT_DU_FICHIER(index_de_valeur_suivante)));

                    Repe(SUCC(SUCC(nombre_de_points_intermediaires)))
                                        /* Le 'SUCC(SUCC(...))' est destine a prendre en compte les extremites du segment            */
                                        /* courant {valeur_courante,valeur_suivante}.                                                */
                         Bblock
                         DEFV(Float,INIT(lambda
                                        ,DIVI(FLOT(SOUS(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe))
                                             ,FLOT(SUCC(nombre_de_points_intermediaires))
                                              )
                                         )
                              );
                         DEFV(Float,INIT(valeur_interpolee,FLOT__UNDEF));

                         Test(IL_FAUT(utiliser_l_interpolation_lineaire))
                                        /* Test introduit le 20201030115430...                                                       */
                              Bblock
                              EGAL(valeur_interpolee,INTERPOLATION_LINEAIRE(valeur_courante,valeur_suivante,lambda));
                                        /* Le 20201030114753, j'ai remplace 'BARY(...)' par 'INTERPOLATION_LINEAIRE(...)'. Cela      */
                                        /* ne change absolument rien aux resultats (etan donnees les definitions relatives...),      */
                                        /* mais c'est plus logique...                                                                */
                              Eblock
                         ATes
                              Bblock
                              EGAL(valeur_interpolee
                                  ,INTERPOLATION_CUBIQUE(valeur_courante,ELEMENT_DU_FICHIER_DERIVEE_1(index_de_valeur_courante)
                                                        ,valeur_suivante,ELEMENT_DU_FICHIER_DERIVEE_2(index_de_valeur_courante)
                                                        ,lambda
                                                         )
                                   );
                                        /* L'interpolation cubique a ete introduite le 20201030115430...                             */
                              Eblock
                         ETes

                         Test(IL_FAUT(dupliquer_les_valeurs))
                              Bblock
                              EDITION_DANS_gOPERATION_SUR_LES_FICHIERS_AVEC_SAUT_DE_LIGNE(valeur_interpolee);
                                        /* On notera que pour l'extremite 'lambda=1', cette valeur interpolee est evidemment         */
                                        /* 'valeur_suivante' et aussi le dernier  element du fichier a la fin du processus...        */
                                        /*                                                                                           */
                                        /* Introduit sous cette forme le 20160804093649...                                           */

                              Test(IMNE(lambda,COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE))
                                   Bblock
                                   EDITION_DANS_gOPERATION_SUR_LES_FICHIERS_AVEC_SAUT_DE_LIGNE(valeur_interpolee);
                                        /* On ne duplique que les valeurs qui ne sont pas aux extremites (lambda=0 et lambda=1)      */
                                        /* car, en effet, ces dernieres sont soit 'valeur_courante', soit 'valeur_suivante'...       */
                                        /*                                                                                           */
                                        /* Introduit sous cette forme le 20160804093649...                                           */
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         ATes
                              Bblock
                              Test(IFOU(IFNE(lambda,COORDONNEE_BARYCENTRIQUE_MAXIMALE)
                                       ,IFET(IFEQ(lambda,COORDONNEE_BARYCENTRIQUE_MAXIMALE)
                                            ,IFEQ(index_de_valeur_suivante,DERNIER_ELEMENT_D_UN_FICHIER)
                                             )
                                        )
                                   )
                                   Bblock
                                   EDITION_DANS_gOPERATION_SUR_LES_FICHIERS_AVEC_SAUT_DE_LIGNE(valeur_interpolee);
                                        /* On n'edite pas les valeurs a l'extremite 'lambda=1', sauf evidemment lorsqu'il est        */
                                        /* aussi le dernier element du fichier...                                                    */
                                        /*                                                                                           */
                                        /* Introduit sous cette forme le 20160804093649...                                           */
                                   Eblock
                              ATes
                                   Bblock
                                   Eblock
                              ETes
                              Eblock
                         ETes
                         Eblock
                    ERep
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          EDoI
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("rien n'est fait car il faut au moins 2 elements dans chaque fichier");
          Eblock
     ETes

     lGENERATION_D_UN_FICHIER(liste_des_derivees_2,DERIVEE_2_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_des_derivees_1,DERIVEE_1_IMPLICITE);
     lGENERATION_D_UN_FICHIER(liste_des_valeurs,VALEUR_IMPLICITE);

     RETU_Commande;
     Eblock
ECommande



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