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 :

correction d'une classe point.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut correction d'une classe point.
    Voici une classe que j'ai faite: il s'agit d'une classe "Point" dans laquelle on rentre les coordonnées d'un point P et il ressort les coordoonnées après la rotation, l'homotéthie ou un déplacement.

    dites moi ce que vous en pensez, et comment l'améliorer. merci
    merci

    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
     
    #include<iostream>
    #include<stdio.h>
    #include<math.h>
     using namespace std;
    const float Pi=3.1415;
     
     class Point{
     
      float x,y;
    public:
    	Point(float x ,float y);
    	 void affiche();
    	 void deplace(float , float );
    	 float  abscisse();
    	 float ordonnée();
    	 void homotethie(float);
    	 void rotation(float);
    	 float rho(float,float);
    	 float theta(float,float);
     
    };
     
    Point::Point(float ab,float ord){
    x=ab;
    y=ord;
    }
    void Point::rotation(float angle){
    char *c[2];
    x=cos(angle)*x-sin(angle)*y;
    y=sin(angle)*x+cos(angle)*x;
     
      float ang=theta(x,y);
      float ray=rho(x,y);
      printf("lescoordonnees polaires de p apres la rotation sont ");printf("%f et %f\n",ang,ray);
    }
    void Point::homotethie(float rap){
    x=x*rap;
    y=y*rap;
    }
     
    float   Point::theta(float x,float y){
     	if (x!=0) { return atan(y/x);}
     }
     
     float Point::rho(float x,float y){
     	return sqrt (x*x+y*y);
     }
     
     
    float Point::ordonnée(){
    return y;
    }
    float Point::abscisse(){
    return x;
    }
    void Point::deplace(float dx,float dy){
    x=x+dy;
    y=y+dx;
    }
    void main(){
    Point p(3,3);
    cout<<"les coordonnees initiales sont "<<p.abscisse()<<" et "<<p.ordonnée()<<endl;
    p.deplace(4,100);
    cout<<"les coordonnees de p apres le deplacement sont "<<p.abscisse()<<" et "<<p.ordonnée()<<endl; 
    p.homotethie(4);
    cout<<"les coordonnees de p apres l'homothetie sont "<<p.abscisse()<<" et "<<p.ordonnée()<<endl; 
    p.rotation(Pi/2);
     
    }

  2. #2
    Membre du Club
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Par défaut
    Salut !

    Il existe une constante pour PI dans math.h au lieu de déclarer une constante approximative.
    Elle s'appelle M_PI je crois

  3. #3
    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
    Salut

    Il existe une constante pour PI dans math.h au lieu de déclarer une constante approximative.
    Elle s'appelle M_PI je crois
    Sauf qu'elle n'est pas toujours définie, ce qui est un peu embêtant.

    Sinon voilà quelques remarques :

    1/ Mixer iostream et stdio.h n'est pas ce que l'on fait de mieux. Pourquoi utiliser printf en C++ ?

    2/ Ta classe ne possède pas de constructeur par défaut, ce qui me semble indispensable pour une telle classe

    3/ Les fonctions ne modifiant pas les données membres telles que affiche(), abscisse(), ordonnee(), ... devraient être const

    4/ J'ai vu un char *c[2] dans la fonction rotation qui ne servait à rien

    5/ atan2(x, y) remplacera avantageusement atan(x / y)

    6/ J'ai pas compris le rôle de rho et theta, qui n'utilisent pas les x et y du point

    7/ La fonction affiche devrait être un operateur <<. Tu devrais également définir l'opérateur >> pour la saisie

    8/ Il n'y a aucun moyen de modifier arbitrairement les coordonnées du point après sa construction ?

  4. #4
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    un grand merci a Laurent pour toutes ces informations.


    2/ Ta classe ne possède pas de constructeur par défaut, ce qui me semble indispensable pour une telle classe

    >>Pour moi, voici le constructeur par défaut. Sinon, je ne sais pas ce que c'est que le constructeur par défaut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Point::Point(float ab,float ord){
    x=ab;
    y=ord;
    }

    4/ J'ai vu un char *c[2] dans la fonction rotation qui ne servait à rien
    >>oui, a virer.


    5/ atan2(x, y) remplacera avantageusement atan(x / y)
    >>quelle est la différence?

    6/ J'ai pas compris le rôle de rho et theta, qui n'utilisent pas les x et y du point
    >>>rho et theta renvoient les coordonnées polaires.
    >>d'après moi, rho et theta utilisent bien les coordonnées du point:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     float Point::rho(float x,float y){
     	return sqrt (x*x+y*y);
     }

    3/ Les fonctions ne modifiant pas les données membres telles que affiche(), abscisse(), ordonnee(), ... devraient être const
    >>ok


    8/ Il n'y a aucun moyen de modifier arbitrairement les coordonnées du point après sa construction ?
    >>comment pourrait-on faire?

    7/ La fonction affiche devrait être un operateur <<. Tu devrais également définir l'opérateur >> pour la saisie
    >>la fonction affiche est un reste d'une premiere version de cette classe.
    elle sert à rien ici.

  5. #5
    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
    >>Pour moi, voici le constructeur par défaut. Sinon, je ne sais pas ce que c'est que le constructeur par défaut.
    Un constructeur par défaut est celui qui ne prend pas de paramètre. Actuellement tu ne peux pas déclarer un point comme ceci :
    >>quelle est la différence?
    Il existe deux angles distincts pour une arctangente donnée, donc tu as une chance sur deux d'obtenir le bon angle avec atan. Par contre en donnant le sinus et le cosinus séparément via atan2, là tu as le bon angle de manière unique. D'autant plus que ça gère pour toi le cas de la division par zéro.

    >>>rho et theta renvoient les coordonnées polaires.
    >>d'après moi, rho et theta utilisent bien les coordonnées du point:
    Ben non, ils utilisent les x et y passés en paramètre (qui servent à quoi alors ?).

    >>comment pourrait-on faire?
    Des fonctions genre setAbscisse, setOrdonnee. Ou alors placer x et y en accès publique. Cela dépend de ce que tu veux faire faire à ta classe Point.

  6. #6
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Un constructeur par défaut est celui qui ne prend pas de paramètre. Actuellement tu ne peux pas déclarer un point comme ceci :
    Point p;
    Il suffirait de mettre Point p; quelque part dans ma classe?

    Ben non, ils utilisent les x et y passés en paramètre (qui servent à quoi alors ?).
    Je suis d'accord. Il servent juste a calculer les coordonnées polaires. Et la fonction renvoie ces deux coordonnées polaires.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/03/2010, 08h16
  2. Comment créer une classe correctement
    Par oasiscreation dans le forum Langage
    Réponses: 1
    Dernier message: 15/12/2009, 23h03
  3. point d'interrogation derriere une classe
    Par Arthis dans le forum ASP.NET
    Réponses: 3
    Dernier message: 17/08/2007, 15h07
  4. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

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