Probleme avec un tit programme que je
Fermé
Silver-Boy
Messages postés
20
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
22 avril 2012
-
11 avril 2012 à 16:22
Silver-Boy Messages postés 20 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 22 avril 2012 - 22 avril 2012 à 23:38
Silver-Boy Messages postés 20 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 22 avril 2012 - 22 avril 2012 à 23:38
A voir également:
- Probleme avec un tit programme que je
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
- Frequence programme national ✓ - Forum Messagerie
- Ce message d'erreur apparaît sur l'ordinateur d'elena. que peut-on dire du programme gwxux ? - Forum logiciel systeme
- Programme demarrage windows 10 - Guide
- Programme bonjour ✓ - Forum Windows
3 réponses
poukkid
Messages postés
106
Date d'inscription
mercredi 20 mai 2009
Statut
Membre
Dernière intervention
11 avril 2012
11
11 avril 2012 à 17:19
11 avril 2012 à 17:19
Salut
Comment sais-tu que la difficulté ne change pas? je ne vois pas de trace spécifique dans l'un ou l'autre des niveaux de difficulté.
Ajoutes des traces pour savoir dans quelle niveau tu atteris
D'autre part, tu réinitialise ton NombreMystère a chaque tour de boucle while dans un niveau de difficulté. Est-ce le comportement recherché? car si tu indiques que "c'est plus" ou "c'est moins", c'est pour qu'on puisse se baser sur cette indication pour finir par trouver, non?
Enfin, tu peux factoriser une grosse partie de ton code puisque le comportement est exactement le meme dans chaque niveau de difficulté. la seule modification est dans l'initialisation du MAX.
Ton case ne devrait donc contenir que l'initialisation du MAX avec la valeur voulue.
D'autre part, comme indiqué au dessus, ton do...while ne devrait contenir que les essais et non pas l'initialisation de la graine avec srand ni celle du nombreMystère...
En gros ton code devrait plutot ressembler à quelquechose comme ca (en pseudo-code)
Apres s'il y a une erreur ca ne me saute pas aux yeux pour l'instant mais factorise ton code et on y verra peut etre plus clair.
Enfin, (par souci d'optimisation) le switch case que je t'ai indiqué peut se résumer a une puissance de 10, puisque ta variable MAX recoit en fait la valeur 10 puissance lVl... (level 2 par exemple : MAX = 10² = 100)
Comment sais-tu que la difficulté ne change pas? je ne vois pas de trace spécifique dans l'un ou l'autre des niveaux de difficulté.
Ajoutes des traces pour savoir dans quelle niveau tu atteris
D'autre part, tu réinitialise ton NombreMystère a chaque tour de boucle while dans un niveau de difficulté. Est-ce le comportement recherché? car si tu indiques que "c'est plus" ou "c'est moins", c'est pour qu'on puisse se baser sur cette indication pour finir par trouver, non?
Enfin, tu peux factoriser une grosse partie de ton code puisque le comportement est exactement le meme dans chaque niveau de difficulté. la seule modification est dans l'initialisation du MAX.
Ton case ne devrait donc contenir que l'initialisation du MAX avec la valeur voulue.
D'autre part, comme indiqué au dessus, ton do...while ne devrait contenir que les essais et non pas l'initialisation de la graine avec srand ni celle du nombreMystère...
En gros ton code devrait plutot ressembler à quelquechose comme ca (en pseudo-code)
printf menu...
...// les printf...
switch... {
case 1 :
MAX = 10;
break;
case 2 :
MAX = 100;
break
case 3 :
MAX = 1000;
break;
}
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
do {
...//ce qu'il reste
}
while...
Apres s'il y a une erreur ca ne me saute pas aux yeux pour l'instant mais factorise ton code et on y verra peut etre plus clair.
Enfin, (par souci d'optimisation) le switch case que je t'ai indiqué peut se résumer a une puissance de 10, puisque ta variable MAX recoit en fait la valeur 10 puissance lVl... (level 2 par exemple : MAX = 10² = 100)
Silver-Boy
Messages postés
20
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
22 avril 2012
22 avril 2012 à 23:22
22 avril 2012 à 23:22
Merci beaucoup, ça m'aide vraiment, je vais m'y mètre, et si j'ai du nouveau je posterai :p.
Thank's ^_^
Thank's ^_^
Silver-Boy
Messages postés
20
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
22 avril 2012
22 avril 2012 à 23:38
22 avril 2012 à 23:38
Bon voila j'ai esséyé, et ça a marché, merci beaucoup.
Si tu veux la vérité j'ai eclaté de rire quand j'ai vu les fautes, mais bon je débute, et je crois que j'ai bien droit a ça :p.
Bref voila ce que ça donne :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int nombreMystere, number = 0, compteur = 1, lVl, MIN = 1, MAX;
printf("\t\t\t\t===Menu===\n\n");
printf("\t\t\t1- Niveau 1 : de 1 a 100.\n\n");
printf("\t\t\t2- Niveau 2 : de 1 a 1000.\n\n");
printf("\t\t\t3- Niveau 3 : de 1 a 10000.\n\n");
scanf("%d", &lVl);
switch (lVl)
{
case 1:
MAX = 10;
break;
case 2:
MAX = 100;
break;
case 3:
MAX = 1000;
break;
}
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
do
{
printf("Quel est le nombre Mystere ?\n");
scanf("%d", &number);
if (number < nombreMystere)
{
printf("C'est plus ^^\n");
}
else if (number > nombreMystere)
{
printf("C'est moins ^^\n");
}
else
{
printf("Bravo, vous l'avez trouver en %d coups ^^\n", compteur);
}
compteur++;
} while (number != nombreMystere);
return 0;
}
C'est vraie que j'en avais trop fait au début, et que c'était hyper long pour un simple programme qui ne sert quasiment a rien (trop de répétition :p) mais bon voila j'ai fais ce que j'ai pu.
Merci une énième fois ^^
Si tu veux la vérité j'ai eclaté de rire quand j'ai vu les fautes, mais bon je débute, et je crois que j'ai bien droit a ça :p.
Bref voila ce que ça donne :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int nombreMystere, number = 0, compteur = 1, lVl, MIN = 1, MAX;
printf("\t\t\t\t===Menu===\n\n");
printf("\t\t\t1- Niveau 1 : de 1 a 100.\n\n");
printf("\t\t\t2- Niveau 2 : de 1 a 1000.\n\n");
printf("\t\t\t3- Niveau 3 : de 1 a 10000.\n\n");
scanf("%d", &lVl);
switch (lVl)
{
case 1:
MAX = 10;
break;
case 2:
MAX = 100;
break;
case 3:
MAX = 1000;
break;
}
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
do
{
printf("Quel est le nombre Mystere ?\n");
scanf("%d", &number);
if (number < nombreMystere)
{
printf("C'est plus ^^\n");
}
else if (number > nombreMystere)
{
printf("C'est moins ^^\n");
}
else
{
printf("Bravo, vous l'avez trouver en %d coups ^^\n", compteur);
}
compteur++;
} while (number != nombreMystere);
return 0;
}
C'est vraie que j'en avais trop fait au début, et que c'était hyper long pour un simple programme qui ne sert quasiment a rien (trop de répétition :p) mais bon voila j'ai fais ce que j'ai pu.
Merci une énième fois ^^