.NET 4.x Нужна анимация выделения столбика, который находится по бинарному поиску - C#

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

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

Я написал программу, которая визуализирует сортировку массива. В ней же есть бинарный поиск. Но я не могу придумать несложную анимацию того, как выделяется правильный столбик, который находится через бинарный поиск. Помогите, пожалуйста
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Threading;
  10. namespace WindowsFormsApplication1
  11. {
  12. public partial class Визуализация : Form
  13. {
  14. public Визуализация()
  15. {
  16. InitializeComponent();
  17. }
  18. public int[] array;
  19. int razmer = 30;
  20. private void swap<T>(ref T a, ref T b)
  21. {
  22. T c = a;
  23. a = b;
  24. b = c;
  25. }
  26. //Прорисовка сортированного массива
  27. private void drawSort(int[] array)
  28. {
  29. bool flag = true;
  30. Pen pen = new Pen(Color.Yellow);
  31.  
  32. Graphics graphics = pictureBox1.CreateGraphics();
  33. graphics.Clear(Color.Black);
  34. for (int i = (int)0; i <= razmer; i++)
  35. {
  36. for (int j = 0; j < array.Length; j++)
  37. {
  38. if (flag)
  39. pen = new Pen(Color.Yellow);
  40. else
  41. pen = new Pen(Color.Violet);
  42. flag = !flag;
  43. if (array[j] >= i)
  44. graphics.FillRectangle(new SolidBrush(pen.Color), 15 * j, pictureBox1.Height - 15 * i, 15, 15);
  45. }
  46. }
  47. }
  48. //Прорисовка клеточного поля
  49. private void drawMarking()
  50. {
  51. Graphics graphics = pictureBox1.CreateGraphics();
  52. Pen pen = new Pen(Color.DarkGreen);
  53. for (int i = 0; i < pictureBox1.Height; i += 15)
  54. graphics.DrawLine(pen, 0, pictureBox1.Height - i, pictureBox1.Width, pictureBox1.Height - i);
  55. for (int i = 0; i < pictureBox1.Width; i += 15)
  56. graphics.DrawLine(pen, i, 0, i, pictureBox1.Width);
  57. }
  58. private void pictureBox1_Paint(object sender, PaintEventArgs e)
  59. {
  60. ((PictureBox)sender).CreateGraphics().Clear(Color.Black);
  61. drawMarking();
  62. }
  63. //Кнопка "Запуск"
  64. private void button3_Click(object sender, EventArgs e)
  65. {
  66. textBox1.Text = " ";
  67. listBox1.Items.Clear();
  68. Random random = new Random();
  69. array = new int[(int)30];
  70. array = array.Select(x => random.Next((int)0, (int)(razmer))).ToArray();
  71. for (int i = 0; i < array.Length; i++)
  72. {
  73. int min = i;
  74. for (int j = i + 1; j < array.Length; j++)
  75. if (array[j] < array[min])
  76. min = j;
  77. if (min != i)
  78. swap(ref array[i], ref array[min]);
  79. listBox1.Items.Add(array[i]);
  80. drawSort(array);
  81. drawMarking();
  82. Thread.Sleep(40);
  83. }
  84. }
  85. //Кнопка "Поиск"
  86. private void button2_Click(object sender, EventArgs e)
  87. {
  88. //Бинарный поиск
  89. int chislo = (int)numericUpDown1.Value;
  90. int lev = 0;
  91. int prav = razmer;
  92. int mid;
  93. if (chislo < array[0] || chislo > array[array.Length - 1])
  94. {
  95. textBox1.Text = "Число за границами массива";
  96. }
  97. else
  98. {
  99. while (lev < prav)
  100. {
  101. mid = lev + (prav - lev) / 2;
  102. if (chislo <= array[mid])
  103. {
  104. prav = mid;
  105. }
  106. else
  107. {
  108. lev = mid + 1;
  109. }
  110. }
  111. if (array[prav] == chislo)
  112. {
  113. int N = prav + 1;
  114. int i = prav;
  115. while (array[i] == chislo & i < array.Length - 1)
  116. {
  117. i++;
  118. }
  119. textBox1.Text = "Место числа в массиве: " + N;
  120. }
  121. else
  122. {
  123. textBox1.Text = "Числа нет в массиве";
  124. }
  125. }
  126.  
  127. }
  128. //Закрыть
  129. private void button5_Click(object sender, EventArgs e)
  130. {
  131. Application.Exit();
  132. }
  133. private void button4_Click(object sender, EventArgs e)
  134. {
  135. Титульник form1 = new Титульник();
  136. form1.Show();
  137. Hide();
  138. }
  139. private void pictureBox1_Click(object sender, EventArgs e)
  140. {
  141. }
  142. }
  143. }

Решение задачи: «.NET 4.x Нужна анимация выделения столбика, который находится по бинарному поиску»

textual
Листинг программы
  1. System.Threading.Thread.Sleep(1000);

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


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

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

9   голосов , оценка 4.222 из 5

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

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

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