begin process at 2012 05 28 14:00:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Besoin d'aide en C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Besoin d'aide en C++

lundi 10 mai 2010 à 23:37:17 | Besoin d'aide en C++

sevio14

Aider moi svp à le terminer ce programme,voici le programme:

#include <iostream>
#include "Tuples.h"
#include "Vecteur.h"
#include "Vecteur3d.h"
#include "matrice.h"
using namespace std;


int main()
{

double tab[]={5, 8, 12, 13, 45};
//cout << sizeof(tab)/sizeof(double);
Tuples v(5, tab);
Tuples a(5, 3);
Tuples b(5, 8);
b.initialiser_hasard(100);
a=b;
cout << "a " << a << "b " << b;
// a[2]=7;
Matrice m(2, 4), nn(9);
m.afficher(cout);
nn.afficher(cout);

cout << a << b << v;
Vecteur vb(b);
cout << endl << vb;

Vecteur vv;
Vecteur w(9, 2);




a.ajouter(b);
cout << a ;
Tuples c = somme(a , b);
Tuples d = a + b ;
cout << endl << "somme tuples" << c << d;


Vecteur s = somme(w, w);
cout << endl << s;


cout << " Hello world!" << endl;
return 0;
}

#include "tuples.h"


ostream & operator<<(ostream & os, Tuples & tu){
tu.afficher(os);
return os;
}



Tuples::Tuples()
{
allouer(3,0);

}

Tuples::Tuples(int n, double* tableau){
this->n = n;
vector<double> temp(n);
for(int i=0;i<n;i++)
temp[i]=tableau[i];
elements=temp;
}

Tuples::Tuples(int n){
allouer(n,0);
}

Tuples::Tuples(int n, double a){
allouer(n,a);
}

void Tuples::initialiser_hasard(int k){
for(int i=0 ; i < n; i++){
elements[i]=rand()%k;
}
}

void Tuples::allouer(int _n, double a){
n=_n;
vector <double> temp(n,a);
elements=temp;
}

void Tuples::afficher(ostream & os){
os << "[";
for(int i=0 ; i<n; i++)
os << elements[i] << " ";
os <<"]";
}


double & Tuples::operator[](const int i){

return elements[i];
}


void Tuples::ajouter(Tuples tu){

elements[0]=elements[0]+tu[0];

}

Tuples somme(Tuples & a, Tuples & b){
Tuples res(a.getN());
res[0]=a[0]+b[0];
return res;
}

Tuples operator+(Tuples & a, Tuples & b){
return somme(a, b);
}


Tuples::~Tuples()
{
//dtor
}


#ifndef TUPLES_H
#define TUPLES_H
#include <iostream>
#include <vector>
#include <stdlib.h>

using namespace std;


class hasard{
static int generer(int a){return rand()%a;}

};


class Tuples
{
public:
Tuples();
Tuples(int n, double tableau[]);
Tuples(int n);
Tuples(int n, double a);
int getN(){return n;};
void initialiser_hasard(int);
virtual void afficher(ostream &);
double & operator[](const int i);

void ajouter(Tuples tu);


virtual ~Tuples();

protected:
int n;
vector<double> elements;


friend Tuples somme(Tuples & a, Tuples & b);
friend Tuples operator+(Tuples & a, Tuples & b);


private:
void allouer(int n, double a);


};

ostream & operator<<(ostream &os, Tuples & tu);


#endif // TUPLES_H


#include "vecteur.h"

Vecteur::Vecteur():Tuples()
{
//ctor
}

Vecteur::~Vecteur()
{
//dtor
}

void Vecteur::afficher(ostream & os){
os << "[vecteur ";
Tuples::afficher(os);
os << "]";
}

double & Vecteur::operator[](const int i){

return elements[i];
}



#include "vecteur.h"

Vecteur::Vecteur():Tuples()
{
//ctor
}

Vecteur::~Vecteur()
{
//dtor
}

void Vecteur::afficher(ostream & os){
os << "[vecteur ";
Tuples::afficher(os);
os << "]";
}

double & Vecteur::operator[](const int i){

return elements[i];
}


#ifndef VECTEUR_H
#define VECTEUR_H

#include "tuples.h"


class Vecteur : public Tuples
{
public:
Vecteur();
Vecteur(Tuples tu):Tuples(tu){};
Vecteur(int n):Tuples(n){};
Vecteur(int n, double a):Tuples(n, a){};
double & Vecteur::operator[](const int i);


virtual ~Vecteur();
virtual void afficher(ostream &);
protected:

private:
};

#endif // VECTEUR_H


#include "matrice.h"



Matrice::Matrice(int lig, int col){
initialiser(lig, col, 0);

}

Matrice::Matrice(int lig, int col,double a){
initialiser(lig, col, a);

}

Matrice::Matrice(int lig){
initialiser(lig, lig,0);

}

Matrice::Matrice(){
initialiser(3, 3, 0);

}




void Matrice::initialiser(int lig, int col, double a){
// creer un veceteur ligne dont les elements sont des tuples
nl=lig;
nc=col;
vector<Vecteur>temp(lig, Vecteur(col,a));

lignes=temp;
}


void Matrice::afficher(ostream & os){
os <<"[matrice "<<endl ;
for(int i=0;i<nl;i++)
os << lignes[0]<<endl;
os<<"]";


// completer
}

#ifndef MATRICE_H_INCLUDED
#define MATRICE_H_INCLUDED
#include "vecteur.h"


class Matrice{
protected:
int nl;
int nc;
vector<Vecteur> lignes;

public:
Matrice(int nl, int nc);
Matrice(int nl, int nc, double a);
Matrice(int nl);
Matrice();

Vecteur & get(int i){
return lignes[i];
}
Vecteur & operator[](const int i){
return lignes[i];
}


void initialiser(int, int, double);
void afficher(ostream & os);






};




#endif // MATRICE_H_INCLUDED


mardi 11 mai 2010 à 20:37:46 | Re : Besoin d'aide en C++

pop70

Ce n'est pas très précis, qu'est-ce qui pose problème ?

Sinon je me pose quelques questions, si le but est de recréer la classe std::vector (sauf erreur de ma part), pourquoi utiliser celui-ci puisque le but est de le refaire ? D'ailleurs pourquoi ne pas utiliser des templates ? Je pense que même si le code est au complet, il serait bon de préciser son fonctionnement et son utilisation.

Il y autre chose, les librairies inclues sont :

#include <iostream>
#include <vector>
#include <stdlib.h>

Quel est l'élément qui est dans stdlib.h qui ne se trouve pas dans iostream ?


Pop70
mercredi 12 mai 2010 à 01:47:18 | Besoin d'aide en C++

sevio14

je te fais voir mon sujet:


On veut définir des objets représentant et manipulant des vecteurs, des points et des matrices.
La classe Vecteur des vecteurs et la classe Point des points.
Les points et les vecteurs sont de types distincts. Mais les coordonnées d’un point et les composantes d’un
vecteur étant de même nature (des tuples de réels,) pour partager le code, on va faire hériter chacune des
classes Vecteur et Point d’une classe Tuple de tuples.
La classe Tuple.
Définir une classe Tuple. Un tuple a n éléments de type double
Tuple a ; A=(0, 0 , 0) : par défaut à 3 dimension
Tuple b(5) ; b=(0, 0, 0, 0, 0)
Tuple c(354, 9) C=(9, 9, 9, 9, …, 9)
int c.size() ; Retourne le nombre n des éléments du vecteur
c.afficher(cout) [9 9 9 9 … 9] ; affichage sur cout
cout << a << c ; [0 0 0] [9 9 9 9]
b.initialiser_hasard(120) Initialiser par des entiers < 120 les éléments de b
a[1]=3 ; Opérateur [] : modifier ou accéder à un élément
Tuple d = somme(c, c) ; d=(18, 18, 18, 18)
Tuple e = c + c ; Opérateur +
d = a Affectation élément par élément
D==a Test égalité : élément par élément
D= produitexterne(4, a) d=(0, 12, 0)
E = 4 * a ; Opérateur *
Oppose(a) Opposé de a
-a Opérateur - : opposé
S= produitscalaire(a) s = 9
S = a * a Opérateur * :produit scalaire
Tuple ::base(5, 2) (0 1 0 0 0) : générer vecteur base
Implémentation :
Utiliser des objets de type vector pour représenter les éléments d’un tuple.
#include <vector>
class Tuple{
public:
Tuple();
Tuple(int _n) ;
Tuple(int _n, double a);
Virtual void afficher(ostream & out);
friend ostream & operator<<(ostream & out, Vecteur & v);
protected :
int n;
vector<double> elements;
} ; // ne pas oublier le point-virgule après la déclaration d’une classe
Par défaut, quand le nombre d’éléments n’est pas précisé, on suppose que le tuple possède 3 éléments.
Pour construire un tuples à n éléments, il faut modifier n et veiller à allouer effectivement ces n éléments.
void Tuple ::Tuple(int _n, double a){
n= _n
vector<double> temp(n,a) ; // voir constructeur de vector
elements=temp ;
}
Pour afficher un tuple, on définit une méthode afficher() avec le flux de sortie passé en paramètre:
void Tuple ::afficher (ostream & out){
out << « [» << elements[0] << elements[1] << … << « ] » ;
}
On peut alors définir l’opérateur << en faisant appel à afficher(). Ce n’est pas une méthode de Tuple.
C’est unopérateur défini à l’extérieur de Tuple mais déclaré comme ami de Tuple pour pouvoir accéder aux
membres privés de Tuple.
ostream & operator( ostream & out , Tuple & t){
t.afficher(out) ;
return out ;
}
On suppose que la somme, le produit scalaire, la comparaison s’appliquent à deux tuples de même longueur.
Classe Vecteur
Définir la classe Vecteur.
Vecteur v ;
Vecteur vv(8) ;
Vecteur w(5, 7) ;
w.afficher(cout) ;
cout << v ;
Tuple t(256, 2) ;
Vecteur vt(tu) ;
vv[2]=356 ;
[vecteur [7 7 7 7 7 7 7]]
créer un vecteur à partir d’un tuple
modifier une composante
Vecteur u = v + w ; [vecteur [0 0 0]]
V = 5 * w ;
double p = v * v ; Produit scalaire
La classe Vecteur hérite de la classe Tuple (et donc hérite des membres publiques et protégés de Tuple)
Class Vecteur : public Tuple{
public :
Vecteur(int n, double a) :Tuple(n, a){}
void afficher (ostream & out) ;
};
void Vecteur ::afficher (ostream & out){
os << "[vecteur ";
Tuple::afficher(os); // on appelle la méthode afficher de Tuple
os << "]";
}
Classe Point.
Définir la classe Point comme on a défini la classe Vecteur.
Point p(300, 4) ;
cout << p ; // affiche [point [4 4 4 … 4]]
Classe Matrice
On représente une matrice de nlig lignes et ncol colonnes comme un vecteur de nlig éléments. Chaque
élément étant un vecteur de ncol éléments de type double.
Matrice m ; Matrice carré de 3 x 3, éléments égaux à 0
Matrice mm(5) ; Matrice carré de 5 x 5
Matrice mn(5, 6) ; Matrice nulle de 5 x 6, éléments initialisés à 0
Matrice mmm(13, 12, 8) Matrice de taille 13 x 12, éléments initialisés à 8
mafficher(cout) ;
cout << m ;
[matrice
[vecteur [0 0 0]] [vecteur [0 0 0]] [vecteur [0 0 0]]]
mn.initialiser_hasarad() ;
Vecteur r = m[1] ; Opérateur[] retourne vecteur (ligne)
mn[1][2]= 125 ;
m = mm + mm ;
Matrice ::identite(n) ; Générer la matrice identité de dimension n
Km= k*m ;
Vecteur u ;
Vecteur v = m * u ; Matrice appliquée à un vecteur
m.transposer() Transposée de m
Définir la classe Matrice.
#include "vecteur.h"
class Matrice{
protected:
int nlig, ncol;
vector<Vecteur> lignes;
public:
Matrice(int nl, int nc);
Matrice(int nl, int nc, double a);
Matrice(int nl);
Matrice();
void initialiser_hasard(int limite);
void afficher(ostream & os);
Matrice generer_identite(n); //générer matrice identité
Vecteur & operator[] ;
friend ostream & operator<<(ostream & out, Matrice & m);
friend Matrice & operator+(Matrice & a, Matrice & b);
friend Vecteur & operation*(double k, Matrice &m);
friend Vecteur & operation*(Matrice & &, Veceteur & v);
};
Complément (en option):
Un vecteur lié est composé d’un point et d’un vecteur. Un champ de vecteur est une liste de vecteurs liés.
Définition des classes VecteurLie et ChampVecteur. Calcul de la résultante d’un champ de vecteur
équiprojectif.
mercredi 12 mai 2010 à 12:29:49 | Re : Besoin d'aide en C++

pop70

Qu'est-ce qu'il manque à part vecteur3d ? (je veux dire dans les fonctions )


Pop70
mercredi 12 mai 2010 à 20:49:05 | Besoin d'aide en C++

sevio14

En faite il reste à completer:
vecteur.h (constructeur et destructeur)
Matrice.h (la fin)
Tuples.h (à la fin il manque le destructeur)

Merci
mercredi 12 mai 2010 à 22:41:42 | Re : Besoin d'aide en C++

pop70

Voici le code de matrice::identite, le seul problème est de rajouter 1 ou 0 à la matrice en fonction de if ou else.


Code C/C++ :
void identite(int n);

void Matrice::identite(int n){
cout << "\n\n";
for (int lig = 0; lig < n; lig++)
{
for (int col = 0; col < n ; col++)
{
if (lig == col){
std::cout << "1";
}
else{
std::cout << "0";
}
}
cout << "\n";
}
cout << "\n\n";
}


si dans le main on écrit :

Matrice m;
m.identite (5);

il fait bien :

Code :
Code :
10000
01000
00100
00010
00001




Le problème est que je n'arrive pas à creer des Vecteurs qui ont un élément différent des autres pour faire 10000 ou 01000...Donc je ne peut pas faire lignes.push_back(unVecteur) à chaque ligne, car soit il a soit tout a 1, soit tout à 0. As-tu le droit de rajouter des fonctions ? Parce que ça aiderait bien. Sinon je vais continuer à chercher. J'envoie un post si nouveau.

Pour le reste:

Tuples n'a qu'un attribut donc

Tuples::~Tuples()
{
elements.clear(); // Pour être sûre que les éléments sont vidés
// ce qui devrait être le cas puisque elements ne contient pas de pointeurs
}

Ensuite, pour le constructeur de Vecteur je ne voit pas de problème, il hérite de tuples, il fait donc automatiquement appel au constructeur de Tuple.

D'ailleurs en essayant de compiler avec ceci dans le main :

Vecteur v;
v.afficher();

Vecteur v (7);
v.afficher()

Vecteur v (7,5);
v.afficher()

Tuples t(5,1);
Vecteur v(t);
v.afficher(cout);

Tout fonctionne.

Pour autres les destructeurs, les classes n'ayant pas de pointeurs, les destructeurs vides ne sont pas un souci, c'est même normal.




Pop70[/i]
jeudi 13 mai 2010 à 12:12:08 | Re : Besoin d'aide en C++

pop70

Voila pour matrice::identite, j'ai rajouté une fonction dans Tuples pour pouvoir modifier un seul des nombres du vecteur elements et j'ai modifié matrice::afficher :

Code C/C++ :
// Tuples.h

void modifier (int i, double e); // Rajouté dans public

// Tuples.cpp

// Rajout :

void Tuples::modifier(int i, double e)
{
elements.at(i) = e;
}

// Matrice.h

void identite(int n); //  rajouté dans public

// Matrice.cpp

// Modification :

void Matrice::afficher(ostream & os){

os <<"[matrice "<<endl ;
for(int i=0;i<lignes.size();i++){
lignes.at(i).afficher(os);
os<<"]\n";}
}

//Rajout :

void Matrice::identite(int n){
Vecteur v;
initialiser(n,n,0);
for (int lig = 0; lig < n; lig++)
{
Tuples t (n, 0.00);
for (int col = 0; col < n ; col++)
{
if (lig == col)
t.modifier(col, 1);
else
t.modifier (col,0);
}
 v = t;
lignes.at (lig) = v;
}
}



Voila, j'ai testé dans le main :

Code C/C++ :
Matrice m;
m.identite (6);
m.afficher(cout);


Et la console m'affiche bien :

Code :
[matrice
[vecteur [1 0 0 0 0 0 ]]]
[vecteur [0 1 0 0 0 0 ]]]
[vecteur [0 0 1 0 0 0 ]]]
[vecteur [0 0 0 1 0 0 ]]]
[vecteur [0 0 0 0 1 0 ]]]
[vecteur [0 0 0 0 0 1 ]]]




Pop70
jeudi 13 mai 2010 à 20:17:51 | Besoin d'aide en C++

sevio14

Merci je vais essayer de voir si ça marche,mon responsable m'a di qu'il faut faire une class point(point.h et point.cpp) quasi identique à la class vecteur
jeudi 13 mai 2010 à 20:31:59 | Re : Besoin d'aide en C++

sevio14

Au fait désolé tu avais raison en faite il me manque la classe vecteur 3d dont voici les codes:

//vecteur3d.h
#ifndef VECTEUR3D_H
#define VECTEUR3D_H

#include "vecteur.h"


class Vecteur3d : public Vecteur
{
public:
Vecteur3d();
Vecteur3d(double a);
virtual ~Vecteur3d();
protected:
private:
};

#endif // VECTEUR3D_H


//vecteur3d.cpp
#include "vecteur3d.h"

Vecteur3d::Vecteur3d():Vecteur(3)
{
//ctor
}

Vecteur3d::Vecteur3d(double a):Vecteur(3, a)
{
//ctor
}


Vecteur3d::~Vecteur3d()
{
//dtor
}


jeudi 13 mai 2010 à 23:18:16 | Re : Besoin d'aide en C++

matarinfo

j'ai besoin d'aide c'est pour faire un programme en c++ d'un carnet d'adresse l'utilisation des fichiers est exclu aidez svp c'est un projet à rendre d'ici et c'est noté.merci

1 2

Cette discussion est classée dans : int, include, void, matrice, tuples


Répondre à ce message

Sujets en rapport avec ce message

une fiche de renseignement [ par cabarrus ] je cherche à faire un programme qui demande des renseignements pour pouvoir ensuite les affiché comme une fiche d'identité!!!voici monprogramme mais m pb de compilation [ par norton ] bonjour, je desir compiler le code suivant mais j'ai une erreur.mon code :#include #include #include void Display();void Reshape(int,int);int main( in Utilisation de std::map avec le type void * [ par toast3r ] Bonjour, J'utilise un tableau associatif, map et j'ai un problème au niveau de la récuperation des valeurs, voici le code que j'ai actuellement : # [debutant]Operation de chaine encore :s [ par firemax ] Bonjour Certain reconaitrons ce code (surtout vecchio56) mais voila ca marche toujours pas et je ne comprend pas :'( Please helllppp Code : #in Delay en decimal [ par gaspard83 ] Bonjour à tous, Je débute tout juste le C++ et me familiarise avec C++ Builder. Je cherche à activer les leds de mon clavier avec ce code, mais le tim classe matrice [ par cyrinelahsini ] salut,je programme avec c++ sous linux.j'utilise une class matrice avec une fonction membre qui doit me retourner une instance de cette class.mais j'a Aide sur la construction d'une fonction [ par iamor ] Bonsoir, je souhaite améliorer un programme que j'ai codé pour qu'il soit plus clean, mais pour se faire j'aurai besoin d'avoir une petite aide sur la Remplir une matrice ? [ par MmDHost ] Bonjour,J'ai besoin de crée une matrice pour un projet sur un Modèle Numérique de Terrain cependant j'ai une érreur que je n'arrive pas à corriger, po class matrice [ par ciaonataha ] J'ai ecrit le programme classe matrice...mais j'ai les error comme:"matrice.cpp:269: error: no match for 'operator=' in 'b = matrice::Mat_decomposer(a


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,862 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales