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 :

Débutant en C++ a besoin d'aide por son code


Sujet :

C++

  1. #1
    Paulinho
    Invité(e)
    Par défaut Débutant en C++ a besoin d'aide por son code
    Je besoin d'aide pour finir mon code. Le problème c'est le suivant: lors de la compilation, il m'est dit que 'Quadrilatero' (Quadrilatère) n'a pas un membre appelé 'Ponto' (Point). Il m'empeche d'éxécuter le programme que doit sortir ça: 'O perímetro deste quadrilátero é 4. Os pontos deste quadrilátero são: (0,0), (1,0), (1,1), (0,1)'. Les pairs doivent sortir comme ça, sans croisements quand on fait un chemin entre eux.
    Voici mon code presque fini:

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    #include <iostream>
    #include <cmath>
     
    using namespace std;
     
    class Par {
    private:
      double left;
      double right;
    public:
     
      Par() { left = 0; right = 0; }
     
      Par(double l, double r)
      { left = l; right = r; }
     
      virtual void set_left(double n) { left = n; }
      virtual void set_right(double n) { right = n; }
      virtual void set_pair(double n, double m) { set_left(n); set_right(m); }
     
      virtual double get_left() const { return left; }
      virtual double get_right() const { return right; }
     
      virtual void print() {
      cout << " ( " << get_left() << " , " << get_right() << " ) " << endl;	
      }
      };
     
    class Ponto : public Par {
     
    public:
     
      Ponto() : Par() {};
      Ponto(double x, double y) : Par(x,y) {};
     
      virtual double distance(Ponto p) 
      {
        return sqrt(((get_left() - p.get_left()) * (get_left() - p.get_left())) + 
    		((get_right() - p.get_right()) * (get_right() - p.get_right())));
      }
     };
     
    class Poligono {
    private:
      int num_points;
    protected:
      Ponto p[100];
    public:
      Poligono() { num_points = 0; }
      Poligono(int n)
      { 
        num_points = n;
      }
     
      virtual double Perimeter() 
      {
        int i;
        double pm;
        for (i=0,pm=0; i<num_points-1; i=i+1)
          pm = pm + p[i].distance(p[i+1]);
        pm = pm + p[num_points-1].distance(p[0]);
        return pm;
      }
      };
     
    class Quadrilatero : public Poligono {
    private: 
    public:
      Quadrilatero(): Poligono(4) {};
      Quadrilatero(Ponto a, Ponto b, Ponto c, Ponto d): Poligono(4)
      {
        p[0] = a;
        p[1] = b;
        p[2] = d;
        p[3] = c;
      }
    };
     
    int main()
    { Ponto a(0,0);  Ponto b(1,0);  Ponto c(0,1);  Ponto d(1,1);
      Quadrilatero q(a,b,c,d);
      cout << " O perímetro deste quadrilátero é " << q.Perimeter() << "." << endl;
      cout << " Os pontos deste quadrilátero são: " << endl;
      Ponto x;
      x=q.Ponto(1);
      x.print();
      x=q.Ponto(2);
      x.print();
      x=q.Ponto(3);
      x.print();
      x=q.Ponto(4);
      x.print();
    }
    Merci d'avance et bonne journée a tous!

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut


    Le problème c'est le suivant: lors de la compilation, il m'est dit que 'Quadrilatero' (Quadrilatère) n'a pas un membre appelé 'Ponto' (Point)
    Eh bien c'est le cas non ?

  3. #3
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    Bonjour,

    C'est ici que ça coince:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    x=q.Ponto(1); 
    x.print(); 
    x=q.Ponto(2); 
    x.print(); 
    x=q.Ponto(3); 
    x.print(); 
    x=q.Ponto(4); 
    x.print();
    Ponto est une classe, que veux tu faire ici exactement ? C'est p[1] que tu veux assigner à x ? Car si c'est ça, p doit passer dans la section public.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 34
    Par défaut
    Le problème c'est le suivant: lors de la compilation, il m'est dit que 'Quadrilatero' (Quadrilatère) n'a pas un membre appelé 'Ponto' (Point).
    Ben oui, Ponto est une classe, pas un champ... Si tu veux avoir accès aux différents points, tu devrais plutôt avoir un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    x=q.p[0]; 
    x.print(); 
    x=q.p[1]; 
    x.print();
    ...
    Je dit bien du genre, car p[i] est protégé (normal), donc rajoute à ta classe Poligono une méthode publique qui renvoie un Ponto, de façon à avoir quelque chose du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x=q.get_p(0);
    ...

  5. #5
    Paulinho
    Invité(e)
    Par défaut
    Le problème est le suivant: je ne peut pas modifier l'instruction main (c'est un exercice) et je ne comprend pas comme déclarer x e q dans la classe Poligono. Qulequ'un a une idée?

    Merci pour vos sugestions![/url]

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 34
    Par défaut
    Le problème est le suivant: je ne peut pas modifier l'instruction main (c'est un exercice) et je ne comprend pas comme déclarer x e q dans la classe Poligono. Qulequ'un a une idée?
    Dans ce cas, la méthode qui renvoie un Ponto, il suffit de l'appeler "Ponto()":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Poligono { 
    private: 
    int num_points; 
    protected: 
    Ponto p[100]; 
    public: 
    Ponto Ponto(short i)     // Méthode qui renvoie un point
    {
    	return(p[i-1]);
    }
    Poligono() { num_points = 0; } 
    ...
    Bien que ça fonctionne de cette manière, cette solution ne me plait vraiment pas, car tu donnes à une méthode le même nom qu'une classe qui n'a rien a voir, les risques de confusion sont très importants...

  7. #7
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    L'exercice me semble alors très mal formulé!

    Tu as l'énoncé ? Parce que là je ne vois pas de solution propre.

  8. #8
    Paulinho
    Invité(e)
    Par défaut L'énoncé du exercice
    Fait en C++ la classe Quadrilatero, des quadrilatères, en s'appuyant dans une représentation avec quatre points. La répr´´esentation interne doit assurer que le quadrilatére est réprésenté sans croisements.
    Par exemple, le résultat du suivant programme main:

    int main()
    { Ponto a(0,0); Ponto b(1,0); Ponto c(0,1); Ponto d(1,1);
    Quadrilatero q(a,b,c,d);
    cout << " O perímetro deste quadrilátero é " << q.Perimeter() << "." << endl;
    cout << " Os pontos deste quadrilátero são: " << endl;
    Ponto x;
    x=q.Ponto(1);
    x.print();
    x=q.Ponto(2);
    x.print();
    x=q.Ponto(3);
    x.print();
    x=q.Ponto(4);
    x.print();
    }

    doit être

    O perímetro deste quadrilátero é 4.
    Os pontos deste quadrilátero são:
    (0,0)
    (1,0)
    (1,1)
    (0,1)

    (L'ordre des points peut être toute la combinaison resultant dans un chemin sans croisements.)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 34
    Par défaut
    Concernant ton problème de "Ponto" dans le main, j'ai déjà répondu plus haut, tu n'as qu'à recopier la méthode telle que je la donne.

    Pour ce qui est de la gestion des croisements, c'est plus un problème d'algo que de C++, il vaut mieux dans ce cas aller sur le forum algo

  10. #10
    Paulinho
    Invité(e)
    Par défaut Il est résolu!
    Merci a tous por votre aide et tout specialement pour programan qui a découvert le moyen de faire sortir les valeurs des points. Merci à toi!!
    J'envoye le code complet. Quant à l'algo il était simple.


    Résolu:

    #include <iostream>
    #include <cmath>

    using namespace std;

    class Par {
    private:
    double left;
    double right;
    public:

    Par() { left = 0; right = 0; }

    Par(double l, double r)
    { left = l; right = r; }

    virtual void set_left(double n) { left = n; }
    virtual void set_right(double n) { right = n; }
    virtual void set_pair(double n, double m) { set_left(n); set_right(m); }

    virtual double get_left() const { return left; }
    virtual double get_right() const { return right; }

    virtual void print() const {
    cout << " ( " << get_left() << " , " << get_right() << " ) " << endl;
    }
    };

    class Ponto : public Par {

    public:

    Ponto() : Par() {};
    Ponto(double x, double y) : Par(x,y) {};

    virtual double distance(Ponto p)
    {
    return sqrt(((get_left() - p.get_left()) * (get_left() - p.get_left())) +
    ((get_right() - p.get_right()) * (get_right() - p.get_right())));
    }
    };

    class Poligono {
    private:
    int num_points;
    protected:
    Ponto p[100];
    public:
    Ponto ponto(short i)
    {
    return(p[i-1]);
    }

    Poligono() { num_points = 0; }
    Poligono(int n)
    {
    num_points = n;
    }

    virtual double Perimeter()
    {
    int i;
    double pm;
    for (i=0,pm=0; i<num_points-1; i=i+1)
    pm = pm + p[i].distance(p[i+1]);
    pm = pm + p[num_points-1].distance(p[0]);
    return pm;
    }
    };

    class Quadrilatero : public Poligono {
    private:
    public:
    Quadrilatero(): Poligono(4) {};
    Quadrilatero(Ponto a, Ponto b, Ponto c, Ponto d): Poligono(4)
    {
    p[0] = a;
    p[1] = a;
    p[1].set_left(a.get_left()+1);
    p[1].set_right(a.get_right());
    p[2] = a;
    p[2].set_left(a.get_left()+1);
    p[2].set_right(a.get_right()+1);
    p[3] = a;
    p[3].set_left(a.get_left());
    p[3].set_right(a.get_right()+1);
    }
    };

    int main()
    { Ponto a(0,0); Ponto b(1,0); Ponto c(0,1); Ponto d(1,1);
    Quadrilatero q(a,b,c,d);
    cout << " O perímetro deste quadrilátero é " << q.Perimeter() << "." << endl;
    cout << " Os pontos deste quadrilátero são: " << endl;
    Ponto x;
    x=q.ponto(1);
    x.print();
    x=q.ponto(2);
    x.print();
    x=q.ponto(3);
    x.print();
    x=q.ponto(4);
    x.print();
    }

Discussions similaires

  1. Désactiver molette de la souris : besoin d'aide sur le code
    Par fanico11 dans le forum VBA Access
    Réponses: 3
    Dernier message: 13/05/2008, 17h53
  2. [FTP] besoin d'aide pour source code
    Par planete-venus dans le forum Langage
    Réponses: 1
    Dernier message: 02/06/2007, 15h01
  3. Réponses: 2
    Dernier message: 09/06/2006, 14h38
  4. [JpGraph] Besoin d'aide pour son installation
    Par kcizth dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 30/01/2006, 11h05
  5. besoin d'aide avec un code assez bizarre !
    Par Amokrane dans le forum C
    Réponses: 10
    Dernier message: 01/01/2006, 21h51

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