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 :

[debutant] transformations polaires-rectangulaires


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut [debutant] transformations polaires-rectangulaires
    Bonjour à tous,

    Petite nouvelle en C++ (iut oblige ), j'essaye d'avancer un peu mes tps à l'avance, histoire de ne pas trop ramer... Mais la je bloque totalement en fait.

    L'enonce :
    transformation rectangulaires-polaires ou polaires-rectangulaires
    realiser un programme qui :
    (1)demande a l'utilisateur (par l'intermediaire d'un menu) s'il souhaite faire une transformation « polaire-rectangulaire » ou bien « rectangulaire-polaire ».
    (2)qui demande les deux variables a l'utilisateur effectue le calcul correspondant
    Deja, je ne comprends pas ce que je dois transformer ^^"

    Sinon une autre petite question, a vos yeux, il est preferable de mettre un cout "endl" apres une saisie de donnée ou dans la phrase qui va suivre d'integrer un "\n" ?

    J'ai tendance a preferer la deuxieme solution car c'est plus rapide, mais est-ce aussi lisible

    Merci d'avance de lire ceci

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Points : 444
    Points
    444
    Par défaut
    Salut,

    Je pense qu'il s'agit des coordonnées d'un point, ou de figures géométriques (mais bon une fois fait pour un point la généralisation aux figures se fait rapidement).

    Pour les sauts de lignes, il vaut mieux utiliser std::endl, c'est standard. De plus la saisie d'une entrée demande une validation via Entrée, donc le retour à la ligne pour l'affichage suivant est automatique.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci pour la reponse

    Je vais voir les coordonnees de point alors ^^

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    regarde http://fr.wikipedia.org/wiki/Coordonn%C3%A9es_polaires
    ton exo doit etre un conversion polaire cartésien et inversement

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Il y a une différence entre \n et endl : Le premier ne vide pas forcément le tampon d'écriture du flux, le second si. La plupart du temps, ça importe peu.

    Donc \n est potentiellement plus rapide, et avec endl on est sur que la donnée est envoyée.

    Les seuls cas où je fais attention, c'est dans un fichier de log : J'ai envie de mettre le plus de chances de mon côté qu'en cas de plantage, le log indique bien tout ce qu'il avait à écrire, et donc je fais attention à utiliser endl.

    Pour quelqu'un qui débute, je dirais que c'est kif-kif.

    En terme de lisibilité, j'ai tendance à utiliser endl quand j'ai une seule ligne à écrire, et \n quand j'en écris plusieurs d'un coup.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci de vos réponses

    J'ai donc avancé un peu mais je trouve vraiment que c'est mal fichu ^^
    int main()
    { int choix;
    float x,y,r,o;
    cout << "Effectuer la tranformation de votre choix :\n\n";
    cout << "1 / Polaire -> Rectangulaire\n";
    cout << "2 / Rectangulaire -> Polaire\n\n";
    cout << "Votre choix : ";
    cin >> choix;
    switch(choix)
    { case 1 : cout << "\nEntrer les coordonnees polaires du point :\n";
    cout << "r = ";
    cin >> r;
    cout << "teta = ";
    cin >> o;
    x=r*cos(o);
    y=r*sin(o);
    cout << "\nLes coordonnees cartesiennes du point sont : x = " << x << "\ty =" << y;
    cout << "\n\nValeurs exactes :\nx = " << r << "*cos(" << o << ")\n";
    cout << "y = " << r << "*sin(" << o << ")";

    case 2 : cout << "\nEntrer les coordonnees cartésiennes du point :\n";
    cout << "x = ";
    cin >> r;
    cout << "y = ";
    cin >> o;
    r=sqrt((x*x)+(y*y));
    o=[Bloquage]

    default : cout << "\nDefaut de saisie dans le choix du menu.";
    }
    getch();
    return 0;
    }
    Je bloque donc au niveau de la balise [Bloquage], et je vois pas comment faire mon affichage...
    Sinon je continue les "\n" tant que ça pose pas de problème c'est plus pratique à mon goût ^^

  7. #7
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Ben, vu que tu doit afficher des coordonnées polaires, il faut que tu determine le rayon et le teta du point.

    Le rayon, tu l'as deja fait, ok.

    Le teta, pour le retrouver, il faut un peut de trigo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    x=r*cos(o);
    y=r*sin(o);
     
    donc :
    cos(o) = x / r;
    sin(o) = y / r;
     
    et donc :
     
    o = arccos(x/r);
    et
    o = arcsin(y/r);
    Normalement, il n'y a qu'un angle qui satisfasse (euh ??? satisfactionne ?) les deux conditions à la fois.

    Le plus simple, c'est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    o = arccos( abs(x/r) );
    En prenant la valeur absolue de x/r, tu est sûr d'avoir un x/r positif et donc un angle entre -pi/2 et +pi/2 (entre -90° et +90°)

    Ensuite :

    - si y est positif, ton angle est entre 0 et +pi (entre 0° et 180°)
    - si y est négatif, ton angle est entre +pi et 2*pi (entre +180° et 360°)

    - si x est positif, ton angle est bien entre -pi/2 et +pi/2 (entre -90° et +90°)
    - si x est négatif, ton angle est en fait entre +pi/2 et 3*pi/2 (entre +90° et 270°)

    Pour bien comprendre ça, le mieux est de dessiner un cercle trigonometrique et de placer quelques points dessus, et de voir pourquoi le signe est important.

    Attention !

    Si x=0 et y=0 alors r=0 et o=0, et il ne faut pas faire de division (x/r), sinon plantage ! (division par 0)

  8. #8
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Si tu souhaite faire ça de façon super clean au niveau de la structure, je me rappelle avoir croiser la même problématique élucidée avec l'idiome du constructeur nommé ici

    C'est peu être un peu hors sujet par rapport à ce que tu souhaite faire vu que tu n'a pas besoin de stocker tes valeurs mais seulement les afficher. Mais c'est toujours bon à savoir
    Linux > *

  9. #9
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par cecile22sky Voir le message
    Merci de vos réponses

    J'ai donc avancé un peu mais je trouve vraiment que c'est mal fichu ^^
    Je suis assez d'accord avec toi

    Ce qui me gêne le plus dans le programme, c'est que tu mélanges deux choses qui n'ont rien à voir entre elles : L'interface avec ton utilisateur, et le moteur du programme, certes réduit, mais bon. Pour un petit programme, ça peut passer, mais autant prendre les bonnes habitudes.

    Pour ton problème de calculs, regarde la fonction atan2, elle a été conçue exprès pour gérer correctement les signes dans ce genre de calculs.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 108
    Points : 109
    Points
    109
    Par défaut
    Pour le switch, il faut mettre un break; avant default: et case 1: .

Discussions similaires

  1. [DEBUTANT]transformation analyse croisée en table
    Par shagun dans le forum Access
    Réponses: 3
    Dernier message: 05/04/2007, 21h32
  2. [Debutant]Transformer string en int
    Par htaou dans le forum SL & STL
    Réponses: 7
    Dernier message: 09/09/2005, 21h28
  3. [DEBUTANT] Transformer une variable Double en STring
    Par Battosaiii dans le forum Langage
    Réponses: 6
    Dernier message: 13/06/2005, 16h43
  4. [debutant]transform chaine en entier
    Par loutente dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/03/2005, 10h53
  5. [omondo] [debutant] transformation de doc uml en image
    Par htcrusoe dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 10/08/2004, 10h14

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