Page 5 sur 10

Re: Le topic sur l'informatique !

Posté : 16 juin 2011, 17:23
par gg1212
Examen de C demain, quelque exercices de révisions bien évidemment, et c'est la catasrtophe :pascontent2:

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é :D

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;
}
Charles si tu aurait un peu de temps pour regarder a ca, ca serait bien gentil de ta part :)

Re: Le topic sur l'informatique !

Posté : 16 juin 2011, 19:16
par D40s
:( j'y comprends rien du tout :inlove: .Dite moi que je ne suis pas le seul :taistoi: .

Bon s'en blaguer , bonne chance gégé , j'espère que tu auras l'aide voulu ;-) :super:

Re: Le topic sur l'informatique !

Posté : 16 juin 2011, 19:28
par deuch86
Bienvenue au club ceci est pire que du chinois pour moi :pleur4:

Re: Le topic sur l'informatique !

Posté : 16 juin 2011, 19:28
par Charles
Je regarde ça demain ^^

Re: Le topic sur l'informatique !

Posté : 16 juin 2011, 19:39
par Nicodeutzfan
deuch86 a écrit :Bienvenue au club ceci est pire que du chinois pour moi :pleur4:
Pareil lol

Re: Le topic sur l'informatique !

Posté : 16 juin 2011, 20:43
par D40s
:mdr3: si ça continue , c'est nous qui devrions retourner à l'école :mrgreen: :mrgreen:

Re: Le topic sur l'informatique !

Posté : 16 juin 2011, 21:02
par gg1212
:hehe:

C'est bon charles, je vais faire un autre exercice et tempi pour celui la, j'ai examen demain :malin2:
On verra bien demain comment ca se passe ;)

Re: Le topic sur l'informatique !

Posté : 16 juin 2011, 21:09
par calimero 56
les cookies ce sont les petits gâteaux aux pépites de chocolat :mdr3: :sivousme:

Re: Le topic sur l'informatique !

Posté : 16 juin 2011, 22:30
par Charles
Déjà à première vue, pour les déplacement, je ne ferais pas de else à chaque cas.
Fait un if pour gérer les cas <0.25 etc... Ou mieux un case/switch (même si c'est la même chose), mais je sais pas si en C tu peux en faire.

en faisant ça, pas d’ambiguïté, tu sais dans quelle condition tu rentres :)
je me suis envoyé ton sujet sur mon mail du taff vu que j'ai pas acces a imageshack :(

Re: Le topic sur l'informatique !

Posté : 16 juin 2011, 22:30
par Charles
gg1212 a écrit ::hehe:

C'est bon charles, je vais faire un autre exercice et tempi pour celui la, j'ai examen demain :malin2:
On verra bien demain comment ca se passe ;)

erf :(

désolé :(

bon courage alors :D