},
mean[4]={0,0,0,0},
kpmo[4]={0,0,0,0},
krs[4]={0,0,0,0},
amvoi[4]={0,0,0,0},
ofsmed[4]={0,0,0,0},
sum[4]={0,0,0,0},
tmpmed[7]={0,0,0,0,0,0,0},
flags[4]={0,0,0,0},
flags1[4]={0,0,0,0},
fla[4]={0,0,0,0},
iper[4]={0,0,0,0},
iex[4]={0,0,0,0},
io[4]={0,0,0,0},
fex[4]={0,0,0,0},
imean[4]={-1,-1,-1,-1},
st[4]={2,2,2,2},
ipd[4]={0,0,0,0},
ips[4]={0,0,0,0},
per[4][10],
percnt[4]={-1,-1,-1,-1};
/*переменные программы*/
int
t,f1=0,flag,iex1=0,j,kk=0,
ps=0,z,pd=1,
dko=0,
k=1,i,m,fl=1,
dx=3,dx1=-4;
char str[5];
/*выходные данные*/
static int me[4][Meanings],/* экстремумы */
mp[4][Meanings],/* перегибы */
mo[4][Meanings],/* особые точки */
mr[4][Meanings],/* первые разности*/
ms[4][Meanings],/* секунды */
md[4][Meanings];/* дискретные отсчеты */
/* Переменные для процедуры обработки */
int ot1,ot2,ot3,ot4,ot5,ot6;
int tf,tf1,ne,vk,
int masp[4][11];
int kaz;
long sq,s;
void init_azp(int[][Meanings],char[] );
void interrupt ( *oldhandler)( CPPARGS);
void interrupt handler( CPPARGS)
{
if(--kf<0)
{
oldhandler();
kf=5;
}
else
outportb(0x20,0x20);
if(mean[dko]<Meanings-1)
{
amvoi[dko]=azp[dko][mean[dko]];
putpixel(dx,(dko*100+350)-amvoi[dko]/2,12);
putpixel(dx,dko*100+75,10);
mean[dko]++;
outmed[dko*7+ofsmed[dko]]=amvoi[dko];
if(mean[dko]>KMO-1)
{
for(i=0;i<7;i++)
tmpmed[i]=outmed[dko*7+i];
k=1;
while(k==1)
{
k=0;
for(i=0;i<6;i++)
if(tmpmed[i]<tmpmed[i+1])
{
m=tmpmed[i];
tmpmed[i]=tmpmed[i+1];
tmpmed[i+1]=m;
k=1;
}
}
outsr[dko*7+krs[dko]]=outmed[dko*7+3];
for(i=dko*7;i<dko*7+6;i++)
outmed[i]=outmed[i+1];
if(krs[dko]>=KSO-1)
{ // сглаживание
sum[dko]=0;
for(i=dko*7;i<dko*7+7;i++)
sum[dko]+=outsr[i];
for(i=dko*7;i<dko*7+6;i++)
outsr[i]=outsr[i+1];
++imean[dko];
out[dko][imean[dko]]=sum[dko]/7;
putpixel(dx1,(dko*100+350)-out[dko][imean[dko]]/2,14);
if(imean[dko]>=1)
{ // вычисление 1-ой разности
mr[dko][imean[dko]-1]=out[dko][imean[dko]] out[dko][imean[dko]-1];
if (imean[dko]>=3)
{ // вычисление второй разности
if(mr[dko][imean[dko]-2]<mr[dko][imean[dko]-3])
{
if(flags[dko]==1)
{
mp[dko][iper[dko]]=imean[dko]-2;
mo[dko][io[dko]++]=out[dko][imean[dko]-2];
md[dko][ipd[dko]++]=pd;
ms[dko][ips[dko]++]=ps;
iper[dko]++;
}
flags[dko]=-1;
}
else
if(mr[dko][imean[dko]-2]>mr[dko][imean[dko]-3])
{
if (flags[dko]==-1)
{
mp[dko][iper[dko]]=imean[dko]-2;
mo[dko][io[dko]++]=out[dko][imean[dko]-2];
md[dko][ipd[dko]++]=pd;
ms[dko][ips[dko]++]=ps;
iper[dko]++;
}
flags[dko]=1;
}
}
if((out[dko][1]-out[dko][0])>0)
flags1[dko]=1;
else
flags1[dko]=-1;
if((imean[dko]>14)&&(imean[dko]%6==0))
{
for(i=st[dko];i<imean[dko];i++)
{
if((out[dko][i]>out[dko][i-1])&&(flags1[dko]==-1))
{
st[dko]=i;
for(j=i+1,t=0;(t<13)&&(j<imean[dko]);t++,j++)
if(out[dko][j]<out[dko][i-1])
{fla[dko]=0;break;}
else fla[dko]=1;
if( (fla[dko]==1))
{
if(me[dko][iex[dko]-1]!=i-1 ){
me[dko][iex[dko]++]=i-1;
mo[dko][io[dko]++]=out[dko][me[dko][iex[dko]-1]];
fex[dko]=0;
md[dko][ipd[dko]++]=pd;
ms[dko][ips[dko]++]=ps;
circle(me[dko][iex[dko]-1]+10,(dko*100+350)-out[dko][ me[dko][iex[dko]-1]]/2,2);
floodfill(me[dko][iex[dko]-1]+10,(dko*100+350)-out[dko][ me[dko][iex[dko]-1]]/2,15);
}
flags1[dko]=1;
}
else
i=j;
}
else
if((out[dko][i]<out[dko][i-1])&&(flags1[dko]==1))
{
st[dko]=i;
for(j=i+1,t=0;(t<13)&&(j<imean[dko]);t++,j++)
if(out[dko][j]>out[dko][i-1])
{fla[dko]=0;break; }
else fla[dko]=1;
if((fla[dko]==1))
{
if(me[dko][iex[dko]-1]!=i-1 ){
me[dko][iex[dko]++]=i-1;
md[dko][ipd[dko]++]=pd;
ms[dko][ips[dko]++]=ps;
mo[dko][io[dko]++]=out[dko][me[dko][iex[dko]-1]];
fex[dko]=1;
circle(me[dko][iex[dko]-1]+10,(dko*100+350)-out[dko][ me[dko][iex[dko]-1]]/2,2);
floodfill(me[dko][iex[dko]-1]+10,(dko*100+350)-out[dko][ me[dko][iex[dko]-1]]/2,15);
}
flags1[dko]=-1;
}
else
i=j;
}
}
}
if((iex[dko]>1)&&(fex[dko]))
{
tf=me[0][1]-me[0][0]+1;
tf1=mo[0][14]-mo[0][12];
if(percnt[dko]==0)
line(me[dko][0]+10,dko*100+70,me[dko][0]+10,dko*100+80);
if(out[dko] [ me[dko] [iex[dko]-2]]<out[dko][ me[dko] [iex[dko]-iex[dko]]]+20)
{
fex[dko]=0;
++percnt[dko];
per[dko][percnt[dko]]=me[dko][iex[dko]-2];
if(percnt[dko]>0)
{
ne=iex[dko]-1+percnt[dko]-1;
if(ne%5)
goto End;
masp[dko][1] = dko + 1;
ot1=me[dko][(percnt[dko]-1)*4+0];
ot2=me[dko][(percnt[dko]-1)*4+1];
masp[dko][2]=out[dko][ot2];
ot3=me[dko][(percnt[dko]-1)*4+3];
masp[dko][5]=out[dko][ot3];
ot4=me[dko][(percnt[dko]-1)*4+2];
masp[dko][4]=out[dko][ot4];
masp[dko][3]=out[dko][ot4-4];
masp[dko][7]=per[dko][percnt[dko]]-per[dko][percnt[dko]-1];
if(!((masp[dko][7]>98)&&(masp[dko][7]<104) ))
goto End;
masp[dko][6]=me[dko][iex[dko]-1]-me[dko][iex[dko]-2]+1;
if(!( (masp[dko][6]>tf-3)&&(masp[dko][6]<tf+3)))
goto End;
for(int w =0;out[dko][ot2]!=mo[dko][w];w++);
if(! ( mo[dko][w]-mo[dko][w-2]+2) )
goto End;
line(me[dko][iex[dko]-2]+10,dko*100+70,me[dko][iex[dko]-2]+10,dko*100+80);
sprintf(str,"%d",masp[dko][7]);
setcolor(11);
outtextxy(me[dko][iex[dko]-2]-50,dko*100+85,str);
setcolor(15);
ot6=me[dko][(percnt[dko]-1)*4+4];
masp[dko][9]=me[dko][(percnt[dko]-1)*4+4]/100;
masp[dko][10]=me[dko][(percnt[dko]-1)*4+4]%100;
kaz=(out[dko][ot1]+out[dko][ot6])/2;
for(vk=2;vk<6;vk++)
masp[dko][vk]=masp[dko][vk]-kaz;
s=0;
for(vk=0;vk<ot4-1;vk++)
s=s+(out[dko][vk]+out[dko][vk+1])/2;
sq=(s/ot4-kaz)*masp[dko][7];
masp[dko][8]=sq;
fprintf(outst,"\t%d",percnt[dko]);
fprintf(outst,"\t");
for(z=1;z<11;z++)
fprintf(outst,"%5d ",masp[dko][z]);
fprintf(outst,"\n");
}
}
}
}
}
else
++krs[dko];
}
else
++ofsmed[dko];
End:if(dko==3)
{
++pd;
if(pd==100)
{
++ps;
pd=0;
}
dko=0;
++dx;
++dx1;
}
else
++dko;
}
else
stop=-1;
}
void main(void)
{
int gdriver = DETECT, gmode, errorcode;