vecteurs en c++
Répondre à la discussion
Page 1 sur 4 12 3 DernièreDernière
Affichage des résultats 1 à 30 sur 96

vecteurs en c++



  1. #1
    invite389df8bf

    vecteurs en c++


    ------

    Bonjour,
    je cherche à écrire un programme en C++ qui fait la somme de deux vecteurs, ainsi que la multiplication d'un scalaire par un vecteur, et tout ça en utilisant les classes.
    Voilà ce que j'ai fait
    Vecteur.cpp

    Code:
    #include<iostream>
    #include<valarray>
    using namespace std;
    main()
    {
    valarray<double> A(4), B(4), D(4)
    int i;
    for(i=1;i<=4;i++)
    cout<<A(i)=;
    cin>>A(i);
    cout<<B(i)=;
    cin>>B(i);
    }
    D=A+B;
    }
    mais ce code ne marche pas, je ne comprend pas pourquoi. (je crois comprendre que si on utilise la classe valarray, pas besoin de faure un fichier.h
    Merci par avance pour votre aide.

    -----

  2. #2
    Jack
    Modérateur

    Re : vecteurs en c++

    mais ce code ne marche pas
    Difficile de déterminer quoi que ces soit tant que tu ne nous auras pas indiqué ce qui te fait dire que ça ne marche pas: erreur à la compilation? A l'exécution? Message d'erreur?
    Code:
    valarray<double> A(4), B(4), D(4)
    il manque un ;, ce qui semblerait indiquer un problème à la compilation.
    Code:
    for(i=1;i<=4;i++)
    Tes valeurs de i ne sont pas bonnes: les indices de tableau démarrent à 0
    Code:
    cout<<A(i)=;
    tu veux afficher du texte? Il faut le mettre entre guillements (" ").
    Il manque une accolade ouvrante après la ligne du for...
    Code:
    D=A+B;
    Ca m'étonnerait que l'opérateur + soit défini pour les valarray, il va falloir le redéfinir
    etc.
    etc.

    (je crois comprendre que si on utilise la classe valarray, pas besoin de faire un fichier.h
    ????

    Bref, il te faut reprendre les bases du C++ et procéder par étapes pour faire évoluer ton programme.

  3. #3
    invite389df8bf

    Re : vecteurs en c++

    puisqu'il faut définir tous les opérateur, à quoi ca sert d'iclure la classe valarray? S'il vous plaît.

  4. #4
    invite389df8bf

    Re : vecteurs en c++

    Bonjour,

    je pense que la classe valarray en fait n'a pas les opérateur =, +, et *. D'où ma question:

    1- Alors à quoi sert d'inclure la classe valarray?

    2- J'ai réecris le code, et le voici:

    Code:
    Vecteur & operator + (const Vecteur &);
    {
      valarray<double> A,B,C;
      for(i=0;i<=N;i++)
        {
          D[i]=A[i]+B[i]
    	}
    }
    main()
    {
      int i=0;
      valarray<double> A [i], B [i], D [i]
        for(i=0;i<=4;i++)
          {
    	cout <<" A[i]"=<<endl;
    	cin>>A[i];
           	cout <<" B[i]"=<<endl;
    	cin>>B[i];
          }
      D=A+B;//D(i)=A(i)+B(i) pour i de 1 à 4
            
    }
    et il m'envoie l'erreur suivante:

    Vecteur.cpp:4:1: error: ‘Vecteur’ does not name a type
    Vecteur & operator = (const Vecteur &);
    ^
    Vecteur.cpp:5:1: error: ‘Vecteur’ does not name a type
    Vecteur & operator = (const Vecteur &);
    ^
    Vecteur.cpp:6:1: error: ‘Vecteur’ does not name a type
    Vecteur & operator + (const Vecteur &);
    ^
    Vecteur.cpp:7:1: error: expected unqualified-id before ‘{’ token
    {
    ^

    Il veut dire que je n'ai pas défini les opéraur = et +.

    Mon problème est: comment définir l'opérateur = pour les vecteurs? et comment aranger ma définition de l'opérateur +? S'il vous plaît.

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : vecteurs en c++

    je ne connaissais pas les "valarray". Je viens de regarder la doc et cette classe possède en effet un certain nombre d'opérateurs déjà définis:
    http://www.cplusplus.com/reference/v...ray/operators/
    A priori, pas besoin de redéfinir l'opérateur +

    Reste à régler le problème de la saisie au clavier...

    Cependant, je me demande qui a choisi cette classe. Tu parles de vecteurs dans ton 1er post. Ne faudrait-il pas que tu utilises plutôt la classe "vector"? Quel est l'énoncé exact de ton problème en fait?

    Sur le fond, comme je l'ai évoqué plus haut, il faudrait que tu maîtrises les bases du C++ avant de t'attaquer à quelque chose de plus compliqué. Par exemple dans ta fonction
    Code:
    Vecteur & operator + (const Vecteur &);
    {  valarray<double> A,B,C;  for(i=0;i<=N;i++)    {      D[i]=A[i]+B[i]	}}
    Ou as-tu défini l'identificateur Vecteur? Pareil avec D (au lieu de C je suppose)

    Tu ne maîtrises pas non plus les boucles for car ton indice sensé parcourir le tableau va trop loin (de 0 à 4 alors que l'indice maxi de ton valarray est 3)
    Il manque des ; pour terminer certaines instructions.

    Tu vas donc être envahi d'erreurs de syntaxe élémentaires qui vont polluer celles liées à l'utilisation de la classe valarray
    Dernière modification par Jack ; 13/09/2015 à 10h52.

  7. #6
    invite389df8bf

    Re : vecteurs en c++

    L'énoncé exacte est d'écrire un programme en C++ qui fait la somme de deux vecteurs, et la multiplication d'un scalaire par un vecteur en utilisant les classes.
    Je connais les bases du c++ (pour les boucles c'était une erreur de saisi), ce que je n'arrive pas à comprendre c'est comment définir les opérateur =, *, et +, je suis complétement perdue sur ce moi, aidez moi svp, quelle est l'expression exacte que l'on utilise en générale pour définir = et + et * entre deux vecteurs?
    Je vous remercie par avance.

  8. #7
    Jack
    Modérateur

    Re : vecteurs en c++

    Faut-il se servir des conteneurs de la stl ou dois-tu écrire la classe vecteur de A à Z?

  9. #8
    invite389df8bf

    Re : vecteurs en c++

    écrire des classes vecteurs de A à Z. S'il te plaît donnes moi un exemple de classe vecteur qui nous permet de faire l'addition entre deux vecteur, la multiplication d'un scalaire par un vecteur, et où l'opérateur = et [] sont bien définis, et aussi qui nous permet d'afficher et de rentrer les données. Je suis complétement perdue, je n'y comprend plus rien car je ne trouve pas d'exemple qui explique étape par étape pour comprendre ce qu'il faut faire.
    Je te remercie beaucoup par avance.

  10. #9
    Jack
    Modérateur

    Re : vecteurs en c++

    Conformément à nos règles concernant la résolution des exercices, je ne vais pas te donner le code de cette classe.
    Ce que tu dois faire, c'est déclarer la classe dans un fichier .h dans lequel tu devrais retrouver un membre privé contenant tes données ( un simple tableau conviendra), Il faudra que tu décides si ton vecteur est dynamique ou pas, donc si sa taille peut évoluer au cours de l'exécution du programme.

    Il faut que tu réfléchisses aux services que ta classe doit proposer: opérations (il faudra redéfinir les opérateurs tels que +, *, etc), l'accès aux données (opérateur [] par exemple), etc.
    Il faudra aussi penser à la façon dont tu pourras initialiser un vecteurs pour définir ensuite les constructeurs correspondants.

  11. #10
    invite389df8bf

    Re : vecteurs en c++

    J'ai essayé d'écrire le fichier.h et le fichier. cpp, je vous l'envoie tout de suite et j'espère que vous accepterai de me le corriger s'il vous plaît.

  12. #11
    invite389df8bf

    Re : vecteurs en c++

    Ici, les vecteurs ne sont pas dynamique, leur taille est constante.
    On commence par le fichier.h

    Code:
    class Vecteur
    {
    private:
    int N;
    double *v;
    public:
    Vecteur();//constructeur par défaut
    Vecteur(int i);//constructeur avec taille
    Vecteur(const Vecteur &);//constructeur de copie
    Vecteur & operator = (const Vecteur &);//déclaration de l'opérateur d'affectation
    Vecteur operator * (double scalaire, const Vecteur & vecteur);//Déclaration de l'opérateur de multiplication d'un scalaire par un vecteur
    Vecteur operator * (const Vecteur & A, const Vecteur & B);//Déclaration de l'opérateur d'addition entre vecteurs
    ~Vecteur();//Déclaration d'un desctructeur
    }
    //Définition des méthodes
    Vecteur operator*(double scalaire,const Vecteur & vecteur)
    {
    double scalaire;
    Vecteur vecteur;
    vecteur v;
    for(i=0;i< N;i++)
    {return v[i]=scalaire * vecteur;
    }
    }
    Vecteur operator + (const Vecteur &A, const Vecteur &B)
    {Vecteur A,B,D;
    for(i=0;i< N;i++)
    {
    D [i]=A[i]+B[i];
    }
    Je ne réussi pas à définir l'opérateur = et aussi l'opérateur [] en c++, merci de votre aide. Et aussi, est ce qu'on peut se passer du pointeur dans les attributs de cette classe?

  13. #12
    invite389df8bf

    Re : vecteurs en c++

    ***Suite***
    Aussi, je sais définir un constructeur quand le vecteur à un deux ou 3 composantes,mais quand le veceur a n composantes, comment on fait? Merci beaucoup pour votre aide.

  14. #13
    Jack
    Modérateur

    Re : vecteurs en c++

    En principe, on ne met pas la définition des méthodes dans le fichier d'entête, mais dans le .cpp
    Pour des raisons de symétrie, la redéfinition de l'opérateur * doit plutôt se faire avec une méthode externe, surtout en cas de multiplication par un scalaire. Je te conseille de lire cette FAQ:
    http://cpp.developpez.com/faq/cpp/?p...e-d-operateurs

    Dans la FAQ, tu trouveras aussi les réponses pour l'opérateur d'affectation.

    Je te conseille de ne pas vouloir tout faire d'un coup: commence par les constructeurs, teste, et si tout va bien, essaie d'implémenter un opérateur à la fois, en commençant par l'opérateur d'affectation.

    Aussi, je sais définir un constructeur quand le vecteur à un deux ou 3 composantes,mais quand le vecteur a n composantes, comment on fait
    Tu récupères la taille du vecteur dans les paramètres du constructeur et tu fais une allocation dynamique du tableau.

    Essaie également d'indenter correctement ton code car il est difficilement lisible.

  15. #14
    invite389df8bf

    Re : vecteurs en c++

    1- Pour la définition des constructeurs.
    Si j'ai un vecteur à trois composantes: x, y, et z de type float, la définition est:
    nom_de la classe:: nom de la classe()
    {x=0 ; y=0 ; z=0;
    }

    et pour le constucteur avec argument:
    nom_de la classe:: nom de la classe(float a,float b,float c)
    {
    x=a;y=b;z=c;
    }

    pouvez vous m'indiquer l'écriture correcte quand il s'agit d'un vecteur à n composantes, ou bien m'indiquer un pdf qui la montre (j'ai essayé de bidouiller mais rien.
    2- Est-ce qu'il nous faut un constructeur de copie? Si oui, quelle est son utilité et quelle est la règle générale de sa définition?
    Merci par avance pour votre aide.

  16. #15
    invite389df8bf

    Re : vecteurs en c++

    ***suite****
    voilà, j'ai fais un fichier .h

    Code:
    
    #include<iostream>
    typedef double R;//définition du corps
    using namespace std;
    class vecteur
    {
     private:
      int N;//taille des vecteurs
      R *v;//pointeur vers les coposantes dy vecteur
     public:
      vecteur();//constructeur par défaut
      vecteut(int);//constructeur ave argument
      vecteur ( const vecteur & );//constructeur de copie
      void affiche();//déclaration de la fonction affiche
      ~vecteur();//déstructeur
    }
    1- est-ce qu'on peut éviter d'utiliser le corps R et le pointeur sur v? Et par quelle instruction les remplacer?

    voici un bout du .cpp

    Code:
    #include <iostream>
    using namespace std;
    vecteur()
    {};//Définition du constructeur par défaut
    
    ~vecteur()
    {};//Définition du déstructeur
    
    vecteur(const vecteur& C) :N(C.N), v(new R[C.N])
    {};//définition du constructeur de copie
    2- Quelle est l'instruction qui permette de définir les constructeurs par argument et par copie ici?
    Merci par avance.

  17. #16
    Jack
    Modérateur

    Re : vecteurs en c++

    Si j'ai un vecteur à trois composantes: x, y, et z de type float, la définition est:
    nom_de la classe:: nom de la classe()
    {x=0 ; y=0 ; z=0;
    }
    Pas très intéressant pour un constructeur par défaut: pourquoi 3 composantes par défaut? Pour moi le constructeur par défaut d'un vecteur, c'est un vecteur vide.
    Code:
    vecteur::vecteur()
    {
       v = NULL;
       N = 0;
    }
    Un conseil, essaie de donner des nom parlants aux identificateurs: par exemple dataTab au lieu de v, nbdata au lieu de N.
    Dernière modification par Jack ; 13/09/2015 à 14h59.

  18. #17
    Jack
    Modérateur

    Re : vecteurs en c++

    Il était aussi possible d'initialiser le constructeur par défaut directement dans le fichier d'entête:
    Code:
     public:
      vecteur(): v(NULL), N(0) {}//constructeur par défaut

  19. #18
    invite389df8bf

    Re : vecteurs en c++

    C'est bien compris pour le constructeur par défaut. S'il vous plaît, et pour le constructeur de copie, et le constructeur avec argument?

  20. #19
    Jack
    Modérateur

    Re : vecteurs en c++

    Je veux bien t'aider et je t'ai donné des pistes, mais si je te fais fais tout ton exercice, tu n'auras rien appris.
    Essaie, fais des erreurs, analyse-les, corrige et avance.
    Ponctuellement, si tu es bloqué, on te donnera un coup de main.

  21. #20
    invite389df8bf

    Re : vecteurs en c++

    Avez vous s'il vous plaît, un cours qui donne un exemple sur comment définir un constructeur avec arguments, et comment définir un constructeur de copie en C++? Je n'arrive pas à trouvé ca, je trouve pleins de versions, et je ne peux pas le deviner seule. Je vous remercie par avance.

  22. #21
    Jack
    Modérateur

    Re : vecteurs en c++

    La définition des constructeurs se trouve dans tous les cours de C++. pour aller au plus court:http://cpp.developpez.com/faq/cpp/?p...-constructeurs

    Pour les constructeurs avec argument(s), il faut te poser la question "tiens, qu'est-ce qui serait intéressant pour initialiser un vecteur"? Par exemple sa taille, et par défaut les éléments seraient nuls. Une fois que tu sais ce dont tu as besoin, il suffit de récupérer les paramètres passés au constructeur pour initialiser les membres de la classe.

    Pour le constructeur par copie, vu qu'il s'agit d'une copie, il faut passer une référence sur l'original et se servir des membres de l'original pour créer la copie.

  23. #22
    invite389df8bf

    Re : vecteurs en c++

    D'accord, alors pour résumer:
    Le constructeur par défaut:
    on peut le déclarer et le définir dans le header, par:
    Code:
    vecteur(): v(NULL), N(0) {}//constructeur par défaut
    pour le constructeur avec argument:
    on le déclare par:
    Code:
    vecteur(int N);
    et pour le définir, on fait comme pour le constructeur par défaut:
    Code:
    vecteur(int N,): v(NULL), N(0) {}//constructeur par défaut
    Je pense qu'il y'a une erreur et qu'il faut mettre v comme argument. Pouvez vous me corriger s'il vous plaît.

    enfin, pour le constructeur de copie:
    pour sa définition on fait
    Code:
    vecteut(vecteur const& v)
    et pour sa définition, je ne la trouve pas dans le lien que vous m'avez donné, et vraiment j'ai lu le livre du zéro mais ils ont fait un exemple avec du gamer, je n'y comprend plus rien.
    Je vous remercie par avance.

  24. #23
    Jack
    Modérateur

    Re : vecteurs en c++

    Citation Envoyé par hinanehinane Voir le message
    D'accord, alors pour résumer:
    Le constructeur par défaut:
    on peut le déclarer et le définir dans le header, par:
    Code:
    vecteur(): v(NULL), N(0) {}//constructeur par défaut
    Oui. tant que j'y pense, il est préférable de remplacer NULL par nullptr

    pour le constructeur avec argument:
    on le déclare par:
    Code:
    vecteur(int N);
    Oui, c'est un constructeur possible

    et pour le définir, on fait comme pour le constructeur par défaut:
    Code:
    vecteur(int N,): v(NULL), N(0) {}//constructeur par défaut
    Je pense qu'il y'a une erreur et qu'il faut mettre v comme argument. Pouvez vous me corriger s'il vous plaît.
    En effet, si N représente la taille du vecteur, il faut allouer dynamiquement la mémoire nécessaire pour mémoriser tes N double dans le tableau

    enfin, pour le constructeur de copie:
    pour sa définition on fait
    Code:
    vecteur(vecteur const& v)
    Oui, avec un ; à la fin
    et pour sa définition, je ne la trouve pas dans le lien que vous m'avez donné, et vraiment j'ai lu le livre du zéro mais ils ont fait un exemple avec du gamer, je n'y comprend plus rien.
    Réfléchis: tu veux créer un tableau qui est une copie du tableau v passé en référence: il faut recopier la valeur de l'attribut N de v qui représente le nombre d'éléments, allouer dynamiquement la mémoire nécessaire et recopier les données de v dans le nouveau tableau.
    Dernière modification par Jack ; 13/09/2015 à 18h26.

  25. #24
    invite389df8bf

    Re : vecteurs en c++

    Alors, pour définir un constructeur de copie, on commence par lui indiquer la taille n qu est la même taille d'un objet v de cette classe. On le fait alors en écrivant n(v.n)
    après, il faut allouer dynamiquement la mémoire nécessaire: pour ca on utilise new, puis on recopie les donnée de v dans le nouveau tableau: et pour ca on utilise un pointeur, et on écrit:
    int *pointeur(0);
    pointeur = new int;
    Dans ce cas, la définition est:
    Code:
    vecteur(const vecteur& v): n(v.n),w(new v[n])
    { (*this)=v}
    w(new int) veut dire que par new int l'ordinateur demande une nouvelle case pour y stoker un élément qui est la copie de v.
    Corrigez moi s'il vous plaît.

  26. #25
    Jack
    Modérateur

    Re : vecteurs en c++

    w(new int)
    non, on ne peux pas placer cette instruction dans la liste d'initialisation, il faut le faire dans le corps de la fonction, en principe dans le fichier .cpp.

    (*this)=v
    Le C++ ne sait pas copier des tableaux à l'aide d'une simple affectation. Il faut copier tous ses éléments un par un dans un boucle. Il existe une fonction pour ce genre de copie en langage C, comme memcpy, mais je ne sais pas trop si c'est recommandé en C++. la boucle, elle fonctionnera à tous les coups.

  27. #26
    invite389df8bf

    Re : vecteurs en c++

    et cette écriture
    Code:
    vecteur(const vecteur& v): n(v.n)
    {
    w(new v[n]);
    for (i=0;i<n;i++)
    {
    w[i]=v[i];
    }
    }
    Ou bien avez vous un cours qui montre comment définir un constructeur de copie.

  28. #27
    Jack
    Modérateur

    Re : vecteurs en c++

    D'où sort ce w?
    C'est une mauvaise idée d'appeler ton vecteur référence v qui a donc le même identificateur que ton tableau. Voici un exemple de définition:
    Code:
    vecteur::vecteur(const vecteur& ref) : n(ref.n){
    	tab = new double[n];
    	for (unsigned int i = 0; i < n; i++)
    		v[i] = ref.v[i];
    }
    Ce que je ne comprends pas trop, c'est pourquoi tu ne te lances pas. Essaie!

  29. #28
    invite389df8bf

    Re : vecteurs en c++

    Merci de m'aider à corriger le programme.

    Voici le fichier.h

    Code:
    typedef double R;//définition du corps
    class vecteut
    {
     private:
      int n;//taille
      R *v;//pointer les composantes
     public:
     vecteur():v(nullptr),n(0){];//Déclaration et définition du constructeur par défaut
      vecteur(int n);//déclaration d'un constructeur avec argument
      vecteut(vecteur const& v);//déclaration d'un constructeur de copie
      ~vecteur();//déstructeur
      void affiche();//déclaration de la fonction affiche
    }
    et voici le fichier .cpp

    Code:
    #include <iostream>
    #include "exemple.h"
    using namespace std;
    //Définition du constructeur de copie
    vecteur::vecteur(const vecteur& ref): n(ref.n)
    {
      tab = new double[n];
      for(unsigned int i=0; i<n;i++)
        v[i]=ref.v[i];
    }
    //Définition du constructeur avec argument
    vecteur::vecteur(int n):n(0)
    {
      table = new double[n];
    }
    main()
    {
      int i;
      vecteur C(n);
      vecteur B(C);
      vecteur D(n);
      std::cout "affichier q.c.q";
    }
    et le compilateur me crache beaucoup d'erreurs, voici les premières

    error: expected nested-name-specifier before ‘namespace’
    using namespace std;
    ^
    exemple.cpp:5:1: error: ‘vecteur’ does not name a type
    vecteur::vecteur(const vecteur& ref): n(ref.n)
    ^
    exemple.cpp:12:1: error: ‘vecteur’ does not name a type
    vecteur::vecteur(int n):n(0)
    ^
    exemple.cpp:16:6: error: ISO C++ forbids declaration of ‘main’ with no type [-fpermissive]
    main()
    ^
    exemple.cpp:23:1: error: expected ‘}’ at end of input
    }
    ^
    In file included from exemple.cpp:2:0:
    exemple.h: In member function ‘int vecteut::vecteur()’:
    exemple.h:10:12: error: only constructors take member initializers
    vecteur():v(nullptr),n(0){];//Déclaration et définition du constructeur par défaut
    ^
    exemple.h:10:14: error: ‘nullptr’ was not declared in this scope
    vecteur():v(nullptr),n(0){];//Déclaration et définition du constructeur par défaut
    ^
    exemple.h:10:28: error: expected primary-expression before ‘]’ token
    vecteur():v(nullptr),n(0){];//Déclaration et définition du constructeur par défaut
    ^

  30. #29
    Jack
    Modérateur

    Re : vecteurs en c++

    Je ne vais pas pouvoir passer derrière toi en permanence pour corriger tes erreurs, il va falloir être un peu plus autonome.
    Je te fais les 2 premières pour cette fois encore:
    error: expected nested-name-specifier before ‘namespace’
    using namespace std;
    L'erreur est détectée en arrivant sur cette ligne qui est correcte, donc l'erreur est antérieure. "#include "exemple.h""semble également correcte, l'erreur doit donc provenir du fichier "exemple.h". En effet, tu n'as pas mis le ; final de la déclaration de la classe.

    exemple.cpp:5:1: error: ‘vecteur’ does not name a type
    vecteur::vecteur(const vecteur& ref): n(ref.n)
    Alors là, que de causes potentielles d'erreur: tu as appelé ta classe vecteut au lieu de vecteur, "vecteut(vecteur const& v);//déclaration d'un constructeur de copie" vecteut à nouveau, le paramètre s'appelle v dans le .h et ref dans le .cpp

    Bref, beaucoup d'erreurs d'étourderie que tu aurais pu corriger seul

  31. #30
    Jack
    Modérateur

    Re : vecteurs en c++

    Ah, il y a cette ligne à revoir aussi:

    vecteur::vecteur(int n):n(0)
    tu veux créer un vecteur de n élements et tu mets n à 0

Page 1 sur 4 12 3 DernièreDernière

Discussions similaires

  1. [Biologie Moléculaire] Différence entre vecteurs de clonage et vecteurs de séquençage ?
    Par invitec2abc4fa dans le forum Biologie
    Réponses: 2
    Dernier message: 21/11/2014, 23h08
  2. Vecteurs vitesse et vecteurs accélération
    Par invite621f0bb4 dans le forum Physique
    Réponses: 16
    Dernier message: 15/11/2012, 18h07
  3. Réponses: 37
    Dernier message: 09/06/2011, 17h15
  4. Vecteurs
    Par invite99269d86 dans le forum Mathématiques du collège et du lycée
    Réponses: 13
    Dernier message: 11/10/2009, 21h25
  5. vecteurs
    Par invite614a49ba dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 15/11/2006, 16h20