"SfR Fresh" - the SfR Freeware/Shareware Archive

Member "ocre-0.029/id3/arbolesid3.c" of archive ocre_v0_029.tgz:


As a special service "SfR Fresh" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
    1 
    2 #include <stdlib.h>
    3 #include <stdio.h>
    4 #include <string.h>
    5 
    6 #include "arbolesid3.h"
    7 #include "tabla2.h"
    8 #include "id3.h"
    9 /*
   10 #include "errors.h"
   11 */
   12 
   13 int FALSE=0;
   14 int TRUE=1;
   15 
   16 void leeArbolesN (tplarboles * nllarboles, char * dir)
   17 {
   18   char nf[128];
   19   char nfa[128];
   20   FILE * fd;
   21   int nl, l;
   22   int na, ia;
   23   tplarboles plarbs, plarbsAnt;
   24   char nom[128];
   25   int nc;
   26   sprintf(nf, "%s/00index", dir);
   27   fd = fopen (nf, "r");
   28 /*
   29   compruebaFd (fd, nf, "imagio.leeImagen");
   30 */
   31   if (fd == NULL) {
   32     printf ("arbolesid3: error at leeArboles opening index %s\n",nf);
   33     exit (1);
   34     }
   35   fscanf (fd, "%d", &nl);
   36   for (l=0; l<nl; l++) {
   37     fscanf (fd, "%d", &na);
   38     plarbs = (tplarboles) malloc (sizeof(struct tlarboles));
   39     plarbs->num = na;
   40     plarbs->larb = (tpnodo *) malloc(na * sizeof(tpnodo));
   41     fscanf(fd, "%s", nom);
   42     nc = strlen (nom);
   43     plarbs->nombre = (char *) malloc((nc+1) * sizeof(char));
   44     strcpy (plarbs->nombre, nom);
   45     for (ia=0; ia<na; ia++) {
   46       sprintf(nfa, "%s/%s=%02d.id3", dir, nom, ia);
   47       plarbs->larb[ia] = leeArbol(nfa);
   48       }
   49     if (l == 0)
   50       * nllarboles = plarbs ;
   51     if (l > 0)
   52       plarbsAnt->next = plarbs;
   53     plarbsAnt = plarbs;
   54     }
   55   plarbsAnt->next = (tplarboles) 0L;
   56   fclose (fd);
   57 }
   58 
   59 void leeArboles (char * dir)
   60 {
   61   leeArbolesN (&llarboles, dir);
   62 }
   63 
   64 void escribeArboles0 (char * dir, char * nomc, int nar)
   65 {
   66   int ia;
   67   char nomFich[128];
   68   borraMascara ();
   69   for (ia=0; ia<nar; ia++) {
   70     sprintf (nomFich, "%s/arbol_%s=%02d.id3", dir, nomc, ia);
   71     escribeArbol (nomFich, arbolId3() );
   72     actualizaMascara ();
   73     }
   74 }
   75 
   76 void escribeArboles (char * dir, char * nomc, int nar)
   77 {
   78   fijaFunc (nomc);
   79   escribeArboles0 (dir, nomc, nar);
   80 }
   81 
   82 // en directorio dir,
   83 // nnomc (numero de) nombres de caracter nomc[i],
   84 // separados por cs
   85 // nar (numero de) arboles
   86 void escribeArbolesO (char * dir, char ** nomc, int nnomc, char *cs, int nar)
   87 {
   88   int i;
   89   char nomcc[128];
   90   fijaFunc (nomc[0]);
   91   strncpy (nomcc, cs, 2);
   92   strncat (nomcc, nomc[0], 20);
   93   for (i=1; i<nnomc; i++){
   94     oFunc (nomc[i]);
   95     strncat (nomcc, cs, 2);
   96     strncat (nomcc, nomc[i], 20);
   97     }
   98   escribeArboles0 (dir, nomcc, nar);
   99 }
  100 
  101 void evaluaConArbolesInd (tplarboles plarbs, int v[], int res[])
  102       /* res[]   int .. [3] */
  103 {
  104   int ia;
  105   int r;
  106   res [nd_falso]  = 0;
  107   res [nd_cierto] = 0;
  108   res [nd_nose ]  = 0;
  109   for (ia=0; ia < plarbs->num; ia++){
  110     r = evalArbolVector (plarbs->larb[ia], v);
  111     res [r] ++ ;
  112     }
  113 }
  114 
  115 tplarboles buscaNomEnArbolesN (tplarboles nllarboles, char * nomCar)
  116 {
  117   tplarboles plarbs;
  118   for(plarbs = nllarboles; plarbs != 0L; plarbs = plarbs->next){
  119     if (strcmp(nomCar,plarbs->nombre) == 0) break ;
  120     }
  121   if (plarbs == 0L) {
  122     printf ("arbolesid3: error en evaluaConArbolesN buscando nomCar=%s\n", nomCar);
  123     exit (1);
  124     }
  125   return plarbs;
  126 }
  127 
  128 tplarboles buscaNomEnArboles (char * nomCar)
  129 {
  130   tplarboles plarbs;
  131   for(plarbs = llarboles; plarbs != 0L; plarbs = plarbs->next){
  132     if (strcmp(nomCar,plarbs->nombre) == 0) break ;
  133     }
  134   if (plarbs == 0L) {
  135     printf ("arbolesid3: error en evaluaConArboles buscando nomCar=%s\n", nomCar);
  136     exit (1);
  137     }
  138   return plarbs;
  139 }
  140 
  141 void evaluaConArbolesN (tplarboles nllarboles, char * nomCar, int v[], int res[])
  142       // res[]   int .. [3]
  143 {
  144   tplarboles plarbs;
  145   plarbs = buscaNomEnArbolesN (nllarboles, nomCar);
  146   evaluaConArbolesInd (plarbs, v, res);
  147   /*
  148   printf ("evaluaConArbolesN %s %2d %2d %2d\n",plarbs, res[0], res[1], res[2]);
  149   */
  150 }
  151 
  152 void evaluaConArboles (char * nomCar, int v[], int res[])
  153       /* res[]   int .. [3] */
  154 {
  155   tplarboles plarbs;
  156   plarbs = buscaNomEnArboles (nomCar);
  157   evaluaConArbolesInd (plarbs, v, res);
  158   /*
  159   printf ("evaluaConArboles %s %2d %2d %2d\n",plarbs, res[0], res[1], res[2]);
  160   */
  161 }
  162 
  163 float valProp (int * res)
  164 {
  165   int narb;
  166   narb = res[0]+res[1]+res[2] ;
  167   return (0.5 + res[1]) / (narb+1.0) ;
  168 }
  169  /**/
  170 float umbrValPropDef = 0.45;  //   0.45  (o 0.25?)
  171 
  172 void reordenaPropuestas (tppropues lprop, char * nom, int * res, int npp, int * pnprp)
  173 {
  174   int i, j;
  175   int encontrado;
  176   /* busca posicion */
  177   encontrado = FALSE;
  178   i = 0;
  179   while (!encontrado && (i < *pnprp)) {
  180     if (valProp(res) > valProp(lprop[i].res)) encontrado = TRUE;
  181     else i++;
  182     }
  183   /* la posicion a insertar es  i  */
  184   if (i == npp) return ;    /* no cabe, no es de las npp mejores */
  185   if (i < *pnprp) {
  186     /* deplazar lo que haya tras  i (inclusive), i .. (*pnprp)-1 */
  187     for (j = (*pnprp)-1; j>=i; j--) {
  188       lprop[j+1].nombre = lprop[j].nombre ;
  189       lprop[j+1].narb   = lprop[j].narb   ;
  190       lprop[j+1].res[0] = lprop[j].res[0] ;
  191       lprop[j+1].res[1] = lprop[j].res[1] ;
  192       lprop[j+1].res[2] = lprop[j].res[2] ;
  193       }
  194     }
  195   /* introducir la propuesta en  i  */
  196   lprop[i].nombre = nom ;
  197   lprop[i].narb   = res[0]+res[1]+res[2] ;
  198   lprop[i].res[0] = res[0] ;
  199   lprop[i].res[1] = res[1] ;
  200   lprop[i].res[2] = res[2] ;
  201   /**/
  202   (*pnprp)++ ;
  203   // printf ("=====%4d %4d %4d %s\n", i, npp, *pnprp, nom);
  204 }
  205 
  206 void clasificaConArbolesN (tplarboles llarboles,
  207                            int v[], tppropues lprop, int npp, int * pnprp,
  208 			   float umbrValProp)
  209 {
  210   int res[3];
  211   tplarboles plarbs;
  212   * pnprp = 0;
  213   for(plarbs = llarboles; plarbs != 0L; plarbs = plarbs->next){
  214     evaluaConArbolesInd (plarbs, v, res);
  215 // para ver traza de dcsw
  216 //    if (res[0]!=5)
  217 //      printf("%1d %1d %1d %10s\n", res[0], res[1], res[2], plarbs->nombre);
  218 //
  219     if (valProp (res) > umbrValProp)
  220       reordenaPropuestas (lprop, plarbs->nombre, res, npp, pnprp);
  221     }
  222 // para ver traza de dcsw
  223 //  printf ("\n");
  224 //
  225 }
  226 
  227 void clasificaConArboles (int v[], tppropues lprop, int npp, int * pnprp)
  228 {
  229   clasificaConArbolesN (llarboles, v, lprop, npp, pnprp, umbrValPropDef);
  230 }
  231