CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Nombre a deviner

Okami83
Okami83
Niveau 6
03 novembre 2007 à 18:40:59

Donc voila je dois faire un programme qui dois nous faire deviner au bout de 10 essai un nombre aléatoire compris entre 1 et 100. Si au bout des 10 essais, le joueur n´a pas trouvé, l´ordi lui indique la solution, j´ai donc fais ce programme qui marche sauf que au bout des 10 essai sa recommence et je vois pas comment indiquer au joueur qu´il a perdu.
Merci de votre aide

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <time.h>

int main()
{
int n;
int i, s, X;

X=time(NULL);
srand(X);

n=rand()%100+1;

do{

printf("Le nombre a trouver est %d\n", n);
for (s = 1; s <= 10; s++)
{
printf("Entrer votre nombre: \n");
scanf("%d",&i);

if (i>n){
printf("Trop grand\n");
}
else{
if (i<n){
printf("Trop petit\n");
}

else{
printf("juste!\n");
}
}
}
}while (i!=n);

system("pause");
return 0;
}

space_monster66
space_monster66
Niveau 6
03 novembre 2007 à 19:44:45

simple, tu comptes les essais.
tu peux par ex. comptabiliser le nombre de fois (d´entrées) que l´utilisateur a fait, ou tout simplement faire un int "score" et faire +1 à cet entier à chaque imp.
code :
int entier
//du code...
if (i>n){
score++;
printf("Trop grand\n");
}
else{
if (i<n){
score++;
printf("Trop petit\n");
}

else{
score++;
printf("juste!\n");
}
if(score==10){
printf("Perdu, essayes encore naab !\ n");
score==0;
goto fonction_de_depart // = fonction externe au main qui relance le main ou tout simplement le main direct
}
}
}while (i!=n);

c´est assez simple ^^ tu débutes en C ?

Okami83
Okami83
Niveau 6
03 novembre 2007 à 19:48:00

Ok merci oui je débute en C mais y´aurais pas moyen d´utiliser une boucle plutot que d´incrémenter de 1 a chaque fois?

space_monster66
space_monster66
Niveau 6
03 novembre 2007 à 19:57:48

ah ca je crois que oui ^^
ce serait pas plutot pour un devoir?

Chaos_Clad
Chaos_Clad
Niveau 10
03 novembre 2007 à 20:00:22

"fonction externe au main qui relance le main"

:d) Ca ne veut rien dire "relancer le main", le seul moyen de faire ça, c´est de relancer le programme. Je te conseille aussi de factoriser tes expressions, puisque tu as trois expressions et que dans chacune d´elle tu as "score++", autant mettre une seule fois score++ à la fin de la boucle, tu y gagnes en lisibilité et en vitesse (ici non mais imagine des boucles où tu dois modifier des centaines de valeur, tu ne vas pas réécrire la même chose dix fois, ce serait idiot).
Essaie d´éviter aussi le goto si tu veux pas te faire taper sur les doigts... ^^

Pour Okami, à vrai dire je vois pas la différence, "incrémenter de 1 à chaque fois" nécessite une boucle, donc pourquoi vouloir te passer de l´incrémentation pour mettre une boucle ? Un autre conseil, quand le joueur aura trouvé la solution exacte, il ne sert à rien que la boucle continue, utilise un booléen qui prendra la valeur true lorsque l´utilisateur aura trouvé.
Voilà l´équivalent en code :

main {

int essais;
int trouve;
[...]

essais = 0;
trouve = 0;

do
{
scanf(...);

if (i < n) {
... }

else if (i > n) {
... }

else {
...
trouve = 1;}

essais++;
} while (essais < 10 && !t rouve)

Au cas où tu ne comprennes pas encore bien les expressions booléennes, je t´explique la condition du while, en fait il va tester deux choses :
1°) Il regarde si essais est inférieur à 10, si c´est vrai, ton ordinateur va "noter" la valeur 1 (logique booléenne : 1 (true) ou 0 (false)).
2°) Il regarde si trouve est true, si trouve est false, !t rouve est true, donc à partir du moment ou trouve sera true, !t rouve sera false et la condition ne sera pas remplie car 1 && 0 = 0 (table de vérité ET). Petit détail qui peut avoir son importance, si l´opérande de gauche est fausse dans l´expression a && b, b n´est pas testé (du moment que a est false, a && b sera forcément false).

space_monster66
space_monster66
Niveau 6
03 novembre 2007 à 20:03:47

oui mais la il ne suffit que de 3 petites incrementations, ce n´est rien de bien grave ^^´
bin je voulais par là dire relancer le programme oui si tu ne comprends pas faut un peu reflechir sur quoi ca veut dire ^^´

Chaos_Clad
Chaos_Clad
Niveau 10
03 novembre 2007 à 20:06:40

J´avais très bien compris ce que tu avais voulu dire, mais la programmation est un domaine qui exige un minimum de rigueur :o))

space_monster66
space_monster66
Niveau 6
03 novembre 2007 à 20:17:15

bah, inutile de rechercher le maximum pour un petit hello world par exemple, si on peut faire simple on fait simple ^^
bon je mets fin à cette discussion ^^ :o))

Okami83
Okami83
Niveau 6
03 novembre 2007 à 20:37:50

ok j´ai compris sa mais avec un for on peux pas le faire autrement?

Okami83
Okami83
Niveau 6
03 novembre 2007 à 21:30:08

avec une boucle for sa doit etre possible non?

Chaos_Clad
Chaos_Clad
Niveau 10
03 novembre 2007 à 21:44:10

Et si tu essayais avant d´attendre patiemment qu´on te réponde ?

Okami83
Okami83
Niveau 6
03 novembre 2007 à 22:01:50

j´essayais en haut mais comme je l´ai dit j´ai un problème car au bout des 10 essai sa recommence et je vois pas comment indiquer au joueur qu´il a perdu.

Neoknight
Neoknight
Niveau 10
03 novembre 2007 à 22:10:34

do{

printf("Le nombre a trouver est %d\n", n);
for (s = 1; s <= 10; s++)
{
printf("Entrer votre nombre: \n");
scanf("%d",&i);

if (i>n){
printf("Trop grand\n");
}
else{
if (i<n){
printf("Trop petit\n");
}

else{
printf("juste!\n");
s=10; //(le joueur a gagné donc on sort de la boucle)
}

if(s==10 && i!=n)
{
printf("vous avez echoué");//le joueur est arrive au bout et n´a pas trouve le bon numero
}

}

int rejouer;
printf("Rejouer!(oui tapez 1 non tapez 2");
scanf(rejouer)
}while (rejouer==1 && s);

Neoknight
Neoknight
Niveau 10
03 novembre 2007 à 22:11:50

:d) bug celui la est mieux :oui:

do{

printf("Le nombre a trouver est %d\n", n);
for (s = 1; s <= 10; s++)
{
printf("Entrer votre nombre: \n");
scanf("%d",&i);

if (i>n){
printf("Trop grand\n");
}
else{
if (i<n){
printf("Trop petit\n");
}

else{
printf("juste!\n");
s=10; //(le joueur a gagné donc on sort de la boucle)
}

if(s==10 && i!=n)
{
printf("vous avez echoué");//le joueur est arrive au bout et n´a pas trouve le bon numero
}

}

int rejouer;
printf("Rejouer!(oui tapez 1 non tapez 2");
scanf(rejouer)
}while (rejouer==1);

Okami83
Okami83
Niveau 6
03 novembre 2007 à 22:20:40

Merci Neoknight mais ya encore un problème il n´affiche pa tout le temps vous avez echoué quand on a fais 10 tentative sans succés why?

Okami83
Okami83
Niveau 6
03 novembre 2007 à 22:23:30

Non c´est bon c´était juste un pb d´accolade merci de ton aide Neoknight bonne soirée

Neoknight
Neoknight
Niveau 10
03 novembre 2007 à 22:25:18
  1. include <cstdlib>
  2. include <iostream>

using namespace std;

int main(int argc, char *argv[])
{

int rejouer;

do{

int n=5,i;

for (int s = 1; s <= 10; s++)
{
printf("Entrer votre nombre: \n");
scanf("%d",&i);

if (i>n){
printf("Trop grand\n");
}
else
if (i<n){
printf("Trop petit\n");
}

else
{
printf("juste!\n");
s=10; //(le joueur a gagné donc on sort de la boucle)
}

if(s==10 && i!=n)
{
printf("vous avez echoué");//le joueur est arrive au bout et n´a pas trouve le bon numero
}

}

printf("Rejouer!(oui tapez 1 non tapez 2");
scanf("%d",&rejouer);
}
while (rejouer==1);

system("PAUSE");
return EXIT_SUCCESS;
}

Neoknight
Neoknight
Niveau 10
03 novembre 2007 à 22:25:55

ah ok j´avais pas teste mon prog

de rien :ok:

Okami83
Okami83
Niveau 6
03 novembre 2007 à 22:26:58

pour ceux que sa interesse voila le prog final

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <time.h>

int main(void)

{
int n;
int i, s, X;

X=time(NULL);
srand(X);

n=rand()%100+1;

printf("Le nombre a trouver est %d\n", n);
for (s = 1; s <= 10; s++)
{
printf("Entrer votre nombre: \n");
scanf("%d",&i);

if (i>n){
printf("Trop grand\n");
}
else{
if (i<n){
printf("Trop petit\n");
}

else{
printf("juste!\n");
}
}
if(s==10 && i!=n)
{
printf("Tentative depassee, le nombre a trouver etait %d\n", n);
}

}

system("pause");
return 0;
}

naruto_forever
naruto_forever
Niveau 10
04 novembre 2007 à 00:48:29

Ben sinon ... :d) http://www.siteduzero.com

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment