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++

  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.

  8. #8
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut Le programme qui commence à m'agacer
    Voila par exemple la première édition du programme.
    Si vous deceliez le bug j'en serai reconnaissant.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    ton programme c'est du C et non du C++
    il y a un conio.h donc c'est fait avec un compilateur borland (donc pas compilable sur VC)

    dans la fonction "source"


    il n'y a pas d'allocation mémoire de ui

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    C'est un immonde mélange de C et de C++ (avec vieux headers).
    Il devrait "marcher" ("tomber en marche serait plus précis") sous Visual, car getch() est supporté par les deux (ce sont surtout les fonctions de positionnement de texte de <conio.h> qui ne sont pas les mêmes sous Visual et Borland).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut Les erreurs
    En fait, j'ai fait le code sous Turbo c++ en se rappelant de ce que j'ai etudié ça fait une eternité, j'ai compiler sous VC++ ça se compile mais l'errur que j'arrive pas à comprendre c'est celle de l'édition des liens. Supposons que je met pas le conio.h puisque son seule utilisation est pour le clrsc et ça marche pas sous VC++. C'est quoi donc les problèmes qui sont relatifs surtout à l'utilisation des pointeurs.

    L'utilisation du C++ est obligatoire à cause de la bibliothèque complex.h

    Et puis pour une allocation mémoire je dois utiliser quelle instruction malloc ou bien new?? ce que je savais c'est que C++ permet de s'en passer de l'instruction new NON?

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    complex.h à ma connaissance c'est du C99...

  13. #13
    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
    Tu peux ne pas avoir à écrire trop de new toi même si tu utilises des classes qui encapsulent ça, comme celles que je t'ai proposées. Ce n'est pas ton cas, donc tu dois tout gérer manuellement.
    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