function y = pas(prob,x)
//   Retourne dans un vecteur de meme taille 
//   1X2 que x, la nouvelle position dans le
//   plan, apres un pas aleatoire effectue
//   selon le vecteur de probabilite prob,
//   de taille 1X4.

y = x;
f = cumsum(prob);
choix = rand(1,1);
i = 1;
while (choix > f(i)),
  i = i+1;
end;
select i
  case 1 then y(2) = y(2)+1; // pas vers le nord 
  case 2 then y(2) = y(2)-1; // pas vers le sud 
  case 3 then y(1) = y(1)-1; // pas vers l'est 
  case 4 then y(1) = y(1)+1; // pas vers l'ouest 
end;

function nbre = trajectoires(envir,p0,p1,n)
//   Prend en entree une matrice de booleens envir,
//   deux vecteurs de probabilites a 4 coordonnees,
//   et un nombre n de trajectoires.
//   Calcule et affiche n trajectoires dans 
//   l'environnement determine par envir, ou le pas
//   a partir d'un sommet est tire selon p0 si le 
//   booleen correspondant de envir est faux, selon
//   p1 sinon. La fonction retourne les nombres de pas 
//   des trajectoires.

s = size(envir);          // taille de l'environnement
nbre = [];
                          // initialisations graphiques 
xset("default");
xset("font",2,3);         
square(1,s(1),1,s(2));
                          // tracer le cadre graphique 
plotframe([1,1,s(1),s(2)],[10,1,10,1],[%f,%f],..
        ["Trajectoires en environnement aleatoire","",""]);
depart = floor(s/2);      // point de depart au milieu
//
for i=1:n,                // pour n trajectoires
  x = depart;
  traj = x;               // initialisation
  while and([x>0;x<=s]),  // tant que la trajectoire ne sort pas
                          // pas selon l'environnement
    if envir(x(1),x(2)) then
       x = pas(p1,x);
       else x = pas(p0,x); 
    end;
    traj = [traj;x];      // ajouter le nouveau pas
  end;                    // fin d'une trajectoire
  traj($,:)=[];           // enlever le dernier pas
                          // afficher la trajectoire
  plot2d(traj(:,1),traj(:,2),i+1,"000");
  nbre = [nbre,size(traj,"r")];
end;



 










