Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 30-09-2015 20:55:31

Terces
Membre
Inscription : 16-07-2015
Messages : 466

Je ne comprends pas :(

Bonjour, je dois apprendre le langage C mais je ne connais que le python :/
Donc j'ai essayé de faire en suivant le site openclassrooms de faire un jeu du juste chiffre:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int a,r;
a=(rand()%(100 - 1 +1))+1;
printf("%d\n",a);
printf("Un nombre entre 1 et 100\n");
r=0;
while (r!=a)
{
    scanf("%d\n",&r);
    if (r<a)
    {
        printf("c'est plus !\n");
    }
    if (r>a)
    {
        printf("c'est moins !\n");
    }
    if (r==a)
    {
        printf("bravo, c'est la bonne réponse !\n\n");
    }
}
return 0;
}


Mais ma version (ci-dessus) ne marche pas, elle est décalé(sans parler d'autres problèmes)... (le nombre aléatoire est aussi toujours le même mais ca c'est un autre problème...)




PS: Yoshi je comprends mieux ton histoire de printf.... (même si c'était bien une erreur hallucinatoire de ta part :p)

Dernière modification par Terces (30-09-2015 21:12:42)


La somme des inverses de la suite de Sylvester converge vers 1 plus vite que toute autre série somme infinie d'inverses d'entiers convergeant vers 1.

Hors ligne

#2 01-10-2015 10:49:02

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Je ne comprends pas :(

Salut,


Quelques remarques...
Il ne paraît pas rationnel de tester deux dois l'égalité r==a :
- une fois via while (r!=a)
- une fois via if r==a
En effet, via scanf tu demandes de choisir un nombre, que tu ranges dans r. Puis tu compares r et a : la comparaison d'égalité se faisant dans le while, il est inutile de la re-tester à l'intérieur de la boucle.
Enduite le \n, c'est un retour à la ligne, il ne me paraît pas naturel d'écrire \n dans le scanf(), perso, je ne le mettrais pas, dans un printf oui, il s'agit d'une sortie écran.
Et il n'y a sortie de boucle qu'en cas d'égalité, dont je mettrais le printf("Bravo") en dehors de la boucle.

Je te propose ce qui suit, dis-moi si ça marche...

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int a,r;
a=rand()%(100 - 1)+1
printf("%d\n",a);
printf("Un nombre entre 1 et 100\n");
r=0;
while (r!=a)
{
    printf("Votre choix ?\n")
    scanf("%d",&r);
    if (r<a)
    {
        printf("c'est plus !\n");
    }
    else if (r>a)
    {
        printf("c'est moins !\n");
    }
}
printf("bravo, c'est la bonne réponse !\n\n");

return 0;
}

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 01-10-2015 18:02:06

Terces
Membre
Inscription : 16-07-2015
Messages : 466

Re : Je ne comprends pas :(

yoshi a écrit :

Salut,


Quelques remarques...
Il ne paraît pas rationnel de tester deux dois l'égalité r==a :
- une fois via while (r!=a)
- une fois via if r==a
En effet, via scanf tu demandes de choisir un nombre, que tu ranges dans r. Puis tu compares r et a : la comparaison d'égalité se faisant dans le while, il est inutile de la re-tester à l'intérieur de la boucle.
Enduite le \n, c'est un retour à la ligne, il ne me paraît pas naturel d'écrire \n dans le scanf(), perso, je ne le mettrais pas, dans un printf oui, il s'agit d'une sortie écran.
Et il n'y a sortie de boucle qu'en cas d'égalité, dont je mettrais le printf("Bravo") en dehors de la boucle.

Je te propose ce qui suit, dis-moi si ça marche...

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int a,r;
a=rand()%(100 - 1)+1
printf("%d\n",a);
printf("Un nombre entre 1 et 100\n");
r=0;
while (r!=a)
{
    printf("Votre choix ?\n")
    scanf("%d",&r);
    if (r<a)
    {
        printf("c'est plus !\n");
    }
    else if (r>a)
    {
        printf("c'est moins !\n");
    }
}
printf("bravo, c'est la bonne réponse !\n\n");

return 0;
}

@+

D'accord merci, ton programme fonctionne modulo deux ";" oubliés, ca c'est énervent je trouve, je préfère python :(


La somme des inverses de la suite de Sylvester converge vers 1 plus vite que toute autre série somme infinie d'inverses d'entiers convergeant vers 1.

Hors ligne

#4 01-10-2015 18:44:36

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Je ne comprends pas :(

Salut,

ton programme fonctionne modulo deux ";" oubliés

Désolé, jamais fait de C ! Un peu de C++ (mais vraiment peu) alors j'ignore un peu -beaucoup- les règles qui régissent les fins de ligne.
A première vue, je dirais que c'est le \n dans le scanf qui enrayait la machine...
Parce que les autres modifs, c'était vraiment des broutilles...
Bon, tu l'as fait fonctionner, modulo les deux oublis, c'est parfait...
Je préfère moi aussi Python ou même TurboPascal, les BASICs modernes etc...

J'en suis navré pour ceux qui aiment le C, mais ce langage me hérisse le poil !

A propos de Python, la dernière mouture, la 3.5 comprend des nouveautés vraiment intéressantes...
Avais-tu essayé le jeu du Morpion Solitaire (écrit avec tkinter/Python) ?
Finalement l'interface graphique tkinter de Python n'est pas si mal que ça et ne mérite pas les critiques incendiaires lues à droite où à gauche...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#5 01-10-2015 20:57:38

Terces
Membre
Inscription : 16-07-2015
Messages : 466

Re : Je ne comprends pas :(

yoshi a écrit :

Avais-tu essayé le jeu du Morpion Solitaire (écrit avec tkinter/Python) ?
Finalement l'interface graphique tkinter de Python n'est pas si mal que ça et ne mérite pas les critiques incendiaires lues à droite où à gauche...

@+

Re,
j'ai regardé plusieurs fois ton message mais je ne l'ai pour le moment pas testé.
Je le testerais ce week-end.
Je te montrerais aussi un jeu de solitaire que j'avais fait (li est pas super bien fait et je ne serrais même pas le refaire mais bon^^)

Au fait, tu es professeur ?

PS: oui tkinter c'est pas mal bien que je ne le connaisse pas beaucoup, je sais pas si tu connais turtle (c'est une "partie" de tkinter!) et c'est un peu plus simple mais en gros c'est que pour tracer comme des fractales ou ce que tu veux^^.

Bon à plus, content de te parler :)


La somme des inverses de la suite de Sylvester converge vers 1 plus vite que toute autre série somme infinie d'inverses d'entiers convergeant vers 1.

Hors ligne

#6 01-10-2015 21:07:21

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Je ne comprends pas :(

Re,

Au fait, tu es professeur ?

Je l'ai été... 38 ans !

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#7 10-10-2015 17:35:59

PointMathematique314
Membre
Inscription : 06-10-2015
Messages : 45

Re : Je ne comprends pas :(

Bonjour

On va encore dire que je chipote mais quel est l’intérêt d'afficher au début le nombre qu'on doit deviner?
A ce jeu là moi je gagne à tous les coups.

A+
YP

PS : je plaisante bien sûr, inutile de me sauter dessus. Comme dirait quelqu'un dont j'ai oublié le nom : j'aime bien l'humour.

Hors ligne

#8 10-10-2015 19:11:32

Terces
Membre
Inscription : 16-07-2015
Messages : 466

Re : Je ne comprends pas :(

PointMathematique314 a écrit :

Bonjour

On va encore dire que je chipote mais quel est l’intérêt d'afficher au début le nombre qu'on doit deviner?
A ce jeu là moi je gagne à tous les coups.

A+
YP

PS : je plaisante bien sûr, inutile de me sauter dessus. Comme dirait quelqu'un dont j'ai oublié le nom : j'aime bien l'humour.

Salut,

Pour voir s'il fonctionnait dans sa phase de naissance...


La somme des inverses de la suite de Sylvester converge vers 1 plus vite que toute autre série somme infinie d'inverses d'entiers convergeant vers 1.

Hors ligne

#9 11-10-2015 10:40:22

PointMathematique314
Membre
Inscription : 06-10-2015
Messages : 45

Re : Je ne comprends pas :(

Bonjour et euh... merci.

(T'avais pas lu mon post scriptum  toi? )

A+
YP

Dernière modification par PointMathematique314 (11-10-2015 10:41:36)

Hors ligne

Pied de page des forums