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 :

Créer un tableau de complexes


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Points : 28
    Points
    28
    Par défaut Créer un tableau de complexes
    Bonjour à tous,
    Je souhaite créer un tableau 2D de complexes avec la bibliothèque standard <complex>

    Je n'arrive pas à trouver la syntaxe pour créer ce tableau dynamique, et je ne comprends pas d'où vient l'erreur.

    Merci à tous pour votre aide !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      complex **Pixels;
      Pixels = new complex *[Hauteur+2];
      for(int i=0 ; i<Hauteur+2 ; i++)
     
        {
          Pixels[i]=new complex[Largeur+2];
        }

  2. #2
    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
    Déjà, complex est un template, car on peut vouloir avoir des nombres complexes basés sur une représentation flottante, ou une représentation double (voire éventuellement d'autres représentations, mais ce n'est je crois pas supporté par tous les compilateurs).

    Donc, pour utiliser ce type, il faut préciser : complex<double> ou complex<float> (et c'est probablement complex<double> qui a le plus de sens si tu hésites entre les eux.

    Ensuite, pour gérer un tableau dynamique, il y a bien plus simple que ce que tu essayes de faire. La solution passe par vector, un autre template de la bibliothèque standard. Une retranscription directe de ton code donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    vector<vector<complex<double> > > Pixels; // Attention aus espaces entre '>'
    for(int i=0 ; i<Hauteur+2 ; i++)
    {
        Pixels.push_back(vector<complex<double> (Largeur+2));
    }
    On n'a pas l'air de beaucoup y gagner, mais la libération de la mémoire est alors effectuée automatiquement. Mais souvent, pour un tableau où chaque ligne a la même largeur, il est encore plus simple d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vector<complex<double> > Pixels(Hauteur+2 * Largeur+2);
    // Pour accéder au Pixel i,j
    Pixels [i * ( Largeur+2) + j] = ...;
    Je te conseille grandement de te documenter sur vector, c'est un miracle en terme d'économie de bugs !
    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.

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Déjà, complex est un template, car on peut vouloir avoir des nombres complexes basés sur une représentation flottante, ou une représentation double (voire éventuellement d'autres représentations, mais ce n'est je crois pas supporté par tous les compilateurs).

    Donc, pour utiliser ce type, il faut préciser : complex<double> ou complex<float> (et c'est probablement complex<double> qui a le plus de sens si tu hésites entre les eux.

    Ensuite, pour gérer un tableau dynamique, il y a bien plus simple que ce que tu essayes de faire. La solution passe par vector, un autre template de la bibliothèque standard. Une retranscription directe de ton code donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    vector<vector<complex<double> > > Pixels; // Attention aus espaces entre '>'
    for(int i=0 ; i<Hauteur+2 ; i++)
    {
        Pixels.push_back(vector<complex<double> (Largeur+2));
    }
    On n'a pas l'air de beaucoup y gagner, mais la libération de la mémoire est alors effectuée automatiquement. Mais souvent, pour un tableau où chaque ligne a la même largeur, il est encore plus simple d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vector<complex<double> > Pixels(Hauteur+2 * Largeur+2);
    // Pour accéder au Pixel i,j
    Pixels [i * ( Largeur+2) + j] = ...;
    Je te conseille grandement de te documenter sur vector, c'est un miracle en terme d'économie de bugs !
    Merci beaucoup pour ton aide mais dans mon cas je travaille sur des tableaux de pixels, et j'ai déja programmé la grosse classe en entier en tableaux, je ne voudrais pas tout recommencer, est il possible de ne pas utiliser les vector et garder la structure en tableaux ?
    Merci beaucoup pour ton aide (ici c'est un projet scolaire, donc le but et de ne pas utiliser vector et de tout faire à la main, et je dois avouer, je galère pas mal)
    Merci encore pour ton aide précieuse

  4. #4
    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 nicoblade77240 Voir le message
    est il possible de ne pas utiliser les vector et garder la structure en tableaux ?
    Oui, c'est possible, c'est juste plus compliqué. A la base, ton code d'initialisation à l'air correct, à partir du moment où tu remplaces complex par complex<double>, mais je l'écrirais pour simplifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      typedef std::complex<double> Complexe;
      typedef Complexe * Ligne;
      typedef Ligne * Tableau;
     
      Tableau Pixels;
      Pixels = new Ligne[Hauteur+2];
      for(int i=0 ; i<Hauteur+2 ; i++)
     
        {
          Pixels[i]=new Complexe[Largeur+2];
        }
    Et le conseil de travailler à une seule dimension est tout aussi valable si tu travailles avec de la gestion manuelle de la mémoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Tiens, j'ai oublié les () dans le message précédent...
    complex<double> *Pixels = new complex<double>[(Hauteur+2) * (Largeur+2)];
    // Pour accéder au Pixel i,j
    Pixels [i * ( Largeur+2) + j] = ...;
    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.

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    Merci beaucoup pour toutes ces indications.

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut
    Citation Envoyé par nicoblade77240 Voir le message
    <snip>
    Merci beaucoup pour ton aide (ici c'est un projet scolaire, donc le but et de ne pas utiliser vector et de tout faire à la main, et je dois avouer, je galère pas mal)
    Ne serait-ce pas l'occasion de, justement, faire découvrir à ton prof les joies de la programmation en C++ "moderne"

    S'il est ne serait-ce qu'un tantinet ouvert à la discussion, cela pourrait non seulement être l'occasion d'une heure de cours pour le moins intéressante, mais aussi l'inciter à revoir entièrement la manière dont il présente le C++ à ses élèves pour la suite

    Et tu peux me croire (je l'ai moi-même fait), si le prof n'est pas plus buté qu'une mule corse et que tu arrive à lui présenter des avantages directs (fini les new et delete dans tous les sens), il se ralliera surement à ton optique
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. [Photoshop]Créer un tableau
    Par ghyosmik dans le forum Imagerie
    Réponses: 4
    Dernier message: 02/12/2005, 08h40
  2. Créer un tableau 2colonnes de 2 types différents ?
    Par lilou77 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 27/10/2005, 12h09
  3. Réponses: 14
    Dernier message: 13/10/2005, 12h55
  4. [Info]Créer un tableau de String à partir d'autres String
    Par Nasky dans le forum Collection et Stream
    Réponses: 21
    Dernier message: 06/07/2005, 11h46
  5. [XSLT] Créer un tableau à partir de sa description
    Par Skyou dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 20/03/2005, 20h01

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