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 :

Nombres complexes création type


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Nombres complexes création type
    Bonjour tout le monde!
    Je débute en C et je dois faire un programme sur les nombres complexes.
    On me demande d'abord de déclarer un type de données Tcomplex incluant les données réels de double précision:
    - a et b représentant les données complexes en forme cforme cartésienne.
    - mod (module) et alfa (argument) représentant les données complexes en forme polaire cartésienne.
    Une idée ? Je ne sais pas du tout comment on fait pour déclarer des nouveaux types.
    Merci d'avance !

  2. #2
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Bonjour,

    Pour commencer il te faudra la bibliothéque mathématique en C à inclure : #include <math.h>, elle contient des opérations pour effectuer le calcul de la racine carré (sqrt), le tangent (tan) cosinus (cos) etc... . Pour tes variables je me souviens d'avoir fait le même sujet. J'avais déclaré un structure contenant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct complexe{
    float a;
    float b;}
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 17
    Points
    17
    Par défaut :ccool:
    Merci je vais tenter ça, pourrais tu m'expliquer comment marche C pour la déclaration de nouveaux types ?

  4. #4
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Citation Envoyé par julcha Voir le message
    comment marche C pour la déclaration de nouveaux types ?
    tu as le mot clé typedef en langage C qui te permet de définir des types synonymes dans le but de rendre les programmes plus clairs.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct {
    float a;
    float b;}s_complexe; //déclartion de variable de type struct
    Pour déclarer ensuite dans ton code une variable de type struct, tu as juste à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* déclare la variable nb_complexe de type s_complexe */
      s_complexe nb_complexe ;
    au de lieu de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct s_complexe nb_complexe;
    Tu vois bien que la premiére écriture est plus facile et plus allégée par rapport à la deuxième écriture, même si les deux sont correctes.

    On me demande d'abord de déclarer un type de données Tcomplex incluant les données réels de double précision:
    Il faut utiliser le type double à la place du float pour des réels à double précision:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct{
    double a;
    double b;}s_complexe;
    - mod (module) et alfa (argument) représentant les données complexes en forme polaire cartésienne.
    Tu as juste à déclarer des variables de type double qui contiendront le résultat de tes calculs.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Goa,
    Citation Envoyé par Seelass Voir le message
    Bonjour,

    Pour commencer il te faudra la bibliothéque mathématique en C à inclure : #include <math.h>, elle contient des opérations pour effectuer le calcul de la racine carré (sqrt), le tangent (tan) cosinus (cos) etc... . Pour tes variables je me souviens d'avoir fait le même sujet. J'avais déclaré un structure contenant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct complexe{
    float a;
    float b;}
    Mauvaise idée pour les noms de champs : les noms explicites facilitent la lecture et la maintenance.
    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Citation Envoyé par droggo Voir le message
    Goa,

    Mauvaise idée pour les noms de champs : les noms explicites facilitent la lecture et la maintenance.
    Il est vrai que des noms de variables significatifs est mieux pour les raisons citées dans ton poste. C'est à lui choisir le nom de ses variables, je ne vais pas penser à sa place.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 17
    Points
    17
    Par défaut AVancé
    Okay, je comprends mieux, merci!
    Mais j'aimerais savoir: les deux déclarions ci-dessous sont équivalentes ?

    Citation Envoyé par Seelass Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct complexe{
    float a;
    float b;}
    typedef struct{
    double a;
    double b;}s_complexe;
    Bon donc j'en suis là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct {
        double a, b;
        double mod, alfa;
    } Tcomplexe;
    Après on me demande de déclarer un type ptcomplexe qui représente un point de tcompexe... je ne comprends pas trop ce qu'il fait faire, qu'en pensez vous ?

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par julcha Voir le message
    Après on me demande de déclarer un type ptcomplexe qui représente un point de tcompexe... je ne comprends pas trop ce qu'il fait faire, qu'en pensez vous ?
    Je vous ai dis des bêtises, je comprends mieux ma question (à la base, mon exo n'est pas en français), on me demande de déclarer un type ptcomplexe qui représente un pointeur de tcompexe...

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Avancé
    Bon après quelques recherches, je décide d'ajouter à mon programme au début:
    struct *PTcomplexe;
    Sauf que mon compilateur m'indique une erreur, {, ( attendu... Ca veut dire quoi?

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Koa,

    Il faudrait quand même prendre le temps d'apprendre les bases du langage.
    Si les cons volaient, il ferait nuit à midi.

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Pointeur
    Merci pour ton aide précieuse !
    Bon je viens de lire des tutoriels sur les pointeurs... mais j'aimerais savoir on peut appliquer des pointeurs sur des variables de type struc ?

  12. #12
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Citation Envoyé par julcha Voir le message
    Bon je viens de lire des tutoriels sur les pointeurs... mais j'aimerais savoir on peut appliquer des pointeurs sur des variables de type struc ?
    si on prendre l'exemple de ta déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct *PTcomplexe //pointeur de type structure
    {double a;
    double b;
    }s_complexe; //variable de type struct *PTcomplexe
    ,pour accéder à tes variables il te vaudra faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s_complexe->a;//accède à la variable a
    s_complexe->b;//accède à la variable b
    le -> montre que l'on accéde à un pointeur sur structure.

    Si par contre on voulait accéder aux données d'un structure classique (c'est à dire sans la notion de pointeur. On aurait fait de la sorte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s_complexe.a;//accède à la variable a du structure s_complexe
    s_complexe.b;//accède à la variable b du structure s_complexe
    J’espère que tu as compris la différence.

    c'est tout simple.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  13. #13
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Bon donc j'en suis là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct {
        double a, b;
        double mod, alfa;
    } Tcomplexe;
    Ce n'est pas à mon avis une bonne idée : il y a redondance dans l'information stockée. Soit tu représentes tes complexes par la partie réelle et la partie imaginaire, soit par le module et l'argument. Si tu utilises les deux, tu dois toujours assurer que les deux représentent bien le même nombre complexe. Cela impose des calculs supplémentaires inutiles et qui peuvent à cause de l'imprécision inhérente aux calculs flottants aboutir à des résultats incohérents où le couple (réel,imaginaire) ne représente pas exactement le même complexe que le couple (module,argument).
    Il est, je pense, plus judicieux de conserver le couple (réel,imaginaire) pour stocker le complexe et faire deux fonctions pour obtenir le module et l'argument lorsqu'on en a besoin.

    Après on me demande de déclarer un type ptcomplexe qui représente un point de tcompexe... je ne comprends pas trop ce qu'il fait faire, qu'en pensez vous ?
    Je pense qu'ils s'attendent à une déclaration du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef Tcomplexe * pTcomplexe;
    ce n'est pas d'ailleurs une idée géniale que de masquer le pointeur dans un typedef : ça n'améliore pas du tout la clarté du code AMHA
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

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

Discussions similaires

  1. nombre complexes en C
    Par hicham.jakjoud dans le forum C
    Réponses: 4
    Dernier message: 23/10/2006, 16h51
  2. [Nombre Complexe]affichage formatte
    Par parsy dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2005, 00h36
  3. Les nombres complexe et delphi
    Par wikers dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2005, 11h47
  4. [LG]Nombres complexes et forme polaire
    Par chavernac dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2005, 18h36
  5. [XSD] Complexe de type all mais avec maxoccur
    Par Je@nb dans le forum Valider
    Réponses: 3
    Dernier message: 06/02/2005, 19h18

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