sevio14
Messages postés15Date d'inscriptionmercredi 5 mai 2010StatutMembreDernière intervention 3 mars 2011
-
10 mai 2010 à 23:37
sevio14
Messages postés15Date d'inscriptionmercredi 5 mai 2010StatutMembreDernière intervention 3 mars 2011
-
15 mai 2010 à 14:55
Aider moi svp à le terminer ce programme,voici le programme:
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<<"]";
pop70
Messages postés181Date d'inscriptionmardi 6 avril 2010StatutMembreDernière intervention 7 janvier 201210 11 mai 2010 à 20:37
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
#include <vector>
#include <stdlib.h>
Quel est l'élément qui est dans stdlib.h qui ne se trouve pas dans iostream ?
sevio14
Messages postés15Date d'inscriptionmercredi 5 mai 2010StatutMembreDernière intervention 3 mars 2011 12 mai 2010 à 01:47
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é
Sproduitscalaire(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.
pop70
Messages postés181Date d'inscriptionmardi 6 avril 2010StatutMembreDernière intervention 7 janvier 201210 12 mai 2010 à 22:41
Voici le code de matrice::identite, le seul problème est de rajouter 1 ou 0 à la matrice en fonction de if ou else.
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 :
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
Messages postés181Date d'inscriptionmardi 6 avril 2010StatutMembreDernière intervention 7 janvier 201210 13 mai 2010 à 12:12
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 :
// 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;
}
}
sevio14
Messages postés15Date d'inscriptionmercredi 5 mai 2010StatutMembreDernière intervention 3 mars 2011 13 mai 2010 à 20:17
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
matarinfo
Messages postés1Date d'inscriptionsamedi 17 avril 2010StatutMembreDernière intervention13 mai 2010 13 mai 2010 à 23:18
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