www.pudn.com > tr4all.rar > modioperandi0.h


//Copyright(c)2004  Alexander Kadyrov 
//DO NOT FORGET NULL !!!!!! 
TYPEtr *tr=NULL,*tr1,*br=NULL,*br1; 
TYPEsr *sr=NULL,*sr1;//trace line used in all the porgram 
TYPEsr *diff1=NULL,*adiff1=NULL,*diff2=NULL,*adiff2=NULL; 
TYPEtr *atr=NULL; 
unsigned char*sctr=NULL,*sctr1;//Scaled trace 
int *SQRT16=NULL; 
int *sortfeed=NULL,*sorttemp=NULL; 
int *sortedRLsctr34=NULL;//"int" because sortup returns "int"  
int medtemp[256]; 
out outmedtemp[256]; 
double *weights_sqrt_sctr=NULL;//??? 
typedef void (*F)(void); F U[Amount],f[Amount],V[Amount]; 
unsigned char u[Amount],v[Amount]; 
//unsigned char *tr=NULL,*tr1,*br=NULL,*br1,*sr=NULL,*sr1;//trace array used in all the porgram 
//*****A new modus operandi in three PLACESs below: PLACE1,PLACE2,PLACE3  
               //PLACE1: 
//index M of UM,fM,VM must be M>1, index k of objects also must be k>1 
//*******************ANOTHER MODUS OPERANDI  
int i; 
void U2(void){u[0]=0;u[1]=0;}//uses objects, line should end with zero  
void f2(void)//"inverse track" NEEDS memoryInitiation 
    {   tr1=tr;br1=br+L;for(i=L;i>0;i--) *(--br1)=*tr1++; 
    }//END. 
void V2(void){v[0]=3;v[1]=0;}//computed objects;line should end with zero; 
//*******************ANOTHER MODUS OPERANDI  
void U4(void) {u[0]=0;u[1]=0;}//uses objects, line should end with zero  
void f4(void)//"inverse track" NEEDS memoryInitiation 
    {   tr1=tr;sr1=sr+L;for(i=L;i>0;i--) *(--sr1)=-*tr1++; 
    }//END. 
void V4(void) {v[0]=5;v[1]=0;}//computed objects;line should end with zero; 
//*******************ANOTHER MODUS OPERANDI  
void U6(void) {u[0]=0;u[1]=0;}//uses objects, line should end with zero  
void f6(void)//"abs trace" NEEDS memoryInitiation 
    {  if  (typetr EQ 0) atr=tr;//for(i=0;i0) 
      for(i=span;i>0;i--){val=*tr1++; if(val>0)sumPos+=val;else sumNeg+=val;} 
     else 
      { sum=0; for(i=span;i>0;i--)sum+=*tr1++;  sumPos+=sum;} 
     sum=sumPos+sumNeg; 
    o[33]=sum; 
    }//END. 
void V40(void) 
{v[0]=33;v[1]=0;}//computed objects,line should end with zero  
//*******************ANOTHER MODUS OPERANDI  
int medindex,Lr34,Ll34;//"median index dividing integral abs(f(t))"  
double medindexPrecise;//this is o[34], but integer version medindex is used later  
void U41(void){u[0]=33;u[1]=6;u[2]=0;}//uses objects,line should end with zero 
 double sum2;out cumsum; 
void f41(void)//the next text supposes that sum2>0.  
    { sum2=(sumPos-sumNeg)/2.; 
      cumsum=0;tr1=atr+start; 
      for(i=lstart;i<=lfin;i++){cumsum+=*tr1++;if (cumsum>=sum2) break;} 
      medindexPrecise=i;medindex=i; 
      if (cumsum EQ sum2){medindexPrecise=i+0.5;medindex++;} 
      o[34]=medindexPrecise; 
      int c=medindex-lbeg; Lr34=fin-c+1, Ll34=c-start+1; 
 
}//END.  
void V41(void) 
{v[0]=34;v[1]=0;}//computed objects,line should end with zero  
//*******************ANOTHER MODUS OPERANDI  
TYPEtr min,max; 
void U44(void){u[0]=0;u[1]=0;}//uses objects,line should end with zero  
void f44(void)//min max;  
    {  tr1=tr+start; min=*tr1;max=*tr1; 
    for(i=span-1;i>0;i--) 
    //{tr1++;if(max<*tr1)max=*tr1;if(min>*tr1)min=*tr1;} 
   {TYPEtr t=*++tr1;if(maxt)min=t;} 
 
     if (span0) min=0;if (max<=0) max=0;}//"<=" for compiler not to complain 
    o[35]=min;o[37]=max; 
    }//END. 
void V44(void) 
{v[0]=35;v[1]=37;v[2]=0;}//computed objects,line should end with zero  
//*******************ANOTHER MODUS OPERANDI  
void U46(void){u[0]=0;u[1]=0;}//uses objects,line should end with zero  
void f46(void)//max;  
    {  tr1=tr+start; max=*tr1; 
    for(i=span-1;i>0;i--){tr1++;if(max<*tr1)max=*tr1;} 
    o[37]=max; 
    }//END. 
void V46(void) 
{v[0]=37;v[1]=0;v[2]=0;}//computed objects,line should end with zero  
//*******************ANOTHER MODUS OPERANDI  
TYPEtr maxAbs; 
void U47(void){u[0]=35;u[1]=37;u[2]=0;}//uses objects,line should end with zero  
void f47(void)//"max abs(f(t))" 
    {  if (typetr EQ 0) maxAbs=max; 
       else {TYPEtr mi=ABS(min),ma=ABS(max); maxAbs=(mi0;i--) sumSqR += sqrt(*tr1++); 
      Lp05=sumSqR*sumSqR; 
#else 
      for(i=span;i>0;i--) sumSqR += SQRT16[*tr1++]; 
      Lp05=sumSqR/16.*sumSqR/16.; //sumSqR= sumSqR; 
#endif 
    o[51]=Lp05; 
    if (o[51]<0) 
     Lp05=Lp05; 
    }//END. 
void V62(void) 
{v[0]=51;v[1]=0;}//computed objects,line should end with zero  
//*******************ANOTHER MODUS OPERANDI  
int medSqR_index;//"median index dividing integral abs(f(t))"  
double medSqR_indexPrecise;//up to 1/2. this is o[52], but integer version medindex is used later  
void U63(void){u[0]=51;u[1]=6;u[2]=0;}//uses objects,line should end with zerodouble cumsum; 
void f63(void)// the next text supposes that sumSqR>0.  
    { double sum2=sumSqR/2.; out cumsum=0;tr1=atr+start; 
#if typetr //int and double 
      for(i=lstart;i<=lfin;i++){cumsum+=sqrt(*tr1++);if (cumsum>=sum2) break;} 
#else      
      for(i=lstart;i<=lfin;i++){cumsum+=SQRT16[*tr1++];if (cumsum>=sum2) break;} 
#endif 
    medSqR_indexPrecise=i;medSqR_index=i; 
    if (cumsum EQ sum2) {medSqR_indexPrecise=i+0.5;medSqR_index++;} 
    o[52]=medSqR_indexPrecise;}//END.  
void V63(void) 
{v[0]=52;v[1]=0;}//computed objects,line should end with zero  
 
//------------------------------ 
//*******************ANOTHER MODUS OPERANDI  
TYPEtr max_min; int Max;//Max<=255 
void U64(void){u[0]=35;u[1]=37;u[2]=6;u[3]=0;}//uses objects,line should end with zero  
void f64(void)//object 53 "Scaled trace" for median computing 
    { max_min=max-min; 
#if typetr //int and double 
      int i; max_min=max-min;if (max_min EQ 0) max_min=1; 
      Max=3*span+30; if (Max>255) Max=255; // should it be Max=3*span??? 
      double Coe=(double)Max / max_min; 
      for(i=0;i 2*0.2*Max)///Is the condition optimal ??? 
            {IS_sortedRLsctr34=0; return;}        
       IS_sortedRLsctr34=1; 
       int c=medindex-lbeg, Lr=Lr34,Ll=Ll34;    
 
       int  i, *remS=sortedRLsctr34; 
 
       sctr1=sctr+c;       
       for(i=0;i=0;i--) medtemp[i]=0; 
         for (j=Lr34-1;j>=0;j--) {i=sctr1[j];medtemp[i]++;} 
         for (i=0;i<=Max;i++) {cumsum+=medtemp[i];if (cumsum>wei_threshold) break;} 
         int med=i; 
#if typetr //int and double, rescale "med" back:       i 
         double Coe=(double)Max / max_min; 
         o[55] = med/Coe+min; 
#else 
         o[55] = med; 
#endif 
       } 
}//END 
void V66(void) 
{v[0]=55;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero  
//*******************ANOTHER MODUS OPERANDI 
void U67(void){u[0]=54;u[1]=0;u[2]=0;u[3]=0;}//uses objects,line should end with zero  
void f67(void)//object 56=55Back "MedianW R+: f(x-c); c is median abscissa (34);\n   W=1;" 
{if (IS_sortedRLsctr34)  
      { 
       int med=sortedRLsctr34[Lr34+Ll34/2]; 
#if typetr //int and double, rescale "med" back:       i 
       double Coe=(double)Max / max_min; 
    o[56] = med/Coe+min; 
#else 
    o[56] = med; 
#endif 
      } 
     else//if (IS_sortedRLsctr34)  
       { sctr1=sctr+medindex-lbeg;//c=medindex-lbeg 
         int wei_threshold=Ll34/2; 
         int i,j,cumsum=0;  
         for (i=Max;i>=0;i--) medtemp[i]=0; 
         for (j=Ll34-1;j>=0;j--) {i=*sctr1--;medtemp[i]++;}//go back from c 
         //>=??? 
         for (i=0;i<=Max;i++) {cumsum+=medtemp[i];if (cumsum>wei_threshold) break;} 
         int med=i; 
#if typetr //int and double, rescale "med" back:       i 
         double Coe=(double)Max / max_min; 
    o[56] = med/Coe+min; 
#else 
    o[56] = med; 
#endif 
       } 
}//END 
void V67(void) 
{v[0]=56;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero  
//*******************ANOTHER MODUS OPERANDI 
void U68(void){u[0]=56;u[1]=0;u[2]=0;u[3]=0;}//uses objects,line should end with zero  
               // all objects are already booked by object 55 
void f68(void) 
{   o[57]=-o[56];  
}//END. 
void V68(void) 
{v[0]=57;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero  
 
//*******************ANOTHER MODUS OPERANDI  
void U69(void){u[0]=6;u[1]=54;u[2]=0;u[3]=0;}//uses objects,line should end with zero  
void f69(void)//object 58 "MedianW R+: f(t-c); c is median abscissa (34);\n   W=abs(f(t))(t-c)" 
{ out weight=0;int c=medindex-lbeg;tr1=atr+c;  
  {for(int j=0;j=0;i--) outmedtemp[i]=0; 
  //Collect weights there: 
  tr1=atr+c; 
  for (j=Lr34-1;j>=0;j--) {i=sctr1[j];outmedtemp[i]+= tr1[j] * j ;} 
  //Find median: 
  if (IS_sortedRLsctr34) 
   { int i0=-1; 
     for (j=0;ji0) 
            {i0=i;cumsum+=outmedtemp[i];if (cumsum>wei_threshold) break;} 
          } 
   }    
  else 
   for (i=0;i<=Max;i++) {cumsum+=outmedtemp[i];if (cumsum>wei_threshold) break;} 
   
  int med=i; 
#if typetr //int and double, rescale "med" back:       i 
       double Coe=(double)Max / max_min; 
    o[58] = med/Coe+min; 
#else 
    o[58] = med; 
#endif 
}//END 
void V69(void) 
{v[0]=58;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero  
//*******************ANOTHER MODUS OPERANDI  
void U70(void){u[0]=54;u[1]=6;u[2]=0;u[3]=0;}//uses objects,line should end with zero  
void f70(void)//object 59=back58 "MedianW R+: f(t-c); c is median abscissa (34);\n   W=abs(f(t))(t-c)" 
{ out weight=0;int c=medindex-lbeg;tr1=atr+c;  
  {for(int j=0;j=0;i--) outmedtemp[i]=0; 
  //Collect weights there: 
   tr1=atr+c; 
   for (j=0;ji0) 
            {i0=i;cumsum+=outmedtemp[i];if (cumsum>wei_threshold) break;} 
          } 
   }    
  else 
   for (i=0;i<=Max;i++) {cumsum+=outmedtemp[i];if (cumsum>wei_threshold) break;} 
   
  int med=i; 
#if typetr //int and double, rescale "med" back:       i 
       double Coe=(double)Max / max_min; 
    o[59] = med/Coe+min; 
#else 
    o[59] = med; 
#endif 
}//END 
void V70(void) 
{v[0]=59;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero  
//*******************ANOTHER MODUS OPERANDI 
void U71(void){u[0]=59;u[1]=0;u[2]=0;u[3]=0;}//uses objects,line should end with zero  
               // all objects are already booked by object 55 
void f71(void) 
{   o[60]=-o[59];  
}//END. 
void V71(void) 
{v[0]=60;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero  
//*******************ANOTHER MODUS OPERANDI 
 
 
////"MedianW R+: f(x-c); c is median abscissa (34);\n   W=sqrt(abs(f(t);" 
/* int c= (int) ceil(medindex-lbeg), i; 
       double wei_threshold_2=0; 
       for (i=c;i<=fin;i++) wei_threshold_2+=weights_sqrt_sctr[i]; 
       double wei_threshold=wei_threshold_2/2; 
//medRight1=medianW(fin-c+1,sctr+c,Max,weights_sqrt_sctr+c,wei_threshold,medtemp); 
   
    o[55]=wei_threshold; 
*/ 
    //o[55]=medRight1;// ????? rescaling back !!!  
 
 
 
 
//*******************ANOTHER MODUS OPERANDI 
//*******************ANOTHER MODUS OPERANDI 
//*******************ANOTHER MODUS OPERANDI 
//*******************ANOTHER MODUS OPERANDI 
/*void U??(void){u[0]=0;u[1]=0;u[2]=0;u[3]=0;}//uses objects,line should end with zero  
void f??(void) 
    { ... 
    o[ob]=...;  
    }//END. 
void V??(void) 
{v[0]=ob;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero  
*/ 
//*******************ANOTHER MODUS OPERANDI 
//*******************ANOTHER MODUS OPERANDI 
//*******************ANOTHER MODUS OPERANDI 
//*******************ANOTHER MODUS OPERANDI 
//*******************ANOTHER MODUS OPERANDI 
//*******************ANOTHER MODUS OPERANDI 
//*******************================================END of MODI OPERANDI 
void UfVArrAssign(void)       //PLACE2  
{int M; for (M=0;M0){delete[]atr;atr=new TYPEtr[ML];} 
 if (oneeded[44]){delete[]diff1;diff1=new TYPEsr[ML]; 
                  delete[]adiff1;adiff1=new TYPEsr[ML];}//"differences 1" 
 if (oneeded[47]){delete[]diff2;diff2=new TYPEsr[ML]; 
                  delete[]adiff2;adiff2=new TYPEsr[ML];}//"differences 2" 
 if (oneeded[53]){delete[]sctr;sctr=new unsigned char[ML];}//Scaled trace 
 if (oneeded[54]){delete[]sortedRLsctr34;sortedRLsctr34=new int[ML+2];}//Scaled abs trace 
 
 
/*  
 
 
if (oneeded[54]){delete[]weights_sqrt_sctr;weights_sqrt_sctr=new double[ML]; 
                  if (SQRT EQ NULL) 
                   {SQRT=new double[256];for(int i=0;i<256;i++)SQRT[i]=sqrt(i);} 
                 }//object 54 "Weight sqrt(sctr)" 
 if (oneeded[55]){delete[]medtemp;medtemp=new double[ML];}// 
*/ 
 
 
//////////////////////////// 
 MML=ML; 
}//END.   
  
////******************************************************* 
void fillcomputedby(void)//initialisation of "computedby",it is out of the namespaces 
                         // Once enough, for example, at TRACE stage 
{ int M,k,vk; 
  for(M=2;MAmount){PN;PS("???Infinite loop: Error1 in defining modi operandi");exit(1);} 
for(io=2;io0))break;//searching positive references "io" 
if (io EQ Amount)for(io=1;io1) modi each,  
//  then take the first modi. 
// A rule is (however, it is not necessary): 
//  1. an object N uses objects with numbers less than N  
//  2. if an object N is computed by modi M1 and M2, M10){PN;PS("???Error2 in defining modi operandi\n it may be that a new operandi is not in UfVArrAssign\n");exit(1);} 
 
for(jf=0;jf=start;j--)if(tr[j]){fin=j;break;} 
if (start>fin) //blank or empty track, fill "Out" with default and return: 
      {for (nf=0;nf=start;j--)if(tr[j]){fin=j;break;} 
if (start>fin) //blank or empty track, fill "Out" with default and return: 
      { for (nf=0;nf 1)   a[lnf]=o[ab];       
     } 
Kcorr_o();Kcorr_a(); 
}//END. 
void computeObjects_giveSackAdj(void)//tr,lbeg,lend,L,dlt; - should be defined to compute functionals 
{ //suits for 1)stage=diam, trace matrix with anti-symmetry 
  // this function is used after composingListModiOperandi(..,NonBackSack=2) 
  //first find start and fin 
int nf,i,j,lnf;unsigned char ab;     
start=L,fin=-1; 
for(i=0;i=start;j--)if(tr[j]){fin=j;break;} 
if (start>fin) //blank or empty track, fill "Out" with default and return: 
      { for (nf=0;nf 1)   a[lnf]=o[ab]; 
    } 
Kcorr_o();Kcorr_a(); 
}//END.