Program.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using ExpertSystemPCL;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. namespace Polygones
  6. {
  7. class Program : HumanInterface
  8. {
  9. static void Main(string[] args)
  10. {
  11. Program p = new Program();
  12. p.Run();
  13. }
  14. public void Run()
  15. {
  16. // Moteur
  17. Console.Out.WriteLine("** Création du moteur **");
  18. Motor m = new Motor(this);
  19. // Règles
  20. Console.Out.WriteLine("** Ajout des règles **");
  21. m.AddRule("R1 : IF (Ordre=3(Quel est l'ordre ?)) THEN Triangle");
  22. m.AddRule("R2 : IF (Triangle AND Angle Droit(La figure a-t-elle au moins un angle droit ?)) THEN Triangle Rectangle");
  23. m.AddRule("R3 : IF (Triangle AND Cotes Egaux=2(Combien la figure a-t-elle de côtés égaux ?)) THEN Triangle Isocèle");
  24. m.AddRule("R4 : IF (Triangle Rectangle AND Triangle Isocèle) THEN Triangle Rectangle Isocèle");
  25. m.AddRule("R5 : IF (Triangle AND Cotes Egaux=3(Combien la figure a-t-elle de côtés égaux ?)) THEN Triangle Equilateral");
  26. m.AddRule("R6 : IF (Ordre=4(Quel est l'ordre ?)) THEN Quadrilatère");
  27. m.AddRule("R7 : IF (Quadrilatère AND Cotes Paralleles=2(Combien y'a-t-il de côtés parallèles entre eux - 0, 2 ou 4)) THEN Trapeze");
  28. m.AddRule("R8 : IF (Quadrilatère AND Cotes Paralleles=4(Combien y'a-t-il de côtés parallèles entre eux - 0, 2 ou 4)) THEN Parallélogramme");
  29. m.AddRule("R9 : IF (Parallélogramme AND Angle Droit(La figure a-t-elle au moins un angle droit ?)) THEN Rectangle");
  30. m.AddRule("R10 : IF (Parallélogramme AND Cotes Egaux=4(Combien la figure a-t-elle de côtés égaux ?)) THEN Losange");
  31. m.AddRule("R11 : IF (Rectangle AND Losange THEN Carré");
  32. // Résolution
  33. while (true)
  34. {
  35. Console.Out.WriteLine("\n** Résolution **");
  36. m.Solve();
  37. }
  38. }
  39. public int AskIntValue(String p)
  40. {
  41. Console.Out.WriteLine(p);
  42. try {
  43. return int.Parse(Console.In.ReadLine());
  44. }
  45. catch (Exception)
  46. {
  47. return 0;
  48. }
  49. }
  50. public bool AskBoolValue(String p)
  51. {
  52. Console.Out.WriteLine(p + " (yes, no)");
  53. String res = Console.In.ReadLine();
  54. if (res.Equals("yes"))
  55. {
  56. return true;
  57. }
  58. else
  59. {
  60. return false;
  61. }
  62. }
  63. public void PrintFacts(List<IFact> facts)
  64. {
  65. String res = "Solution(s) trouvée(s) : \n";
  66. foreach (IFact f in facts.Where(x => x.Level() > 0).OrderByDescending(x => x.Level()))
  67. {
  68. res += f.ToString() + "\n";
  69. }
  70. Console.Out.Write(res);
  71. }
  72. public void PrintRules(List<Rule> rules)
  73. {
  74. String res = "";
  75. foreach (Rule r in rules)
  76. {
  77. res += r.ToString() + "\n";
  78. }
  79. Console.Out.Write(res);
  80. }
  81. }
  82. }