antgre
Messages postés10Date d'inscriptionsamedi 17 avril 2004StatutMembreDernière intervention22 avril 2004
-
22 avril 2004 à 15:18
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
22 avril 2004 à 17:06
Bonjour a tous,
Je travaille sur un programme dont une partie doit implementer une liste de points.
Chaque point comprenant un certain nombre de caractéristiques.
Ma classe point marche très bien.
J'ai ensuite créé une classe list qui represente une liste d'objet T (template)
et enfin, j'ai créé une classe Pointlist qui crée des liste de points.
j'arrive (apres nombreux preoblèmes ;) ) à compiler ... Et quand je lance mon programme de test, j''obtiens
"Segmentation fault"
Je vous mets mes classes .h et .cpp ...
Merci d em'aider si vous avez quelques minutes :shy)
point.h
/* MISE A JOUR : 17/04/2004 18h19
PAR : Ant
*/
#ifndef point_h
#define point_h
/*
@ author: Delmoitié Damien
Grenier Antoine
Rahier Benjamin
@ date : Mars 2004
classe définissant les méthodes de la classe point.cpp
*/
class point
{
public:
point(double x, double y, double u, double v);
point();
void setX (double n);
void setY (double n);
void setU (double n);
void setV (double n);
void set(double x, double y, double u, double v);
double getX ();
double getY ();
double getU ();
double getV ();
double getVIT ();
double getDIST (point P);
double getDIST (double x, double y);
private:
double X;
double Y;
double U;
double V;
double VIT;
double DIST;
};
#endif
/* MISE A JOUR : 22/04/2004 15h02
PAR : Ant
REM : separation de la classe de test
*/
/*
@ author: Grenier Antoine
Delmoitie Damien
Rahier Benjamin
@ date : Mars 2004
classe permettant la gestion de differents points qui contiennent positions et vitesses
*/
#include "point.h"
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include
//Constructeur avec données
point::point(double x, double y, double u, double v){
X = x;
Y = y;
U = u;
V = v;
};
//Constructeur sans donnée
point::point(){
// initialisation d'1 point (0,0) �une vitesse (0,0)
X = 0.0;
Y = 0.0;
U = 0.0;
V = 0.0;
};
// Definir la position en X
void point::setX (double n){
X = n;
};
// Definir la position en Y
void point::setY (double n){
Y = n;
};
// Definir la vitesse U
void point::setU (double n){
U = n;
};
// Definir la vitesse V
void point::setV (double n){
V = n;
};
//définir la position et les vistesses en une fois pour Damien
void point::set(double x, double y, double u, double v){
X = x;
Y = y;
U = u;
V = v;
};
// renvoit la position en X
double point::getX (){
return X;
};
// renvoit la position en Y
double point::getY (){
return Y;
};
// renvoit la vitesse U
double point::getU (){
return U;
};
// renvoit la vitesse V
double point::getV (){
return V;
};
// renvoit la vitesse moyenne
double point::getVIT (){
VIT = sqrt(pow(U,2) + pow(V,2));
return VIT;
};
//renvoit la distance entre deux points
double point::getDIST (point P){
DIST=sqrt(pow(X-P.getX(),2) + pow(Y-P.getY(),2));
return DIST;
};
//renvoit la distance entre un point et une position
double point::getDIST (double x, double y){
DIST=sqrt(pow(X-x,2) + pow(Y-y,2));
return DIST;
};
/* MISE A JOUR : 17/04/2004
PAR : Ant
QUOI : compris un peu
*/
#ifndef list_h
#define list_h
/*
@ author: Delmoitie Damien
Grenier Antoine
Rahier Benjamin
@ date : Mars 2004
classe permettant la gestion d'une structure de donn? de type liste et
utilisant la classe template.
*/
#include
using namespace std;
template <class T>
class list
{
public: list();
~list();
bool add(T *ele);
T *remove();
void next();
void setElement(T *ele);
T *getCurrent();
int getLength()const;
bool isEmpty() const;
bool isOk() const;
bool isFirst();
bool isEnd() const;
void setFirst();
private:
//d'inition d'une structure des maillons "NOEUDS" de la list
typedef struct NOEUD{
struct NOEUD *next;
T *element;
}Node;
Node *head;
Node *tail;
Node *current;
};
// CONSTRUCTEUR
template <class T>
list<T>::list(){ head current tail = new Node;
head->next = NULL;
current->next = NULL;
tail->next = NULL;
};
// DESTRUCTEUR
template <class T>
list<T>::~list(){
setFirst();
while(!isEmpty()){
Node *del;
del=current->next;
current->next=del->next;
delete del;
}
delete head;
delete tail;
delete current;
}
//Ajoute un element dans la liste
template <class T>
bool list<T>::add(T *ele){ bool isFail (current NULL);
if (current!=NULL){
Node *pro;
pro = new Node;
pro->next = current->next;
pro->element = ele;
current->next= pro;
if (tail == current)tail=current->next;
}
return isFail;
};
//verifie que current ne Te pas vers un element NULL
template <class T>
bool list<T>::isOk() const{
return current != NULL && current->next != NULL;
};
//supprime current de la liste et renvoie l'element contenu dans le noeud
template <class T>
T *list<T>:: remove(){
T *rem = NULL;
if (isOk()){
rem = current->next->element;
Node *remo=current->next;
current->next=remo->next;
if (tail == remo) {
tail = current;
}
delete remo;
}
return rem;
};
//place current sur le noeud suivant
template <class T>
void list<T>::next(){
if (current!= NULL){
current = current->next;
}
};
template <class T>
void list<T>::setElement(T *ele){
if(isOk()){
current->next->element = ele;
}
};
//retourne l'element qui se trouve dans le noeud apres current
template <class T>
T *list<T>::getCurrent(){
T *el=NULL;
if (isOk()){
el=current->next->element;
}
return el;
};
//Retourne la longueur de la liste
template <class T>
int list<T>::getLength()const{
int counter = 0;
Node *temp;
temp = head;
while(temp->next != NULL){
counter++;
temp = temp->next;
}
return counter;
};
//Verifie que la liste n'est pas vide
template <class T>
bool list<T>::isEmpty() const{return head->next == NULL;};
//Verifie que l'element n'est pas le dernier
template <class T>
bool list<T>::isEnd() const{return current->next == NULL;};
//Verifie que l'element n'est pas le permier
template <class T>
bool list<T>::isFirst() {return current->next->next == NULL;};
//Definit le premier element
template <class T>
void list<T>::setFirst(){current = head;};
#endif
/* MISE A JOUR : 19/04/2004
PAR : Ant
*/
#ifndef Pointlist_h
#define Pointlist_h
/*
@ author: Delmoitie Damien
Grenier Antoine
Rahier Benjamin
@ date : Mars 2004
classe permettant de cr�r une liste de points
*/
#include "list.h"
#include "point.h"
#include
//typedef list listPoint;
class Pointlist : public list
{
public:
Pointlist();
~Pointlist();
void Pointlist::trier(double x, double y);
private:
Pointlist *LISTE;
};
#endif
/* MISE A JOUR : 22/04/2004 15h02
PAR : Ant
REM : separation de la classe de test
*/
/*
@ author: Delmoitie Damien
Grenier Antoine
Rahier Benjamain
@ date : Mars 2004
classe permettant de créer une liste de points
*/
#include
#include "Pointlist.h"
#include "list.h"
#include "point.h"
//définition d'une liste contenant des points
//typedef list listPoint;
//constructeur
Pointlist::Pointlist(){
LISTE = new Pointlist();
}
//destructeur
Pointlist::~Pointlist(){
delete LISTE;
}
// void Pointlist::add(point P){
// LISTE->add(P);
// }
//Trie la liste de l'element le plus proche en fonction d'une position
void Pointlist::trier(double x, double y){
cout << "tri de la liste...";
// Initialisation
Pointlist *L = new Pointlist();
point *p1 = new point();
point *p2 = new point();
bool etat;
L->add(LISTE->getCurrent());
LISTE->next();
while(LISTE->isOk()){
p1=LISTE->getCurrent();
p2=L->getCurrent();
etat=0;
while((L->isOk()) & (etat=0)){
//Comparaison des distances
if (p1->getDIST(x,y)getDIST(x,y)){
L->setElement(p1);
etat=1; }
L->next();
};
LISTE->next();
};
*LISTE=*L;
}
//CLASSE DE TEST
/* MISE A JOUR : 22/04/2004
PAR : Ant
*/
/*
@ author: Delmoitie Damien
Grenier Antoine
Rahier Benjamain
@ date : Mars 2004
classe permettant de créer une liste de points
*/
#include
#include "Pointlist.h"
#include "list.h"
#include "point.h"
int main() {
Pointlist *L1 = new Pointlist();
point *P = new point();
point *P1 = new point(0.0,0.0,0.0,0.0);
point *P2 = new point(1.0,1.0,0.0,0.0);
point *P3 = new point(2.0,2.0,0.0,0.0);
point *P4 = new point(3.0,2.0,0.0,0.0);
point *P5 = new point(6.0,3.0,0.0,0.0);
bool a = L1->isOk();
L1->add(P1);
L1->add(P2);
L1->add(P3);
double d = L1->getLength();
P->setX(L1->getCurrent()->getX());
double b = P->getX();
L1->remove();
P->setX(L1->getCurrent()->getX());
double c = P->getX();
L1->add(P4);
L1->add(P5);
L1->trier(3.0,3.0);
cout<< "|---------------------|" << endl;
cout<< "| TEST CLASSE LIST : |" << endl;
cout<< "|---------------------|" << endl;
cout<< "| Fonction isOk() |" << endl;
cout<< "ca doit Afficher 0 " << endl;
cout<< a << endl;
cout<< "| Fonction add() |" << endl;
cout<< " ca doit Afficher 2" << endl;
cout<< b << endl;
cout<< "| Fonction remove() |" << endl;
cout<< " ca doit Afficher 1" << endl;
cout<< c << endl;
cout<< "| Fonction getLength() |" << endl;
cout<< " ca doit Afficher 3" << endl;
cout<< d << endl;
cout<< "|---------------------|" << endl;
cout<< "|FIN DU TEST : bravo !|" << endl;
cout<< "|---------------------|" << endl;
return 1;
};