Advertisement
CR7CR7

program-p1-dyamicConnection

Jul 14th, 2023
895
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 17.06 KB | None | 0 0
  1. using System;
  2. using System.Reflection; // Импортираме пространството от имена за работа с рефлексия
  3.  
  4. namespace p1
  5. {
  6.     // Клас за представяне на програмата
  7.     class Program
  8.     {
  9.         // Метод за стартиране на програмата
  10.         static void Main(string[] args)
  11.         {
  12.             // Зареждаме динамичната библиотека d1.dll от текущата директория
  13.             Assembly assembly = Assembly.LoadFile(Environment.CurrentDirectory + "\\d1.dll");
  14.  
  15.             // Тестваме функцията за сортиране на масив по метода на мехурчето
  16.             TestBubbleSort(assembly);
  17.  
  18.             // Тестваме функцията за намиране на факториел от дадено число рекурсивно
  19.             TestFactorial(assembly);
  20.  
  21.             // Тестваме функциите за работа със стек
  22.             TestStack(assembly);
  23.  
  24.             // Тестваме функциите за работа с опашка
  25.             TestQueue(assembly);
  26.  
  27.             // Тестваме функциите за работа със списък
  28.             TestList(assembly);
  29.  
  30.             // Тестваме функциите за работа с дърво
  31.             TestTree(assembly);
  32.  
  33.             // Тестваме функциите за работа с речник
  34.             TestDictionary(assembly);
  35.         }
  36.  
  37.         // Метод за тестване на функцията за сортиране на масив по метода на мехурчето
  38.         static void TestBubbleSort(Assembly assembly)
  39.         {
  40.             Console.WriteLine("Тестване на функцията за сортиране на масив по метода на мехурчето:");
  41.  
  42.             int[] array = { 5, 3, 7, 1, 9, 4, 2, 6, 8 }; // Създаваме масив с произволни числа
  43.  
  44.             Console.WriteLine("Масивът преди сортирането:");
  45.             PrintArray(array); // Извеждаме масивът преди сортирането
  46.  
  47.             // Намираме класа Algorithm в динамичната библиотека
  48.             Type algorithmType = assembly.GetType("d1.Algorithm");
  49.  
  50.             // Намираме статичния метод BubbleSort в класа Algorithm
  51.             MethodInfo bubbleSortMethod = algorithmType.GetMethod("BubbleSort");
  52.  
  53.             // Извикваме метода BubbleSort с параметър масивът, който искаме да сортираме
  54.             bubbleSortMethod.Invoke(null, new object[] { array });
  55.  
  56.             Console.WriteLine("Масивът след сортирането:");
  57.             PrintArray(array); // Извеждаме масивът след сортирането
  58.  
  59.             Console.WriteLine();
  60.         }
  61.  
  62.         // Метод за извеждане на елементите на масив
  63.         static void PrintArray(int[] array)
  64.         {
  65.             foreach (int element in array) // Обхождаме всички елементи на масива
  66.             {
  67.                 Console.Write(element + " "); // Извеждаме текущия елемент, разделен с интервал
  68.             }
  69.             Console.WriteLine(); // Превъртаме нов ред
  70.         }
  71.  
  72.         // Метод за тестване на функцията за намиране на факториел от дадено число рекурсивно
  73.         static void TestFactorial(Assembly assembly)
  74.         {
  75.   Console.WriteLine("Тестване на функцията за намиране на факториел от дадено число рекурсивно:");
  76.  
  77.             int n = 5; // Задаваме произволно число
  78.  
  79.             Console.WriteLine("Числото е: " + n); // Извеждаме числото
  80.  
  81.             // Намираме класа Algorithm в динамичната библиотека
  82.             Type algorithmType = assembly.GetType("d1.Algorithm");
  83.  
  84.             // Намираме статичния метод Factorial в класа Algorithm
  85.             MethodInfo factorialMethod = algorithmType.GetMethod("Factorial");
  86.  
  87.             // Извикваме метода Factorial с параметър числото, от което искаме да намерим факториела
  88.             int result = (int)factorialMethod.Invoke(null, new object[] { n });
  89.  
  90.             Console.WriteLine("Факториелът от числото е: " + result); // Извеждаме резултата
  91.  
  92.             Console.WriteLine();
  93.         }
  94.  // Метод за тестване на функциите за работа със стек
  95.         static void TestStack(Assembly assembly)
  96.         {
  97.             Console.WriteLine("Тестване на функциите за работа със стек:");
  98.  
  99.             // Намираме класа Stack в динамичната библиотека
  100.             Type stackType = assembly.GetType("d1.Stack`1");
  101.  
  102.             // Създаваме нов стек с капацитет 10 и тип int
  103.             object stack = Activator.CreateInstance(stackType.MakeGenericType(typeof(int)), new object[] { 10 });
  104.  
  105.             // Намираме методите Push, Pop, Peek и IsEmpty в класа Stack
  106.             MethodInfo pushMethod = stackType.GetMethod("Push");
  107.             MethodInfo popMethod = stackType.GetMethod("Pop");
  108.             MethodInfo peekMethod = stackType.GetMethod("Peek");
  109.             MethodInfo isEmptyMethod = stackType.GetMethod("IsEmpty");
  110.  
  111.             Console.WriteLine("Добавяме елементи в стека:");
  112.             for (int i = 1; i <= 5; i++) // Добавяме пет елемента в стека
  113.             {
  114.                 Console.WriteLine("Добавяме " + i);
  115.                 pushMethod.Invoke(stack, new object[] { i }); // Извикваме метода Push с параметър i
  116.             }
  117.  
  118.             Console.WriteLine("Взимаме елемента на върха на стека без да го премахваме:");
  119.             Console.WriteLine("Елементът е: " + peekMethod.Invoke(stack, null)); // Извикваме метода Peek без параметри
  120.  
  121.             Console.WriteLine("Премахваме елементи от стека:");
  122.             while (!(bool)isEmptyMethod.Invoke(stack, null)) // Докато стекът не е празен
  123.             {
  124.                 Console.WriteLine("Премахваме " + popMethod.Invoke(stack, null)); // Извикваме метода Pop без параметри и извеждаме резултата
  125.             }
  126.  
  127.             Console.WriteLine();
  128.         }
  129.  
  130.         // Метод за тестване на функциите за работа с опашка
  131.         static void TestQueue(Assembly assembly)
  132.         {
  133.             Console.WriteLine("Тестване на функциите за работа с опашка:");
  134.  
  135.             // Намираме класа Queue в динамичната библиотека
  136.             Type queueType = assembly.GetType("d1.Queue`1");
  137.  
  138.             // Създаваме нова опашка с капацитет 10 и тип int
  139.             object queue = Activator.CreateInstance(queueType.MakeGenericType(typeof(int)), new object[] { 10 });
  140.  
  141.             // Намираме методите Enqueue, Dequeue, Peek и IsEmpty в класа Queue
  142.             MethodInfo enqueueMethod = queueType.GetMethod("Enqueue");
  143.             MethodInfo dequeueMethod = queueType.GetMethod("Dequeue");
  144.             MethodInfo peekMethod = queueType.GetMethod("Peek");
  145.             MethodInfo isEmptyMethod = queueType.GetMethod("IsEmpty");
  146.  
  147.             Console.WriteLine("Добавяме елементи в опашката:");
  148.             for (int i = 1; i <= 5; i++) // Добавяме пет елемента в опашката
  149.             {
  150.                 Console.WriteLine("Добавяме " + i);
  151.                 enqueueMethod.Invoke(queue, new object[] { i }); // Извикваме метода Enqueue с параметър i
  152.             }
  153.  
  154.             Console.WriteLine("Взимаме елемента в началото на опашката без да го премахваме:");
  155.             Console.WriteLine("Елементът е: " + peekMethod.Invoke(queue, null)); // Извикваме метода Peek без параметри
  156.  
  157.             Console.WriteLine("Премахваме елементи от опашката:");
  158.             while (!(bool)isEmptyMethod.Invoke(queue, null)) // Докато опашката не е празна
  159.             {
  160.                 Console.WriteLine("Премахваме " + dequeueMethod.Invoke(queue, null)); // Извикваме метода Dequeue без параметри и извеждаме резултата
  161.             }
  162.  
  163.             Console.WriteLine();
  164.         }
  165.  
  166.         // Метод за тестване на функциите за работа със списък
  167.         static void TestList(Assembly assembly)
  168.         {
  169.             Console.WriteLine("Тестване на функциите за работа със списък:");
  170.  
  171.             // Намираме класа List в динамичната библиотека
  172.             Type listType = assembly.GetType("d1.List`1");
  173.  
  174.             // Създаваме нов списък с тип int
  175.             object list = Activator.CreateInstance(listType.MakeGenericType(typeof(int)));
  176.  
  177.             // Намираме методите AddFirst, AddLast, RemoveFirst, RemoveLast, GetFirst, GetLast и IsEmpty в класа List
  178.             MethodInfo addFirstMethod = listType.GetMethod("AddFirst");
  179.             MethodInfo addLastMethod = listType.GetMethod("AddLast");
  180.             MethodInfo removeFirstMethod = listType.GetMethod("RemoveFirst");
  181.             MethodInfo removeLastMethod = listType.GetMethod("RemoveLast");
  182.             MethodInfo getFirstMethod = listType.GetMethod("GetFirst");
  183.             MethodInfo getLastMethod = listType.GetMethod("GetLast");
  184.             MethodInfo isEmptyMethod = listType.GetMethod("IsEmpty");
  185.  
  186.             Console.WriteLine("Добавяме елементи в началото и в края на списъка:");
  187.             for (int i = 1; i <= 5; i++) // Добавяме пет елемента в началото и в края на списъка
  188.             {
  189.                 Console.WriteLine("Добавяме " + i + " в началото");
  190.                 addFirstMethod.Invoke(list, new object[] { i }); // Извикваме метода AddFirst с параметър i
  191.  
  192.                 Console.WriteLine("Добавяме " + (i + 5) + " в края");
  193.                 addLastMethod.Invoke(list, new object[] { i + 5 }); // Извикваме метода AddLast с параметър i + 5
  194.             }
  195.  
  196.             Console.WriteLine("Взимаме елементите в началото и в края на списъка без да ги премахваме:");
  197.             Console.WriteLine("Елементът в началото е: " + getFirstMethod.Invoke(list, null)); // Извикваме метода GetFirst без параметри
  198.             Console.WriteLine("Елементът в края е: " + getLastMethod.Invoke(list, null)); // Извикваме метода GetLast без параметри
  199.  
  200.             Console.WriteLine("Премахваме елементи от началото и от края на списъка:");
  201.             while (!(bool)isEmptyMethod.Invoke(list, null)) // Докато списъкът не е празен
  202.             {
  203.                 Console.WriteLine("Премахваме " + removeFirstMethod.Invoke(list, null) + " от началото"); // Извикваме метода RemoveFirst без параметри и извеждаме резултата
  204.                 if (!(bool)isEmptyMethod.Invoke(list, null)) // Ако списъкът не е празен
  205.                 {
  206.                     Console.WriteLine("Премахваме " + removeLastMethod.Invoke(list, null) + " от края"); // Извикваме метода RemoveLast без параметри и извеждаме резултата
  207.                 }
  208.             }
  209.  
  210.             Console.WriteLine();
  211.         }
  212.  
  213.         // Метод за тестване на функциите за работа с дърво
  214.         static void TestTree(Assembly assembly)
  215.         {
  216.  Console.WriteLine("Тестване на функциите за работа с дърво:");
  217.  
  218.             // Намираме класа Tree в динамичната библиотека
  219.             Type treeType = assembly.GetType("d1.Tree`1");
  220.  
  221.             // Създаваме ново дърво с тип int
  222.             object tree = Activator.CreateInstance(treeType.MakeGenericType(typeof(int)));
  223.  
  224.             // Намираме класа Node в динамичната библиотека
  225.             Type nodeType = assembly.GetType("d1.Node`1");
  226.  
  227.             // Намираме методите AddRoot, AddChild, RemoveRoot, RemoveChild, GetRoot, GetChild и IsEmpty в класа Tree
  228.             MethodInfo addRootMethod = treeType.GetMethod("AddRoot");
  229.             MethodInfo addChildMethod = treeType.GetMethod("AddChild");
  230.             MethodInfo removeRootMethod = treeType.GetMethod("RemoveRoot");
  231.             MethodInfo removeChildMethod = treeType.GetMethod("RemoveChild");
  232.             MethodInfo getRootMethod = treeType.GetMethod("GetRoot");
  233.             MethodInfo getChildMethod = treeType.GetMethod("GetChild");
  234.             MethodInfo isEmptyMethod = treeType.GetMethod("IsEmpty");
  235.  
  236.             // Намираме свойството Value в класа Node
  237.             PropertyInfo valueProperty = nodeType.GetProperty("Value");
  238.  
  239.             Console.WriteLine("Добавяме корен на дървото:");
  240.             Console.WriteLine("Добавяме 1");
  241.             addRootMethod.Invoke(tree, new object[] { 1 }); // Добавяме корен със стойност 1
  242.  
  243.             Console.WriteLine("Добавяме деца към корена на дървото:");
  244.             Console.WriteLine("Добавяме 2");
  245.             addChildMethod.Invoke(tree, new object[] { getRootMethod.Invoke(tree, null), 2 }); // Добавяме дете със стойност 2 към корена
  246.  
  247.             Console.WriteLine("Добавяме 3");
  248.             addChildMethod.Invoke(tree, new object[] { getRootMethod.Invoke(tree, null), 3 }); // Добавяме дете със стойност 3 към корена
  249.  
  250.             Console.WriteLine("Добавяме 4");
  251.             addChildMethod.Invoke(tree, new object[] { getRootMethod.Invoke(tree, null), 4 }); // Добавяме дете със стойност 4 към корена
  252.  
  253.             Console.WriteLine("Добавяме деца към първото дете на корена:");
  254.             Console.WriteLine("Добавяме 5");
  255.             addChildMethod.Invoke(tree, new object[] { getChildMethod.Invoke(tree, new object[] { getRootMethod.Invoke(tree, null), 0 }), 5 }); // Добавяме дете със стойност 5 към първото дете на корена
  256.  
  257.             Console.WriteLine("Добавяме 6");
  258.             addChildMethod.Invoke(tree, new object[] { getChildMethod.Invoke(tree, new object[] { getRootMethod.Invoke(tree, null), 0 }), 6 }); // Добавяме дете със стойност 6 към първото дете на корена
  259.  
  260.             Console.WriteLine("Взимаме второто дете на първото дете на корена без да го премахваме:");
  261.             Console.WriteLine("Елементът е: " + valueProperty.GetValue(getChildMethod.Invoke(tree, new object[] { getChildMethod.Invoke(tree, new object[] { getRootMethod.Invoke(tree, null), 0 }), 1 }))); // Извикваме метода GetChild два пъти и извеждаме стойността на елемента
  262.  
  263.             Console.WriteLine("Премахваме второто дете на първото дете на корена:");
  264.             Console.WriteLine("Премахваме " + removeChildMethod.Invoke(tree, new object[] { getChildMethod.Invoke(tree, new object[] { getRootMethod.Invoke(tree, null), 0 }), 1 })); // Извикваме метода RemoveChild и извеждаме резултата
  265.  
  266.             Console.WriteLine("Премахваме корена на дървото:");
  267.             Console.WriteLine("Премахваме " + removeRootMethod.Invoke(tree, null)); // Извикваме метода RemoveRoot и извеждаме резултата
  268.  
  269.             Console.WriteLine();
  270.         }
  271.     }
  272. }
  273.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement