RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Serv: irc.irc-land.org
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Nouveau bloquage

Forum : C - CONSOLE
Sous Catégorie : Console
Type du sujet : Sujet Normale
FAQ : FAQ C - CONSOLE

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGE : [1]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM C - CONSOLE

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
Oden
Nouveau membre
Inscrit : 06/05/2007
Messages : 3
Message
#134088
Posté le 20/05/07 à 13:33
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; } }
Salut!!

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

maniacode
Superviseur :
- Sécurité
Modérateur :
- PHP
Chef de projet(s) :
- NSM-Noyau pour .

Avatar de maniacode
Inscrit : 21/08/2006
Messages : 346
Message
#134093
Posté le 20/05/07 à 13:46
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 Image 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.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

Oden
Nouveau membre
Inscrit : 06/05/2007
Messages : 3
Message
#134097
Posté le 20/05/07 à 14:28
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; }

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

vortex666
Modérateur :
- C & C++
- OpenGL
- Delphi
Chef de projet(s) :
- Vortez3DEngine

Avatar de vortex666
Inscrit : 20/09/2004
Messages : 483
Message
#134239
Posté le 21/05/07 à 20:56
a tu essayer le debugger???

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

maniacode
Superviseur :
- Sécurité
Modérateur :
- PHP
Chef de projet(s) :
- NSM-Noyau pour .

Avatar de maniacode
Inscrit : 21/08/2006
Messages : 346
Message
#134329
Posté le 22/05/07 à 19:15
A nouveau bonsoir,

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 Smiley

¤ 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 Smiley

¤ 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 Image 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.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM C - CONSOLE



    PAGE : [1]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.