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