// Transforme le verbe en un verbe à l'infinitif. public static void ToInfinitive(ref Verb verbe) { if (verbe.Nature == "verbe conjugué") { verbe = new InfinitiveVerb(verbe.Action, verbe.Group, verbe.AuxAvoir, verbe.AuxEtre, verbe.NonPronominale, verbe.Pronominale, verbe.Transitif, verbe.Intransitif); } // Sinon, on ne fait rien car le verbe est déjà à l'infinitif. }
public static void Test_Verbe() { // MINI PROGRAMME DE TEST POUR LA CONJUGAISON DES VERBES Verb verbe; string temps; string mode; string type; string res = ""; Console.WriteLine(" 1. Je veux entrer des verbes à l'infinitif\n 2. Je veux entrer des verbes conjugués"); if (Console.ReadLine() == "1") { type = "verbe infinitif"; } else { type = "verbe conjugué"; } Console.WriteLine(); while (true) { temps = ""; mode = "indicatif"; res = ""; Console.WriteLine("Verbe ?\t"); if (type == "verbe infinitif") { verbe = new InfinitiveVerb(Console.ReadLine()); } else { verbe = new ConjugatedVerb(Console.ReadLine()); } while (res != "autre") { Console.WriteLine("\nMode et temps ?\t"); res = Console.ReadLine(); if (res == "autre") { break; } // On cherche le mode if (res.Contains("conditionnel")) { mode = "conditionnel"; } else if (res.Contains("subjonctif")) { mode = "subjonctif"; } else if (res.Contains("impératif")) { mode = "impératif"; } else if (res.Contains("participe")) { mode = "participe"; } else { mode = "indicatif"; } // On cherche le temps if (res.Contains("présent")) { temps = "présent"; } else if (mode == "indicatif") { if (res.Contains("imparfait")) { temps = "imparfait"; } else if (res.Contains("passé simple")) { temps = "passé simple"; } else if (res.Contains("futur simple")) { temps = "futur simple"; } else if (res.Contains("composé")) { temps = "passé composé"; } else if (res.Contains("parfait")) { temps = "plus-que-parfait"; } else if (res.Contains("passé antérieur")) { temps = "passé antérieur"; } else if (res.Contains("futur antérieur")) { temps = "futur antérieur"; } else if (res.Contains("passé")) { temps = "passé simple"; } else if (res.Contains("futur")) { temps = "futur simple"; } else { temps = "présent"; } } else if (mode == "subjonctif") { if (res.Contains("imparfait")) { temps = "imparfait"; } else if (res.Contains("passé")) { temps = "passé"; } else if (res.Contains("parfait")) { temps = "plus-que-parfait"; } else { temps = "présent"; } } else { if (res.Contains("passé")) { temps = "passé"; } else { temps = "présent"; } } Console.WriteLine(); if (type == "verbe infinitif") { if (mode == "impératif") { Console.WriteLine(ConjugationOf(verbe, "2", temps, mode) + " !"); Console.WriteLine(ConjugationOf(verbe, "4", temps, mode) + " !"); Console.WriteLine(ConjugationOf(verbe, "5", temps, mode) + " !"); } else if (mode == "subjonctif") { string leVerbe = ConjugationOf(verbe, "1", temps, mode); if (leVerbe != "" && new char[] { 'a', 'e', 'i', 'o', 'u', 'y' }.Contains(leVerbe[0])) { Console.WriteLine("que j'" + leVerbe); } else { Console.WriteLine("que je " + ConjugationOf(verbe, "1", temps, mode)); } Console.WriteLine("que tu " + ConjugationOf(verbe, "2", temps, mode)); Console.WriteLine("qu'il " + ConjugationOf(verbe, "3", temps, mode)); Console.WriteLine("que nous " + ConjugationOf(verbe, "4", temps, mode)); Console.WriteLine("que vous " + ConjugationOf(verbe, "5", temps, mode)); Console.WriteLine("qu'ils " + ConjugationOf(verbe, "6", temps, mode)); } else if (mode == "participe") { Console.WriteLine(ConjugationOf(verbe, "1", temps, mode)); } else { string leVerbe = ConjugationOf(verbe, "1", temps, mode); if (leVerbe != "" && new char[] { 'a', 'e', 'i', 'o', 'u', 'y' }.Contains(leVerbe[0])) { Console.WriteLine("J'" + leVerbe); } else { Console.WriteLine("Je " + ConjugationOf(verbe, "1", temps, mode)); } Console.WriteLine("Tu " + ConjugationOf(verbe, "2", temps, mode)); Console.WriteLine("Il " + ConjugationOf(verbe, "3", temps, mode)); Console.WriteLine("Nous " + ConjugationOf(verbe, "4", temps, mode)); Console.WriteLine("Vous " + ConjugationOf(verbe, "5", temps, mode)); Console.WriteLine("Ils " + ConjugationOf(verbe, "6", temps, mode)); } } else { if (mode == "impératif") { Console.WriteLine(ConjugationOf(verbe, "2", temps, mode) + " !"); Console.WriteLine(ConjugationOf(verbe, "4", temps, mode) + " !"); Console.WriteLine(ConjugationOf(verbe, "5", temps, mode) + " !"); } else if (mode == "subjonctif") { string leVerbe = ConjugationOf(verbe, "1", temps, mode); if (leVerbe != "" && new char[] { 'a', 'e', 'i', 'o', 'u', 'y' }.Contains(leVerbe[0])) { Console.WriteLine("que j'" + leVerbe); } else { Console.WriteLine("que je " + ConjugationOf(verbe, "1", temps, mode)); } Console.WriteLine("que tu " + ConjugationOf(verbe, "2", temps, mode)); Console.WriteLine("qu'il " + ConjugationOf(verbe, "3", temps, mode)); Console.WriteLine("que nous " + ConjugationOf(verbe, "4", temps, mode)); Console.WriteLine("que vous " + ConjugationOf(verbe, "5", temps, mode)); Console.WriteLine("qu'ils " + ConjugationOf(verbe, "6", temps, mode)); } else if (mode == "participe") { Console.WriteLine(ConjugationOf(verbe, "1", temps, mode)); } else { string leVerbe = ConjugationOf(verbe, "1", temps, mode); if (leVerbe != "" && new char[] { 'a', 'e', 'i', 'o', 'u', 'y' }.Contains(leVerbe[0])) { Console.WriteLine("J'" + leVerbe); } else { Console.WriteLine("Je " + ConjugationOf(verbe, "1", temps, mode)); } Console.WriteLine("Tu " + ConjugationOf(verbe, "2", temps, mode)); Console.WriteLine("Il " + ConjugationOf(verbe, "3", temps, mode)); Console.WriteLine("Nous " + ConjugationOf(verbe, "4", temps, mode)); Console.WriteLine("Vous " + ConjugationOf(verbe, "5", temps, mode)); Console.WriteLine("Ils " + ConjugationOf(verbe, "6", temps, mode)); } } Console.WriteLine(); } Console.Clear(); } // POUR CRÉER UN FICHIER TEXTE CONTENANT LA LISTE DES VERBES À AJOUTER // Conjugaison.AjoutAutomatiqueVerbe.triVerbes(); }
// METHODES DE CLASSE // Conjugue le verbe conjugué à la personne et au temps entrés en paramètre. public static string ConjugationOf(Verb verbe, string person, string time, string mode) { // On déclare un objet InfinitiveVerb sur lequel on effectuera les modifications afin de ne pas modifier le verbe entré en paramètre. InfinitiveVerb verbeInfinitif; // Cas où le verbe entré en paramètre est un verbe conjugué. if (verbe.Nature == "verbe conjugué") { verbeInfinitif = new InfinitiveVerb(verbe.Action, verbe.Group, verbe.AuxAvoir, verbe.AuxEtre, verbe.NonPronominale, verbe.Pronominale, verbe.Transitif, verbe.Intransitif); } // Cas où le verbe entré en paramètre est un infinitif. else { verbeInfinitif = (InfinitiveVerb)verbe; } // ----- Cas des temps non composés ----- if (new string[] { "présent", "imparfait", "passé simple", "futur simple" }.Contains(time) || mode + time == "participepassé") { string nomTable = verbeInfinitif.Nature == "verbeInfinitif conjugué" ? "VerbesConjugues" : "VerbesInfinitifs"; // Si le verbeInfinitif est connu, on récupère directement sa conjugaison dans la base de données. if (estConnu(verbeInfinitif._verbe, nomTable)) { for (int idRow = 0; idRow < RecupBDD.lesData.Tables["VerbesConjugues"].Rows.Count; idRow++) { DataRow row = RecupBDD.lesData.Tables["VerbesConjugues"].Rows[idRow]; // Si on a trouvé la ligne pour l'infinitif où le groupe est le même pour le temps et la personne que l'on souhaite, // en renvoie le verbeInfinitif conjugué de cette même ligne. if (row["Infinitif"] as string == verbeInfinitif._verbe && row["Groupe"] as string == verbeInfinitif.Group && row["Temps"] as string == time && row["Mode"] as string == mode && row["Personne"] as string == person && row["Verbe"] as string != null) { // On ne renvoie le verbeInfinitif conjugué à cet endroit là que si le verbeInfinitif trouvé n'est pas null (c'est à dire, qu'il est // renseigné dans la table. Sinon, on passe à la suite afin de le construire manuellement. return(new ConjugatedVerb(row["Verbe"] as string, person, verbeInfinitif.Group, time, mode, verbeInfinitif._verbe, verbeInfinitif.AuxAvoir, verbeInfinitif.AuxEtre, verbeInfinitif.NonPronominale, verbeInfinitif.Pronominale, verbeInfinitif.Transitif, verbeInfinitif.Intransitif)._verbe); } } } // Si on arrive à ce stade du programme, c'est que le verbeInfinitif n'est pas connu ou que la forme voulue (temps / personne) // n'est pas connue. Il faut donc construire la conjugaison manuellement. // On commence par récupérer le radical du verbeInfinitif. string stem = stemOf(verbeInfinitif._verbe, verbeInfinitif.Nature); string ending = ""; for (int idRow = 0; idRow < RecupBDD.lesData.Tables["Conjugaison"].Rows.Count; idRow++) { DataRow row = RecupBDD.lesData.Tables["Conjugaison"].Rows[idRow]; // Si on a trouvé la ligne où le groupe est le même pour le temps et la personne que l'on souhaite, // on récupère la terminaison correspondante à cette ligne. if (row["VerbGroup"] as string == verbeInfinitif.Group && row["Time"] as string == time && row["Mode"] as string == mode && row["Person"] as string == person) { ending = row["Ending"] as string; break; } } // Si ending est null, ending vaut la chaîne vide. ending = ending ?? ""; // Si à ce stade, la terminaison est vide, c'est que la combinaison personne/temps/mode n'existe pas // (exemple : à l'impératif, seules les personnes 2, 4 et 5 existent). // On n'entre alors pas dans le traitement des exceptions car il n'y a rien à traiter et // cela va donc générer des erreurs. if (ending != "") { // On traite les exceptions : // Premier groupe : if (verbeInfinitif.Group == "1") { // -eler, -eter → -elle, -ette si "appeler" ou "jeter" if (ending[0] == 'e' && ending != "ez" && (verbeInfinitif._verbe.Contains("appeler") || verbeInfinitif._verbe.Contains("jeter"))) { stem += stem[stem.Length - 1]; } // -e*er → è else if (stem[stem.Length - 2] == 'e' && ending[0] == 'e' && ending != "ez") { stem = stem.Substring(0, stem.Length - 2) + "è" + stem[stem.Length - 1]; } // -é*er → è else if (stem[stem.Length - 2] == 'é' && new string[] { "e", "es", "ent" }.Contains(ending)) { stem = stem.Substring(0, stem.Length - 2) + "è" + stem[stem.Length - 1]; } // -*yer → i else if (stem[stem.Length - 1] == 'y' && ending[0] == 'e' && ending != "ez") { stem = stem.Substring(0, stem.Length - 1) + "i"; } } // Deuxième groupe : else if (verbeInfinitif.Group == "2") { // Les verbes du deuxième groupe sont régulier, sauf le verbeInfinitif haïr. if (verbeInfinitif._verbe == "ha" && !(new string[] { "1", "2", "3" }.Contains(person) && new string[] { "présent indicatif", "présent impératif" }.Contains(time + " " + mode))) { ending = "ï" + ending.Substring(1); } } // Troisième groupe : else if (verbeInfinitif.Group == "3") { // Si le dernier caractère du radical est un 't' et que la terminaison commence par un 's', // on supprime le 't'. Exemple : sortir → sort- → sors if (stem[stem.Length - 1] == 't' && ending[0] == 's') { stem = stem.Substring(0, stem.Length - 1); } } // Général : // c → ç if (stem[stem.Length - 1] == 'c' && new char[] { 'a', 'o', 'â' }.Contains(ending[0])) { stem = stem.Substring(0, stem.Length - 1) + "ç"; } // g → ge else if (stem[stem.Length - 1] == 'g' && new char[] { 'a', 'o', 'â' }.Contains(ending[0])) { stem += "e"; } } return(new ConjugatedVerb(stem + ending, person, verbeInfinitif.Group, time, mode, verbeInfinitif._verbe, verbeInfinitif.AuxAvoir, verbeInfinitif.AuxEtre, verbeInfinitif.NonPronominale, verbeInfinitif.Pronominale, verbeInfinitif.Transitif, verbeInfinitif.Intransitif)._verbe); } // ----- Cas des temps composés ----- // Si le temps souhaité est un temps composé (ex : passé composé), on le construit de la façon suivante : // auxiliaire conjugué au temps correspondant (passé composé → présent) + participe passé du verbeInfinitif. else { string verb = ""; // Indicatif if (time == "passé composé") { verb = ConjugationOf(new InfinitiveVerb(verbeInfinitif.GetAuxiliaire()), person, "présent", mode) + " " + verbeInfinitif.GetParticipePasse(); } else if (time == "plus-que-parfait") { verb = ConjugationOf(new InfinitiveVerb(verbeInfinitif.GetAuxiliaire()), person, "imparfait", mode) + " " + verbeInfinitif.GetParticipePasse(); } else if (time == "passé antérieur") { verb = ConjugationOf(new InfinitiveVerb(verbeInfinitif.GetAuxiliaire()), person, "passé simple", mode) + " " + verbeInfinitif.GetParticipePasse(); } else if (time == "futur antérieur") { verb = ConjugationOf(new InfinitiveVerb(verbeInfinitif.GetAuxiliaire()), person, "futur simple", mode) + " " + verbeInfinitif.GetParticipePasse(); } // Autre else if (time == "passé") { verb = ConjugationOf(new InfinitiveVerb(verbeInfinitif.GetAuxiliaire()), person, "présent", mode) + " " + verbeInfinitif.GetParticipePasse(); } return(new ConjugatedVerb(verb, person, verbeInfinitif.Group, time, mode, verbeInfinitif._verbe, verbeInfinitif.AuxAvoir, verbeInfinitif.AuxEtre, verbeInfinitif.NonPronominale, verbeInfinitif.Pronominale, verbeInfinitif.Transitif, verbeInfinitif.Intransitif)._verbe); } }