⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ms_p1.cpp

📁 It s an entire application that uses knowdledge of probabilistic and statistical math to generate an
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		(iarg!=12)
	       )
	    {
		sprintf(str,"Requested value is %d",iarg2);
	    }
	    else
	    {
		sprintf(str,"Requested value is %.3f",farg);
	    }
	    csLineTextColor[_PushConsoleText(str)]=_CS_REPLY_COLOR;
	}
	break;

	case 3:
	if (!strcmp(strupr(csCmdTokens[0]),"SET"))
	{
	    flag=1;

	    sscanf(csCmdTokens[1],"%d",&iarg);

	    if (
		(iarg!=11)&&
		(iarg!=12)
	       )
	    {
		sscanf(csCmdTokens[2],"%d",&iarg2);
	    }
	    else
	    {
		sscanf(csCmdTokens[2],"%f",&farg);
	    }

	    switch (iarg)
	    {
		case 0:
		SelView=iarg2&0x3;
		break;

		case 1:
		if (!iarg2)
		{
		    Views[SelView].seed=rand();
		}
		else
		{
		    Views[SelView].seed=iarg2;
		}
		break;

		case 2:
		Views[SelView].N=iarg2;
		break;

		case 3:
		Views[SelView].n=iarg2;
		break;

		case 4:
		SwitchFScreen=iarg2&0x1;
		_FullScreenView(SelView);
		break;

		case 5:
		Views[SelView].SwitchBubble=iarg2&0x1;
		break;

		case 6:
		Views[SelView].SwitchBar=iarg2&0x1;
		break;

		case 7:
		Views[SelView].color=iarg2;
		break;

		case 8:
		Views[SelView].backcolor=iarg2;
		break;

		case 9:
		Views[SelView].SwitchRuler=iarg2&0x1;
		break;

		case 10:
		Views[SelView].SwitchGrid=iarg2&0x1;
		break;

		case 11:
		Views[SelView].RulerResX=farg;
		break;

		case 12:
		Views[SelView].RulerResY=farg;
		break;

		case 13:
		Views[SelView].rulercolor=iarg2;
		break;

		case 14:
		Views[SelView].SwitchInterp=iarg2&0x1;
		break;

		case 15:
		Views[SelView].interpcolor=iarg2;
		break;
	    }
	}
	else
	if (!strcmp(strupr(csCmdTokens[0]),"PRINT"))
	{
	    flag=1;

	    sscanf(csCmdTokens[1],"%d",&iarg);
	    sscanf(csCmdTokens[2],"%d",&iarg2);

	    switch (iarg)
	    {
		case 0:
		if (strcmp(strupr(csCmdTokens[2]),"ALL"))
		{
		    sprintf(str,"Requested value is %d",Views[SelView].X[iarg2]);
		    csLineTextColor[_PushConsoleText(str)]=_CS_REPLY_COLOR;
		}
		else
		{
		    _ClearConsole();

		    sprintf(str,"Requested values:");
		    iarg2=_PushConsoleText(str);
		    csLineTextColor[iarg2]=_CS_REPLY_COLOR;

		    count=iarg2+1;

		    for (i=0; i<Views[SelView].n; i++)
		    {
			sprintf(str,"X[%d]: %d",i,Views[SelView].X[i]);
			iarg2=_PushConsoleText(str);
			csLineTextColor[iarg2]=_CS_REPLY_COLOR;

			count++;

			if (count>=_CS_CH_HEIGHT)
			{
			    count=1;

			    sprintf(str,"Press any key to go next page...");
			    _PushConsoleText(str);
			    _DrawConsole();
			    getch();
			    _ClearConsole();
			}
		    }
		}
		break;

		case 1:
		if (strcmp(strupr(csCmdTokens[2]),"ALL"))
		{
		    sprintf(str,"Requested value is %.3f",Views[SelView].P[iarg2]);
		    csLineTextColor[_PushConsoleText(str)]=_CS_REPLY_COLOR;
		}
		else
		{
		    _ClearConsole();

		    sprintf(str,"Requested values:");
		    iarg2=_PushConsoleText(str);
		    csLineTextColor[iarg2]=_CS_REPLY_COLOR;

		    count=iarg2+1;

		    for (i=0; i<Views[SelView].n; i++)
		    {
			sprintf(str,"P[%d]: %.3f",i,Views[SelView].P[i]);
			iarg2=_PushConsoleText(str);
			csLineTextColor[iarg2]=_CS_REPLY_COLOR;

			count++;

			if (count>=_CS_CH_HEIGHT)
			{
			    count=1;

			    sprintf(str,"Press any key to go next page...");
			    _PushConsoleText(str);
			    _DrawConsole();
			    getch();
			    _ClearConsole();
			}
		    }
		}
		break;

		case 2:
		if (strcmp(strupr(csCmdTokens[2]),"ALL"))
		{
		    sprintf(str,"Requested value is %.3f",Views[SelView].F[iarg2]);
		    csLineTextColor[_PushConsoleText(str)]=_CS_REPLY_COLOR;
		}
		else
		{
		    _ClearConsole();

		    sprintf(str,"Requested values:");
		    iarg2=_PushConsoleText(str);
		    csLineTextColor[iarg2]=_CS_REPLY_COLOR;

		    count=iarg2+1;

		    for (i=0; i<Views[SelView].n; i++)
		    {
			sprintf(str,"F[%d]: %.3f",i,Views[SelView].F[i]);
			iarg2=_PushConsoleText(str);
			csLineTextColor[iarg2]=_CS_REPLY_COLOR;

			count++;

			if (count>=_CS_CH_HEIGHT)
			{
			    count=1;

			    sprintf(str,"Press any key to go next page...");
			    _PushConsoleText(str);
			    _DrawConsole();
			    getch();
			    _ClearConsole();
			}
		    }
		}
		break;

		case 3:
		if (strcmp(strupr(csCmdTokens[2]),"ALL"))
		{
		    sprintf(str,"Requested value is %d",Views[SelView].nr[iarg2]);
		    csLineTextColor[_PushConsoleText(str)]=_CS_REPLY_COLOR;
		}
		else
		{
		    _ClearConsole();

		    sprintf(str,"Requested values:");
		    iarg2=_PushConsoleText(str);
		    csLineTextColor[iarg2]=_CS_REPLY_COLOR;

		    count=iarg2+1;

		    for (i=0; i<Views[SelView].n; i++)
		    {
			sprintf(str,"Nr[%d]: %d",i,Views[SelView].nr[i]);
			iarg2=_PushConsoleText(str);
			csLineTextColor[iarg2]=_CS_REPLY_COLOR;

			count++;

			if (count>=_CS_CH_HEIGHT)
			{
			    count=1;

			    sprintf(str,"Press any key to go next page...");
			    _PushConsoleText(str);
			    _DrawConsole();
			    getch();
			    _ClearConsole();
			}
		    }
		}
		break;
	    }
	}
	break;
    }

    if (!flag)
    {
	csLineTextColor[_PushConsoleText("Unrecognized command")]=_CS_REPLY_COLOR;
    }
}



/***************************************************************************/
/***************************************************************************/
/***                 Afiseaza tot textul din consola                     ***/
/***************************************************************************/
/***************************************************************************/

void _PrintConsoleText
   (
   )

{
    unsigned int i;
    unsigned short betweenText;


    betweenText=(cstHeight-_CS_CH_HEIGHT*textheight("A"))/_CS_CH_HEIGHT;


    for (i=0; i<csNextLine; i++)
    {
	setcolor(csLineTextColor[i]);
	outtextxy(csX+_CS_SCR_DXY,cstY+_CS_SCR_DXY+i*(betweenText+textheight("A")),csTextLines[i]);
    }
}



/***************************************************************************/
/***************************************************************************/
/***               Afiseaza textul din linia de comanda                  ***/
/***************************************************************************/
/***************************************************************************/

void _PrintConsoleCmdText
   (
   )

{
    setcolor(_CS_CMDLINE_COLOR);
    outtextxy(csX+_CS_SCR_DXY,csbY+_CS_SCR_DXY,csCmdLine);
}



/***************************************************************************/
/***************************************************************************/
/***                        Deseneaza consola                            ***/
/***************************************************************************/
/***************************************************************************/

void _DrawConsole
   (
   )

{
    setcolor(_CS_SIDE_COLOR1);
    setfillstyle(9,_CS_FILL_COLOR);
    setlinestyle(0,0,3);

    bar(
	csX,
	cstY,
	csX+csWidth,
	cstY+cstHeight
       );
    rectangle(
	      csX-_CS_SCR_DXY,
	      cstY-_CS_SCR_DXY,
	      csX+csWidth+_CS_SCR_DXY,
	      cstY+cstHeight+_CS_SCR_DXY
	     );

    bar(
	csX,
	csbY,
	csX+csWidth,
	csbY+csbHeight
       );
    rectangle(
	      csX-_CS_SCR_DXY,
	      csbY-_CS_SCR_DXY,
	      csX+csWidth+_CS_SCR_DXY,
	      csbY+csbHeight+_CS_SCR_DXY
	     );

    _PrintConsoleText   ();
    _PrintConsoleCmdText();


    setlinestyle(0,0,0);
}



/***************************************************************************/
/***************************************************************************/
/***                     Coboara/urca consola                            ***/
/***************************************************************************/
/***************************************************************************/

void _DropConsole
   (
   )

{
    SwitchConsole=1-SwitchConsole;

    if (SwitchConsole)
    {
	cstY=_CS_SCR_DXY;
	csbY=cstY+cstHeight+_CS_SCR_DXY+_CS_SCR_DXY;
    }
    else
    {
	cstY=-(cstHeight+(_CS_SCR_DXY<<1))-_CS_TEXT_SCR_HEIGHT-(_CS_TEXT_RSPACE_SCR<<1);
	csbY=cstY+cstHeight+_CS_SCR_DXY+_CS_SCR_DXY;
    }
}



/***************************************************************************/
/***************************************************************************/
/***         Suma de i de la 1 la n din 1/i (pentru calculul             ***/
/***                  distributiei de probabilitate                      ***/
/***************************************************************************/
/***************************************************************************/

double HN
   (
    unsigned int n
   )

{
    unsigned int i;
    double hn=0;


    for (i=1; i<=n; i++)
    {
	hn+=(double)1/i;
    }


    return(hn);
}



/***************************************************************************/
/***************************************************************************/
/***             Cautare binara ce cauta cel mai mic interval            ***/
/***       discretizat de functia de repartitie "F", in care apare "u"   ***/
/***************************************************************************/
/***************************************************************************/

int BinSearch
   (
    double far *F,
    unsigned int n,
    double u
   )

{
    unsigned int li,ls,m;


    li=0; ls=n-1;

    if (u<F[0])
    {
	return(0);
    }
    else
    {
	do
	{
	    m=(li+ls)>>1;

	    if (ls==1)
	    {
		return(ls);
	    }

	    if (
		(u>F[m-1])&&
		(u<=F[m])
	       )
	    {
		return(m);
	    }
	    else
	    if (u<F[m-1])
	    {
		ls=m-1;
	    }
	    else
	    if (u>F[m])
	    {
		li=m+1;
	    }

	}
	while(li<=ls);
   }


   return(-1);
}



/***************************************************************************/
/***************************************************************************/
/***         Construieste:                                               ***/
/***	       - X    - variabila aleatoare discreta                     ***/
/***           - P    - distributia sa de probabilitate                  ***/
/***           - F    - functia de repartitie (suma de probabilitati)    ***/
/***           - Nr[i]- indica de cate ori s-a generat variabila i din X ***/
/***************************************************************************/
/***************************************************************************/

void _DiscreteSimulation
   (
    unsigned int view
   )

{
    int i,j,k,index;
    double s,u,hn=HN(Views[view].n);


    Views[view].X=(int *)malloc(Views[view].n*sizeof(int));

    for (i=0; i<Views[view].n; i++)
    {
	Views[view].X[i]=i+1;
    }

    Views[view].P=(double *)malloc(Views[view].n*sizeof(double));

    for (i=1; i<=Views[view].n; i++)
    {
	Views[view].P[i-1]=(double)1/(i*hn);
    }

    Views[view].F=(double *)malloc(Views[view].n*sizeof(double));

    Views[view].nr=(int *)malloc(Views[view].n*sizeof(int));

    for (k=0; k<Views[view].n; k++)
    {
	s=0;

	for (i=0; i<=k; i++)
	{
	    s+=Views[view].P[i];
	}

	Views[view].F[k]=s;
    }

    for(i=0; i<Views[view].n; i++)
    {
	Views[view].nr[i]=0;
    }

    init_genrand(Views[view].seed);

    for (j=0; j<Views[view].N; j++)
    {
	u= genrand_real2();
	index=Views[view].X[BinSearch(Views[view].F,Views[view].n,u)];
	Views[view].nr[index-1]++;
    }
}



/***************************************************************************/
/***************************************************************************/
/***                   Initializeaza viewporturile                       ***/
/***************************************************************************/
/***************************************************************************/

void _GenerateViews
   (
   )

{
    Views[0].x=0;
    Views[0].y=0;
    Views[0].width =getmaxx()>>1;
    Views[0].height=getmaxy()>>1;
    Views[0].csx0=Views[0].x+_COORD_SYS_DXY;
    Views[0].csy0=Views[0].y+_COORD_SYS_DXY;
    Views[0].csx1=Views[0].x+Views[0].width -_COORD_SYS_DXY;
    Views[0].csy1=Views[0].y+Views[0].height-_COORD_SYS_DXY;

    Views[1].x=(getmaxx()>>1)+1;
    Views[1].y=0;
    Views[1].width =getmaxx()>>1;
    Views[1].height=getmaxy()>>1;
    Views[1].csx0=Views[1].x+_COORD_SYS_DXY;
    Views[1].csy0=Views[1].y+_COORD_SYS_DXY;
    Views[1].csx1=Views[1].x+Views[1].width -_COORD_SYS_DXY;
    Views[1].csy1=Views[1].y+Views[1].height-_COORD_SYS_DXY;

    Views[2].x=0;
    Views[2].y=(getmaxy()>>1)+1;
    Views[2].width =getmaxx()>>1;
    Views[2].height=getmaxy()>>1;
    Views[2].csx0=Views[2].x+_COORD_SYS_DXY;
    Views[2].csy0=Views[2].y+_COORD_SYS_DXY;
    Views[2].csx1=Views[2].x+Views[2].width -_COORD_SYS_DXY;
    Views[2].csy1=Views[2].y+Views[2].height-_COORD_SYS_DXY;

    Views[3].x=(getmaxx()>>1)+1;
    Views[3].y=(getmaxy()>>1)+1;
    Views[3].width =getmaxx()>>1;
    Views[3].height=getmaxy()>>1;
    Views[3].csx0=Views[3].x+_COORD_SYS_DXY;
    Views[3].csy0=Views[3].y+_COORD_SYS_DXY;
    Views[3].csx1=Views[3].x+Views[3].width -_COORD_SYS_DXY;
    Views[3].csy1=Views[3].y+Views[3].height-_COORD_SYS_DXY;
}



/***************************************************************************/
/***************************************************************************/
/***                      Deseneaza viewporturile                        ***/
/***************************************************************************/
/***************************************************************************/

void _DrawViews
   (
   )

{
    unsigned char i;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -