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