Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
888 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  problème numero=source.numero

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème numero=source.numero

n°1241616
ttibot
We Are What We Create
Posté le 08-11-2005 à 19:32:41  profilanswer
 

Je m'entraine au c++ et je ne trouve pas la raison d'une erreur.
Si quelqu'un à envi de triffouiller je lui serai reconnaissant si il pouvait m'apporter son aide.
 
C'est un programme de gestion de tableaux de noms.
Il comporte deux classes: CPersonnes dont les objets sont un nom et un numéro et CGroupe dont les objets sont des tableaux d'élements de CPersonnes triés par ordre de numéro
 
PS: le programme compile mais c'est le déboggueur qui m'indique cette erreur quand je fais appelle à cette fonction (copier)  pour une autre de la classe. CGroupe (union).
 
Voilà déjà la classe CPersonne
 

Citation :


class CPersonne {
 
  protected :
 
   char name[30];
   int numero;
 
  public :
   void copier(CPersonne source);
   void afficher();
   void saisir();
   int recupnum();
   void mettre(int n, char*name2);
   CPersonne();
 
   
   
};
 
CPersonne::CPersonne() {
 numero=0;
}
 
 
int CPersonne::recupnum()
{
    return numero;
}
 
void CPersonne::saisir()
{
 std::cout << "Nom : \n";
 std::cin >> name;
 do
 {
  std::cout << "Numéro \n";
  std::cin >> numero;
 
 }while(numero==0);
}
 
void CPersonne::afficher()
{
 std::cout << "Nom :" << name << std::endl << "Numéro : "<< numero << std::endl;
}
 
void CPersonne::copier(CPersonne source)
{
  numero=source.numero;
  strcpy(name,source.name);
}

 
 
void CPersonne::mettre(int n, char*name2)
{
 numero=n;
 strcpy(name,name2);
}


 
La classe CGroupe
 

Citation :


class CGroupe {
 
   protected :  
 
    CPersonne tab[100];
    int index;
 
   public :
 
    CGroupe();
    void ajouter();
    void lister();
    int compter();
    void supprimer();
    int trouver(int numqui);
    int vide();
    int plein();
    void intersection(CGroupe E1,CGroupe E2);
    void Union(CGroupe E1, CGroupe E2);
    void retirer();
    void init1();
    void init2();
 
     
 
};
 
 
CGroupe::CGroupe() {
 
 index=0;
}
 
void CGroupe::lister() {
 
 int i =0;
 for(;i<index;i++)
  tab[i].afficher();
}
 
void CGroupe::ajouter() {
 
 CPersonne aux;
 int i=1;
 int j=0;
 
 if(index<100)
 {
  aux.saisir();
  while((aux.recupnum()<tab[index-i].recupnum()) && ((index-i)>-1))
  {
   tab[index-j].copier(tab[index-i]);
   i++;
   j++;
  }
  i--;
  tab[index-i].copier(aux);
  index++;
 }
   
 else
  std::cout << "Tableau plein\n";
}
 
int CGroupe::trouver(int numqui) {
 
 int i=0;
 
 if(!index)
  return -1;
 while((tab[i].recupnum() < numqui) && (i < index))
  i++;
 if(tab[i].recupnum() == numqui)
  return i;
 else
  return -1;
 
}
 
void CGroupe::intersection(CGroupe E5,CGroupe E6) {
 
 int i=0;
 for(;i<=E5.index;i++)
 
  if(E6.trouver(E5.tab[i].recupnum())!=-1)
  {
   tab[index].copier(E5.tab[i]);
   index++;
  }
}
 
void CGroupe::retirer() {
 
 int numqui=0;
 int k=0;
 
 std::cout << "numéro à supprimer ? ";
 std::cin >> numqui;
 k=trouver(numqui);
 if(k!=-
  1)
 {
  while(k<(index-1))
  {
   tab[k].copier(tab[k+1]);
   k++;
  }
  index--;
 }
 else
  std::cout << " le num n'existe pas";
}
 
void CGroupe::Union(CGroupe E1,CGroupe E2){//RENVOI UNE ERREUR. LE DEBOGUEUR INDIQUE QUE LE PROBLEME PROVIENT DE copier() ( CLASSSE CPersonne).
/* Cette procédure commence par définir lequel des premiers éléments de E1 ou de E2 est le plus petit puis elle le place dans la liste E3.
Supposons que ce soit celui de la liste E1 qui soit le plus petit elle incrémente i1 pour signifier que le premier élément de E1 à été traité.
Puis elle compare de même le second élément de E1 au premier élément de E2 et place celui qui à le plus petit numero dans E3 et ainsi de suite...*/
 int i1=0;
 int i2=0; //i1 et i2 sont des compteurs qui indiquent la progression dans les listes E1 et E2
 
 while (i1<E1.index || i2<E2.index){
  if (E1.tab[i1].recupnum()<E2.tab[i2].recupnum()){
   tab[index].copier(E1.tab[i1]);
   i1++;
   index ++;
  }
  if (E1.tab[i1].recupnum()>E2.tab[i2].recupnum()){
   tab[index].copier(E2.tab[i2]);
   i2++;
   index ++;
  }
  if (E1.tab[i1].recupnum()==E2.tab[i2].recupnum()){
   tab[index].copier(E1.tab[i1]);
   i1++;
   i2++;
   index ++;// en cas d'éléments communs c'est celui de E1 qui est copié dans E3 et les deux compteurs i1 et i2 sont incrémentés pour passer à l'élément suivant dans les deux listes
  }
 }
 if (i1==E1.index-1 && i2<E2.index-1){
  while (i2<E2.index){
   tab[index].copier(E2.tab[i2]);
   i2++;
   index ++;
  }
 }
 if (i2==E2.index-1 && i1<E1.index-1){
  while (i1<E1.index){
   tab[index].copier(E1.tab[i1]);
   i1++;
   index ++;
  }
 }
 
}

 
 
void CGroupe::init1()
{
 tab[0].mettre(1,"un" );
 tab[1].mettre(2,"deux" );
 tab[2].mettre(3,"trois" );
 tab[3].mettre(8,"huit" );
 index=4;
}
 
void CGroupe::init2()
{
 tab[0].mettre(2,"deux" );
 tab[1].mettre(5,"cinq" );
 tab[2].mettre(6,"six" );
 tab[3].mettre(31,"trente et un" );
 index=4;
}
 


 
Et le main:
 

Citation :


 
#include "stdio.h"
#include "string.h"
#include <iostream>
#include "CPersonne.h"
#include "CGroupe.h"
using namespace std;  
 
int main()
{
 
 CGroupe groupe;
 CGroupe E1;
 CGroupe E2;
 CGroupe E3;
 CGroupe E4;
 CGroupe E5;
 CGroupe E6;
 CGroupe E7;
 
 int choix=0;
 int search=0;
 
 E1.init1();
 E2.init2();
 E5.init1();
 E6.init2();
 
 
 do
 {
  std::cout << "\n1:Ajouter une entrée\n2:Lister\n3:Trouver une entrée\n4: retirer une entrée\n5: Intersection\n6 Union\n0:Quitter\n";
 
 
  std::cin >> choix;
  switch(choix)
  {
   case 1: groupe.ajouter(); break;
   case 2: groupe.lister(); break;
   case 3: cin >> search; groupe.trouver(search); break;
   case 4: groupe.retirer();break;
   case 5: E4.intersection(E5,E6);E4.lister();break;
   case 6: E3.Union(E1,E2);E3.lister();break;
   case 0: break;
  }
 
 }while(choix!=0);
 
 
}


 
Merci.

mood
Publicité
Posté le 08-11-2005 à 19:32:41  profilanswer
 

n°1241954
HelloWorld
Salut tout le monde!
Posté le 09-11-2005 à 09:27:08  profilanswer
 

J'ai pas lu, mais:

Citation :


char name[30];  


1/ c'est du C
2/ tu n'auras que des problèmes avec les char *
 
=> utilise std::string.
 
http://c.developpez.com/faq/cpp/?p [...] ype_chaine


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1241957
blackgodde​ss
vive le troll !
Posté le 09-11-2005 à 09:33:47  profilanswer
 

ttibot a écrit :

CPersonnes dont les objets sont un nom et un numéro


std::string
 

ttibot a écrit :


CGroupe dont les objets sont des tableaux d'élements de CPersonnes triés par ordre de numéro


std::set<CPersonnes> ?
avec l'opérateur < surchargé pour CPersonnes du style
 

Code :
  1. bool CPersonnes::operator < (const CPersonnes & other) const
  2. {
  3.   return numero < other.numero;
  4. }


---------------
-( BlackGoddess )-

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  problème numero=source.numero

 

Sujets relatifs
[win32] Problème Impressionsqlplus : problème union 1 to many avec dates
problème de date...Problème en CSS !!
[swing] problème de TableModelListenerProbleme d'alignement verttical.
Problème avec sscanf[CSS] Problème de cadre en CSS
Probleme de referencesRequete VB (numero auto)
Plus de sujets relatifs à : problème numero=source.numero


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR