IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

nombre aléatoire rand


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut nombre aléatoire rand
    Bonjour,
    Au début je souhaitait simplement générer un nombre aléatoire entre x et y j'ai donc fait une petite fonction et j'aimerais avoir quelque explications concernant ce code : (les nombres générée sont toujours les mêmes ,j'ai beau chercher je ne trouve pas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    int rand_n(void)
    {
    	int i = 0;
    	BYTE tmp[10] = {0};
     
    	while (i < 10){
    		tmp[i] = (BYTE)rand() % 9;
    		Sleep(200);
    		i++;
    	}
    	return (int)tmp;
    }
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	srand(time(NULL));
    	while (1){
    		cout << rand_n() << endl;
    		Sleep(100);
    	}
    	getchar();
    }
    J'aimerais aussi savoir pourquoi les nombre généré par rand sont seulement sur 16 bits ?

    Merci.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Tu as oublié d'utiliser srand.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int _tmain(int argc, _TCHAR* argv[])
    {
    	srand(time(NULL));
    	while (1){
    		cout << rand_n() << endl;
    		Sleep(100);
    	}
    	getchar();
    }
    srand est bien là , a chaque exécution j'ai un nombre différent mais si j’appelle plusieurs fois cette fonction pendant une même exécution, j'ai toujours la même chose je ne comprend pas et aussi autre chose que je ne comprend pas c'est lorsque j'ajoute des nombres dans mon tableau d'octet les nombres sont par exemple 5,8,7,1,5,0,5,8,5,3 et après le cast j’obtiens : 4716572

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Mea culpa, j'ai pas vu qu'on pouvait scroller le code.

    Tu convertis un pointeur (ton tableau est implicitement convertit en un pointeur sur le premier élément) en entier. Tu retournes donc l'adresse de ton tableau.

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par yohann2008 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int _tmain(int argc, _TCHAR* argv[])
    {
    	srand(time(NULL));
    	while (1){
    		cout << rand_n() << endl;
    		Sleep(100);
    	}
    	getchar();
    }
    srand est bien là , a chaque exécution j'ai un nombre différent mais si j’appelle plusieurs fois cette fonction pendant une même exécution, j'ai toujours la même chose je ne comprend pas et aussi autre chose que je ne comprend pas c'est lorsque j'ajoute des nombres dans mon tableau d'octet les nombres sont par exemple 5,8,7,1,5,0,5,8,5,3 et après le cast j’obtiens : 4716572
    srand(time(NULL)) ?

    time() ayant une précision de l'ordre de la seconde, cette fonction initialise 10 fois srand() avec la même valeur. Nécessairement, l'appel à rand qui suit va donner 10 fois de suite la même valeur.

    (et le % 9, c'est niet : ça rend plus probable l'apparition de certaines valeurs).

    Maintenant, puisqu'on est sur un forum C++, pourquoi ne pas utiliser des choses plus... C++ienne ? http://www.cplusplus.com/reference/random/
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Mea culpa, j'ai pas vu qu'on pouvait scroller le code.

    Tu convertis un pointeur (ton tableau est implicitement convertit en un pointeur sur le premier élément) en entier. Tu retournes donc l'adresse de ton tableau.
    Et comment je peut faire pour faire cette conversion ? (tableau d'octets en entier)

    Citation Envoyé par Emmanuel Deloget Voir le message
    srand(time(NULL)) ?

    time() ayant une précision de l'ordre de la seconde, cette fonction initialise 10 fois srand() avec la même valeur. Nécessairement, l'appel à rand qui suit va donner 10 fois de suite la même valeur.

    (et le % 9, c'est niet : ça rend plus probable l'apparition de certaines valeurs).

    Maintenant, puisqu'on est sur un forum C++, pourquoi ne pas utiliser des choses plus... C++ienne ? http://www.cplusplus.com/reference/random/
    mon srand n'est pas dans ma boucle.
    %9 ? pour avoir un nombre entre 0 et 9 non ?
    En faite rand me convient pour l'instant.

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Tu ne peux pas vu que le plus grand entier est (u)int64_t (= 8 octets).

    Il te faut donc regarder du côté de bibliothèques permettant de manipuler de grands nombres.
    Sinon quel est l'intérêt de transformer ton tableau de nombres aléatoires en un seul entier ?

  8. #8
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    Citation Envoyé par Neckara Voir le message
    Tu ne peux pas vu que le plus grand entier est (u)int64_t (= 8 octets).
    std::intmax_t et std::uintmax_t http://www.cplusplus.com/reference/cstdint/

    Si tu cherches à convertir dix chiffres en un seul entier, tu peux le faire (avec un petit calcul) car le plus grand nombre serait 9 999 999 999 et celui-ci passe dans un long long int (au moins de -9 223 372 036 854 775 807 à 9 223 372 036 854 775 807).

    Emmanuel Deloget te propose des choses plus «C++ienne», c'est la bonne solution puisque rand() est "à éviter".

    rand() retourne un entier entre 0 et RAND_MAX. La norme dit que RAND_MAX est d'au moins 32 767 (comme un int).

    Pour information, std::vector (ou std::array selon les besoins) est le bon type pour utiliser des tableaux en C++, tu pourras utiliser ce type comme retour de fonction.

    Pour tester rand(), teste le tout seul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    // g++ -Wall -Wextra -Wconversion -std=c++11 -pedantic -O3 -march=native -fopenmp main.cpp -o main && ./main
    // g++ -Wall -Wextra -Wconversion -pedantic main.cpp -o main && ./main
     
    #include <iostream>
    #include <random>
    #include <chrono>
    #include <cstdlib>
     
     
    int main()
    {
    	// http://www.cplusplus.com/reference/random/
    	std::cout << "Solution C++" << std::endl;
    	{
    		std::default_random_engine engine(std::chrono::system_clock::now().time_since_epoch().count());
     
    		std::uniform_int_distribution<int> distribution(0, 9);
     
    		for (int i = 0; i < 5; ++i)
    		{
    			std::cout << distribution(engine) << std::endl;
    		}
    	}
    	std::cout << std::endl;
     
    	std::cout << "Solution C" << std::endl;
    	{
    		srand((unsigned int)(time(0)));
     
    		for (int i = 0; i < 5; ++i)
    		{
    			std::cout << rand() << std::endl;
    		}
    	}
    	std::cout << std::endl;
     
    	return 0;
    }

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Et pourquoi ne pas faire un seul random ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Avec rand() ? Peut être à cause de la limite de RAND_MAX (selon la distribution voulue) (c'est une supposition).

  11. #11
    Invité
    Invité(e)
    Par défaut
    En faite merci pour cette référence (<random>) mais ça fait encore un include a rajouter (edit: en plus comme je compte utiliser openssl je pense que je n'en aurais pas besoin), je voudrais savoir comment convertir un tableau de byte en int ? et je voudrais aussi savoir pourquoi rand est limité a RAND_MAX ?

  12. #12
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Est-ce que ton tableau de byte représente un nombre en base 10 ou un nombre en base 256 ?

    Dans le premier cas, il suffit de parcourir ton tableau de byte et de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nombre *= 10;
    nombre += chiffre;
    Dans le second cas, je maintient ce que j'ai dit, le plus grand entier standard est sur 64 bits (uint128_t n'existant pas), il te faut donc passer par une bibliothèque permettant de manipuler les très grand nombres ou de créer ton propre type entier qui sera implémenté par une structure.

  13. #13
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par Neckara Voir le message
    le plus grand entier standard est sur 64 bits
    Plus exactement, est au moins sur 64 bits. int64_t est optionnel.

  14. #14
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Plus exactement, est au moins sur 64 bits. int64_t est optionnel.
    Je ne suis pas d'accord.

    Certes la norme garantit des tailles minimales et qu'on peut éventuellement avoir des entiers de plus de 8 octets sur des architectures spécifiques.
    Mais ce n'est pas parce qu'une machine spécifique a un entier sur 16 octets que les autres machines en auront un aussi.

    C'est bien pour cela qu'on a inventé les (u)intXX_t, pour "garantir" une taille "fixe" et ainsi rendre le code plus portable.
    Il serait ridicule d'avoir un bout de code (hors embarqué) qui fonctionne sur une architecture spécifique d'ordinateur et pas sur une autre parce que sur l'un les long long int sont sur 10 octets.

    Après même si l'architecture ne gère pas les nombres sur 64 bits, on peut toujours implémenter des uint64_t et à part dans l'embarqué sur des µProcesseurs 8/16bits, on ne retrouve pas des uint64_t mais je ne pense pas qu'on en soit là.

    Actuellement sur nos ordinateurs, on a pas de uint128_t, donc le plus grand entier est bien uint64_t.
    On a aussi des uint_fast64_t qui peuvent être plus grand que 64 bits, mais il ne faut surtout pas l'utiliser dans l'intention de stocker des nombres sur 72 bits par exemple, on a même pas à savoir qu'il est plus grand que 64 bits, juste qu'il peut être plus grand que 64 bits.

  15. #15
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Je ne suis pas d'accord.
    Avec laquelle de ces affirmations n'es-tu pas d'accord (pour moi elles sont toutes vraies) ?

    1/ Le plus grand entier standard est intmax_t et fait au moins 64 bits.

    2/ int64_t n'est pas garanti exister.

    3/ Il n'y a aucun type a taille fixe garanti exister.

    4/ Les implémentations qui n'ont pas de int64_t sont rares au point d’être anecdotiques et ont vraisemblablement d'autres caractéristiques peu communes, l'ensemble faisant que considerer la portabilite vers ces implementations sans en disposer d'une pour tester est un exercice probablement futile.

    5/ Les implementations qui ont un int64_t mais pour lesquelles intmax_t n'est pas int64_t sont possibles, elles ont des chances d'etre plus pertinentes que celle du point 4 mais je n'en connais pas (gcc a un __int128_t mais son intmax_t a 64 bits, je trouve ca bizarre et mais je suppose que c'est du a la difficulte de definir PRIxMAX en particulier pour gcc qui n'est pas lie a la libc).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  16. #16
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par Neckara Voir le message
    on peut toujours implémenter des uint64_t
    Même si cela est aussi "anecdotique", implémenter uint64_t sur une machine qui a un CHAR_BIT qui ne divise pas 64 me paraît compliqué (?)

  17. #17
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Même si cela est aussi "anecdotique", implémenter uint64_t sur une machine qui a un CHAR_BIT qui ne divise pas 64 me paraît compliqué (?)
    Pas tant que ca. Il suffit d'utiliser un type nonsigne plus grand puis de masquer tous les resultats. (J'avais oublie que intN_t ne peut pas avoir de bits de padding)
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  18. #18
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Sauf que la taille n'est plus la même. A mon avis, si tu veux un int64_t, tu veux 64 bits, ni plus (ni moins).
    Il n'y a pas très longtemps, quelqu'un sur le forum voulait une structure qui faisait exactement la même taille qu'une autre (déjà définie).

  19. #19
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Sauf que la taille n'est plus la même. A mon avis, si tu veux un int64_t, tu veux 64 bits, ni plus (ni moins).
    Il n'y a pas très longtemps, quelqu'un sur le forum voulait une structure qui faisait exactement la même taille qu'une autre (déjà définie).
    J'avais oublie que intN_t n'autorise pas les bits de paddings.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  20. #20
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Avec laquelle de ces affirmations n'es-tu pas d'accord (pour moi elles sont toutes vraies) ?

    1/ Le plus grand entier standard est intmax_t et fait au moins 64 bits.

    2/ int64_t n'est pas garanti exister.

    3/ Il n'y a aucun type a taille fixe garanti exister.

    4/ Les implémentations qui n'ont pas de int64_t sont rares au point d’être anecdotiques et ont vraisemblablement d'autres caractéristiques peu communes, l'ensemble faisant que considerer la portabilite vers ces implementations sans en disposer d'une pour tester est un exercice probablement futile.

    5/ Les implementations qui ont un int64_t mais pour lesquelles intmax_t n'est pas int64_t sont possibles, elles ont des chances d'etre plus pertinentes que celle du point 4 mais je n'en connais pas (gcc a un __int128_t mais son intmax_t a 64 bits, je trouve ca bizarre et mais je suppose que c'est du a la difficulte de definir PRIxMAX en particulier pour gcc qui n'est pas lie a la libc).
    En tant que développeur, on a pas à savoir qu'un uint_fastXX_t est plus grand qu'un uintXX_t sur notre machine, juste qu'il peut être plus grand.
    Donc en tant que développeur et sur les machines actuelles, l'entier le plus grand est uint64_t.

    N'oublions pas aussi que si sur un parc de machines on a :
    • pas de uint128_t sur 5% d'entre elles ;
    • un uint128_t sur 95% d'entre elles.


    Quel est l'entier le plus grand pour nous, développeur ? uint128_t ? Donc notre application ne pourra tourner que sur 5% des machines de notre parc ?

    Même raisonnement si on a un uint_fastXX_t plus grand qu'un uintXX_t sur 60% des machines.

    Si on commence à dire unsigned long long fait 10 octets sur ma machine donc je peux l'utiliser, que va-t-il se passer sur les archi où il faut que 8 octets ?

Discussions similaires

  1. défaut des fonctions de génération de nombres aléatoire type rand()
    Par Christophe30 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 17/02/2008, 20h21
  2. Réponses: 13
    Dernier message: 08/12/2006, 10h31
  3. Nombre aléatoire rand()
    Par kissmytoe dans le forum C
    Réponses: 9
    Dernier message: 03/11/2006, 20h42
  4. Nombre aléatoire en SQL
    Par sqlnet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/08/2003, 12h38
  5. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo