Conjugaison c++

Résolu/Fermé
September - 30 oct. 2007 à 09:42
 penguin - 2 nov. 2007 à 19:10
Bonjour à tous

voilà j'ai fait un programme qui conjuge les verbes du 1er groupe juste au présent.
il marche et tous mais je suis sur "using namespace en std" et il faut que je le mets en "using namespace System" et en uilisant les méthodes "Compare" et "Substring" de la classe String.

voilà mon programme en std

#include "stdafx.h"
#include<iostream>
#include <iomanip>

using namespace std;

int main()
{
char *sujet[6]={"je","tu","il","nous","vous","ils"};
char *sujet1[6]={"j'","tu","il","nous","vous","ils"};
char *terminaissons[6]={"e","es","e","ons","ez","ent"};
char *terminaissons1[6]={"e","es","e","eons","ez","ent"}; // cas pour les verbes en ger
char verbe[32];
int i;
int l;

cout<<"Saisir un verbe du 1er groupe :"<<endl;
cin>>verbe;

while(((verbe[l-2] !='e') || (verbe[l-1] !='r') || (strcmp(verbe,"aller")==0)))
{
// Contrôle s'il s'agit d'un verbe en 'er'
l=strlen(verbe);
if(((verbe[l-2] !='e') || (verbe[l-1] !='r') || (strcmp(verbe,"aller")==0)))
{
cout<<"Saisir un verbe du 1er groupe s'il vous plait :"<<endl;
cin>>verbe;
}
else
{
// 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[l-2]='\0';
cout<<"La conjugaison est au present"<<endl<<endl;
if((verbe[l-3]=='g')) //Les verbes en ger
{
for(int i=0;i<6;i++)
{
cout<<sujet1[i]<<ends<<verbe<<terminaissons1[i]<<endl;
}
}
else
{
for(int i=0;i<6;i++)
{
cout<<sujet1[i]<<ends<<verbe<<terminaissons[i]<<endl;
}
}
return 0;
}
else
{
// Couper la terminason 'er'
verbe[l-2]='\0';
cout<<"La conjugaison est au present"<<endl<<endl;
if((verbe[l-3]=='g')) //Les verbes en ger
{
for(int i=0;i<6;i++)
{
cout<<sujet[i]<<ends<<verbe<<terminaissons1[i]<<endl;
}
}
else
{
for(int i=0;i<6;i++)
{
cout<<sujet[i]<<ends<<verbe<<terminaissons[i]<<endl;
}
}
return 0;
}
}
}
}

et j'ai essayé en System mais j'ai des erreurs et ça marche pas et j'ai pas compris comment utiliser le substring

#include "stdafx.h"
#include <iostream>
#include <string>
#using<mscorlib.dll>

using namespace System;

int main(array<System::String ^> ^args)
{
char sujet[6]={"je","tu","il","nous","vous","ils"};
char sujet1[6]={"j'","tu","il","nous","vous","ils"};
char terminaissons[6]={"e","es","e","ons","ez","ent"};
char terminaissons1[6]={"e","es","e","eons","ez","ent"}; // cas pour les verbes en ger
char verbe;
int i;
int l;

Console::WriteLine("Saisir un verbe du 1er groupe :\n");
verbe=Console::Read();
while((((verbe=Console::Read())[l-2] !='e') || ((verbe=Console::Read())[l-1] !='r') || (SubString(verbe,"aller")==0)))
{
// Contrôle s'il s'agit d'un verbe en 'er'
l=compare(verbe);
if((((verbe=Console::Read())[l-2] !='e') || ((verbe=Console::Read())[l-1] !='r') || (SubString(verbe,"aller")==0)))
{
Console::WriteLine("Saisir un verbe du 1er groupe s'il vous plait :\n");
Console::ReadLine();
}
else
{
// 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[l-2]='\0';
Console::WriteLine("La conjugaison est au present \n \n");
if((verbe[l-3]=='g')) //Les verbes en ger
{
for(int i=0;i<6;i++)
{
Console::WriteLine(sujet1[i],"_",verbe,terminaissons1[i],"\n");
}
}
else
{
for(int i=0;i<6;i++)
{
Console::WriteLine(sujet1[i],"_",verbe,terminaissons[i],"\n");
}
}
return 0;
}
else
{
// Couper la terminason 'er'
verbe[l-2]='\0';
Console::WriteLine("La conjugaison est au present \n \n");
if((verbe[l-3]=='g')) //Les verbes en ger
{
for(int i=0;i<6;i++)
{
Console::WriteLine(sujet[i],"_",verbe,terminaissons1[i],"\n");
}
}
else
{
for(int i=0;i<6;i++)
{
Console::WriteLine(sujet[i],"_",verbe,terminaissons[i],"\n");
}
}
return 0;
}
}
}
}

voilà si quelqu'un peut me donne un petit coup de main pour que j'arrive à comprendre mes erreurs et j’ai pas compris comment on utilise le substring
merci d'avance à ceux qui m'aider
A voir également:

4 réponses

mamiemando Messages postés 33304 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 octobre 2024 7 794
30 oct. 2007 à 10:01
Bon très sincèrement le programme avec std me plaît beaucoup plus car il a une chance modulo quelques modifications de pouvoir compiler sous linux, donc rien que pour ça il est mieux. Maintenant tu t'es vraiment cassé la tête avec les char *. Utilise des std::string ce sera beaucoup plus simple. Accessoirement quand tu appelles sujet[i] avec i allant de 0 à 5 le programme fait n'importe quoi si le sujet fait moins de 5 caractères.

Pense aussi à donner des vrais noms de variables, et évite les headers non standard (stdafx.h par exemple)

D'un point de vue esthétique il serait plus logique de faire une fonction qui teste si le verbe commence par une voyelle :
inline bool commence_par_voyelle(const std::string & str){
  return str[0] == 'a' || str[0] == 'e' || str[0] == 'i' 
      || str[0] == 'o' || str[0] == 'u' || str[0] == 'y';
}

et d'appeler en conséquence le bon sujet. Idem avec les verbes en g

std::cout << (commence_par_voyelle(verbe) ? sujet_voyelle[i] : sujet_consonne[i]) << '\t' 
    << radical << (verbe_en_g(verbe) ? terminaison_g[i] : terminaison_sans_g[i]) << std::endl;


Bonne chance
0
ok Merci mamiemando pour que j'améliore mon programme en standard mais il marche c'est le plus important ^^, j'ai pas trop envi de le chaner tanr qu'il marche c'est le plus important pour moi ^^

mais merci pour que j'améliore

mon problème est de passer de standard à System, c'est un peu dur mais j'essaye

Merci mamiemando pour l'aide
0
mamiemando Messages postés 33304 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 octobre 2024 7 794
30 oct. 2007 à 20:01
C'est surtout sans intérêt à mon humble avis, à part pour la beauté l'exercice. De manière générale il vaut mieux avoir un code portable.

Bonne continuation
0
a part si c'est un exercice genre TP de bts, mais l'espace de nom System, c'est anti-portabilite, anti autre chose que microsoft ;)
0