1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2010
    Messages : 105
    Points : 133
    Points
    133

    Par défaut Traduction des structures d'un algorithme vers le C

    bonsoir,
    j'ai trouvé cette déclaration en c dans la correction d'un exercice et je crois quelle est fausse car à mon avis, il manque le mot struct dans typedef Cellule* Liste;

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct Cellule
    {
    struct Tache info;
    struct Cellule* suivant;
    };
    typedef Cellule* Liste;

    qu'est ce que vous en pensez ?


    ------
    pour la deusiéme question, je cherche la traduction en c de cette structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Type a1 = ^ Noeud
     
    Type Noeud = Enregistrement
    x1 : chaine
    x2: a1
    fin enregistrement
    merci

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    26 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 26 562
    Points : 38 544
    Points
    38 544

    Par défaut

    C'est bel et bien faux en C pour la raison que tu dis (mais en C++, ça compilerait).
    Deux plus, cacher un pointeur derrière un typedef est une pratique très controversée sur ce forum, et dans le cas des listes chaînées, je suis d'accord avec le forum: Ça crée plus de problèmes que ça en résout.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2010
    Messages : 105
    Points : 133
    Points
    133

    Par défaut

    Citation Envoyé par Médinoc Voir le message
    C'est bel et bien faux en C pour la raison que tu dis (mais en C++, ça compilerait).
    Deux plus, cacher un pointeur derrière un typedef est une pratique très controversée sur ce forum, et dans le cas des listes chaînées, je suis d'accord avec le forum: Ça crée plus de problèmes que ça en résout.
    merci j'ai compris et je vais pas chercher à savoir pk ça compile en c++,


    pour la traduction de l'algo, comment on peut le faire en c
    merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 2 196
    Points : 4 872
    Points
    4 872

    Par défaut

    Citation Envoyé par je viens du sud Voir le message
    pour la traduction de l'algo, comment on peut le faire en c
    merci
    Tu ne peux pas le faire simplement

    En Pascal/ Delphi, le chapeau c'est la notion de pointeur.
    Donc Nœud est une structure qui contient un pointeur sur une structure Nœud. C'est un maillon de liste chainée, comment ton type Cellule.

    Là où ça coince , c'est le type chaine (qui ne doit pas être un type natif): un pointeur ? un tableau fixe ? un type connu comme ceux de Windows LPSTR/ LPWSTR ? Et d'ailleurs ANSI/ UTF-8/ UTF-16 ?

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2010
    Messages : 105
    Points : 133
    Points
    133

    Par défaut

    pour le a1 est ce que j'ecris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef struct Noeud * a1;
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef  struct Noeud a1;
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct Noeud
    {
     
     
    } a1;

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    26 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 26 562
    Points : 38 544
    Points
    38 544

    Par défaut

    Pour commencer, tu cherches à déclarer une variable (locale ou globale?) ou un nouveau type?

    Pour déclarer une variable qui soit un pointeur vers le premier nœud de la liste, il faut un truc du genre:
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2010
    Messages : 105
    Points : 133
    Points
    133

    Par défaut

    Citation Envoyé par Médinoc Voir le message
    Pour commencer, tu cherches à déclarer une variable (locale ou globale?) ou un nouveau type?
    moi je cherche à traduire cette ecriture


  8. #8
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 2 196
    Points : 4 872
    Points
    4 872

    Par défaut

    typedef struct Noeud* a1;

  9. #9
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    5 029
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 5 029
    Points : 16 841
    Points
    16 841

    Par défaut

    Puisque tu sembles vouloir apprendre le C, il faut que tu vérifies que tu as bien compris.

    Tu nous as proposé ceci:
    1. typedef struct Noeud * a1;
    2. typedef struct Noeud a1;
    3. struct Noeud { ... } a1;

    D'après toi, que font ces trois instructions?

    Que signifient typedef, struct et * (dans ce cas précis)?

    Question subsidiaire, qu'est-ce qu'un type incomplet?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2010
    Messages : 105
    Points : 133
    Points
    133

    Par défaut

    Citation Envoyé par ternel Voir le message
    Puisque tu sembles vouloir apprendre le C, il faut que tu vérifies que tu as bien compris.

    Tu nous as proposé ceci:
    1. typedef struct Noeud * a1;
    2. typedef struct Noeud a1;
    3. struct Noeud { ... } a1;

    D'après toi, que font ces trois instructions?

    Que signifient typedef, struct et * (dans ce cas précis)?

    Question subsidiaire, qu'est-ce qu'un type incomplet?
    d'aprés ce que j'ai compris des doc,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct Noeud * a1;
    signifie que a1 est un type qui est struct Noeud *

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct Noeud a1;
    sig que a1 est un type et ce a1 = struct Noeud

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct Noeud { ... } a1;
    j'ai pas ça définition mais je peux la deviner


    un pointeur

    c'est a dire
    type
    comme on fait en PASCAL

  11. #11
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    5 029
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 5 029
    Points : 16 841
    Points
    16 841

    Par défaut

    Pas mal du tout.
    les trois instructions sont:
    1. définition d'un alias de type a1 représentant struct Noeud *
    2. définition d'un alias de type a1 représentant struct Noeud
    3. définition d'une variable a1 du type struct Noeud


    Le mot-clé typedef transforme ce qui serait une définition de variable en définition d'un alias de type, c'est à dire la création d'un synonyme pour un type.
    Le mot-clé struct permet la déclaration ou la définition d'un type composite.


    Concernant les types incomplets.
    Un type incomplet est un type déclaré mais non défini.
    Ca peut être le fruit d'une instruction comme struct bidule; (sans accolades), qui déclare que le type struct bidule est défini quelque part dans le programme.
    Ca peut aussi être le type trouvé dans un typedef struct bidule bidule; définit bidule comme le même type que struct bidule. Si celui-ci est incomplet, l'alias l'est aussi.

    Un type incomplet peut être suffisant pour déclarer un pointeur de ce type, ou une fonction en utilisant.
    C'est ce que fait stdio.h pour le type FILE.
    la bibliothèque standard contient bien la définition complete de FILE, mais elle n'est pas fournit.

    L'avantage de ce mécanisme, c'est qu'utilisé judicieusement, il permet de réduire le nombre de fichier à inclure dans un en-tête (un fichier .h), réduisant les temps de compilations, et les dépendances entre les modules d'un programme.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    26 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 26 562
    Points : 38 544
    Points
    38 544

    Par défaut

    Désolé de ne pas avoir compris directement ce que tu voulais faire, je n'arrivais pas à concevoir qu'on puisse vouloir nommer un type "a1".
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2010
    Messages : 105
    Points : 133
    Points
    133

    Par défaut

    Citation Envoyé par ternel Voir le message
    Pas mal du tout.

    1. définition d'un alias de type a1 représentant struct Noeud
    2. définition d'une variable a1 du type struct Noeud
    .
    donc si j'ai bien compris,

    declaration1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct Noeud
    {
     //...
    } a1;
    est différent de

    declaration2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef  struct Noeud a1;
    c'est a dire a1 dans declaration 1 est une variable qui peut etre une variable globale si elle dans un fichier .h, alors que a1 dans déclaration 2 est un alias qui avec le quel on peut déclarer des variables

    je reviens à la declaration1, si j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct Noeud
    {
    ......
    } Noeud;
    alors je peut dire que Noeud en gras est une variable ?

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2010
    Messages : 105
    Points : 133
    Points
    133

    Par défaut

    Citation Envoyé par Médinoc Voir le message
    Désolé de ne pas avoir compris directement ce que tu voulais faire, je n'arrivais pas à concevoir qu'on puisse vouloir nommer un type "a1".

    dsl c'est un nom que j'ai choisit moi même

  15. #15
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 2 196
    Points : 4 872
    Points
    4 872

    Par défaut

    Citation Envoyé par je viens du sud Voir le message
    alors je peut dire que Noeud en gras est une variable ?
    Il y a un truc qui s'appelle compilateur/ IDE qui permet de tester ceci


    Et tu as une 4ième forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct s_Noeud {
    //  ...
     
        struct s_Noeud* suivant;
    } Noeud;
    Le nom de la structure est facultatif.

  16. #16
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 927
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 5 927
    Points : 16 384
    Points
    16 384
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par je viens du sud Voir le message
    donc si j'ai bien compris,

    declaration1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct Noeud
    {
     //...
    } a1;
    est différent de

    declaration2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef  struct Noeud a1;
    c'est a dire a1 dans declaration 1 est une variable qui peut etre une variable globale si elle dans un fichier .h, alors que a1 dans déclaration 2 est un alias qui avec le quel on peut déclarer des variables
    Bonjour


    C'est exactement ça. C'est d'ailleurs la raison pour laquelle un consensus demande de rajouter le préfixe "t_" aux types que l'on crée et le préfixe "s_" aux structures que l'on crée. Pour justement ne pas les confondre avec des variables. Et quand on crée un type, on n'a alors plus besoin de donner un nom à la structure (*)...
    declaration1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    struct s_noeud {
     //...
    } a1;
    declaration2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef struct /* s_noeud (inutile !!!) */ {...} t_noeud;
    t_noeud a1;
    (*) sauf si le nom doit être réutilisé avant d'avoir créé le type

    declaration3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct s_noeud /* obligatoire... */ {
        int val;
        struct s_noeud *next;  // ... parce que doit être connu ici alors que le type "t_noeud" n'existe pas encore...
    } t_noeud;
    t_noeud a1;         // ou bien "struct s_noeud a1" mais bon, puisque maintenant le type "t_noeud" existe...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  17. #17
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 2 196
    Points : 4 872
    Points
    4 872

    Par défaut

    Citation Envoyé par je viens du sud Voir le message
    alors je peut dire que Noeud en gras est une variable ?
    Pour répondre un peu mieux à ta question ... mais sans vérifier avec un compilateur.

    Je ne pense pas que tu puisses en C, implémenter une structure dans un bloc. Et quand bien même, cette structure aurait alors une portée locale. Quelle est l'utilité de la manœuvre

    Et donc, si tu l'implémentes cette structure en global, la variable ainsi créée, serait une variable globale

  18. #18
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2010
    Messages : 105
    Points : 133
    Points
    133

    Par défaut

    bonsoir,

    j'ai un problème avec un essaye que j'ai fais avec les structures:
    si, je fais cette declaration, je comprends pas pourquoi


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct noeud2
    {
      int a;
      struct noeud2* b;
    };
    
    int main()
    {
      struct noeud2 monSD;  
      monSD.a = 5; // ca marche
      (monSD.b)->a=6; // ca marche pas
    }
    monSD.a = 5; // ca marche
    (monSD.b)->a=6; // ca marche pas

  19. #19
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 2 196
    Points : 4 872
    Points
    4 872

    Par défaut

    C'est normal : déjà que tu as du mal avec les typedef, mais là tu passes aux pointeurs

    Ici, ton pointeur n'est pas initialisé Parce que tu croyais qu'en créant un nœud, il allait se mettre automatiquement dans une liste chaînée

  20. #20
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2010
    Messages : 105
    Points : 133
    Points
    133

    Par défaut

    Citation Envoyé par foetus Voir le message
    C'est normal : déjà que tu as du mal avec les typedef, mais là tu passes aux pointeurs
    je vais passer à énormément de choses que ce topic restera ouvert durant un ans sans être marqué résolu

    Citation Envoyé par foetus Voir le message
    Ici, ton pointeur n'est pas initialisé Parce que tu croyais qu'en créant un nœud, il allait se mettre automatiquement dans une liste chaînée
    peut tu me donner plus de détail ? je suis novice en C et je cherche à comprendre

Discussions similaires

  1. [MLD] Traduction des contraintes Merise/2 vers le MLD
    Par phdevp49 dans le forum Schéma
    Réponses: 2
    Dernier message: 21/03/2013, 16h35
  2. [Lex/Yacc] Aide traduction des structures de contrôle
    Par pelo68 dans le forum Générateurs de compilateur
    Réponses: 2
    Dernier message: 07/12/2010, 11h26
  3. Réponses: 2
    Dernier message: 30/12/2007, 13h52
  4. Traduction des Union C/C++ vers Delphi (usage DLL)
    Par Crafton dans le forum Langage
    Réponses: 6
    Dernier message: 22/02/2006, 09h56
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Général Algorithmique
    Réponses: 6
    Dernier message: 19/05/2002, 23h18

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