📄 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;i<L;i++) atr[i]=tr[i];//object 6: abs(trace)
else for(i=0;i<L;i++) atr[i]=ABS(tr[i]);
}//END.
void V6(void) {v[0]=6;v[1]=0;}//computed objects;line should end with zero;
//*******************ANOTHER MODUS OPERANDI
out sum,sumNeg,sumPos;//"Radon (integral), also computes sumNeg and sumPos"
void U40(void){u[0]=0;u[1]=0;}//uses objects,line should end with zero
void f40(void)//radon, sum from 0 to L-1
{
sumNeg=0;sumPos=0;tr1=tr+start;out val;
if (typetr>0)
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(max<t)max=t;if(min>t)min=t;}
if (span<L){if (min>0) 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=(mi<ma)?ma:mi;}
o[38]=maxAbs;
}//END.
void V47(void)
{v[0]=38;v[1]=0;v[2]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
void U48(void){u[0]=37;u[1]=0;}//uses objects,line should end with zero
void f48(void)//min for sr;
{
o[39]=-max;
}//END.
void V48(void)
{v[0]=39;v[1]=0;v[2]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
void U50(void){u[0]=35;u[1]=0;}//uses objects,line should end with zero
void f50(void)//max for sr;
{
o[41]=-min;
}//END.
void V50(void)
{v[0]=41;v[1]=0;v[2]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
int rmS,rmN,l; double tmax;
void U54(void){u[0]=6;u[1]=38;u[2]=0;}//uses objects,line should end with zero
void f54(void)//"(average) t-index of max abs(f(t))"
{ tmax=0;rmS=0;rmN=0;tr1=atr+start;
for(l=lstart;l<=lfin;l++) if(maxAbs EQ *tr1++){rmS+=l;rmN++;}
if (rmN) tmax=(rmS+0.0)/rmN;
o[43]=tmax;}//END. ///all computations for dlt=1, after it will be corrected
void V54(void)
{v[0]=43;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
void U55(void){u[0]=0;u[1]=0;}//uses objects,line should end with zero
void f55(void)//object 44 "differences 1"
{
for(i=0;i<L-1;i++) {diff1[i]=tr[i+1]-tr[i];adiff1[i]=ABS(diff1[i]);}
diff1[L-1]=tr[0]-tr[L-1];adiff1[L-1]=ABS(diff1[L-1]);
po[44]=diff1; //adiff1 will not be stored in po
}//END.
void V55(void)
{v[0]=44;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
out sumAbsDiff1;
void U56(void){u[0]=44;u[1]=0;}//uses objects,line should end with zero
void f56(void)//object 45 "integral of |tr'| "
{ sumAbsDiff1=0;
for(i=0;i<L-1;i++) sumAbsDiff1+=adiff1[i];
o[45]=sumAbsDiff1;
}//END.
void V56(void)
{v[0]=45;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
out sumAbsDiff1c;// circular
void U57(void){u[0]=45;u[1]=0;}//uses objects,line should end with zero
void f57(void)//object 46 "integral of |tr'| circular"
{ sumAbsDiff1c=sumAbsDiff1+adiff1[L-1];
o[46]=sumAbsDiff1c;
}//END.
void V57(void)
{v[0]=46;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
void U58(void){u[0]=44;u[1]=0;}//uses objects,line should end with zero
void f58(void)//object 47 "differences 2"
{ for(i=0;i<L-1;i++){diff2[i]=diff1[i+1]-diff1[i];adiff2[i]=ABS(diff2[i]);}
diff2[L-1]=diff1[0]-diff1[L-1];adiff2[L-1]=ABS(diff2[L-1]);
po[47]=diff2; //adiff2 will not be stored in po
}//END.
void V58(void)
{v[0]=47;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
out sumAbsDiff2;
void U59(void){u[0]=47;u[1]=0;}//uses objects,line should end with zero
void f59(void)//object 48 "integral of |tr''| "
{ sumAbsDiff2=0;
for(i=0;i<L-2;i++) sumAbsDiff2+=adiff2[i];
o[48]=sumAbsDiff2;
}//END.
void V59(void)
{v[0]=48;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
out sumAbsDiff2c;// circular
void U60(void){u[0]=48;u[1]=0;}//uses objects,line should end with zero
void f60(void)//object 49 "integral of |tr''| circular"
{ sumAbsDiff2c=sumAbsDiff2+adiff2[L-2]+adiff2[L-1];
o[49]=sumAbsDiff2c;
}//END.
void V60(void)
{v[0]=49;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
double indexGrCenter;//"t - gravity center of abs(f(t))"
void U61(void){u[0]=33;u[1]=6;u[2]=0;}//uses objects,line should end with zero
void f61(void)//
{ out sumAbs=sumPos-sumNeg,suml=0; tr1=atr+start;
for(int l=lstart;l<=lfin;l++)suml+=l*(*tr1++);
indexGrCenter = (suml+0.0)/sumAbs;//+0.0 because "out" can be "int"
o[50]=indexGrCenter;}//END.
void V61(void)
{v[0]=50;v[1]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
//---------------------------------------
//*******************ANOTHER MODUS OPERANDI
out sumSqR;//for typetr=0 this is 16 times bigger.
double Lp05;// "Lp quasi-norm (p=0.5) = (sumSqR)^2, where sumSqR=integral sqrt(abs(f(t))";
void U62(void){u[0]=6;u[1]=0;}//uses objects,line should end with zero
void f62(void)//radon, sum from 0 to L-1
{ tr1=atr+start; sumSqR=0;
#if typetr //int and double
for(i=span;i>0;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<L;i++) sctr[i]=(int) ((tr[i]-min)*Coe);
#else // typetr EQ 0
sctr=tr; Max=max;
#endif
///po[53] = without
}//END.
void V64(void)
{v[0]=53;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
int IS_sortedRLsctr34;//it maybe not sorted if span is short or Max is small
void U65(void){u[0]=53;u[1]=34;u[2]=0;u[3]=0;}//uses objects,line should end with zero
void f65(void)//object 54 "sorted sctr to the right and left of 34"
{
if (span > 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<Lr;i++) sortfeed[i]=*sctr1++;
int*sR=sortup(sortfeed,Lr,sorttemp);
for(i=0;i<Lr;i++) *remS++=sR[i];
sctr1=sctr+c;
for(i=0;i<Ll;i++) sortfeed[i]=*sctr1--;
int*sL=sortup(sortfeed,Ll,sorttemp);
for(i=0;i<Ll;i++) *remS++=sL[i];
//o[54] = sortedRLsctr34[Lr/2];
///po[54] = without
}//END.
void V65(void)
{v[0]=54;v[1]=0;v[2]=0;v[3]=0;}//computed objects,line should end with zero
//*******************ANOTHER MODUS OPERANDI
void U66(void){u[0]=54;u[1]=0;u[2]=0;u[3]=0;}//uses objects,line should end with zero
void f66(void)//object 55 "MedianW R+: f(x-c); c is median abscissa (34);\n W=1"
{if (IS_sortedRLsctr34)
{
int med=sortedRLsctr34[Lr34/2];
#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
}
else//if (IS_sortedRLsctr34)
{ sctr1=sctr+medindex-lbeg;
int wei_threshold=Lr34/2;
int i,j,cumsum=0;
for (i=Max;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<Lr34;j++)weight += (*tr1++) * j;}
if (weight EQ 0)
{ o[58]=tr[c] ;return;}
int i,j;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -