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.