mchoquet.c

Go to the documentation of this file.
00001 /*
00002 *    Copyright (c) 2007. The BATI team. All right reserved.
00003 *
00004 *    This file is part of BATI library.
00005 *
00006 *    BATI library is free software: you can redistribute it and/or modify
00007 *    it under the terms of the GNU General Public License as published by
00008 *    the Free Software Foundation, either version 3 of the License, or
00009 *    (at your option) any later version.
00010 *
00011 *    BATI library  is distributed in the hope that it will be useful,
00012 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 *    GNU General Public License for more details.
00015 *
00016 *    You should have received a copy of the GNU General Public License
00017 *    along with BATI library.  If not, see <http://www.gnu.org/licenses/>.
00018 */
00019 #include <stdio.h>
00020 #include <string.h>
00021 #include <stdlib.h>
00022 #include "choquet.h"
00023 #include "image.h"    /* types des donnees manipulees dans ima2D */
00024 #include "proto2D.h"  /* descripteurs et prototypes des fonctions de ima2D */
00025 
00026 
00027 
00028 
00029 
00030 int main(int argc, char *argv[])
00031         {
00032         float *donnee;
00033         float resultat;
00034         int i,c;
00035         char fileCriteres[TAILLE_NOM_FICHIER];
00036         //char *fileCriteres;
00037         FILE *fp;
00038 
00039 
00040         /* declaration de variables locales */
00041         choquet_interaction_t descripteur;
00042 
00043 
00044         /* main : variables et parametres propres au main*/
00045         param par0, *ptp;      /* tete et pointeur pour la chaine de parametres */
00046 
00047 
00048         /* LECTURE PARAMETRES */
00049 
00050         /* debut: OBLIGATOIRE pour compatibilite avec les 3 modes de lecture de param */
00051         param_debut(argc, argv, &par0);
00052         ptp = &par0;      /* regle : ptp pointe sur la structure du parametre suivant */
00053 
00054         /* operateurs: ptp est passe en argument, return fournit la nouvelle position */
00055         printf("\n\nLECTURE EN COURS...\n");
00056         ptp = choquet_interaction_lect(&descripteur, ptp, "");
00057         printf("\n...LECTURE OK.\n");
00058 
00059 
00060         /* fin: sauvegarde des parametres utilises en mode MANUEL ou FICHIER */
00061         param_fin(argc, argv, &par0);
00062 
00063         
00064 
00065         
00066         
00067 
00068         printf("\n-> Le fichier des coefficients est : \t\t%s",(descripteur.fichier));
00069 
00070 
00071 
00072         /* appel de la fonction d'initialisation */
00073         printf("\n\nINITIALISATION EN COURS...\n\n");
00074         choquet_interaction_init(&descripteur);
00075         printf("\n...FIN INITIALISATION.\n");
00076 
00077 
00078 
00079         switch(descripteur.erreur)
00080                 {
00081                                 case AUCUNE_ERREUR :    printf("\n\nPAS D'ERREUR => PREPARATION AU CALCUL :\n");
00082                                                         /* rentrer les criteres */
00083                                                         printf("\nDonner le nom du fichier des criteres : ");
00084                                                         scanf("%s",fileCriteres);
00085                                                         printf("-> Le fichier des criteres est : \t\t%s",fileCriteres);
00086 
00087                                                         printf("\n-> Allocation memoire (%d coeff)...",(descripteur.nbcoeff));
00088                                                         donnee = (float *)malloc((descripteur.nbcoeff)*sizeof(float));
00089                                                         printf("\t\tOK.\n");
00090 
00091                                                         printf("-> Ouverture du fichier...");
00092                                                         fp = fopen(fileCriteres,"rt");
00093                                                         printf("\t\t\tOK\n");
00094 
00095                                                         for(i=0;i<(descripteur.nbcoeff);i++)
00096                                                                 fscanf(fp,"%f",&donnee[i]);
00097 
00098                                                         fclose(fp);
00099 
00100                                                         printf("-> Criteres rentres et fichier ferme...\t\tOK\n");
00101 
00102                                                         printf("\nAffichage des coefficients d'interactions :\n");
00103                                                         for(i=0;i<(descripteur.nbcoeff);i++)
00104                                                                 {
00105                                                                 for(c=0;c<(descripteur.nbcoeff);c++)
00106                                                                         printf(" %f\t ",descripteur.ptparam[i][c]);
00107                                                                 printf("\n");
00108                                                                 }
00109 
00110                                                         printf("\nAffichage des criteres :\n");
00111                                                         for(i=0;i<(descripteur.nbcoeff);i++)
00112                                                                 {
00113                                                                 printf(" %f\t ",donnee[i]);
00114                                                                 printf("\n");
00115                                                                 }
00116 
00117                                                         /* appel de la fonction de calcul */
00118                                                         printf("\n\nCALCUL EN COURS...\n\n");
00119                                                         choquet_interaction_calc(&descripteur,donnee,&resultat);
00120                                                         printf("\n...CALCUL OK.");
00121 
00122                                                         /* on affiche le resultat */
00123                                                         printf("\n\n\n***************************\n");
00124                                                         printf("RESULTAT = %2.4f\n",resultat);
00125                                                         printf("***************************\n\n");
00126 
00127                                                         printf("\n-> Libération mémoire associée aux critères...");
00128                                                         for (i = 0 ; i < (descripteur.nbcoeff) ; i++ )
00129                                                                 free(donnee);
00130                                                         printf("\tOK\n");
00131                                                         printf("\n-> Libération mémoire associée aux coefficients...");
00132                                                         choquet_interaction_ferm(&descripteur);
00133                                                         printf("OK\n\n");
00134                                                         printf("\nFin.\n\n");
00135                                                         break;
00136 
00137                 case ERREUR_CHOQUET_FILE :              printf("\nERREUR DETECTEE A L'OUVERTURE DU FICHIER : \nEchec ouverture.\n");
00138                                                         printf("\nFin.\n");
00139                                                         break;
00140 
00141                 case ERREUR_CHOQUET_LIGNE_MATRICE :     printf("\nERREUR DETECTEE A L'INTERIEUR DU FICHIER : \nIncoherence entre le nombre de coefficients effectifs et nbcoeff => matrice non carree et probleme sur le nombre de lignes.\n");
00142                                                         printf("\nFin.\n");
00143                                                         break;
00144 
00145                 case ERREUR_CHOQUET_COLONNE_MATRICE :   printf("\nERREUR DETECTEE A L'INTERIEUR DU FICHIER : \nIncoherence entre le nombre de coefficients effectifs et nbcoeff => matrice non carree et probleme sur le nombre de colonnes.\n");
00146                                                         printf("\nFin.\n");
00147                                                         break;
00148 
00149                 case ERREUR_CHOQUET_NU :                printf("\nERREUR DETECTEE SUR LES COEFFICIENTS DE PONDERATION : \nleur somme doit faire 1.\n");
00150                                                         printf("\nFin.\n");
00151                                                         break;
00152 
00153                 case ERREUR_CHOQUET_INTERACTION :       printf("\nERREUR DETECTEE SUR LES COEFFICIENTS D'INTERACTION : \nils ne verifient pas la condition permettant le passage a la mesure floue.\n");
00154                                                         printf("\nFin.\n");
00155                                                         break;
00156 
00157                 }
00158 
00159 
00160         exit(1);
00161 }
00162 
00163 
00164 

Generated on Tue Apr 22 13:31:02 2008 for donnee1D by  doxygen 1.5.3