function y=f(x,r,n)
  y(1)=x
  for i=1:n-1
  y(i+1)=r*y(i)*(1-y(i))
  end
endfunction

function graf(k)
  plot2d([xmin,xmax],[ymin,ymax],rect=[xmin ymin xmax ymax]);
  x=xmin:.01:xmax; m=size(x,"c"); nn=k+1;
  for i=1:m; z=f(x(i),r,nn); yg(i)=z(nn); end
  plot2d(x,yg,rect=[xmin ymin xmax ymax]);
endfunction

ini=["3.100";"0.499";"100"];    // valori assegnati per default
[ok,r,x0,n]=getvalue("Dare i valori di r, x0 e n",..
["r";"x0";"n"],list("col",1,"col",1,"col",1),ini);

xset("window",0); xbasc(); 
xmin=0;xmax=1;ymin=0;ymax=1;
graf(1)

risp=1; x=zeros(1,2*n); y=zeros(1,2*n);

while %t
  if ((risp==8)|(risp==0)) then break;
  end

  if risp==1 then
    z=f(x0,r,n+1);
    for i=1:n; x(2*i-1)=z(i); x(2*i)=z(i); end
    for i=1:n-1; y(2*i)=z(i+1); y(2*i+1)=z(i+1); end      
    y(1)=z(1); y(2*n)=z(n+1);
    plot2d(x,y,rect=[xmin ymin xmax ymax]);
    x0=z(n+1);  
    risp=x_choose(["Continua","Cancella e continua",..
       "Grafico dell''iterata k-esima","Cambia r e x0",..
       "Grafico di biforcazione","Grafico della storia","Istogramma","Fine"],"Cosa fare?");
  end
    
  if risp==2 then
    xbasc(); graf(1); risp=1;
  end  

  if risp==3 then
    k=x_dialog("numero di iterazioni","2");
    xset("window",1); xbasc() 
    graf(evstr(k)); xset("window",0)
    risp=x_choose(["Continua","Cancella e continua",..
       "Grafico dell''iterata k-esima","Cambia r e x0",..
       "Grafico di biforcazione","Grafico della storia","Istogramma","Fine"],"Cosa fare?");
  end      
  
  if risp==4 then
    [ok,r,x0,n]=getvalue("Dare i valori di r, x0 e n",..
    ["r";"x0";"n"],list("col",1,"col",1,"col",1),ini);
    xbasc(); graf(1)
    risp=1;
  end

  if risp==5 then
    xset("window",2); xbasc()
    res=x_dialog(["rmin", "rmax", "niter"], ["1.500", "3.000", "100"]);
    rmin=evstr(res(1)); rmax=evstr(res(2)); rstep=(rmax-rmin)/500; niter=evstr(res(3));
    for r0=rmin:rstep:rmax
      z=f(.9,r0,200+niter);
      x=ones(1,niter)*r0; y=z(201:200+niter);
      plot2d(x,y,style=0,rect=[rmin 0 rmax 1]);
    end
    xset("window",0)
    risp=x_choose(["Continua","Cancella e continua",..
       "Grafico dell''iterata k-esima","Cambia r, x0 e n",..
       "Grafico di biforcazione","Grafico della storia","Istogramma","Fine"],"Cosa fare?");
  end

  if risp==6 then
    xset("window",3); xbasc()
    x=1:200; y=f(x0,r,200);
    plot2d(x,y,rect=[0 0 200 max(y)]);
    risp=x_choose(["Continua","Cancella e continua",..
       "Grafico dell''iterata k-esima","Cambia r e x0",..
       "Grafico di biforcazione","Grafico della storia","Istogramma","Fine"],"Cosa fare?");
    xset("window",0)
  end   

  if risp==7 then
    k=x_dialog(["num. iteraz.", "num. barre"],["001000", "200"]); nk=evstr(k(1));
    xset("window",3); xbasc()
    y=f(x0,r,n+nk); y0=y(n+1:n+nk); nb=evstr(k(2));
    histplot(nb,y0)
    step=1./nb; xh=step/2:step:1; yh=1/%pi./sqrt(xh.*(1-xh)); plot(xh,yh)
    risp=x_choose(["Continua","Cancella e continua",..
       "Grafico dell''iterata k-esima","Cambia r e x0",..
       "Grafico di biforcazione","Grafico della storia","Istogramma","Fine"],"Cosa fare?");
    xset("window",0)
  end  

end
