OVH Cloud OVH Cloud

[grand débutant] nombres aléatoires

44 réponses
Avatar
titi
Je n'arrive pas à générer de nombres aléatoires avec random() :-(

time_t t=time()
srandom(t)
ne fait rien non plus

(debian)

10 réponses

1 2 3 4 5
Avatar
titi
Luc Habert wrote:

main (void)


int main(int argc, char ** argv)


Ca c'est pour prendre en compte des params, je connais.


time_t t=time(1);
ex2.c:8: warning: passing argument 1 of 'time' makes pointer from integer
without a cast


Si tu lisais le man, un petit peu :

time_t time(time_t *t);

time() returns the time since the Epoch (00:00:00 UTC, January 1,
1970), measured in seconds.

If t is non-NULL, the return value is also stored in the memory
pointed to by t.


Je l'ai en français! :-)

#include <time.h>

time_t time(time_t *t);

DESCRIPTION
time renvoie l'heure actuelle sous forme du nombre de
secondes
Ecoulées depuis le 1er Janvier 1970 à 00h 00m 00s GMT, le debut de
l'ère Unix.

Si t n'est pas NULL, la valeur renvoyée est également stockée dans
la structure vers laquelle il pointe

il y a des termes et des conventions que je ne connais pas encore bien ou
que j'ai oubliés "* ** ***", "makes pointer from integer without a cast"
j'essaie des trucs, j'observe ce qu'il se passe,...
bref, je peux pas tout faire en 1h! ;-)


Avatar
titi
Emmanuel Delahaye wrote:


gcc -o ex2 ex2.c


On t'a pourtant indiqué comment compiler :

gcc -Wall -W[extra] -O2 -o ex2 ex2.c


Je l'ai lu après. La copie du code a été faite avant.


ex2.c: In function 'main':
ex2.c:8: warning: passing argument 1 of 'time' makes pointer from integer
without a cast


C'est pire que ça. J'ai des fonctions inconnues...
?



main.c:41: warning: return type defaults to `int'
*int* main(void)


main.c: In function `main_':
main.c:42: warning: passing arg 1 of `time' makes pointer from integer
without a cast
Bon j'ai tout compris, il préfère NULL.



main.c:43: error: implicit declaration of function `srandom'
main.c:43: warning: nested extern declaration of `srandom'
main.c:46: error: implicit declaration of function `random'
main.c:46: warning: nested extern declaration of `random'
Là je comprends pas.



Idem : fonctions inconnues.
D'où ça vient?



Que signifie "28 ou "30"?


Ce sont les valeurs retournées par ton programme. Je rappelle que main()
retourne int (type explicite obligatoire en C99) et qu'un return
explicite est obligatoire en C90, sinon, la valeur retournée est
indéterminée (28, 30, pourquoi pas...)

Voici le code correct :

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

int main (void)
{
srand((unsigned)time(NULL));
{
int rnd0 = rand();
int rnd1 = rand();
printf("rnd0:%dn"
"rnd1:%dn", rnd0, rnd1);
}
return 0;
}

rnd0:16098
rnd1:12543

Puis je suis passé aux tableaux.


Alors on écrit le tableau, puis on le relit, sinon, il ne sert à rien...


Le printf était pour debug. Le but de la fonction serait de générer le
tableau, c'est pour ça que j'ai tout mis dans la même boucle, et en plus
j'ai fait une autre boucle pour fixer la sortie (entre 1 et 100 par
exemple) mais comme ça ne marchait pas je ne l'ai pas copié (c'est pas
spécifique au C).

#define N 20
Ca je connais.


srand((unsigned)time(NULL));
Ca c'est dans man rand/srand


return 0;
Ca je connais aussi.


Pose des questions si tu ne comprends pas.
Je te remercie. Je n'ai pas trop de temps à y consacrer, donc je vais

étudier les matériaux que vous m'avez fournis, triturer un peu tout ça et
je reviendrai avec un autre code.
Merci! :-)


Avatar
titi
Emmanuel Delahaye wrote:

Voici le code correct :

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

int main (void)
{
srand((unsigned)time(NULL));
{
int rnd0 = rand();
int rnd1 = rand();
printf("rnd0:%dn"
"rnd1:%dn", rnd0, rnd1);
}
return 0;
}


gcc -Wall -O2 -o ex4-correct ex4-correct.c && ./ex4-correct
(Cette commande est mieux?)

Ok, j'arrive au même résultat sans erreurs.


Puis je suis passé aux tableaux.


Alors on écrit le tableau, puis on le relit, sinon, il ne sert à rien...

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

#define N 20

int main (void)
{
srand((unsigned)time(NULL));
{
int rnd0[N], rnd1[N] , i;

for (i = 0;i < N;i++)
{
rnd0[i] = rand();
rnd1[i] = rand();
}
for (i = 0;i < N;i++)
{
printf("%3d%8d%8dn", i, rnd0[i], rnd1[i]);
}
}
return 0;
}


gcc -Wall -O2 -o ex5-correct ex5-correct.c && ./ex5-correct

Là aussi, j'arrive au même résultat sans erreurs.


Avatar
Hamiral
titi wrote:

Hamiral wrote:

Relis la FAQ, en particulier le paragraphe 9.4

Je vais commencer par la lire (100pages!) :-)



Je m'adressais à Luc :)

--
Hamiral


Avatar
Harpo
Hamiral wrote:

(mais c'était quand même un peu rude)


Je suis peut-être un peu parano, je pensais qu'il se foutait de nos
conseils en montrant son programme qui ne marche pas.

--
http://patrick.davalan.free.fr/

Avatar
Charlie Gordon
"titi" wrote in message
news:44aaffb5$0$873$
Emmanuel Delahaye wrote:

Voici le code correct :

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

int main (void)
{
srand((unsigned)time(NULL));
{
int rnd0 = rand();
int rnd1 = rand();
printf("rnd0:%dn"
"rnd1:%dn", rnd0, rnd1);
}
return 0;
}


gcc -Wall -O2 -o ex4-correct ex4-correct.c && ./ex4-correct
(Cette commande est mieux?)

Ok, j'arrive au même résultat sans erreurs.


oui, c'est bien mieux, mais le programme sera quand meme exécuté si la
compilation ne produit que des warnings.

on peut ajouter d'autres warnings avec -W ou -Wextra suivant la version de gcc
(que l'équipe de gcc soit maudite pour avoir changé les arguments de ligne de
commande... et pour refuser de mettre ces warnings en standard, ce qui aiderait
grandement les débutants et les programmeurs chevronnés aussi.)

on peut aussi sélectionner plus finement les warnings utiles (chercher CFLAGS
dans les archives de cette liste.)

pour être sûr de ne rien rater, on peut aussi rajouter -Werror qui arrête la
compilation en cas de warnings et renvoie un code d'erreur, le shell n'executera
pas le programme dans ce cas (grâce à l'opérateur &&)

--
Chqrlie.


Avatar
listes
titi wrote:

http://docs.mandragor.org/files/Programming_languages/C/fclc_faq_fr/fclc00
14.html#q_10 >
http://docs.mandragor.org/files/Programming_languages/C/fclc_faq_fr/fclc00
14.html#q_11 >

J'ai vu ces pages après avoir posté ma question. La faq devrait m'aider.


j'ai un problème pour télécharger le PDF de cette faq. Est-ce quelqu'un
peut me donner un lien alternatif ? merci

Avatar
Emmanuel Delahaye
j'ai un problème pour télécharger le PDF de cette faq. Est-ce quelqu'un
peut me donner un lien alternatif ? merci


Tu parles de ça :

http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc.pdf

--
A+

Emmanuel Delahaye

Avatar
Emmanuel Delahaye
j'ai un problème pour télécharger le PDF de cette faq. Est-ce quelqu'un
peut me donner un lien alternatif ? merci


Tu parles de ça :

http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc.pdf


Effectivement, il n'y a plus rien sur le site de G.Rumeau.

--
A+

Emmanuel Delahaye


Avatar
listes
Emmanuel Delahaye wrote:

j'ai un problème pour télécharger le PDF de cette faq. Est-ce quelqu'un
peut me donner un lien alternatif ? merci


Tu parles de ça :

http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc.pdf


j'ai trouvé une alternative

http://vrlab.epfl.ch/~boulic/C_MicroTechnique/TP/pdf/fclc.pdf

mais je ne sais pas si c'est le même document....


1 2 3 4 5