J´essaye de resoudre un exercice mais quelque chose ne va pas.
bon l´exercice se resume comme cela:
tu choisies un nombre de chambre(impair).
Dans la premiere et dernier chambre il ya des chat, et on met une sourie dans la chambre du milieu.
on utilise rand ()%2+1 pour le deplacement de la souris: par exemple si 1 elle va a droite , et si 2 elle va a gauche.
et on simule 1000 fois jusqu´a ce que la souris atteint une chambre ou il ya un chat.
a la fin je dois calculer la moyenne de changement de chambre.
La faute et dans le dernier paragraphe, j´ai du redeclarer "nombre" et le programme ne reconnait pas le nombre declarer initialement.
SVP de la´aide
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include <conio.h>
#include <stdlib.h>
void indata (int *x){
int nombre,chambre;
printf("Nombre de chambre(impair): "); // **nombre de chambre.
scanf("%d",&nombre);
chambre=(nombre+1)/2; //
*x=chambre;
printf("La souris est dans la chambre nr : %d\n",chambre); //** souris est dans lachambre nr
}
void slumpa(int*x){ //**tirage au sort
int r;
srand(time(0));
r=rand ()%2+1;
switch (r){
case 1: *x=*x+1; break;
case 2:*x=*x-1; break;
} }
int main (void)
{
int x,k,n,tot=0;
nombre ;
int x_start;
srand(time(0));
indata(&x_start);
for(k=1;k<=1000;k++){ //*** 1000 simulation.
x=x_start;
n=0;
do {
slumpa(&x); //**tirage au sort
n++;
}
while (x != 0 && x!=nombre ); //** si souris n´est pas dans la 1ere ou derniere chambre
tot+=n; //**continue a simuler
}
printf("La souris change %.2f de fois\n",((float)tot/1000));//la souris change tant nombre de fois.
getch();
return 0;
} }
La variable nombre que tu déclares dans main() et dans intdata() est locale.
Tu peux donc la déclarer deux fois sans problème ( à condition que tu ne t'amuses pas à la passer en argument avec le même nom... ).
En revanche, je ne comprend pas le passage suivant :
int x,k,n,tot=0;
nombre ;
int x_start;
Pourrais-tu clarifier ?
__________________________
N'oubliez pas le tag lorsque quelqu'un a répondu à votre question.
Merci de lire et de respecter les règlements des sections. --- NSM - Site officiel ~¤~ Dreamseed, communauté des arts
---
La différence entre un homme politique et un expert en sécurité tient en ce fait que corrompu, le second est au chômage.
ah int x,k,n,tot=0; int nombre ; int x_start;
le int manquait..
le x_start= commencement du deplacement
apres c´est ecrit: x=x_start
au fait j´ai traduit le code car le code d´origine/commentaires etaient en suédois....j´ai du oublier le int, sinon quand je simule j´obtient des moyennes colossales...
quand je simule nombre de chambre =3 je devrait obtenir 1 par exemple, mais dans mon cas j´obitent 2:/
pouvez vous simuler et avoir svp?
je re-link le code.
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include <conio.h>
#include <stdlib.h>
void indata (int *x){
int nombre,chambre;
printf("Nombre de chambre(impair): "); // **nombre de chambre.
scanf("%d",&nombre);
chambre=(nombre+1)/2; //
*x=chambre;
printf("La souris est dans la chambre nr : %d\n",chambre); //** souris est dans lachambre nr
}
void slumpa(int*x){ //**tirage au sort
int r;
srand(time(0));
r=rand ()%2+1;
switch (r){
case 1: *x=*x+1; break;
case 2:*x=*x-1; break;
} }
int main (void)
{
int x,k,n,tot=0;
int nombre ;
int x_start;
srand(time(0));
indata(&x_start);
for(k=1;k<=1000;k++){ //*** 1000 simulation.
x=x_start;
n=0;
do {
slumpa(&x); //**tirage au sort
n++;
}
while (x != 0 && x!=nombre ); //** si souris n´est pas dans la 1ere ou derniere chambre
tot+=n; //**continue a simuler
}
printf("La souris change %.2f de fois\n",((float)tot/1000));//la souris change tant nombre de fois.
getch();
return 0;
}
Merci de tes précisions, Oden.
Commençons par deux ou trois petits détails qui changent tout =)
¤ Clarifie au maximum ton code en utilisant les invisibles à bon essient ( idente comme il faut, va à la ligne quand c'est plus clair, aère entre tes fonctions ).
¤ N'utilise pas les pointeurs à mauvais essient. Ta fonction intdata pourrait retourner un entier plutôt que travailler sur un pointeur. Même si les compilateurs sont aujourd'hui otpimisés au maximum, ce serait une source d'éventuelle fuite mémoire en moins
¤ Encore dans la perspective de clarification, le do...while est inutile ici, dans la mesure où au départ, x!=x_start et x!=nombre. Une simple boucle while permettrait de comprendre dès le début sur quoi tu boucles
¤ Ta fonction indata n'a pas d'utilité en elle même et on ne peut pas dire qu'elle soit la bienvenue dans ton code. Le mieux serait peut-être que la saisie des données se fasse dans main et que ta boucle soit dans une fonctoin à part et retourne le nombre de déplacements.
Ensuite, pour ton problème en tant que tel, je ne sais pas vraiment que dire.
Pose le tout sur le papier, réécris un code plus idiomatique et donne nous des nouvelles.
Une petite piste :
int main(void)
{
//**Initialise les variables, et boucle pour faire les 1000 simulations en appelant simule()
}
int deplace(int place)
{
//**Retourne la nouvelle position à partir de la position initiale
}
int simule(int nb_chambres, int x_start)
{
//**Boucle jusqu'à ce que la souris soit mangée
return(nb_deplacements);
}
__________________________
N'oubliez pas le tag lorsque quelqu'un a répondu à votre question.
Merci de lire et de respecter les règlements des sections. --- NSM - Site officiel ~¤~ Dreamseed, communauté des arts
---
La différence entre un homme politique et un expert en sécurité tient en ce fait que corrompu, le second est au chômage.