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 :

Les pointeurs et les complexes sous C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut Les pointeurs et les complexes sous C++
    Bonjour tout le monde,

    Voila je ne suis pas un informaticien je suis plutot physicien je dois travailler sur un problème utilisant les matrices complex, j'ai un bon baggage en C (plus ou au moins C++) j'ai rencontré pas mal de problèmes en manipulant les pointeurs sous Turbo C++ et sous Visual C++. (Acess violation par exemple)

    J'aimerai bien savoir s'il y a des cours ou des tutoriels pour approfondir mes connaisances.

    Merci

  2. #2
    Membre confirmé Avatar de PKO06
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 91
    Par défaut
    Bonjour,

    Dans la section tutoriels il y a des liens vers des cours en ligne. Le plus complet semble être thinking in cpp en deux volumes.

  3. #3
    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 : 50
    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
    Par défaut
    Le mieux, pour ce genre de choses, est de ne pas utiliser de pointeurs...

    Pour les complexes, tu as std::complex. Pour les matrices, rien de probant dans la standard, mais pas mal de classes un peu partout. La première question à se poser est si tu vas manipuler des matrices de taille fixe petites, ou des grosses matrices de taille variable. Quelques noms qui viennent en vrac de tête :
    boost::ublas (www.boost.org), blitz++ (www.oonumerics.org), MTL (osl.iu.edu/research/mtl), genial (http://www.ient.rwth-aachen.de/team/...l/genial.html). A toi de choisir ce qui te convient.


    Avec tout ça, pas sur que tu aies besoin d'utiliser directement un seul pointeur dans ton code !
    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.

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    Citation Envoyé par JolyLoic
    Le mieux, pour ce genre de choses, est de ne pas utiliser de pointeurs...

    Pour les complexes, tu as std::complex. Pour les matrices, rien de probant dans la standard, mais pas mal de classes un peu partout. La première question à se poser est si tu vas manipuler des matrices de taille fixe petites, ou des grosses matrices de taille variable.
    Bah voila en fait je manipule des matrices d'ordre de 10000*25 points. A chaque execusion du programme les dimensions de la matrice sont fixées, cependant les valeurs changent constament en fonction de plusieurs paramètres. Le reste de ton message je ne suis pas sur d'avoir compris.
    Merci à tous

  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 : 50
    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
    Par défaut
    Ok, tu n'es donc pas dans la catégorie petites matrices. Sont-elles creuses ? Et que comptes-tu faire avec comme style d'opération mathématiques ?

    Une fois que tu sauras ça, tu pourra choisir une bibliothèque qui t'évitera de devoir réinventer la roue, te permettra d'écrire ton code de façon relativement proche à l'écriture mathématique (genre, pour multiplier des matrices a et b et mettre le résultat dans c, il suffira d'écrire c = a*b, sans s'occuper de boucle, de pointeurs, d'allocation mémoire ou autres aspect bas niveau).
    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
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    Oui en effet ce sont de très grandes matrices qui ont une structure spéciales elles sont tridiagonales cela dit que seuls les élements sur la diagolnale principale, celle en dessus et celle en dessus qui ne sont pas necessairement nuls. Le traitement effectué est l'inverse, mais j'utilise une méthode qui s'appelle de Thomas. Peu importe, en fait le problème se pose justement sur l'utilisation des pointeurs sur des complexes, parfois le compilateur (VC++) me declare " Access Violation" le turbo quant à lui il trouve pas d'erreur de compilation cependant l'excution ne marche pas si j'utilise un nombre très important de point sur lequelle je fais le traitement.

  7. #7
    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 : 50
    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
    Par défaut
    Je ne sais pas pourquoi tu parles de pointeurs sur des complexes. Tu ne devrais pas en manipuler dans ce genre de programme. D'après un rapide coup d'oeil, MTL (http://osl.iu.edu/research/mtl/refer.../diagonal.html) et boost::ublas (http://www.boost.org/libs/numeric/ublas/doc/banded.htm) gère toutes deux la notion de matrice bande. Je te conseille vivement de de baser sur une de ces bibliothèques pour écrire ton algorithme.

    Si vraiment tu veux tout faire manuellement (*), sache :
    - Que c'est plus complexe.
    - Que ton code sera probablement plus lent.
    - Qu'il n'aura pas déjà été débuggé par les dizaines d'utilisateurs d'une bibliothèque externe.
    - Que, à moins que tu sois un développeur C++ expérimenté, ce que tu as dit ne pas être, et que tu redéveloppe l'équivalent de ces bibliothèques, il y a de fortes chances que ton code ne soit pas très lisible et s'empêtre dans des détails techniques qui t'éloignent du véritable algorithme.

    (*) Par manuellement, j'entends allouer par new[] des zones de mémoire, et d'écrire les données dedans à l'aide de pointeurs, j'ai l'impression que c'est ce que tu fais actuellement. C'est en mathématique la même différence que celle qu'il y a entre utiliser des char* ou des std::string pour gérer des chaînes de caractères, simplement amplifiée par le fait qu'une matrice est plus complexe qu'une simple chaîne.

    J'ai fait la même erreur au début, à gérer des choses manuellement (c'était principalement des chaînes de caractères, ou des tableaux monodimentionnels). Dès que j'ai utilisé des bibliothèques appropriées (string et vector en l'occurence), mon code est devenu plus clair, plus court, plus évolutif, et comportait au moins 10 fois moins d'erreurs. Ca ressemble à de la pub pour de la lessive qui lave plus blanc, mais je t'assure que ça a révolutionné ma manière de coder, pour le mieux.


    Si vraiment tu souhaites quand même continuer dans la voie que tu sembles avoir choisie, il faudra nous montrer du code pour qu'on te dise en quoi ton utilisation est incorrecte. Un pointeur sur un complexe n'a pas de raison de ne pas marcher quel que soit le compilateur. Il y a un problème, que nous ne pouvons pas deviner pour toi sans voir de code. Peut-être que l'utilisation d'un outil tel que boundschecker ou purify ou valgrind pourrait aussi t'aider à localiser le problème, mais c'est typiquement un problème peu évident à localiser de corruption mémoire, pour lequel la meilleure solution que je connaisse passe souvent par un refactoring.
    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.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/12/2008, 10h32
  2. Problèmes avec les thread et les pointeurs
    Par raspac dans le forum POSIX
    Réponses: 2
    Dernier message: 22/10/2006, 17h35
  3. Réponses: 4
    Dernier message: 11/09/2006, 16h55
  4. pointeurs, toujours les pointeurs :/
    Par giviz dans le forum C
    Réponses: 16
    Dernier message: 08/10/2003, 15h02

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