RENITIALISER EN LANGAGE C
Fermé
lucas01
Messages postés
1835
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
15 octobre 2014
-
30 mai 2009 à 21:45
lucas01 Messages postés 1835 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 15 octobre 2014 - 29 juil. 2009 à 07:37
lucas01 Messages postés 1835 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 15 octobre 2014 - 29 juil. 2009 à 07:37
A voir également:
- RENITIALISER EN LANGAGE C
- Langage ascii - Guide
- Renitialiser un pc - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
13 réponses
Bonjour,
Je veux bien t'aider, mais quelle est ta question au juste ? As-tu testé avec srand ?
Un conseil au passage pour ton hasard, si tu veux que la fonction "nombre_hasard" te renvoie un nombre en 0 et 6, il faut que tu mettes srand % 7.
J'attends ta question...
Yakari
Je veux bien t'aider, mais quelle est ta question au juste ? As-tu testé avec srand ?
Un conseil au passage pour ton hasard, si tu veux que la fonction "nombre_hasard" te renvoie un nombre en 0 et 6, il faut que tu mettes srand % 7.
J'attends ta question...
Yakari
the F
Messages postés
150
Date d'inscription
dimanche 22 mars 2009
Statut
Membre
Dernière intervention
22 mars 2011
13
31 mai 2009 à 13:06
31 mai 2009 à 13:06
le debogage donne ce resultat :
Program received signal SIGSEGV, Segmentation fault.
0x08048787 in affiche_mot (mot=0xe9d795ff <Address 0xe9d795ff out of bounds>)
at U.c:67
67 buf[0]= mot[0];
Program received signal SIGSEGV, Segmentation fault.
0x08048787 in affiche_mot (mot=0xe9d795ff <Address 0xe9d795ff out of bounds>)
at U.c:67
67 buf[0]= mot[0];
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
31 mai 2009 à 14:58
31 mai 2009 à 14:58
Salut,
N'oublie pas de déclarer les prototypes des fonctions avant le main.
Sinon l'erreur vient du rand().
rand() te renvoie une valeur pseudo-aléatoire entre 0 et RAND_MAX. Il faut donc normer cette valeur pour obtenir une valeur dans l'intervalle que tu veux. Le mieux est d'utiliser les multiplications et les divisions. Mais pour tester, tu peux essayer avec un simple modulo 7. (%7).
Cdlt
N'oublie pas de déclarer les prototypes des fonctions avant le main.
Sinon l'erreur vient du rand().
rand() te renvoie une valeur pseudo-aléatoire entre 0 et RAND_MAX. Il faut donc normer cette valeur pour obtenir une valeur dans l'intervalle que tu veux. Le mieux est d'utiliser les multiplications et les divisions. Mais pour tester, tu peux essayer avec un simple modulo 7. (%7).
Cdlt
lucas01
Messages postés
1835
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
15 octobre 2014
102
31 mai 2009 à 16:18
31 mai 2009 à 16:18
Je vous remercie, mais je débute juste. Mon père (ancien programmeur) m'a fait ce codage. Enfin il ma donné les bases. Et il m'a dit en gros débrouille toi. Quand tu auras fini le programme, je peut te montrer autre chose.
Mais le problème c'est que je bloque je sais plus quoi faire. Si vous pouviez me montrer ou carrément me le faire, ce serait cool. :p :p.
@ Yakari
Je te remercie bien vouloir m'aider. Avec srand oui j'ai essayer.
@Tous, apparemment le truc marche mais sa beug, quand j'exécute et tout,
il m'affiche: buf=----------------------------------------------------------------------------------------------------------------[...]
sur 7.8 ligne de la console.
et quand je ferme et RE- exécute le programme il affiche: buf= [rien].
>>> tout le temps
Merci de m'aider.
Mais le problème c'est que je bloque je sais plus quoi faire. Si vous pouviez me montrer ou carrément me le faire, ce serait cool. :p :p.
@ Yakari
Je te remercie bien vouloir m'aider. Avec srand oui j'ai essayer.
@Tous, apparemment le truc marche mais sa beug, quand j'exécute et tout,
il m'affiche: buf=----------------------------------------------------------------------------------------------------------------[...]
sur 7.8 ligne de la console.
et quand je ferme et RE- exécute le programme il affiche: buf= [rien].
>>> tout le temps
Merci de m'aider.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lucas01
Messages postés
1835
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
15 octobre 2014
102
31 mai 2009 à 16:18
31 mai 2009 à 16:18
>>> J'ai oublier, il beug avec le code que j'ai mis en haut.
Comme l'a dit Fiddy, la fonction rand() retourne une valeur aléatoire dans un intervalle bien défini. Cet intervalle est [0; RAND_MAX] sachant que RAND_MAX est une valeur assez grande (pour plus de précision sur cette valeur, voir le header stdlib).
Mais toi ce que tu veux, c'est un nombre aléatoire compris entre 0 et 6, car tu as 6 mots dans ton tableau, donc afin de réduire ce nombre aléatoire sortant de rand() dans l'intervalle [0;6] il faut que tu effectues un modulo (symbole %).
int nombre_hasard()
{
int nb;
nb=rand() % 7; /* renvoie le reste de la division euclidienne de rand() par 7 -> un nombre dans [0;6]*/
return nb;
}
Après si tu veux utiliser srand(), qui permet une plus grande entropie, tu devras faire un truc de ce style :
int nombre_hasard()
{
int nb;
srand(time(NULL));
nb=rand() % 7; /* Dans ce cas, on appelle le générateur pseudo-aléatoire qui a été initialisé au préalable avec une "graine" de départ */
return nb;
}
Après j'ai pas compilé ni exécuté, je te laisse le soin de le faire.
Yakari
Mais toi ce que tu veux, c'est un nombre aléatoire compris entre 0 et 6, car tu as 6 mots dans ton tableau, donc afin de réduire ce nombre aléatoire sortant de rand() dans l'intervalle [0;6] il faut que tu effectues un modulo (symbole %).
int nombre_hasard()
{
int nb;
nb=rand() % 7; /* renvoie le reste de la division euclidienne de rand() par 7 -> un nombre dans [0;6]*/
return nb;
}
Après si tu veux utiliser srand(), qui permet une plus grande entropie, tu devras faire un truc de ce style :
int nombre_hasard()
{
int nb;
srand(time(NULL));
nb=rand() % 7; /* Dans ce cas, on appelle le générateur pseudo-aléatoire qui a été initialisé au préalable avec une "graine" de départ */
return nb;
}
Après j'ai pas compilé ni exécuté, je te laisse le soin de le faire.
Yakari
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
1 juin 2009 à 11:11
1 juin 2009 à 11:11
Non le srand() n'est à appeler qu'une seule fois. Il ne faut donc pas la mettre dans la fonction nombre_hasard(). Il faut bel et bien la laisser dans une fonction d'initialisation ou tout simplement dans le main().
Cdlt
Cdlt
lucas01
Messages postés
1835
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
15 octobre 2014
102
1 juin 2009 à 11:48
1 juin 2009 à 11:48
Merci, mais pourquoi 7 et pas 6. Je n'est pas 7 mots a choisir! ?
Si je met comme tu as mis euh... Yakari. Le programme va marcher?
Donc on dit que c'est un générateur pseudo-aléatoire quand il y a % [suivi d'un chiffre ou nb].
Si je comprend bien, le % [chiffre ou nb]>>> ce chiffre ou nb est la valeur maximum que "j'autorise a l'ordinateur ( ou programme ) de choisir au hasard"
Mais je vais essayer avec ton post, Yakari
@ Tous: encore une foie merci d'aider un jeune débutant ! ! ! !
Si je met comme tu as mis euh... Yakari. Le programme va marcher?
Donc on dit que c'est un générateur pseudo-aléatoire quand il y a % [suivi d'un chiffre ou nb].
Si je comprend bien, le % [chiffre ou nb]>>> ce chiffre ou nb est la valeur maximum que "j'autorise a l'ordinateur ( ou programme ) de choisir au hasard"
Mais je vais essayer avec ton post, Yakari
@ Tous: encore une foie merci d'aider un jeune débutant ! ! ! !
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
1 juin 2009 à 11:58
1 juin 2009 à 11:58
Tu sais, c'est ce que je t'avais dit dans mon post ;-))).
Pourquoi 7 ? Car 7%7=0. De 0 à 6, cela te fait 7 éléments.
Donc, tu reprends le post de yakari, et tu enlèves le srand(time(NULL)), et tu le laisses dans ta fonction main() comme t'avais fait. Ca devrait mieux marcher.
Cdlt
Pourquoi 7 ? Car 7%7=0. De 0 à 6, cela te fait 7 éléments.
Donc, tu reprends le post de yakari, et tu enlèves le srand(time(NULL)), et tu le laisses dans ta fonction main() comme t'avais fait. Ca devrait mieux marcher.
Cdlt
dream666
Messages postés
735
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
24 février 2014
104
1 juin 2009 à 13:13
1 juin 2009 à 13:13
Pour ceux que sa intéresse je viens de faire un exemple du hasard :
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
char question[25] ;
int presentation ;
int hasard;
int nombre;
int choisir ;
int main()
{
while ( question!="exit")
{
if ( choisir==0) {
srand(time(NULL));
hasard=(rand()%999)+1;
choisir=1 ;
}
if (presentation==0){
cout << "**Bienvenue au jeux du HASARD***" << endl;
presentation=1;
}
cout <<"entrer un nombre entre 1 et 1000"<< endl ;
cin >> nombre ;
if (hasard==nombre) {
cout << "vous avez GAGNER !!!"<< endl;
choisir=0;
}
cout << "vous avez mis "<< nombre << endl;
cout << "alor que le nombre est " << hasard << endl;
}
return 0;
}
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
char question[25] ;
int presentation ;
int hasard;
int nombre;
int choisir ;
int main()
{
while ( question!="exit")
{
if ( choisir==0) {
srand(time(NULL));
hasard=(rand()%999)+1;
choisir=1 ;
}
if (presentation==0){
cout << "**Bienvenue au jeux du HASARD***" << endl;
presentation=1;
}
cout <<"entrer un nombre entre 1 et 1000"<< endl ;
cin >> nombre ;
if (hasard==nombre) {
cout << "vous avez GAGNER !!!"<< endl;
choisir=0;
}
cout << "vous avez mis "<< nombre << endl;
cout << "alor que le nombre est " << hasard << endl;
}
return 0;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
1 juin 2009 à 13:44
1 juin 2009 à 13:44
Salut,
Oui, mais c'est du C++, nous on parlait de C ;-).
Ensuite : while ( question!="exit")
Sachant que question est un tableau de char, ce n'est pas terrible. Il faut utiliser strcmp. Sinon tu compares les adresses mémoires, qui sont différentes...
Oui, mais c'est du C++, nous on parlait de C ;-).
Ensuite : while ( question!="exit")
Sachant que question est un tableau de char, ce n'est pas terrible. Il faut utiliser strcmp. Sinon tu compares les adresses mémoires, qui sont différentes...
dream666
Messages postés
735
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
24 février 2014
104
1 juin 2009 à 13:46
1 juin 2009 à 13:46
oui mai il y a pas plus clair comme démonstration après il faut juste adapter le code.
celui qui cherche a créer du hasard dans son code peu facilement comprendre les choses par raport a mon code source et puis le language C
j'en en fait que un mois
celui qui cherche a créer du hasard dans son code peu facilement comprendre les choses par raport a mon code source et puis le language C
j'en en fait que un mois
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
1 juin 2009 à 13:58
1 juin 2009 à 13:58
Pas plus clair ?
Le mieux est de renvoyer sur un lien ou de faire un code exempt de fautes ^^.
Là tu utilises question!="exit" qui est totalement faux. Et tu parles de C++ alors que nous on parle de C.
Je ne parle même pas du fait que le modulo est à éviter pour le rand et qu'il vaut mieux utiliser la multiplication et la division afin d'éviter d'avoir une probabilité fausse.
Voici un exemple de rand :
Sinon voici un lien qui explique cela : https://nicolasj.developpez.com/articles/libc/hasard/
Cdlt
Le mieux est de renvoyer sur un lien ou de faire un code exempt de fautes ^^.
Là tu utilises question!="exit" qui est totalement faux. Et tu parles de C++ alors que nous on parle de C.
Je ne parle même pas du fait que le modulo est à éviter pour le rand et qu'il vaut mieux utiliser la multiplication et la division afin d'éviter d'avoir une probabilité fausse.
Voici un exemple de rand :
#include <stdio.h> #include <stdlib.h> #include <time.h> int alea(void) { return (int) (int)(rand() / RAND_MAX * 6); } int main(void) { int nb; srand(time(NULL)); nb=alea(); printf("%d\n",nb); return 0; }
Sinon voici un lien qui explique cela : https://nicolasj.developpez.com/articles/libc/hasard/
Cdlt
dream666
Messages postés
735
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
24 février 2014
104
1 juin 2009 à 14:02
1 juin 2009 à 14:02
c'est pas parceque toi sa te plait pas que sa ne plaira pas a d'autre.
mon code fonctionne très bien pour débuter, la seule différence entre le C et le C++ c'est que j'utilise cout et cin qui me semble plus clair.
Adapte mon code a ta façon et du vérra la différence
mon code fonctionne très bien pour débuter, la seule différence entre le C et le C++ c'est que j'utilise cout et cin qui me semble plus clair.
Adapte mon code a ta façon et du vérra la différence
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
1 juin 2009 à 14:18
1 juin 2009 à 14:18
Rahh,
Non ton code ne fonctionne pas très bien.
On n'utilise pas question!="exit" (lorsque question est un tableau de char), mais strcmp(question,"exit").
Ce n'est pas parce que ça me plaît pas, mais parce que ce que t'as mis c'est complètement faux.
Non ton code ne fonctionne pas très bien.
On n'utilise pas question!="exit" (lorsque question est un tableau de char), mais strcmp(question,"exit").
Ce n'est pas parce que ça me plaît pas, mais parce que ce que t'as mis c'est complètement faux.
Oui fiddy tu as raison pour le srand() (mais où avais-je la tête... ^^).
Sinon j'ai regardé les autres messages et je suis d'accord avec toi (fiddy), ce qu'a écrit dream666 est inexacte donc pas très utile pour un débutant. De plus, j'ajouterais (pour dream666) que quitte à utiliser le C++, je vois pas pourquoi tu n'utilises pas la classe string qui est plus facile à utiliser que les tableaux de "char".
Yakari
Sinon j'ai regardé les autres messages et je suis d'accord avec toi (fiddy), ce qu'a écrit dream666 est inexacte donc pas très utile pour un débutant. De plus, j'ajouterais (pour dream666) que quitte à utiliser le C++, je vois pas pourquoi tu n'utilises pas la classe string qui est plus facile à utiliser que les tableaux de "char".
Yakari
dream666
Messages postés
735
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
24 février 2014
104
2 juin 2009 à 17:32
2 juin 2009 à 17:32
Sauf que je n'ai pas chercher a faire quelque chose de propre pour mettre en boucle sinon j'orais fait une sortie de boucle deja, en s'en fou de while avec char le principal c'est qu'on peu jouer avec les conditions et le hasard
celui qui des le début regarde mon code, il va comprendre du premier coup d'oeil comment manier les if et rand()
la plus part des programmation sont les même il sufi de s'adapter au code, il n'est pas dificile de modifier mon code en pure language C en tant que débutant.
et dalleur mon code fonctionne
celui qui des le début regarde mon code, il va comprendre du premier coup d'oeil comment manier les if et rand()
la plus part des programmation sont les même il sufi de s'adapter au code, il n'est pas dificile de modifier mon code en pure language C en tant que débutant.
et dalleur mon code fonctionne
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
2 juin 2009 à 21:41
2 juin 2009 à 21:41
et dalleur mon code fonctionne
Bon bah, revois tes bases de C alors car pour comparer un tableau de char avec un pointeur sur un char, on n'utilise pas l'opérateur égal mais la fonction strcmp. Mais bon, si ça te fait plaisir de penser que t'as raison...
Bon bah, revois tes bases de C alors car pour comparer un tableau de char avec un pointeur sur un char, on n'utilise pas l'opérateur égal mais la fonction strcmp. Mais bon, si ça te fait plaisir de penser que t'as raison...
Yakari
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
2 juin 2009 à 22:27
2 juin 2009 à 22:27
Je crois qu'il ne faut pas insister, il veut le dernier mot, nous perdons notre temps... ;)
lucas01
Messages postés
1835
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
15 octobre 2014
102
29 juil. 2009 à 07:37
29 juil. 2009 à 07:37
Merci comme même. :p