Объясните, что происходит в части кода - C#

Узнай цену своей работы

Формулировка задачи:

Алгоритм сортировки простым слиянием Шаг 1. Исходный файл A разбивается на два вспомогательных файла B и C. Шаг 2. Вспомогательные файлы B и C сливаются в файл A, при этом одиночные элементы образуют упорядоченные пары. Шаг 3. Полученный файл A вновь обрабатывается, как указано в шагах 1 и 2. При этом упорядоченные пары переходят в упорядоченные четверки. Шаг 4. Повторяя шаги, сливаем четверки в восьмерки и т. д., каждый раз удваивая длину слитых последовательностей до тех пор, пока не будет упорядочен целиком весь файл (как на фото) Весь код
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. namespace Файловая_сортировка
  8. {
  9. class Program
  10. {
  11. public static void generator(int n)
  12. {
  13. StreamWriter sw1 = new StreamWriter("A.txt");
  14. Random rnd = new Random();
  15. for (int i = 0; i < n-1; i++)
  16. {
  17. sw1.WriteLine(rnd.Next(-100,100));
  18. };
  19. sw1.Write(rnd.Next(-100,100));
  20. sw1.Close();
  21. }
  22. public static void razdel(int p, int n)
  23. {
  24. StreamReader sr1 = new StreamReader("A.txt");
  25. StreamWriter sw2 = new StreamWriter("B.txt");
  26. StreamWriter sw3 = new StreamWriter("C.txt");
  27. for (int i = 0; i < n; i++)
  28. {
  29. string Value = sr1.ReadLine();
  30. if ((i / p) % 2 == 0)
  31. sw2.WriteLine(Value);
  32. else
  33. sw3.WriteLine(Value);
  34. };
  35. sr1.Close();
  36. sw2.Close();
  37. sw3.Close();
  38. }
  39. public static void sliyanie(int p, int n)
  40. {
  41. int x, y;//считываемые x-A y-C числа
  42. int c, d;//индексы
  43. int p1=p, p2;//длинна отрезка
  44. int o; //для корректной обработки последнего захода
  45. StreamWriter sw1 = new StreamWriter("A.txt");
  46. StreamReader sr2 = new StreamReader("B.txt");
  47. StreamReader sr3 = new StreamReader("C.txt");
  48. int i = 0;
  49. while (sr3.EndOfStream == false) // если не пустой
  50. {
  51. x = Int32.Parse(sr2.ReadLine());
  52. y = Int32.Parse(sr3.ReadLine());
  53. c = 0;
  54. d = 0;
  55. if ((i == n / (2 * p)) && (n % (2 * p)!= 0))
  56. { o = n % (2 * p); p2=o%p;}
  57. else
  58. { o = p * 2; p2 = p; }
  59. do
  60. {
  61. if ((x < y) && (c < p1))
  62. {
  63. sw1.WriteLine(x);
  64. c++;
  65. if((c < p1)&&(sr2.EndOfStream==false))
  66. x = Int32.Parse(sr2.ReadLine());
  67. }
  68. else
  69. if (d < p2)
  70. {
  71. sw1.WriteLine(y);
  72. d++;
  73. if((d<p2)&&(sr3.EndOfStream==false))
  74. y = Int32.Parse(sr3.ReadLine());
  75. }
  76. else
  77. {
  78. sw1.WriteLine(x);
  79. c++;
  80. if((c<p1)&&(sr2.EndOfStream==false))
  81. x = Int32.Parse(sr2.ReadLine());
  82. }
  83. } while ((c + d) != o);
  84. i++;
  85. }
  86. while (sr2.EndOfStream == false)
  87. sw1.WriteLine(Int32.Parse(sr2.ReadLine()));
  88. sw1.Close();
  89. sr2.Close();
  90. sr3.Close();
  91. }
  92. static void Main(string[] args)
  93. {
  94. int n=20;
  95. generator(n);
  96. for (int p = 1; p < n; p*=2)
  97. {
  98. razdel(p, n);
  99. sliyanie(p, n);
  100. }
  101. }
  102. }
  103. }
Подскажите , что происходит в этой части кода:
Листинг программы
  1. if ((i == n / (2 * p)) && (n % (2 * p)!= 0))
  2. { o = n % (2 * p); p2=o%p;}
  3. else
  4. { o = p * 2; p2 = p; }

Решение задачи: «Объясните, что происходит в части кода»

textual
Листинг программы
  1. if ((i == n / (2 * p)) // если   i == n / (2 * p)
  2.                 && (n % (2 * p)!= 0)) // И   n % (2 * p) != 0)   - остаток от деления n на (2 * p) не равен нулю
  3.             {                       // тогда
  4.                 o = n % (2 * p); // о присваивается остаток от деления n на (2 * p)
  5.                 p2 = o % p; // о присваивается остаток от деления o на p
  6.             }
  7.             else // иначе ... дальше все должно быть понятно
  8.             {
  9.                 o = p * 2;
  10.                 p2 = p;
  11.             }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы