import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Color;
public class exp extends java.applet.Applet{
    Color col1,col2;
    int N,taka,haba,ni,nj;
    int xz,xz2,yz,yz2,label;
    String NS,habaS,takaS;
    double Nd,takad,habad,th;
    Color cl[]=new Color[13];
    int m;

    public double dou(String dous){
        double dou1;
        dou1 = (Double.valueOf(dous)).doubleValue();
        return dou1;
    }

    public double rand(){
        double rand1;
        rand1=Math.random();
        return rand1;
    }

    public void init(){
        col1=Color.black;
        col2=Color.yellow;
        cl[0]=Color.white;
        cl[1]=Color.cyan;
        cl[2]=Color.green;
        takaS=getParameter("takap");
        habaS=getParameter("habap");
        NS=getParameter("Np");
        habad=dou(habaS);
        takad=dou(takaS);
        Nd=4-5000*Math.log(rand());
        haba=(int)habad;
        taka=(int)takad;
        N=(int)Nd;
    }

    double x1;
    double y1;
    int x;
    int y;
    double s;
    String sss;

    public double jou(double a,double b){
        double jou1;
        jou1=Math.pow(a,b);
        return jou1;
    }

    public double arcsinaw(double atasw){
        double artn1saw;
        artn1saw=Math.asin(atasw);
        return artn1saw;
    }

    public double d(double d1,double d2,double d3,double d4){
        double dw;
        dw=jou(jou(d3-d1,2.0)+jou(d4-d2,2.0),0.5);
        return dw;
    }

    public double nCxp(int nn,int xx,double pp){
        double sspp;
        sspp=1.0;
        int lj;
        if(xx>nn-xx){
            for(lj=nn;lj>xx;lj--){
                sspp=sspp*lj*(1.0-pp);
            }
            for(lj=nn-xx;lj>0;lj--){
                sspp=sspp/(lj+0.0);
            }
            sspp=sspp*jou(pp,xx);
        }else{
            for(lj=nn;lj>nn-xx;lj--){
                sspp=sspp*lj*pp;
            }
            for(lj=xx;lj>0;lj--){
                sspp=sspp/(lj+0.0);
            }
            sspp=sspp*jou(1.0-pp,nn-xx);
        }
        return sspp;
    }

    public void paint(java.awt.Graphics g){
        int i;
        g.setColor(col1);
        g.fillRect(1,1,haba,taka);


        double beta;
        double dm;
        int ivmax;
        int j;
        int irand;
        double r;
        int vrand[]=new int[101];
        double dsta[]=new double[101];
        double dmax;
        m=100;
        beta=-Math.log(rand());
        dmax=(2.0+8.0*rand())/beta;

        for(i=0;i<=m;i++){
            vrand[i]=0;
            dsta[i]=i*dmax/(m+0.0);
        }//i
        dm=0.0;
        ivmax=0;
        irand=0;


        for(i=0;i<N;i++){
            r=-Math.log(rand())/beta;
            if(r>=dmax){
                vrand[m]=vrand[m]+1;
                irand=m;
            }else{
                for(j=0;j<m;j++){
                    if(r>=dsta[j] && r<dsta[j+1]){
                        vrand[j]=vrand[j]+1;
                        irand=j;
                        break;
                    }
                }
            }
            if(vrand[irand]>ivmax){
                ivmax=vrand[irand];
            }
            dm=dm+r/(N+0.0);
        }//i
        g.setColor(Color.white);
        g.drawLine(1,290,500,290);
        g.drawString("0",30,305);


        for(i=0;i<=m;i++){
            if(i<m){
                g.setColor(Color.yellow);
            }else{
                g.setColor(Color.gray);
            }
            g.fillRect((int)(30+i*450/(m+1)),(int)(290-vrand[i]*250/ivmax),(int)(450/(m+1)-1),(int)(vrand[i]*250/ivmax));
            if(vrand[i]>0){
                if(i<m){
                    g.setColor(Color.cyan);
                }else{
                    g.setColor(Color.pink);
                }
                g.drawString(""+vrand[i],(int)(30+i*450/(m+1)),(int)(290-vrand[i]*250/ivmax));
            }
        }//i
        double oldy;
        double y;
        oldy=beta*Math.exp(-beta*dsta[1]);
        g.setColor(Color.red);
        for(i=2;i<=m;i++){
            y=beta*Math.exp(-beta*dsta[i]);
            g.drawLine((int)(30+(i-1)*450/(m+1)),(int)(290-oldy*250.0*N*dmax/m/ivmax),(int)(30+i*450/(m+1)),(int)(290-y*250.0*N*dmax/m/ivmax));
            oldy=y;
        }//i
        g.setColor(Color.green);
        g.drawLine((int)(30+m*450/(m+1)),285,(int)(30+m*450/(m+1)),300);
        g.drawString(""+dmax,(int)(30+m*450/(m+1)),305);
        g.drawString("over",(int)(35+m*450/(m+1)),317);
        g.setColor(Color.green);
        g.drawString("N="+N,15,15);
        g.drawString("beta="+beta,100,12);
        g.drawString("mean="+dm,250,12);
        g.drawString("l_mean="+(1.0/beta),250,24);


    }
}

