
Alors l'énoncé : http://img843.imageshack.us/img843/5342 ... ndeuse.jpg
L'énoncé en gros c'est une tondeuse qui doit tondre un terrain en suivant une direction qu'on détermine en fonction d'un nombre généré aléatoirement. Et quand la tondeuse arrive au bout de terrain elle recule d' 1-8 case et repart dans une nouvelle direction.
Le générateur de nombre on nous l'a fourni donc ca c'est ok.
Par contre l'amorce et le point initiale je l'ai pas mais bon ca doit pas etre bien grave, la peut importe l'amorce et le point de départ elle ne tond pas certaine parti et donc boucle...
Et le code commenté

Code : Tout sélectionner
#include<stdio.h>
#include<math.h>
main()
{
int i,cmpt,fini=1,x,y,amorce=2345,j,pelouse[11][11];
float z;
float hasard(int*);
void deplacement(float,int*,int*,int[][11]);
int estTondu(int[][11]);
//FILE *fres;
//fres=fopen("cpecq003.res","w");
//initialisation de la pelouse
i=0;
j=0;
for(i=0;i<=10;i++)
{
for(j=0;j<=10;j++)
{
pelouse[i][j]=0;
}
}
//Remplissage des champs deja tondu (1,1) (1,10) (10,1) (10,10)
pelouse[1][1]=1;
pelouse[1][10]=1;
pelouse[10][1]=1;
pelouse[10][10]=1;
//remplissage de deux ligne des bord en x=0 et y=0
i=0;
for(i=0;i<=10;i++)
{
pelouse[i][0]=1;
pelouse[0][i]=1;
}
x=1;
y=1;
cmpt=0;
// Tant que la pelouse n'est pas entièrement tondu
while(fini==1)
{
//generateur d'un nombre pseud-aleatoire compris entre 0 et 1
z=hasard(&amorce);
printf("z: %9.7f\n",z);
//appel de la fonction deplacement
deplacement(z,&x,&y,pelouse);
//printf("z: %9.7f\n",z);
//appel de la fonction qui renvoie 0 si tout le terrain est tondu et stop la boucle
fini=estTondu(pelouse);
//boucle pour un affichage console pour essayer de trouver d'ou vient le problème
for(i=1;i<=10;i++)
{
for(j=1;j<=10;j++)
{
if(j==x && i==y)
{
printf("2 ");
}
else
{
printf("%d ",pelouse[j][i]);
}
}
printf("\n");
}
//affichage d'information pour essayer de trouver le probleme
cmpt++;
printf("[%2d;%2d]\n",x,y);
printf("cmpt : %d\n",cmpt);
/*
if(cmpt==2)
{
fini=0;
}
*/
}
}
//Fonction qui genere un nombre pseudo aleatoire en fonction de l'amorce passé en argument, la fonction est donnée par le prof.
float hasard(int *amorce)
{
int a,m;
m=pow(2,20);
a=pow(2,10)+3;
*amorce=(a*(*amorce))%m;
return (float)(*amorce)/(float)(m);
}
//Fonction deplacement qui deplace la tondeuse dans une direction en fonction du nombre Z generé aleatoirement
//Et qui la fait reculer d'un nombre de case entre 1 et 8 genéré aussi grace a z
void deplacement(float z, int *x, int *y, int pelouse[][11])
{
FILE *fres;
fres=fopen("cpecq003.res","w");
int recul,i;
recul=(1+(8-1)*z);
printf("recul : %d\n",recul);
if(z<0.25)
{
while(*x<10)
{
*x=*x+1;
pelouse[*x][*y]=1;
fprintf(fres,"[%2d;%2d] ",*x,*y);
}
for(i=1;i<=recul;i++)
{
*x=*x-1;
pelouse[*x][*y]=1;
}
printf("recul [%2d;%2d]\n",*x,*y);
fprintf(fres," recul [%2d;%2d]\n",*x,*y);
}
else
{
if(z<0.5)
{
while(*x>1)
{
*x=*x-1;
pelouse[*x][*y]=1;
fprintf(fres,"[%2d;%2d] ",*x,*y);
}
for(i=1;i<=recul;i++)
{
*x=*x+1;
pelouse[*x][*y]=1;
}
printf("recul [%2d;%2d]\n",*x,*y);
fprintf(fres," recul [%2d;%2d]\n",*x,*y);
}
else
{
if(z<0.75)
{
while(*y<10)
{
*y=*y+1;
pelouse[*x][*y]=1;
fprintf(fres,"[%2d;%2d] ",*x,*y);
}
for(i=1;i<=recul;i++)
{
*y=*y-1;
pelouse[*x][*y]=1;
}
printf("recul [%2d;%2d]\n",*x,*y);
fprintf(fres," recul [%2d;%2d]\n",*x,*y);
}
else
{
while(*y>1)
{
*y=*y-1;
pelouse[*x][*y]=1;
fprintf(fres,"[%2d;%2d] ",*x,*y);
}
for(i=1;i<=recul;i++)
{
*y=*y+1;
pelouse[*x][*y]=1;
}
printf("recul [%2d;%2d]\n",*x,*y);
fprintf(fres," recul [%2d;%2d]\n",*x,*y);
}
}
}
fclose(fres);
}
//Fonction qui permet de determiné si l'entierete du terrain est tondu.
int estTondu(int pelouse[][11])
{
int i,j,retour=0;
i=0;
j=0;
for(i=0;i<=10;i++)
{
for(j=0;j<=10;j++)
{
if(pelouse[i][j]==0)
{
retour=1;
}
}
}
return retour;
}
