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 :

ordonner une liste chaînée


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 8
    Par défaut ordonner une liste chaînée
    Bonjour,
    Je cherche a créer une fonction qui renvoie un liste des trois premiers points ordonnées d'une autre liste de telle sorte que le triangle soit direct.
    Je ne sais pas comment faire pour récupérer les points de la liste afin de pouvoir utiliser mes fonctions de calcul du produit et vectoriel et de permutation dans la fonction triangle.

    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
     
    class point{
    	private:
    		int x,y;
     
    	public:
    		point();
    		point (int, int);
    };
     
     
    class maillon
    {
    private:
           point val;               // Le point dans le maillon.
           maillon * suiv;         // L'adresse du suivant.
           maillon * prec;         // L'adresse du precedent.
     
     
    public:
           // CONSTRUCTEUR
           maillon(point &);
           maillon(point &, maillon*, maillon*);
    };
     
     
    class list
    {
      private :
    		maillon * tete ;
    		maillon * queu ;
                    int nb_maillons ;   // Nombre de maillons de la liste.
     public: 
    ...
    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
     
    list list::triangle(const list & source)
    {
    	tete = queu = NULL;
    	nb_maillons = 0;
     
    	maillon * lecteur = source.tete;
     
    	for (int i=0; i<3; i++)
    	{
    		inserer_fin(lecteur->val);
    		lecteur = lecteur->suiv;
    	}
     
    }
     
    //calcul la composante z du prod vectoriel
    float prod_vect(point a, point b, point c){
    	float z=0;
    	point ab, bc;
    	ab.x=b.x-a.x;
            ab.y=b.y-a.y;
            bc.x=c.x-b.x;
            bc.y=c.y-b.y;
    	z=ab.x*bc.y-ab.y*bc.x;
    	return z;
    }
     
    void list::permutation(point *a, point *b)
    {
     point*tmp;
     tmp = *a;
     *a = *b;
     *b = tmp;
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Ta class point est curieuse, on peut y mettre des coordonnées mais jamais les lire, je suppose qu'il manque des morceaux.
    Ta fonction list::triangle() doit donc créer (ou initialiser?) une list de trois point à partir de source. L'opérateur de copie des list ne semble pas exister, il faut définir pour que la fonction puisse retourner une list. Maintenant, il faut commencer par créer une list dans ta fonction pour y mettre les point trouvés à moins que la fonction ne soit pas static.
    Voilà un code exemple
    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
    list list::triangle(const list &source) {
    	list  liste; // la liste qui sera retournée
    	maillon*  lecteur = source.tete;
    	point  les3Points[3];
     
    	for (int i=0 ; i<3 ; i++) {
    		if ( !lecteur ) throw std::runtime_error("source n'a pas assez de points");
    		les3Points[i] = lecteur->val;
    		lecteur = lecteur->suiv; // interdit car private à maillon, à moins 
    		// qu'il ne manque aussi du code
    	}
     
    	float z = prod_vect( les3Points[0], les3Points[1], les3Points[2] );
    	// points a remettre dans l'ordre
     
    	for (int i=0 ; i<3 ; i++) {
    		liste.inserer_fin( les3Points[i] );
    	}
    	*this = liste; // si la fonction n'est pas static il faut peut-être cette ligne
     	return liste;
    }

Discussions similaires

  1. [Turbo Pascal] Fusion de deux listes chaînées ordonnées
    Par attilaz dans le forum Turbo Pascal
    Réponses: 0
    Dernier message: 15/05/2012, 22h27
  2. Liste chaînée
    Par kilinette dans le forum C
    Réponses: 6
    Dernier message: 17/10/2005, 23h45
  3. Listes chaînées circulaires
    Par gege2061 dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 11/05/2005, 13h44
  4. Construction de liste chaînées
    Par fomblardo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 15/03/2005, 21h19
  5. Insertion d'un noeud dans une liste chaînée
    Par habib106 dans le forum Assembleur
    Réponses: 8
    Dernier message: 07/04/2004, 22h34

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