C++
Fermé
TCHILDA
-
24 nov. 2008 à 23:42
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 25 nov. 2008 à 08:49
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 25 nov. 2008 à 08:49
3 réponses
Eclyps
Messages postés
19
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
13 janvier 2009
11
25 nov. 2008 à 00:25
25 nov. 2008 à 00:25
Mes tes sources directement sur CCM.net ou si elles sont très longue héberge les mais mes pas l'exécutable.
#include "Verbe.h"
/* constructeur par defaut */
Verbe::Verbe(){m_string=NULL;}
/* constructeur surcharge */
Verbe::Verbe(char *verbe){
if(verbe!=NULL){
m_string=new char[strlen(verbe)+1];
m_string=strcpy(m_string,verbe);
}
else m_string=NULL;
}
/* constructeur par copie */
Verbe::Verbe(class Verbe& verbe){
char *s=verbe.GetString();
if(s!=NULL){
m_string=new char[strlen(s)+1];
m_string=strcpy(m_string,s);}
else
m_string=NULL;
m_groupe=verbe.GetGroupe();
m_isRegular=verbe.IsRegular();
}
/* destructeur */
Verbe::~Verbe(){
if(m_string!=NULL)delete m_string;}
/* metode getstring : sert a enregistrer la valeur de m_string */
char *Verbe::GetString(){return m_string;}
/* la methode IsRegular : sert a enregistrer la valeur de m_isRegular */
bool Verbe::IsRegular(){return m_isRegular;}
/* methde getgroupe */
unsigned int Verbe::GetGroupe(){return m_groupe;}
void Verbe::SetIsRegular(bool isRegular){m_isRegular=isRegular;}
void Verbe::SetGroupe(unsigned int groupe){m_groupe=groupe;}
void Verbe::SetString(char *string){
if(m_string!=NULL)delete m_string;
if(string!=NULL){
m_string=new char[strlen(string)+1];
m_string=strcpy(m_string,string);}
else
m_string=NULL;
}
/* fonction de decoupage : sert à prendre la terminaison de chaque verbe */
char*decoupe(char*v){
char*p;
p=new char[3];
int i,j;
for(i=0,j=strlen(v)-2;i<2;i++,j++)
{
p[i]=v[j];
}
p[3]='\0';
return p;
}
/* fonction de decoupage1 */
char*decoupe1(char*v1){
char*p1;
p1=new char[4];
int i,j;
for(i=0,j=strlen(v1)-3;i<3;i++,j++)
{
p1[i]=v1[j];
}
p1[4]='\0';
return p1;
}
/* methode identification du groupe */
unsigned int Verbe :: IdentifierGroupe(){
char *var1;
char *var2;
var1 = new char[3];
var1 = strcpy(var1,decoupe(m_string));
var2 = new char[4];
var2 = strcpy(var2,decoupe1(m_string));
if(strcmp(var1,"er") == 0)
{
if(strcmp(m_string,"aller") == 0 )
m_groupe=3;
else
m_groupe=1;
}
if(strcmp(var1,"ir") == 0)
{
if((strcmp(var2,"uir")==0)||(strcmp(var2,"lir")==0)||(strcmp(var2,"rir")==0)||(strcmp(var2,"oir")==0)||(strcmp(var2,"mir")==0)||(strcmp(var2,"mir")==0)||(strcmp(var2,"vir")==0)||(strcmp(var2,"sir")==0)||(strcmp(var2,"tenir")==0))
m_groupe=3;
else
m_groupe=2;
}
if(strcmp(var1,"re") == 0)
{m_groupe=3;}
return m_groupe;
}
/* methode affiche */
void Verbe :: Affiche(){
char*a;
char*b;
a = new char[3];
b = new char[12];
if(m_groupe == 1)
a=strcpy(a,"ere");
if(m_groupe == 2)
a=strcpy(a,"eme");
if(m_isRegular =true)
b = strcpy(b," regulier");
if(m_isRegular =false)
b = strcpy(b," irregulier");
printf("le verbe %s est un verbe : %s du %d %s groupe\n\n\n",m_string,b,m_groupe,a);
}
/* methode pour conjuguer */
void Verbe :: Conjuguer(char *temps){
char * verbe;
verbe =new char[30];
int i;
char * present1 [6] ={"e","es","e","ons","ez","ent"};
char * avoir [6] ={"ai","as","a","avons","avez","ont"};
char * pascompose[6] ={"é","é","é","é","é","é"};
char * present1g [6] ={"e","es","e","eons","ez","ent"};
char * present2 [6] ={"s","s","t","ssons","ssez","ssent"};
char * present3 [6] ={"s","s","t","ons","ez","ent"};
char * sujet [6] ={"je","tu","il/elle","nous","vous","ils/elles"};
char * sujet1 [6] ={"j'","tu","il/elle","nous","vous","ils/elles"};
printf("Entrez dans quel temp en va conjugue le verbe ");
/* conjuguaison en present de l'indicatif */
char*temp;
temp = new char[strlen(temp)+1];
if(strcmp(temp,"present")){
if(m_groupe == 1)
{
/* Les verbes en voyelles */
if((verbe[0]=='a') || (verbe[0]=='e') || (verbe[0]=='i') || (verbe[0]=='o') || (verbe[0]=='u'))
{
/* Couper la terminason 'er' */
verbe[1-2]='\0';
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet1[i],verbe,present1[i]);
}
}
/* verbe du premier groupe avec une terminaison "ger" */
else if(verbe[1-3] == 'g')
{
/* decouper la terminaison */
verbe[1-2]= '\0';
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],verbe,present1g[i]);
}
}
else
{
/* decouper la terminaison */
verbe[1-2]= '\0';
/* cas general des verbe du 1er groupe au present de l'indicatif. */
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],verbe,present1[i]);
}
}
}
/* 2eme groupe */
if(m_groupe == 2)
{
/* decouper la terminaison */
verbe[1-1]= '\0';
/* cas general des verbe du 2eme groupe au present de l'indicatif. */
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],verbe,present2[i]);
}
}
/* 3eme groupe */
if(m_groupe == 3)
{
/* Les verbes en voyelles */
if((verbe[0]=='a') || (verbe[0]=='e') || (verbe[0]=='i') || (verbe[0]=='o') || (verbe[0]=='u'))
{
/* Couper la terminason 'er' */
verbe[1-1]='\0';
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet1[i],verbe,present3[i]);
}
}
/* verbe du premier groupe avec une terminaison "ger" */
else
{
/* decouper la terminaison */
verbe[1-1]= '\0';
/* cas general des verbe du 3er groupe au present de l'indicatif*/
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],verbe,present3[i]);
}
}
}
}
/* passe composé */
if(strcmp(temp,"passe compose")){
if(m_groupe == 1)
{
/* Les verbes en voyelles */
if((verbe[0]=='a') || (verbe[0]=='e') || (verbe[0]=='i') || (verbe[0]=='o') || (verbe[0]=='u'))
{
/* Couper la terminason 'er' */
verbe[1-2]='\0';
for(i=0;i<6;i++)
{
printf("%s %s %s %s \n",sujet1[i],avoir[i],verbe,pascompose[i]);
}
}
else
{
/* decouper la terminaison */
verbe[1-2]= '\0';
/* cas general des verbe du 1er groupe au present de l'indicatif*/
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],avoir[i],verbe,pascompose[i]);
}
}
}
/* 2eme groupe */
if(m_groupe == 2)
{
/* decouper la terminaison */
verbe[1-1]= '\0';
/* cas general des verbe du 2eme groupe au present de l'indicatif.*/
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],avoir[i],verbe);
}
}
//3eme groupe
if(m_groupe == 3)
{
/* Les verbes en voyelles */
if((verbe[0]=='a') || (verbe[0]=='e') || (verbe[0]=='i') || (verbe[0]=='o') || (verbe[0]=='u'))
{
// Couper la terminason 'er'
verbe[1-1]='\0';
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet1[i],avoir[i],verbe);
}
}
/* verbe du premier groupe avec une terminaison "ger" */
else
{
/*decouper la terminaison*/
verbe[1-1]= '\0';
/* cas general des verbe du 3er groupe au present de l'indicatif. */
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],avoir[i],verbe);
}
}
}
}
}
int main(void)
{
//v1 sans arguments
Verbe v1;
//v1.SetIsRegular();
//v1.SetGroupe();
//v1.Affiche();
printf("%s\n",v1.GetString());
Verbe v2("travailler");
v2.SetIsRegular(true);
v2.SetGroupe(1);
v2.Affiche();
//v4 par copie de v1
Verbe v4=v2;
v4.Affiche();
//question 2-3
printf("Entrez le verbe a conjuger:\n");
char*verbe=new char[100];
scanf("%s",verbe);
Verbe v3(verbe);
v3.IdentifierGroupe();
v3.Conjuguer("présent");
v3.SetIsRegular(true);
v3.SetGroupe(1);
v3.Affiche();
delete verbe;
return 0;
}
dans la compliation il n ya pa d'erreurs mai dans l'execution donne une erreur
merci
/* constructeur par defaut */
Verbe::Verbe(){m_string=NULL;}
/* constructeur surcharge */
Verbe::Verbe(char *verbe){
if(verbe!=NULL){
m_string=new char[strlen(verbe)+1];
m_string=strcpy(m_string,verbe);
}
else m_string=NULL;
}
/* constructeur par copie */
Verbe::Verbe(class Verbe& verbe){
char *s=verbe.GetString();
if(s!=NULL){
m_string=new char[strlen(s)+1];
m_string=strcpy(m_string,s);}
else
m_string=NULL;
m_groupe=verbe.GetGroupe();
m_isRegular=verbe.IsRegular();
}
/* destructeur */
Verbe::~Verbe(){
if(m_string!=NULL)delete m_string;}
/* metode getstring : sert a enregistrer la valeur de m_string */
char *Verbe::GetString(){return m_string;}
/* la methode IsRegular : sert a enregistrer la valeur de m_isRegular */
bool Verbe::IsRegular(){return m_isRegular;}
/* methde getgroupe */
unsigned int Verbe::GetGroupe(){return m_groupe;}
void Verbe::SetIsRegular(bool isRegular){m_isRegular=isRegular;}
void Verbe::SetGroupe(unsigned int groupe){m_groupe=groupe;}
void Verbe::SetString(char *string){
if(m_string!=NULL)delete m_string;
if(string!=NULL){
m_string=new char[strlen(string)+1];
m_string=strcpy(m_string,string);}
else
m_string=NULL;
}
/* fonction de decoupage : sert à prendre la terminaison de chaque verbe */
char*decoupe(char*v){
char*p;
p=new char[3];
int i,j;
for(i=0,j=strlen(v)-2;i<2;i++,j++)
{
p[i]=v[j];
}
p[3]='\0';
return p;
}
/* fonction de decoupage1 */
char*decoupe1(char*v1){
char*p1;
p1=new char[4];
int i,j;
for(i=0,j=strlen(v1)-3;i<3;i++,j++)
{
p1[i]=v1[j];
}
p1[4]='\0';
return p1;
}
/* methode identification du groupe */
unsigned int Verbe :: IdentifierGroupe(){
char *var1;
char *var2;
var1 = new char[3];
var1 = strcpy(var1,decoupe(m_string));
var2 = new char[4];
var2 = strcpy(var2,decoupe1(m_string));
if(strcmp(var1,"er") == 0)
{
if(strcmp(m_string,"aller") == 0 )
m_groupe=3;
else
m_groupe=1;
}
if(strcmp(var1,"ir") == 0)
{
if((strcmp(var2,"uir")==0)||(strcmp(var2,"lir")==0)||(strcmp(var2,"rir")==0)||(strcmp(var2,"oir")==0)||(strcmp(var2,"mir")==0)||(strcmp(var2,"mir")==0)||(strcmp(var2,"vir")==0)||(strcmp(var2,"sir")==0)||(strcmp(var2,"tenir")==0))
m_groupe=3;
else
m_groupe=2;
}
if(strcmp(var1,"re") == 0)
{m_groupe=3;}
return m_groupe;
}
/* methode affiche */
void Verbe :: Affiche(){
char*a;
char*b;
a = new char[3];
b = new char[12];
if(m_groupe == 1)
a=strcpy(a,"ere");
if(m_groupe == 2)
a=strcpy(a,"eme");
if(m_isRegular =true)
b = strcpy(b," regulier");
if(m_isRegular =false)
b = strcpy(b," irregulier");
printf("le verbe %s est un verbe : %s du %d %s groupe\n\n\n",m_string,b,m_groupe,a);
}
/* methode pour conjuguer */
void Verbe :: Conjuguer(char *temps){
char * verbe;
verbe =new char[30];
int i;
char * present1 [6] ={"e","es","e","ons","ez","ent"};
char * avoir [6] ={"ai","as","a","avons","avez","ont"};
char * pascompose[6] ={"é","é","é","é","é","é"};
char * present1g [6] ={"e","es","e","eons","ez","ent"};
char * present2 [6] ={"s","s","t","ssons","ssez","ssent"};
char * present3 [6] ={"s","s","t","ons","ez","ent"};
char * sujet [6] ={"je","tu","il/elle","nous","vous","ils/elles"};
char * sujet1 [6] ={"j'","tu","il/elle","nous","vous","ils/elles"};
printf("Entrez dans quel temp en va conjugue le verbe ");
/* conjuguaison en present de l'indicatif */
char*temp;
temp = new char[strlen(temp)+1];
if(strcmp(temp,"present")){
if(m_groupe == 1)
{
/* Les verbes en voyelles */
if((verbe[0]=='a') || (verbe[0]=='e') || (verbe[0]=='i') || (verbe[0]=='o') || (verbe[0]=='u'))
{
/* Couper la terminason 'er' */
verbe[1-2]='\0';
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet1[i],verbe,present1[i]);
}
}
/* verbe du premier groupe avec une terminaison "ger" */
else if(verbe[1-3] == 'g')
{
/* decouper la terminaison */
verbe[1-2]= '\0';
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],verbe,present1g[i]);
}
}
else
{
/* decouper la terminaison */
verbe[1-2]= '\0';
/* cas general des verbe du 1er groupe au present de l'indicatif. */
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],verbe,present1[i]);
}
}
}
/* 2eme groupe */
if(m_groupe == 2)
{
/* decouper la terminaison */
verbe[1-1]= '\0';
/* cas general des verbe du 2eme groupe au present de l'indicatif. */
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],verbe,present2[i]);
}
}
/* 3eme groupe */
if(m_groupe == 3)
{
/* Les verbes en voyelles */
if((verbe[0]=='a') || (verbe[0]=='e') || (verbe[0]=='i') || (verbe[0]=='o') || (verbe[0]=='u'))
{
/* Couper la terminason 'er' */
verbe[1-1]='\0';
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet1[i],verbe,present3[i]);
}
}
/* verbe du premier groupe avec une terminaison "ger" */
else
{
/* decouper la terminaison */
verbe[1-1]= '\0';
/* cas general des verbe du 3er groupe au present de l'indicatif*/
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],verbe,present3[i]);
}
}
}
}
/* passe composé */
if(strcmp(temp,"passe compose")){
if(m_groupe == 1)
{
/* Les verbes en voyelles */
if((verbe[0]=='a') || (verbe[0]=='e') || (verbe[0]=='i') || (verbe[0]=='o') || (verbe[0]=='u'))
{
/* Couper la terminason 'er' */
verbe[1-2]='\0';
for(i=0;i<6;i++)
{
printf("%s %s %s %s \n",sujet1[i],avoir[i],verbe,pascompose[i]);
}
}
else
{
/* decouper la terminaison */
verbe[1-2]= '\0';
/* cas general des verbe du 1er groupe au present de l'indicatif*/
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],avoir[i],verbe,pascompose[i]);
}
}
}
/* 2eme groupe */
if(m_groupe == 2)
{
/* decouper la terminaison */
verbe[1-1]= '\0';
/* cas general des verbe du 2eme groupe au present de l'indicatif.*/
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],avoir[i],verbe);
}
}
//3eme groupe
if(m_groupe == 3)
{
/* Les verbes en voyelles */
if((verbe[0]=='a') || (verbe[0]=='e') || (verbe[0]=='i') || (verbe[0]=='o') || (verbe[0]=='u'))
{
// Couper la terminason 'er'
verbe[1-1]='\0';
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet1[i],avoir[i],verbe);
}
}
/* verbe du premier groupe avec une terminaison "ger" */
else
{
/*decouper la terminaison*/
verbe[1-1]= '\0';
/* cas general des verbe du 3er groupe au present de l'indicatif. */
for(i=0;i<6;i++)
{
printf("%s %s %s \n",sujet[i],avoir[i],verbe);
}
}
}
}
}
int main(void)
{
//v1 sans arguments
Verbe v1;
//v1.SetIsRegular();
//v1.SetGroupe();
//v1.Affiche();
printf("%s\n",v1.GetString());
Verbe v2("travailler");
v2.SetIsRegular(true);
v2.SetGroupe(1);
v2.Affiche();
//v4 par copie de v1
Verbe v4=v2;
v4.Affiche();
//question 2-3
printf("Entrez le verbe a conjuger:\n");
char*verbe=new char[100];
scanf("%s",verbe);
Verbe v3(verbe);
v3.IdentifierGroupe();
v3.Conjuguer("présent");
v3.SetIsRegular(true);
v3.SetGroupe(1);
v3.Affiche();
delete verbe;
return 0;
}
dans la compliation il n ya pa d'erreurs mai dans l'execution donne une erreur
merci
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
25 nov. 2008 à 08:49
25 nov. 2008 à 08:49
Salut.
Je n'ai pas lu ton code, juste survolé. J'ai vu qu'il y avait des pointeurs. Si le code compile bien mais que tu as une erreur de segmentation à l'exécution (tu n'as pas préciser l'erreur) il y a 9 chance sur 10 que le problème vienne d'une allocation mémoire mal faite.
Plutôt que de te le faire, je vais t'expliquer comme résoudre ce problème. Déjà, il convient d'être rigoureux, c'est à dire qu'a chaque fois que l'on modifie une variable pointé, il faut être certain qu'elle a été alloué. Mais bon, personne n'est à l'abris d'une erreur ou d'un oubli. C'est pour ça qu'il y a le "debuggueur". Son nom est gdb si tu utilise gcc pour compiler. Grace à ce programme tu lance ton exécutable (gdb monprog.exe) dans un mode particulier qui va te dire où l'erreur se produit.
Si le debugueur n'y arrive pas (ça arrive, car il ne réagit pas comme l'OS, et les erreurs de mémoire peuvent être assez subtiles) il existe des utilitaire plus lourd qui pourront t'aider, tel que Valgrind.
Je n'ai pas lu ton code, juste survolé. J'ai vu qu'il y avait des pointeurs. Si le code compile bien mais que tu as une erreur de segmentation à l'exécution (tu n'as pas préciser l'erreur) il y a 9 chance sur 10 que le problème vienne d'une allocation mémoire mal faite.
Plutôt que de te le faire, je vais t'expliquer comme résoudre ce problème. Déjà, il convient d'être rigoureux, c'est à dire qu'a chaque fois que l'on modifie une variable pointé, il faut être certain qu'elle a été alloué. Mais bon, personne n'est à l'abris d'une erreur ou d'un oubli. C'est pour ça qu'il y a le "debuggueur". Son nom est gdb si tu utilise gcc pour compiler. Grace à ce programme tu lance ton exécutable (gdb monprog.exe) dans un mode particulier qui va te dire où l'erreur se produit.
Si le debugueur n'y arrive pas (ça arrive, car il ne réagit pas comme l'OS, et les erreurs de mémoire peuvent être assez subtiles) il existe des utilitaire plus lourd qui pourront t'aider, tel que Valgrind.