commit bcd334d0311ab8e6c59928bb18adb95b23630025
Author: Никита Шипилов <116575516+LAYT73@users.noreply.github.com>
Date: Sat May 11 23:56:29 2024 +0400
Курсовая работа: "Визуализация бинарного поиска"
diff --git a/.vs/BinarySearch_PIBD-11_ShipilovNikita/v17/.wsuo b/.vs/BinarySearch_PIBD-11_ShipilovNikita/v17/.wsuo
new file mode 100644
index 0000000..45ecc30
Binary files /dev/null and b/.vs/BinarySearch_PIBD-11_ShipilovNikita/v17/.wsuo differ
diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json
new file mode 100644
index 0000000..f8b4888
--- /dev/null
+++ b/.vs/ProjectSettings.json
@@ -0,0 +1,3 @@
+{
+ "CurrentProjectSetting": null
+}
\ No newline at end of file
diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json
new file mode 100644
index 0000000..6b61141
--- /dev/null
+++ b/.vs/VSWorkspaceState.json
@@ -0,0 +1,6 @@
+{
+ "ExpandedNodes": [
+ ""
+ ],
+ "PreviewInSolutionExplorer": false
+}
\ No newline at end of file
diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite
new file mode 100644
index 0000000..8051819
Binary files /dev/null and b/.vs/slnx.sqlite differ
diff --git a/BinarySearch/.vs/BinarySearch/DesignTimeBuild/.dtbcache.v2 b/BinarySearch/.vs/BinarySearch/DesignTimeBuild/.dtbcache.v2
new file mode 100644
index 0000000..6f50050
Binary files /dev/null and b/BinarySearch/.vs/BinarySearch/DesignTimeBuild/.dtbcache.v2 differ
diff --git a/BinarySearch/.vs/BinarySearch/FileContentIndex/3c72dbb6-fdce-4a3f-acbc-8e6451efeae6.vsidx b/BinarySearch/.vs/BinarySearch/FileContentIndex/3c72dbb6-fdce-4a3f-acbc-8e6451efeae6.vsidx
new file mode 100644
index 0000000..1132960
Binary files /dev/null and b/BinarySearch/.vs/BinarySearch/FileContentIndex/3c72dbb6-fdce-4a3f-acbc-8e6451efeae6.vsidx differ
diff --git a/BinarySearch/.vs/BinarySearch/FileContentIndex/72f28def-d73b-4087-b337-6ce47809aee8.vsidx b/BinarySearch/.vs/BinarySearch/FileContentIndex/72f28def-d73b-4087-b337-6ce47809aee8.vsidx
new file mode 100644
index 0000000..de5b211
Binary files /dev/null and b/BinarySearch/.vs/BinarySearch/FileContentIndex/72f28def-d73b-4087-b337-6ce47809aee8.vsidx differ
diff --git a/BinarySearch/.vs/BinarySearch/FileContentIndex/7d08648c-81d9-433b-8410-d42939db9db1.vsidx b/BinarySearch/.vs/BinarySearch/FileContentIndex/7d08648c-81d9-433b-8410-d42939db9db1.vsidx
new file mode 100644
index 0000000..4d223b1
Binary files /dev/null and b/BinarySearch/.vs/BinarySearch/FileContentIndex/7d08648c-81d9-433b-8410-d42939db9db1.vsidx differ
diff --git a/BinarySearch/.vs/BinarySearch/FileContentIndex/ad03122e-14d2-48be-a1dd-57c0a29de8b6.vsidx b/BinarySearch/.vs/BinarySearch/FileContentIndex/ad03122e-14d2-48be-a1dd-57c0a29de8b6.vsidx
new file mode 100644
index 0000000..a1827b9
Binary files /dev/null and b/BinarySearch/.vs/BinarySearch/FileContentIndex/ad03122e-14d2-48be-a1dd-57c0a29de8b6.vsidx differ
diff --git a/BinarySearch/.vs/BinarySearch/FileContentIndex/bd3591a8-49ae-4685-9707-2c85975e1cfa.vsidx b/BinarySearch/.vs/BinarySearch/FileContentIndex/bd3591a8-49ae-4685-9707-2c85975e1cfa.vsidx
new file mode 100644
index 0000000..b0e6346
Binary files /dev/null and b/BinarySearch/.vs/BinarySearch/FileContentIndex/bd3591a8-49ae-4685-9707-2c85975e1cfa.vsidx differ
diff --git a/BinarySearch/.vs/BinarySearch/v17/.futdcache.v2 b/BinarySearch/.vs/BinarySearch/v17/.futdcache.v2
new file mode 100644
index 0000000..b745ec3
Binary files /dev/null and b/BinarySearch/.vs/BinarySearch/v17/.futdcache.v2 differ
diff --git a/BinarySearch/.vs/BinarySearch/v17/.suo b/BinarySearch/.vs/BinarySearch/v17/.suo
new file mode 100644
index 0000000..bad8fdf
Binary files /dev/null and b/BinarySearch/.vs/BinarySearch/v17/.suo differ
diff --git a/BinarySearch/.vs/ProjectEvaluation/binarysearch.metadata.v7.bin b/BinarySearch/.vs/ProjectEvaluation/binarysearch.metadata.v7.bin
new file mode 100644
index 0000000..d533a40
Binary files /dev/null and b/BinarySearch/.vs/ProjectEvaluation/binarysearch.metadata.v7.bin differ
diff --git a/BinarySearch/.vs/ProjectEvaluation/binarysearch.projects.v7.bin b/BinarySearch/.vs/ProjectEvaluation/binarysearch.projects.v7.bin
new file mode 100644
index 0000000..637442a
Binary files /dev/null and b/BinarySearch/.vs/ProjectEvaluation/binarysearch.projects.v7.bin differ
diff --git a/BinarySearch/BinarySearch.sln b/BinarySearch/BinarySearch.sln
new file mode 100644
index 0000000..9151336
--- /dev/null
+++ b/BinarySearch/BinarySearch.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.8.34330.188
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BinarySearch", "BinarySearch\BinarySearch.csproj", "{D32DE24F-D9A3-411A-91C6-142A6FA1B7CF}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D32DE24F-D9A3-411A-91C6-142A6FA1B7CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D32DE24F-D9A3-411A-91C6-142A6FA1B7CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D32DE24F-D9A3-411A-91C6-142A6FA1B7CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D32DE24F-D9A3-411A-91C6-142A6FA1B7CF}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {6D9191C7-467F-4DA5-A5FB-D9795C6A8B77}
+ EndGlobalSection
+EndGlobal
diff --git a/BinarySearch/BinarySearch/Algorithm/BinarySearchAlgorithm.cs b/BinarySearch/BinarySearch/Algorithm/BinarySearchAlgorithm.cs
new file mode 100644
index 0000000..8bbaccb
--- /dev/null
+++ b/BinarySearch/BinarySearch/Algorithm/BinarySearchAlgorithm.cs
@@ -0,0 +1,111 @@
+using BinarySearch.State;
+
+namespace BinarySearch.Algorithm;
+
+///
+/// Класс-Реализатор
+///
+public class BinarySearchAlgorithm
+{
+ private List sortedArray;
+ private int target;
+ private int left { get; set; }
+ private int right { get; set; }
+ private int mid { get; set; }
+ private int? targetIndex { get; set; }
+
+ ///
+ /// Конструктор класса-реализатора
+ ///
+ ///
+ ///
+ public BinarySearchAlgorithm(List array, int target)
+ {
+ targetIndex = null;
+ sortedArray = array;
+ this.target = target;
+ left = 0;
+ right = array.Count - 1;
+ mid = left + (right - left) / 2;
+ SortArray();
+ }
+
+ ///
+ /// Сортировка массива
+ ///
+ private void SortArray()
+ {
+ sortedArray.Sort();
+ }
+
+ ///
+ /// Совершение шага алгоритма
+ ///
+ public void ExecuteStep()
+ {
+ if (left <= right)
+ {
+ if (sortedArray[mid] == target)
+ {
+ targetIndex = mid;
+ left = mid + 1;
+ right = mid - 1;
+ return;
+ }
+ if (left == right)
+ {
+ targetIndex = -1;
+ left = mid + 1;
+ right = mid - 1;
+ return;
+ }
+ if (sortedArray[mid] < target)
+ {
+ left = mid + 1;
+ }
+ else
+ {
+ right = mid - 1;
+ }
+ mid = left + (right - left) / 2;
+ }
+ else
+ {
+ targetIndex = -1;
+ }
+ }
+
+ ///
+ /// Создание состояние актуального шага
+ ///
+ ///
+ public SearchState CreateState()
+ {
+ return new SearchState(left, right, mid, targetIndex, sortedArray, target);
+ }
+
+ ///
+ /// Восстановление шага алгоритма по состоянию
+ ///
+ ///
+ public void RestoreState(SearchState state)
+ {
+ left = state.Left;
+ right = state.Right;
+ mid = state.Mid;
+ targetIndex = state.TargetIndex;
+ sortedArray = state.Array;
+ target = state.Target;
+ }
+
+ ///
+ /// Проверка на завершенность алгоритма
+ ///
+ ///
+ public bool IsOver()
+ {
+ return left <= right;
+ }
+}
+
+
diff --git a/BinarySearch/BinarySearch/Algorithm/BinarySearchVisualizer.cs b/BinarySearch/BinarySearch/Algorithm/BinarySearchVisualizer.cs
new file mode 100644
index 0000000..eff391e
--- /dev/null
+++ b/BinarySearch/BinarySearch/Algorithm/BinarySearchVisualizer.cs
@@ -0,0 +1,127 @@
+using BinarySearch.State;
+
+namespace BinarySearch.Algorithm;
+
+///
+/// Класс для визуализации бинарного поиска.
+///
+public class BinarySearchVisualizer
+{
+ private readonly MainForm _mainForm;
+ private readonly List _array;
+
+ ///
+ /// Конструктор класса BinarySearchVisualizer.
+ ///
+ /// Главная форма приложения.
+ /// Массив, который будет визуализироваться.
+ public BinarySearchVisualizer(MainForm mainForm, List array)
+ {
+ _mainForm = mainForm ?? throw new ArgumentNullException(nameof(mainForm));
+ _array = array;
+ }
+
+ ///
+ /// Визуализация текущего состояния поиска.
+ ///
+ /// Текущее состояние поиска.
+ public void Visualize(SearchState state)
+ {
+ Color color;
+ if (state.TargetIndex == null)
+ {
+ color = Color.Orange;
+ } else if (state.TargetIndex >= 0)
+ {
+ color = Color.Green;
+ } else
+ {
+ color = Color.Red;
+ }
+ UpdateFlowLayoutPanelByStep(state, color);
+ }
+
+ ///
+ /// Обновление панели с элементами.
+ ///
+ public void UpdateFlowLayoutPanel()
+ {
+ _mainForm.flowLayoutPanelArray.Controls.Clear();
+ _mainForm.flowLayoutPanelIndex.Controls.Clear();
+
+ if (_array != null)
+ {
+ for (int i = 0; i < _array.Count; i++)
+ {
+ TextBox textBox = new()
+ {
+ Text = _array[i].ToString(),
+ Width = 40,
+ ReadOnly = false
+ };
+
+ TextBox textBoxIndex = new()
+ {
+ Text = i.ToString(),
+ Width = 40,
+ ReadOnly = true,
+ Enabled = false
+ };
+
+ _mainForm.flowLayoutPanelArray.Controls.Add(textBox);
+ _mainForm.flowLayoutPanelIndex.Controls.Add(textBoxIndex);
+ }
+ }
+ }
+
+ ///
+ /// Обновление панели с элементами по шагам
+ ///
+ ///
+ ///
+ private void UpdateFlowLayoutPanelByStep(SearchState state, Color color)
+ {
+ _mainForm.flowLayoutPanelArray.Controls.Clear();
+ _mainForm.flowLayoutPanelIndex.Controls.Clear();
+ if (state.Mid < state.Target)
+ {
+ _mainForm.labelMid.Text = "";
+ }
+ if (_array != null)
+ {
+ for (int i = 0; i < _array.Count; i++)
+ {
+ TextBox textBox = new()
+ {
+ Text = _array[i].ToString(),
+ Width = 40,
+ ReadOnly = true
+ };
+
+ if (i < state.Left || i > state.Right)
+ {
+ textBox.BackColor = Color.Black;
+ textBox.ForeColor = Color.White;
+ textBox.Enabled = false;
+ }
+ if (i == state.Mid)
+ {
+ textBox.BackColor = color;
+ textBox.ForeColor = Color.White;
+ textBox.Enabled = true;
+ }
+
+ TextBox textBoxIndex = new()
+ {
+ Text = i.ToString(),
+ Width = 40,
+ ReadOnly = true,
+ Enabled = false
+ };
+
+ _mainForm.flowLayoutPanelArray.Controls.Add(textBox);
+ _mainForm.flowLayoutPanelIndex.Controls.Add(textBoxIndex);
+ }
+ }
+ }
+}
diff --git a/BinarySearch/BinarySearch/Algorithm/Manager.cs b/BinarySearch/BinarySearch/Algorithm/Manager.cs
new file mode 100644
index 0000000..5f02e38
--- /dev/null
+++ b/BinarySearch/BinarySearch/Algorithm/Manager.cs
@@ -0,0 +1,44 @@
+using BinarySearch.State;
+
+namespace BinarySearch.Algorithm;
+
+///
+/// Класс, управляющий выполнением бинарного поиска.
+///
+public class Manager
+{
+ private readonly StateStorage _storage;
+
+ ///
+ /// Конструктор класса Manager
+ ///
+ /// Хранилище состояний.
+ public Manager(StateStorage storage)
+ {
+ _storage = storage;
+ }
+
+ ///
+ /// Выполнение бинарного поиска.
+ ///
+ /// Параметры поиска.
+ public void ExecuteBinarySearch(SearchParameters parameters)
+ {
+ if (parameters == null)
+ {
+ throw new ArgumentNullException(nameof(parameters));
+ }
+ BinarySearchAlgorithm algorithm = new(parameters.Array, parameters.Target);
+ SearchState? state;
+ _storage.Clear();
+
+ while (algorithm.IsOver())
+ {
+ state = algorithm.CreateState();
+ _storage.AddState(state);
+ algorithm.ExecuteStep();
+ }
+ state = algorithm.CreateState();
+ _storage.AddState(state);
+ }
+}
diff --git a/BinarySearch/BinarySearch/Algorithm/SearchParameters.cs b/BinarySearch/BinarySearch/Algorithm/SearchParameters.cs
new file mode 100644
index 0000000..bdedd23
--- /dev/null
+++ b/BinarySearch/BinarySearch/Algorithm/SearchParameters.cs
@@ -0,0 +1,34 @@
+namespace BinarySearch.Algorithm;
+
+///
+/// Класс-Параметр
+///
+public class SearchParameters
+{
+ public List? Array { get; }
+ public int Target { get; }
+
+ ///
+ /// Конструктор класса-параметра
+ ///
+ public SearchParameters()
+ {
+ Array = new List();
+ Target = 0;
+ }
+
+ ///
+ /// Конструктор класса-параметра с параметрами
+ ///
+ ///
+ ///
+ public SearchParameters(List? array, int target)
+ {
+ Array = array;
+ if (Array != null)
+ {
+ Array.Sort();
+ }
+ Target = target;
+ }
+}
diff --git a/BinarySearch/BinarySearch/BinarySearch.csproj b/BinarySearch/BinarySearch/BinarySearch.csproj
new file mode 100644
index 0000000..244387d
--- /dev/null
+++ b/BinarySearch/BinarySearch/BinarySearch.csproj
@@ -0,0 +1,26 @@
+
+
+
+ WinExe
+ net7.0-windows
+ enable
+ true
+ enable
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/BinarySearch.csproj.user b/BinarySearch/BinarySearch/BinarySearch.csproj.user
new file mode 100644
index 0000000..0a1488d
--- /dev/null
+++ b/BinarySearch/BinarySearch/BinarySearch.csproj.user
@@ -0,0 +1,17 @@
+
+
+
+
+ Form
+
+
+ Form
+
+
+ Form
+
+
+ Form
+
+
+
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/Forms/AddForm.Designer.cs b/BinarySearch/BinarySearch/Forms/AddForm.Designer.cs
new file mode 100644
index 0000000..adb72a3
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/AddForm.Designer.cs
@@ -0,0 +1,89 @@
+namespace BinarySearch.Forms
+{
+ partial class AddForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ buttonAdd = new Button();
+ labelAdd = new Label();
+ numericUpDownNumber = new NumericUpDown();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownNumber).BeginInit();
+ SuspendLayout();
+ //
+ // buttonAdd
+ //
+ buttonAdd.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ buttonAdd.Location = new Point(2, 41);
+ buttonAdd.Name = "buttonAdd";
+ buttonAdd.Size = new Size(303, 23);
+ buttonAdd.TabIndex = 5;
+ buttonAdd.Text = "Добавить элемент";
+ buttonAdd.UseVisualStyleBackColor = true;
+ buttonAdd.Click += buttonAdd_Click;
+ //
+ // labelAdd
+ //
+ labelAdd.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ labelAdd.AutoSize = true;
+ labelAdd.Location = new Point(2, 14);
+ labelAdd.Name = "labelAdd";
+ labelAdd.Size = new Size(93, 15);
+ labelAdd.TabIndex = 4;
+ labelAdd.Text = "Введите число:";
+ //
+ // numericUpDownNumber
+ //
+ numericUpDownNumber.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ numericUpDownNumber.Location = new Point(101, 12);
+ numericUpDownNumber.Maximum = new decimal(new int[] { 200, 0, 0, 0 });
+ numericUpDownNumber.Minimum = new decimal(new int[] { 200, 0, 0, int.MinValue });
+ numericUpDownNumber.Name = "numericUpDownNumber";
+ numericUpDownNumber.Size = new Size(204, 23);
+ numericUpDownNumber.TabIndex = 3;
+ //
+ // AddForm
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(308, 83);
+ Controls.Add(buttonAdd);
+ Controls.Add(labelAdd);
+ Controls.Add(numericUpDownNumber);
+ Name = "AddForm";
+ Text = "Добавить элемент";
+ ((System.ComponentModel.ISupportInitialize)numericUpDownNumber).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private Button buttonAdd;
+ private Label labelAdd;
+ private NumericUpDown numericUpDownNumber;
+ }
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/Forms/AddForm.cs b/BinarySearch/BinarySearch/Forms/AddForm.cs
new file mode 100644
index 0000000..707a04a
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/AddForm.cs
@@ -0,0 +1,34 @@
+using BinarySearch.Algorithm;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace BinarySearch.Forms;
+
+public partial class AddForm : Form
+{
+ public delegate void AddNumberDelegate(int number);
+ public event AddNumberDelegate AddNumberEvent;
+ public AddForm()
+ {
+ InitializeComponent();
+ }
+
+ private void buttonAdd_Click(object sender, EventArgs e)
+ {
+ // Получаем значение из numericUpDownNumber
+ int number = (int)numericUpDownNumber.Value;
+
+ // Вызываем событие и передаем значение в главную форму
+ AddNumberEvent?.Invoke(number);
+
+ // Закрываем текущую форму
+ this.Close();
+ }
+}
diff --git a/BinarySearch/BinarySearch/Forms/AddForm.resx b/BinarySearch/BinarySearch/Forms/AddForm.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/AddForm.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/Forms/InfoForm.Designer.cs b/BinarySearch/BinarySearch/Forms/InfoForm.Designer.cs
new file mode 100644
index 0000000..1c68256
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/InfoForm.Designer.cs
@@ -0,0 +1,121 @@
+namespace BinarySearch
+{
+ partial class InfoForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InfoForm));
+ groupBox1 = new GroupBox();
+ richTextBox1 = new RichTextBox();
+ fontDialog1 = new FontDialog();
+ pictureBox1 = new PictureBox();
+ groupBox2 = new GroupBox();
+ richTextBox2 = new RichTextBox();
+ groupBox1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
+ groupBox2.SuspendLayout();
+ SuspendLayout();
+ //
+ // groupBox1
+ //
+ groupBox1.Controls.Add(richTextBox1);
+ groupBox1.Location = new Point(13, 13);
+ groupBox1.Margin = new Padding(4);
+ groupBox1.Name = "groupBox1";
+ groupBox1.Padding = new Padding(4);
+ groupBox1.Size = new Size(491, 320);
+ groupBox1.TabIndex = 0;
+ groupBox1.TabStop = false;
+ groupBox1.Text = "Основное";
+ //
+ // richTextBox1
+ //
+ richTextBox1.Location = new Point(8, 30);
+ richTextBox1.Margin = new Padding(4);
+ richTextBox1.Name = "richTextBox1";
+ richTextBox1.Size = new Size(475, 283);
+ richTextBox1.TabIndex = 0;
+ richTextBox1.Text = resources.GetString("richTextBox1.Text");
+ //
+ // pictureBox1
+ //
+ pictureBox1.BorderStyle = BorderStyle.FixedSingle;
+ pictureBox1.Image = (Image)resources.GetObject("pictureBox1.Image");
+ pictureBox1.Location = new Point(511, 13);
+ pictureBox1.Name = "pictureBox1";
+ pictureBox1.Size = new Size(506, 542);
+ pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
+ pictureBox1.TabIndex = 1;
+ pictureBox1.TabStop = false;
+ //
+ // groupBox2
+ //
+ groupBox2.Controls.Add(richTextBox2);
+ groupBox2.Location = new Point(13, 340);
+ groupBox2.Name = "groupBox2";
+ groupBox2.Size = new Size(491, 215);
+ groupBox2.TabIndex = 2;
+ groupBox2.TabStop = false;
+ groupBox2.Text = "Использование программы";
+ //
+ // richTextBox2
+ //
+ richTextBox2.Location = new Point(8, 28);
+ richTextBox2.Name = "richTextBox2";
+ richTextBox2.Size = new Size(475, 181);
+ richTextBox2.TabIndex = 0;
+ richTextBox2.Text = resources.GetString("richTextBox2.Text");
+ //
+ // InfoForm
+ //
+ AutoScaleDimensions = new SizeF(9F, 21F);
+ AutoScaleMode = AutoScaleMode.Font;
+ BackColor = Color.PapayaWhip;
+ ClientSize = new Size(1029, 563);
+ Controls.Add(groupBox2);
+ Controls.Add(pictureBox1);
+ Controls.Add(groupBox1);
+ Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
+ Margin = new Padding(4);
+ Name = "InfoForm";
+ Text = "Информация об алгоритме";
+ groupBox1.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
+ groupBox2.ResumeLayout(false);
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private GroupBox groupBox1;
+ private RichTextBox richTextBox1;
+ private FontDialog fontDialog1;
+ private PictureBox pictureBox1;
+ private GroupBox groupBox2;
+ private RichTextBox richTextBox2;
+ }
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/Forms/InfoForm.cs b/BinarySearch/BinarySearch/Forms/InfoForm.cs
new file mode 100644
index 0000000..4b68d72
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/InfoForm.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace BinarySearch
+{
+ public partial class InfoForm : Form
+ {
+ public InfoForm()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/BinarySearch/BinarySearch/Forms/InfoForm.resx b/BinarySearch/BinarySearch/Forms/InfoForm.resx
new file mode 100644
index 0000000..26691b7
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/InfoForm.resx
@@ -0,0 +1,863 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Бинарный поиск — тип поискового алгоритма, который последовательно делит пополам заранее отсортированный массив данных, чтобы обнаружить нужный элемент. Другие его названия — двоичный поиск, метод половинного деления, дихотомия.
+
+Основная последовательность действий алгоритма выглядит так:
+
+1. Сортируем массив данных.
+2. Делим его пополам и находим середину.
+3. Сравниваем срединный элемент с заданным искомым элементом.
+4. Если искомое число больше среднего — продолжаем поиск в правой части массива (если он отсортирован по возрастанию): делим ее пополам, повторяя пункт 3. Если же заданное число меньше — алгоритм продолжит поиск в левой части массива, снова возвращаясь к пункту 3.
+
+
+
+
+ 17, 17
+
+
+
+
+ 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
+ y8t9OXly1jP/5uv6e1yS17Ksb6scmLwuz56fTPOlLz/euW80evHl/dFSWUaWW16Xb/y3bx2ZLt/D3J6d
+ /jJ9Wa/khfF86nm3Un/fy3M7fPzBeyTrm9v/62NnD1+Herq8Bt2iY9bzyP/raZO8TmV+rdSvcZm2+x6e
+ dV/Wr7w2Ofl1/Tzqeef/ub2VTFtPl/nk9vK6lfl357mrUbwA9JriBWAoWhvbu5CyI5od6+5fxbOzm/u6
+ O6OTne0NFi/1jvCD990vZC5++9KR0QXZkf1B5y/9r77+5gPPI/PIzmxur29rFS/1zv6012NaeZS0ljVv
+ 8tjMd97iZfIcDkqS7mvz1vj7lJ3t7kmUy7pPW86vb946fP55bH1fKaRSppR5Zh1efOmVyfO9/564X7xk
+ HnXBk+Vn/pm+vr2b+vuQ+dfPISM5ymOz/DLdk09//YH1KutQP771PJIyfff7WgqT7vqW51i/R8q0rfdG
+ 6748Nuuf1PPJ/0spVN+Wx+d9W25rpbweL3Ret/L8UsrU0+9iFC8AvaZ4ARiK1sb2LqTeEW3l4fHOXA47
+ qHfyJjvwGyxeyiiMZ765XyLU95Wd5G88e39ExbSUHf6sX73DmXWcp3iZ3Pbs+cnz+eu/2Z++9Xr0pXj5
+ 6c9/OfW1mZRZ4/XrrufVH16f3Pbk0+ceeJ2S8nqX519uz/LzunRLjHJfSoKnnv76wdf3vw/dsiIpr1/r
+ eZaU9Wi9xnXKep0580jzvrynsh71+zXFQ6ZvfW8n3/uq7EhSWmZdVlG8vPbGlcltrcPLyvevzD//5utZ
+ xUtZ12nTXPz285P7rzYOTdqlKF4Aek3xAjAUrY3tXUjZEc3OZnbUSjLCJTt+pdzIDnTZodvfQd0/JKSb
+ 7KSWndZkWvHSHR2RzFO81I8vBUx935NPf22yvNZ5MbrJ9NmxzPTd2+cpXq7+8N3J19kJLveV16jOPMVL
+ 7u8mr2XrXBwleWymm6d4qcuNafPM6JVpj/nnn+8f3lI/hywj34s89zJdef71vMp7qiTftzzn8h44rnjJ
+ crLsVllS7i/fr7L8aSnr3Hr/JeV7VcqpWc8jyfst86vnUcqM3F/fnufYvX3R4qW8V+p1KHntf98vZcpr
+ mNvy9bRSJSnFyrSfl5+Nbz9uHrsQxQtAryleAIaitbG9Cyk7otlpbd2fpGDI75P7O+T3S4j8Bb4cmvTa
+ 61cO51WKllbxUnaS89iyjN+Od3AvPre/E1jvaNalxWRUxsv3d/BbxUuZd3n8rJTn0d2hb82nfs75OudK
+ yXPNDnp9X9arPKZknuIljy2vY/e1bJUR5bGZ76y0vmez5pdl3i9E7hdTk9d+vP55rcoIljyvMr/yfS47
+ 8OU5z0o5J8w8xcus72vuT0k17f463efYTXlPldE45etZyfzqeeS55Pbue6F1e55vPa9W6vdNnmdrmjrl
+ NZyneMnrmmm6o5JKcoLe3J/pWvfvShQvAL2meAEYitbG9i6k7IjO2mktO5/1Dvm0oqG749otXso0WWb9
+ u6pOvaNZlxZl3uX+7tdZrzLiZdqOZJ1Mnx3KB08KO7t4yf9TEuX1yPOv7+u+Hsm8xUv3vvK47gmBS/LY
+ 3J/XMvPuJvfVxUspUaaNeCnzu1+I7L+epZjK653HpzDLfTnMqkybQ5JyX/k+1++DvCbTsr+c/hQv5XCs
+ bvEyz/MoyWuWx9S3JeV7Uk9fipc8v/p7l5Tz8eT/Zfo8zxz+111+nTJt/p/Hzypecl93neqU4uXJp841
+ 79+VKF4Aek3xAjAUrY3tXUjZEZ2101p2Rusd8mlFQ+7LtGWHv1W8lGSns4zwyEiJVkFR35ad03qHuVW8
+ lHKhtQPfTXnuZV3r22cVL6WAKOfZqO9r7cCetHgpz2/a+Wry2NzfXf9p9+V7MW09krKeZXll3erypnzd
+ fQ3K12UUUw7RyeFBrXXr5rjipbwO3YKsJOs17/c9084qXrqvUabP85g2fSspR/I6dW/PPDPv+j1SipfW
+ 96R1XylK5nl/z1O8lHPG1KPP6uRnc9r67VIULwC9pngBGIrWxvYupOyItnb8kxxS89Wnz01+n9Q75NOK
+ hu6IgVnFSzezipeyjvXyyg55a/oyGqXc3kp5fHdESZ7ftOKlrEtdKMx6PZKTFi/HFSV5bO5vlRut+0oZ
+ 0jpRbKYvo0bKTn1uy/Tle5mU55Jp68OOyrlQymuZx5YT1bZOBFunFC95/D/8Y/d7sX94We6b9jokZb0e
+ +/LjM0c7Zb3Ke6lbXpTDx3JfOWQq05fzoMxzSeu8rpm29ZzLc6xf+0WLl3Jbq9jppqzLrOIlI1ryPc7z
+ 7r4n8jrm9u4672IULwC9pngBGIrWxvYupOyITnbQnr1wJLmSTXbKcl9dZOzvVO8XDa++cf8cL7n6Uaav
+ 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
+ AYoXADYjf4FWuIjIuqOAAWDNFC8ArFcKlwz9b+0QiYisKwoYANZE8QLAeihcRKSPUcAAsGKKFwBWS+Ei
+ IkPI3XsKGABWQvECwGooXERkaMl5p3KFNQUMAEukeAFgubLDkqH7rZ0aEZEhJAVMrrgGAEugeAFgOfb2
+ RqOP77V3YkREhhgFDABLoHgB4HRSuGRo/od32jsuIiJDjwIGgFNQvABwMgqX7cq7P7kxuvjcpdEzz16Y
+ 5NU3roz+9Vc3D+/P/1946fLk39/evD164eXLk+nymLfeuXZkXnV++++3J/Mq8y3zaE17fbwOb71ztZnc
+ V0977UfXJ/Oqb6vvy2Na99XPM/9255tk/fL4zKd7X8lP/+W9yTT5t9yWr6etU9J6HjKspID5P359c3T5
+ 8mURERlobty4cbA1uzaKFwAWo3DZrvzu1mj04suXD38n/+UXHh39xcNnJv9/6KGHDqe78r3vT25LYZH7
+ S8rj/uEfv3Nkvskv/u39yfxy/5ceOzv66799YvL/M2ceeaCA+N2tvcP7W/nGs996YNp6/Y67L7dn3TOv
+ rHemKeuWEqme9t1/+tnk9swjxVF9X1Kva1mv3Hbx289PHtMqV67+8Pr+smYUMzKcpJx78qmvTb6nIiIy
+ rKR8WTPFCwCLcR6X7Uldujz25cePjN4oI1zK16V4efjMI6MfVCNBSrmSwuG1N64c3p4iIrdn+rqIKNOn
+ fKlLjVJm/M3ffeXwtnJ7lnua4qV+nvVzyrStsuTV19+cTNudviTPodz/1NNfP7y9FDYXnztaQmU5zzx7
+ frKcaaN9ZHjJ9zKFYnkviIjIMKJ4AWAQXLloO5JCICXIF/7qi8cWAileuuVKSSkiMp9yWxnh8Q+dEiIp
+ 86rLjrIuqyle9iajXOr1K/n1zVuT++6PXBlNypYs85lvnm8WRClRsq7Z6a7nWZaTx5Tbkiwj86tLGhlu
+ PrgzGv2f/9ft0XffvHJk6LqIiPQ3Tzxxf1Rtvl4zxQsAJ6eAGXbKCI261JiWUpa0zudSlx0pcPJ1GUly
+ 9UfXJ7fVyXK788pjUmZ01yW3d9exXl497bT77o9EufTAupQROKXwyeOf+eaFyeNzX3c9U6JkFM/b49sy
+ XV2yTEbWvHR58pi6VCqv3axzxkj/k8Ilh1nmcEsAhiVlS+kfFC8ADJICZphZ5LwjxxUvpazI4Url6/p3
+ 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
+ 52/GH7Ld6cttp/0lJ+0AACzbNhYvPxtvy5d9qdPsK+Txf/23TzTvm5V5y4i+5Mr3vj95rmfOPNK8v5vf
+ 3dobPfPNC6OHHnportLkd7dGk4Il05fvR+u2TSfftxRQQ/v+JYqXEypPOlmG1jdn6MkPaF6f/MC27p83
+ L758/032l194dPQXD595oDgY2g9fCpDynK7OWYKU1/OtOVv9fMhm+vr1L7flg7iedpMZ8gdoNwAAy7aN
+ xUu2hbNNn+3S0/xBNY9fpHh5959+Nnr4zCNzb0/3JW8dFC9f+KsvNu/vZtuKl9/evD16YbxPmPdMn4qg
+ RaJ4OaHypJNlaH1zhp5lFC+loEjhUn9o1Dvp+QE8SdO9ydS/bOb94Civ57YUL/kelg/QrNM8vxT6HgCA
+ ZdvWQ42yLXjaP7xlG3LR4iU77kMrXpJsK8/7em1T8fLqG28e7i9kn1Dxong5ldY3Z+gpRcFpipcyj9fe
+ uNK8P8n9QyteknxwLlI2lNdi6MVLt3BRvAAATOfkutOTbchdKV4WyVCKl6xb5t0qlPIcnnz6a4ff40zX
+ hyLopFG8nFB50skytL45Q09+IPL6LKN4mfXhmPuHWLwsmnleizp9LV6+9NjZw+9Z1ifrkq/n+aXQ9wAA
+ LNsQi5ds12UbtBxGlHMM5lyNL7z8yuE0OXVAaz9h8tiXL0+mnzxmPE0en0PTk3qnu2xT5v9ZVn1OyHrb
+ Mv/PYzOvybbweJoyv+S0I2+mpbwOZf7lddhf/v1t+kw3bd2TWedpzLy78z2ueMlzrqcv67lI8dJabmtZ
+ 01LPf9rjfjB+vvOuT9+jeDmh8qSTZWh9c4ae/EDk9ckPSPe+7g9qpql/4PL/WR+Omab8P/dn2Fl9/yI/
+ 9IukfOiVXyI5QW79YVOmq59fPjzr+0qm/bJJuicTzvMpr2drXq3pk+7rX26bVrxkncrzKfNpTXeavD3+
+ /tQflooXAIDphli81Nut5Y9uSf3H0vw/t9WPe/v/de1w2nJux/J1/p/bnnzq3OH0uT3zee1/v3I4XUnO
+ h1IKj4x06d5fMmvHP9vG9T5GK7O2YXNS3Mw/y69fh7LcvE6ZR/08k3rdk1/82/uT27/x7LeOzD+35zUp
+ jyv/z795XbrP7Tc3bx2+7t3ps/1flxqzio6rP3z3cJ3zvMo8s97zbtPPU7zUUbwoXg5uOZ3WN2foKR+4
+ 3XIhP1jlh7z8oJYf3HI5uPLYack0rdtLWuVEksKk+2HZzawf5Kx75p/nVJ/0t+Qfnnv+yPOr051v+YCq
+ b0vq+eZ1Ka9NPgzzb/e5HTd9/fqX9e8WL7m9/DLofk9mHea1jCheAACmG3Lxku3KbBfn62zr1SfSbW0L
+ Z9qk3i7872+8OZku09fTJrn94fE2a1lGbvvtzVuji99+frKD3t2OXeRQo4waaW3T1zluXuVqRJlPts1L
+ mfLa6989vD3b3K+Nn2NuTzHy1afPPTDfVvEyGdXy7PnJ7fW88/xffOmVw/Urr2WmvzjeV8ntj3358SPF
+ TlmfTF9ex2lFR9Yl69wtWcrtf/N3Xzm8bVYUL4tRvIyzDK1vztCTH4i8PvWOf1I+wOofmPyw5YM5H5z1
+ h8C0edTJ/a0P4lYyn0w/K7PmlfXMNHkOSXkOub08r/x78duXDp9H+WVRt/NJ65dNip8yj/r1ySiRMv/6
+ Qzi/vFrT5/9l+vq1K+vfLV7yAZ/bs5x62tb3ZNlRvAAATDfk4mXWNl53W7g8pvVHv0ybbdLu7Zk+O/vd
+ ZUwbIbLoOV4y3+Myazu5FC9PPv31I7eXUifrksNp6vuu/vD65DH1Nnzr+ZTbWlc6yvyffOprR0qN3FYK
+ k+46T0qZg7Kq7FO0io56uu5hT/V98+w7KF4Wo3gZZxla35yhp3x41h8a5bbujn99X/1B2JpHN7l/3uIl
+ HwL1B+W0tB6b5L4sLx+U3enyQZP7UrrUtyf5kMtj6ttaxUu5rbUO137048l99etTWu4yUqjOzw5Kmfq1
+ K+tfv/5lunm/J8uO4gUAYLohFy+t7cuS7rZw2U5tbfdn2v/62NkHbs/0rf2AZRUvp0051Ki7vJQUWe/c
+ V9+elHWvX4fW80lBk8e3iqrMP6997i/b2OVwq+5rsj99q2RpFy9Z7zNnHpnMt5tcgaheZp0yv6zDrNTL
+ az1+2v19j+LlhOo3xzK0vjlDT/nArT80yg9bPny6P6hl+vrDozWPbnJ/6wN3Fcl6ZnmtXyJltErrgyCl
+ yzzFy6znUl6L+oM7hU6r/U/KutavXWv983qX+ZbvRUkZUTPt9S/r1Eoe33pMN4oXAIDphly8zNqGb20L
+ 57Zs2149GE2RP5qWw2Naf9zM7a1t510oXl59fb/kaD2XVvHSGklzf/r5i5fs02Q+01Ivs5vMJ/MsKe+B
+ /AG7vr31eMWL4uXgltNpfXOGntYHbtnJnpVdLV7KvLuHJJWU16L+cM3X0557mV/92rXWP/fntlmZ9vpn
+ frmvlXmGGCaKFwCA6XapeMn2YA6Rye35A2OS/z/zzfPNbcvc19oWXkbxMikvnr0wmf+slJKolVUWL9Pm
+ nay6eJk24qWknve01POf5zGKF8XLwS2n0/rmDD2tD9xyOE7u6/6AltQfqq15dJP788HVuq+bfDDVH5St
+ /MN4HVuPTbJ+Wd4qipdcMSlfL1K8tA5hKinrWr92rfXP/bktx2mW70E385YoJ4niBQBgul0qXpJcoSjb
+ uLk/f5CdtR2ax2e67u3LKl4y77Id30rOl9I910mdVRYv5dChi8995/C2klbxUubROvntIsXLk0/vnzum
+ PlHySaJ4WYziZZxlaH1zhp7WB245rKUe1TIr83xo5/7WB24rWW7rQ7POtOIjyYdClreK4iWZdehQeS3q
+ D+5yJaLWL6SyrvVr11r/st6zXuNVRvECADDdLhUv5dyD8+4rZNrWfsC04uWnP//l5PZWWbGKrLJ4yTyy
+ 71BGn5Tby/TZ96hLjXqZ3f2VXE2pTF/um1Z0lMLnqb8/esLgRaN4WYziZZxlaH1zhp7WB25GdZRRGvP8
+ gLXm0c2ssmLZyTpnfVZVvJQRQS+8/ODzLVceqj+4Xxy/Lrktl7Gup53cd3CZ6fq1a61/+Z7kNZzne7Ls
+ KF4AAKbbpeKlbJfm9tz/5Hj7N4f7JNkG7m4vlunq25Jpxcuvb9463O7NumW0Sra7VzW6e5XFS1JflvrV
+ N65M9kfyfMr+VrfUKKVJnv/+a3p19Orr+3+Yzh9061JjWtGRdS8X+CjLzf2Z18XnLk0uVV2mPS65ompG
+ 4Mzz+iteFC8Ht5xO65sz9Ez7wC2XVy4/qPnAS/L/fADVw9amzaNO+dDOh0emLz/8rWlPm1ZxUbKM4iXz
+ L79syodhkmnz+Nxef3Dnl1O5fdr09Ws3bf3r70k+MLvfk1W9noniBQBgul071Kj8YTHbpZkmKdvHua2e
+ Nrfl/vq2ZFpRkWRnv2wnJw+feWSwxUvm8+JLrxx5PnmtXhtv25eT73a3sa/+8N3m9OUqSWW7f1bR0Vpu
+ SetQpmVE8aJ4ObjldFrfnKFn1gdu9wOvJE1r/eEwz4d2pu/Oa97hiYtmWnGRLKN4SVI8dZ9PzuJehl52
+ P7hbzz/zLutav3az1n/a9yS3rfLDTfECADDdEIuXkyZXMJq27ZkT7Gab8bTnFklStGQZmdeqSpd1Z9Hn
+ k2mX8fwzj217LVcRxcsJlSedLEPrm7MLyc72sn5Qyw/9tvzAL/p8lvX88/jyPdmGMmSdAQBYtl0pXsqF
+ Jqb9wbUc3rIt2/qyW1G8nFB50skytL45IjKsAAAs2y4VL+XcJBnhXf4ImMPfy0jxF156pflYkb5H8XJC
+ 5Ukny9D65ojIsAIAsGy7dKhRSpbWoe8pXt7uHG4vMqQoXk6o/iBYhtY3R0SGFQCAZdul4qWkHEK/TacR
+ kN2O4uWEFC8i0g0AwLLtYvEism1RvJyQ4kVEugEAWDbFi8jwo3g5IcWLiHQDALBsiheR4UfxckKKFxHp
+ BgBg2RQvIsOP4uWEFC8i0g0AwLIpXkSGH8XLCSleRKQbAIBlU7yIDD+KlxNSvIhINwAAy6Z4ERl+FC8n
+ pHgRkW4AAJZN8SIy/CheTkjxIiLdAAAsm+JFZPhRvJyQ4kVEugEAWDbFi8jwo3g5IcWLiHQDALBsiheR
+ 4UfxckKKFxHpBgBg2RQvIsOP4uWEFC8i0g0AwLIpXkSGH8XLCSleRKQbAIBlU7yIDD+KlxNSvIhINwAA
+ y6Z4ERl+FC8npHgRkW4AAJZN8SIy/CheTkjxIiLdAAAsm+JFZPhRvJyQ4kVEugEAWDbFi8jwo3g5IcWL
+ iHQDALBsiheR4UfxckKKFxHpBgBg2RQvIsOP4uWEFC8i0g0AwLIpXkSGH8XLCSleRKQbAIBlU7yIDD+K
+ lxNSvIhINwAAy6Z4ERl+FC8ntOzi5fcftb9BIjKM5GcYAGDZPv2sve0hIsPJH/508AN9QoqXJRUv/3G3
+ /Q0SkWHk1scHP8wAAEv0+X+2tz1EZDj54ycHP9AnpHhZUvGSoUetb5CIDCO3/3DwwwwAsGStbQ8RGU4y
+ cu00FC9LKl7SgLW+QSIyjJy2xQYAmMboeJFhZ2/v4If5hBQvSypeHLspMuyctsUGAJjm43vt7Q8R6X9+
+ f/fgB/kUFC9LKl7iwzvtb5SI9DsfOrEuALBC/kgrMtzcvXfwg3wKipclFi+abJFh5rSXhwMAmCWHKfgj
+ rcgws4yR8YqXJRYvmmyRYcZhRgDAqvkjrcjwsqyR8YqXJRYvkUvStr5hItLPLOOYTQCA43z2eXtbRET6
+ m3ufHvwAn5LiZcnFi1EvIsPKsj5MAQCO44+0IsPJMs8DqXhZcvESPlBFhpH8rAIArMvn/9neJhGR/mWZ
+ f6BVvKygeDGMUGQYycYPAMA6/eFP7e0SEelPln3VU8XLCoqX+OMn7W+giPQj2egBAFi3yRWOxjt1re0T
+ Edl8Priz/D/QKl5WVLyEQ45E+hmHGAEAm5SdOpeXFulnMohi2RQvKyxetNki/Ut+Jh1iBABs2id/bm+r
+ iMjmsqpR8YqXFRYvMWmzlS8ivYjSBQDok5y8s7XNIiLrz917Bz+YK6B4WXHxEsoXkc1H6QIA9JHyRWTz
+ WfX5HxUvayheIjt8zvkispnkZy+H/gEA9FGuiuoPtSKbySrO6dKleFlT8VK4fJzIerOOD1IAgNPyh1qR
+ 9SZl56efHfwArpjiZc3FS/hQFVl98jOWvx4BAAxJDj0y+kVkdcnlojMgYp0j4hUvGyheinyo/sfd9ptB
+ RE6WFC7raq4BAFYhf6jNjqECRmR5SeHy0R83c95HxcsGi5ciO4l5A/hgFTlZ8iGas5ArXACAbZM/1hot
+ L3Ly5Odn3SNcuhQvPSheatlxzDkp7vxh/w2ijBE5mvxMZKRYysr8rChbAIBdkJ3GT/68vwOZ/YRsD+WP
+ T63tJZFdTH4esq+Qfen8UTalZV8usKF46VnxQr9t+AcGAADoIfsJzLLh94fihWHxgQoAAHTZT2CWDb8/
+ FC8Miw9UAACgy34Cs2z4/aF4YVh8oAIAAF32E5hlw+8PxQvD4gMVAADosp/ALBt+fyheGBYfqAAAQJf9
+ BGbZ8PtD8cKw+EAFAAC67Ccwy4bfH4oXhsUHKgAA0GU/gVk2/P5QvDAsPlABAIAu+wnMsuH3h+KFYfGB
+ CgAAdNlPYJYNvz8ULwyLD1QAAKDLfgKzbPj9oXhhWHygAgAAXfYTmGXD7w/FC8PiAxUAAOiyn8AsG35/
+ KF4YFh+oAABAl/0EZtnw+0PxwrD4QAUAALrsJzDLht8fiheGxQcqAADQZT+BWTb8/lC8MCw+UAEAgC77
+ Ccyy4feH4oVh8YEKAAB02U9glg2/PxQvDIsPVAAAoMt+ArNs+P2heGFYfKACAABd9hOYZcPvD8ULw+ID
+ FQDYVjdv3hxdv3794CtgEfYTmGXD7w/FC8PiAxUA2CY3btyYbNOcPXt2sn3zxBNPHNwDLMJ+ArNs+P2h
+ eGFYfKAC7K7soF66dGn06KOPHv4uyM7qhQsXJiMFYAhu3759+F4+c+bM4Xu5RPECJ2M/gVk2/P5QvDAs
+ PlABds+tW7dGzz///JFth1YyTXZqoW/yvrx69eqkJGyVLXUUL3Ay9hOYZcPvD8ULw+IDFWC3pHQph2DM
+ k8cff1z5Qi/kfXjlypVJkdJ6r06L4gVOxn4Cs2z4/aF4YVh8oALsjr29vblGunTzne9852AOsF7lfC2L
+ li11FC9wMvYTmGXD7w/FC8PiAxVgd7z//vtHthfmzUMPPTTZAYZ1aJ176DRRvMDJ2E9glg2/PxQvDIsP
+ VIDdkNEu58+fP7K9sEiMemFVcghRLvk8z/laThLFC5yM/QRm2fD7Q/HCsNQ/MNkwydciIrKdOc0IguwQ
+ t+Ypcppk22MVZUudvO9byxaR2cnPZ/k5ytdQy3tig+8PxQvDUv/AiIiIiIiIdKN4oUvxMg7MS/EiIiIi
+ IiKzonihS/EyDsyrXC1ARES2P6c5pMPhGrKKnDt3rvl+W2a8d0VOHydYpyvvi/I5m/+vmeIFAOifk15K
+ uuRb3/rWwZxgucrJdXPy52VdyaiOk+sCLJ/iZRwAgK6f/exnR7YX5k0uJ33z5s2DucBq5S/ryyxhFC8A
+ y6d4GQcAoOuko17yGNiE9957b3TlypXR2bNnm+/NeaJ4AVg+xcs4AAAtt27dWmgn9vHHH58cCgKbllFX
+ V69ePXKJ23mieAFYPsXLOAAA06R8mWfky6VLl5Qu9FLelylhcnLe404arXgBWD7FyzgAAMd5//33HziX
+ RnZiU7i4ggVDMuu8MIoXgOVTvIwDADCvDW88wVKlhEl5WA6pU7wALJ/iZRwAgHkpXthWOS+M0VsAy6d4
+ GQcAYF6KFwBgEYqXcQAA5qV4AQAWoXgZBwBgXooXAGARipdxAADmpXgBABaheBkHAGBeihcAYBGKl3EA
+ AOaleAEAFqF4GQcAYF6KFwBgEYqXcQAA5qV4AQAWoXgZBwBgXooXAGARipdxAADmpXgBABaheBkHAGBe
+ ihcAYBGKl3EAAOaleAEAFqF4GQcAYF6KFwBgEYqXcQAA5qV4AQAWoXgZBwBgXooXAGARipdxAADmpXgB
+ ABaheBkHAGBeihcAYBGKl3EAAOaleAEAFqF4GQcAYF6KFwBgEYqXcQAA5qV4AQAWoXgZBwBgXooXAGAR
+ ipdxAADmpXgBABaheBkHAGBeihcAYBGKl3EAAOaleAEAFqF4GQcAYF6KFwBgEYqXcQAA5qV4AQAWoXgZ
+ BwBgXooXAGARipdxAADmpXgBABaheBkHAGBeihcAYBGKl3EAAOaleAEAFqF4GQcAYF6KFwBgEYqXcQAA
+ 5qV4AQAWoXgZBwBgXooXAGARipdxAADmpXgBABaheBkHAGBeihcAYBGKl3EAAOaleAEAFqF4GQcAYF43
+ btyYbDQl+T8AwCyKF8ULAAAAsCKKF8ULAAAAsCKKF8ULAAAAsCKKF8ULAAAAsCKKF8ULAAAAsCKKF8UL
+ AAAAsCKKF8ULAAAAsCKKF8ULAAAAsCKKF8ULALCAvb3R6NPPDr4AADiG4kXxAgDMIYXLH/40Gn14ZzT6
+ n7dHo1sfK2AAgOMpXhQvAMAx/vTpaPT7j/YLl24++uNo9Pl/HkwIANCheFG8AABTZETLtMKlGwUMANCi
+ eFG8AAAdKVxyKFGrYDkuChgAoKZ4UbwAAAdOU7h0o4ABAELxongBgJ23zMKlm5yQVwEDALtL8aJ4AYCd
+ tcrCpU7OE6OAAYDdpHhRvADAzkkBkkOBWiXJKpMCJldIAgB2h+JF8QIAO2NvbzT6+F67FFlnFDAAsDsU
+ L4oXANh6KVxyqM+Hd9pFyKaigAGA7ad4UbwAwNbqa+HSjQIGALaX4kXxAgBbZyiFSzcpYHLCXwBgeyhe
+ FC8AsDWGWrh0kystKWAAYDsoXhQvALAVcqhORoy0ioyhJldecglqABg2xYviBQAGLSNDtq1w6UYBAwDD
+ pXhRvADAIKVwySE5raJiW6OAAYDhUbwoXgBgUHaxcOlGAQMAw6F4UbwAwCAoXB5MTiSsgAGAflO8KF4A
+ oNcULrOT89soYACgvxQvihcA6KUUCTmkplU2yINJAZMrOwEA/aJ4UbwAQK/s7Y1GH99rlwtyfBQwANAv
+ ihfFCwD0QgqXHDLz4Z12oSCLRQEDAP2geFG8AMBGKVxWGwUMAGyW4kXxAgAboXBZb1LA5ETFAMB6KV4U
+ LwCwVgqXzSZXiFLAAMD6KF4ULwCwNjnkJSMvWoWArDe5YpRLUAPA6ileFC8AsHIZYaFw6WcUMACwWooX
+ xQsArEwKlxza0trhl35FAQMAq6F4UbwAwNIpXIYbBQwALJfiRfECAEujcNme5ATIChgAOD3Fi+IFAE5N
+ 4bKdyXl5FDAAcDqKF8ULAJxYdshzaEprp122JylgckUqAGBxihfFCwAsbG9vNPr4XnsnXbY3ChgAWJzi
+ RfECAHNL4ZJDTz68094xl92IAgYA5qd4UbwAwLEULtKKAgYAjqd4UbwAwFQKF5knKWBygmUA4EGKF8UL
+ ADxA4SInSa5spYABgKMUL4oXYENu3rw5unHjxiT5/6Lqx7/33nsHt8Lp5dCRjGBo7ViLzJNc6colqAFg
+ n+JF8QJsyGk/gOvHX7hw4eBWOLmMVFC4yDKjgAEAxcskAJugeKEvUrjkEJHWjrPIMqKAAWCXKV7GAdgE
+ xQubpnCRdUcBA8AuUryMA7AJihc2ReEim05O3KyAAWBXKF7GAdgExQvrpnCRPiXnE1LAALALFC/jAGyC
+ 4oV1yY5tDvFo7fyKbDopYHIlLQDYVoqXcQA2YVPFy+3btyeXn3YZ6u23tzcafXyvvbMr0rcoYADYVoqX
+ cQA2Yd3Fy9WrV0dPPPHE4WNKzpw5M3n8zZs3D6a878qVK6NHH3104WQ5bE4KlxzC8eGd9g6uSJ+jgAFg
+ 2yhexgHYhHUVLxnh0ipcukkB0x0BUy9jkaR8Yf0ULrJNUcAAsC1Ou91/SooXYHed9gO4fvys4uXcuXOH
+ 06UQySFGKWMio1xeeeWVw/tTvpT7IkVMRsp0k/mUx2RUTPf+69evH8yBdVC4yDYnBcwnfz54swPAACle
+ xgHYhPoD+OzZs5PyZJHkMeXx+bolJUiZJmVJXarU3nzzzcPp5vllUI+gaR2ixHooXGSXkity5cpcADA0
+ ipdxADah/gA+baYVL/XIlOMKklKmzHOYkOJl83IIRkYCtHZQRbY5uUKXS1ADMCSKl3EANmHVxUsOEyr3
+ 53Cj4zz//POH008bGVMoXjYnf/FXuIgoYAAYDsXLOACbcNoP4PrxreLlxz/+8eH9OQ/LcerDkuYdHTPP
+ tCxHCpccatHaARXZ5ShgAOg7xcs4AJuw6uKlvj8nzc0hRHVyW7m/G8VLfyhcROaLAgaAvjrtdv8pKV6A
+ 3XXaD+D68ccVL4tG8bJ5CheRk+XuPQUMAP1y2u3+U1K8ALvrtB/A9eOPK15y1aIUJPPmOIqX1VG4iJw+
+ OQ9SrvilgAGgD0673X9Kihdgd532A7h+fKt4qc/ZkhPnLpPiZfmyg5hDJVo7kSJysqSAyRXAAGCTFC/j
+ AGzCqouXFCLl/hQly6R4WZ69vdHo43vtnUYRWU4UMABskuJlHIBNWHXxEnVBcuPGjYNbT0/xcnopXHIo
+ xId32juKIrL8KGAA2ATFyzgAm7CO4qU+3ChXMXrvvfcO7pluniJF8XJyCheRzUcBA8A6KV7GAdiEdRQv
+ cf78+cPpyrTXr1+flDApTZKMhrly5cqkUEmOo3hZnMJFpH9JAfPJnw9+SAFgRRQv4wBswrqKl8jJdcu0
+ x+Xs2bMHj5pO8TI/hYtI/5MrieWKYgCwCoqXcQA2YZ3FS+Swo7owaSX3X7t27eAR0yle5pNDGfIX9daO
+ noj0L7mymEtQA7BsipdxAHbJ7du3J4cWpYgpyWFHuZ3lyF/OFS4iw40CBoBlUrwoXgBYkhQuOWShtSMn
+ IsOLAgaAZVC8KF4AOCWFi8h2RwEDwGkoXhQvAJyQwkVkt3L3ngIGgMUpXhQvACxI4SKyu8n5m3KlMgUM
+ APNSvCheAJhTdrRyyEFrZ0xEdispYHLlMgA4juJF8QLAMfb2RqOP77V3vkRkt6OAAeA4ihfFCwBTpHDJ
+ IQUf3mnvcImIlChgAJhG8aJ4AaBD4SIiJ40CBoAuxYviBYADChcRWVZSwHzy54MPFwB2muJF8QKw8xQu
+ IrKq5ApouRIaALtL8aJ4AdhpOSQgf5lu7TCJiCwruSKaS1AD7CbFi+IFVu7mzZuj69evH3wF/ZC/QCtc
+ RGTdUcAA7B7Fi+IFVuLGjRuTD5WzZ89Ofs6eeOKJg3tgs1K4ZOh/a4dIRGRdUcAA7A7FyzjA6d2+fXtS
+ tly6dGl05syZIz9jieKFTVO4iEgfo4AB2H6Kl3GAk0nZcvXq1dGFCxeaZUsdxQubonARkSHk7j0FDMC2
+ UryMA8wvZcuVK1cmRUr9c3RcFC+sm8Jl2Hn3JzdG1350vXnfvHn1jSujt9+51ryvD/nXX90cvfDS5dH1
+ 8XNt3b9I8npdfO7S6JlnL0z+/e2/325OJ/1OzjuVK6wpYAC2i+JlHGC2cr6WRcuWOooX1iU7LBm639qp
+ kWHkF//2/uRz46GHHhpdPWH58rtbe5N5/M3ffaV5/6ysq7S48r3vT57jW6coh/I8Lz73/OS5/sXDZ0Z/
+ +YVHRw+feWT0039578h0iphhJQVMrrgGwHZQvIwDPKicr+XRRx898vNy0iheWLW9vdHo43vtnRgZVn59
+ 89akREgpcdLRICcpXt79p59NlptRKK37l51lFC8//fkvD59nq1xJiZXn9I1nv/XAfdL/KGAAtoPiZRxg
+ /xCiXPJ5nvO1nCSKF1YlhUuG5n94p73jIsNMSoQcitO6b56ctHjJY4ZUvJR5TCuoyughxcuwo4ABGDbF
+ yziwq+rztayibKmjeGHZFC4yK7tQvPzu1miyroqX3YkCBmCYFC8iIjK4ZEdT4TLc/Obfb08Kg3IekpwE
+ NyeFfeHl+4VHTqzbKkAmJ6QdT5fpJ48ZT5PHv/XO1UlKAdEtXvK4+uSz9Wia/D+PzbzymK8+fe5wfknr
+ EJ7M/6//9onx/ddOPDJnVvGSZZbXJcn/W+ucdc06X/z284frm9cur3H+/+rr353cv7+us5+TDCcpYD75
+ 88FGLQC9p3gREZHBJTurrZ0RGUZSGpTCIYVA+b5+6cuPT+4vpUb3+3z1h+9OzleSaXMS2fL/JP/PbU89
+ /fXDeeT2UjiU6UrOnHnksHwoI11ayTq0ipXM/0uPnZ1Mk2WnHFm0gJlWvPzzz395+NyyjPIafeGvvnhY
+ VuWxZR27yXRlpEsrWeYyrqQkm82HH41Gn31+sGELQK8pXkREZHDJjqMrFw03KSjyfUypkJIgJUBuK6VC
+ q3jJbSlWMn1dcLx2MKKje0hRKV4efvjM4TJy+29v3pqMDsl93RE1JznUKPN95pvnJ49L9oue+Q4dahUv
+ KUzK86yvTFROkls/T4ca7WY+uLN/mGUOtwRgGHa2eAGOKifXPX/+/NKuZFTHOV5YBZeOHmZK8ZLCoDVK
+ pFW8lAKhW4qUaTOCpXv7tGVMKyNOc46XLOPity9NSpPMI/+mUGk9v5JW8VJue7tT3qRkefGgZCnzVLzs
+ VhQuAMOleAGacjnpZZYwihdWSQEzrKQ4yOdCOSyom1nFy8XnvtOcdlrx0jq5brlvmcVLnbe+9/3DQ4Vm
+ zatbvNTPO6Nd8jrVufLO/vSlZFG87EYULgDDp3gBjvXee+9Nrn509uz++QxOEsUL6/DpZ6PRrY/bOy/S
+ n5TiZVoZ0Cpe6oKlFBX7J6B9szmvTRQvv715e3Li31K6PDxe1x/86Hpz2mRa8ZLHToviZXeicAHYHooX
+ YCE3b94cXb16dVKklA+PeaJ4YZ1SwOTEk62dGdl8TlK8JL++eevwfCopN0rB8eTTX3/gKj3rLF7e/cmN
+ yZWSyvpk3XOo0HFXDpo14qUe6dJNma/iZXtz957CBWCbKF6AE8t5YVLCnDt3bnTmzP4Ox7QoXtiEe58q
+ YPqYlAf5XFi0eEnKCJfc/1rnEst11lG8/I+f3JisRx6T0uWZb16YWoC00ipecuLfWUVKHcXL9iWHTObQ
+ SQC2i+IFWJpZ54VRvLBJCph+5aTFS0qE3JbCpb69lZMULz/9+S8nt3fPI9NK5pET6KZwefGlV44d3dJK
+ t3hJSvnz2JcfP3aeixQvrddB+pMcIpmRegBsJ8ULsBIpYS5dunR4XhjFC32ggOlHTlq85FCj+nCeJ58+
+ N3rm2QuTpLyoR7+cpHip559C49qPrk/O2TJtVE19ueeTpFW8ZN3K5a5T7Lz6xpVJqfLWO1cn61I/n3mK
+ l1IQZX4Xn3v+8Dmddt1lOVG4AOwGxQuwcjkvTIoY6AsFzGZz0uIlefX17x6WEpkmKWXJF/7qi9X5TxYv
+ XpK337l6WFQkOUHutOLltGkVL0nWL6No6vUoyfNZ5BwvyT///JdH5pXpU8C0ppX1ROECsFsULwDspJxH
+ IVcMUcAMIykjMmIj5Uq3ZJjcd3BulGWN5MgyMq+THEK0zGQdlrUufXlOuxyFC8BuUrwAsNNKAdPaSZL+
+ JIcBZWOldf6VFC/PPHt+UrysanSKyGmSglfhArC7FC8AMJYCJlcUae00yeaTciWHFJ0588jk0JyM3EjJ
+ cu2H1yeHG2VDJofdtB4rsqmkcMmhjQDsNsULAFQUMP1N91wlJV967Ozo7c55UkQ2mQ/u7I+k29s7+GAB
+ YKcpXgCgQQHT35TzniQOLZI+ReECQIviBQBmUMCIyHFRuAAwi+IFAOaQE2PmiiStnS4R2c0oXACYh+IF
+ ABaQAsYlqEXk7j2FCwDzUbwAwAnkSiUKGJHdSw49zCGIADAvxQsAnIICRmQ3kkMNM+INABaleAGAJVDA
+ iGxnFC4AnJbiBQCWSAEjsh1RuACwLIoXAFiynP8hVzpRwIgMLwoXAJZN8QIAK1IKmNbOnYj0KylKFS4A
+ rILiBQBWLAVMroTS2tkTkc0mhUsOEQSAVVG8AMCaKGBE+pMP7uyPSNvbO/gBBYAVUbwAwJopYEQ2F4UL
+ AOumeAGADVHAiKwvChcANkXxAgAblhN65koqrZ1FETldFC4AbJriBQB6IgWMS1CLLC937ylcANg8xQsA
+ 9EyusKKAETl5cghfDuUDgD5QvABATylgRBZLDtnLyDEA6BPFCwD0nAJGZHYULgD0meIFAAZCASNyNAoX
+ AIZA8QIAA5LzVuQKLQoY2eUoXAAYEsULAAxQKWBaO6Ui25oUjgoXAIZG8QIAA5YCJldwae2kimxLUrjk
+ UDsAGCLFCwBsAQWMbGM+uLM/smtv7+CNDgADpHgBgC2igJFtiMIFgG2ieAGALaSAkSFG4QLANlK8AMAW
+ y4lIcwWY1k6uSF+icAFgmyleAGAHpIBxCWrpY+7eU7gAsN0ULwCwQ3JlGAWM9CE5FC6HxAHAtlO8AMAO
+ UsDIppJD3zICCwB2heIFAHaYAkbWFYULALtK8QIAKGBkZVG4ALDrFC8AwETOt5EryyhgZBlRuADAPsUL
+ AHBEKWBaO9MixyXFncIFAO5TvAAATSlgcuWZ1s61SDcpXHLIGgBwlOIFAJhJASOz8sGd/RFSe3sHbxgA
+ 4AjFCwAwFwWM1FG4AMB8FC8AwEIUMLsdhQsALEbxAgCcSE6gmivXtHbOZfuicAGAk1G8AACnkgLGJai3
+ O3fvKVwA4KQULwDAUuSKNgqY7UoOKcuhZQDAySleAIClUsAMPzmELCOZAIDTU7wAACuhgBleFC4AsHyK
+ FwBgpRQw/Y/CBQBWR/ECAKxczhOSK+IoYPoVhQsArJ7iBQBYm1LAtEoAWV9SgClcAGA9FC8AwNqlgMkV
+ c1qlgKwuKVxy6BcAsD6KFwBgYxQw68kHd/ZHGu3tHbzwAMDaKF4AgI1TwKwmChcA2DzFCwDQGwqY5UTh
+ AgD9oXgBAHrns8/3r7jTKhVkehQuANA/ihcAoLdy5R2XoJ4vd+8pXACgjxQvAEDv5Uo8Cph2cmhWDtEC
+ APpJ8QIADIYC5n5yKFZGBAEA/aZ4AQAGZ5cLGIULAAyL4gUAGKxdKmAULgAwTIoXAGDQckLZXMlnWwsY
+ hQsADJviBQDYCjnBbAqYVnkxxKRIUrgAwPApXgCArZICJlf6aZUZQ0gKlxxCBQBsB8ULALCVhlbAfHBn
+ f8RODp0CALaH4gUA2Gp9L2AULgCw3RQvAMBO6FsBo3ABgN2geAEAdspnn+9fKahVhqwjChcA2C2KFwBg
+ J+WKQeu+BPXdewoXANg1ihcAYKflCkKrLmByiFMOdQIAdo/iBQBgbBUFTA5pysgaAGB3KV4AACrLKGAU
+ LgBAoXgBAGg4SQGjcAEAuhQvAABT5ES4uQLRcQWMwgUAmEbxAgBwjJwYNwVMt3BJIaNwAQBmUbwAAMzp
+ s89Ho//lf93oxhMAMDCKFwCABWx44wkAGBjFCwDAAhQvAMAiFC8AAAtQvAAAi1C8AAAsQPECACxC8QIA
+ sADFCwCwCMULAMACFC8AwCIULwAAC1C8AACLULwAACxA8QIALELxAgCwAMULALAIxQsAwAIULwDAIhQv
+ AAALULwA2+rmzZuj69evH3wFLIviBQBgAYoXYJvcuHFj8ll29uzZyefaE088cXAPsCyKFwCAOWTn5NKl
+ S6MzZ84cbjw9+uijowsXLkz+SgwwBLdv325+npUoXmD5FC8AADPcunVr9Pzzzx/ZMWkl02SHBqBv8tl0
+ 9erVSVHcKlvqKF5g+RQvAABTpHQpw+/nyeOPP658AXohn0VXrlyZFCmtz6tpUbzA8ileAAAa9vb25hrp
+ 0s13vvOdgzkArFc5X8uiZUsdxQssn+IFAKDh/fffP7IzMm8eeuihyc4PwDqU87XknFOtz6RFo3iB5VO8
+ AAB0ZLTL+fPnj+yMLBKjXoBVySFEueTzPOdrOUkUL7B8ihcAgI4UL4uc26Wb7Axlw0pEZJlJKbKKsqVO
+ Rs60li0iJ099+F++XjPFCwDQPyle6h0RERERkWVE8QIAMKZ4ERERkVVE8QIAMJbi5TQnqjRUX0RWkXPn
+ zjU/c5YZn18iq80GTsCveAEA+ifFy0kuJV3yrW9962BOAMtVTq6bE4Av60pGdZxcF7aO4gUA6Kef/exn
+ zZ2S45LLSd+8efNgLgCrlb+eL7OEUbzA1lG8AAD9dNJRL3kMwCa89957oytXrpzqqmyKF9g6ihcAoL9u
+ 3bq10A7M448/PjkMAGDTMvLu6tWrRy5jO08UL7B1FC8AQL+lfJln5MulS5eULkAv5bMpJUxOznvmzJnm
+ Z1iJ4gW2juIFABiG999//4HzKGQHJoXLBq5QAHBis84Lo3iBraN4AQCGJZeCLDso+T/AkKWESYFcDqtU
+ vMDWUbwAAMOieAG2Vc4LYwQfbB3FCwAwLIoXAGBAFC8AwLAoXgCAAVG8AADDongBAAZE8QIADIviBQAY
+ EMULADAsihf+/+3dC04bSRSG0f2vivUEEmJj/MKGTi40ERMVrzBlV906R/qkWUBamvpxVwNARwwvAEBf
+ DC8AQEcMLwBAXwwvAEBHDC8AQF8MLwBARwwvAEBfDC8AQEcMLwBAXwwvAEBHDC8AQF8MLwBARwwvAEBf
+ DC8AQEcMLwBAXwwvAEBHDC8AQF8MLwBARwwvAEBfDC8AQEcMLwBAXy4uLh4Hlyj+GwCgYYYXAPiK4/00
+ bfbTdLOZpp+303S1fOrbT6nv4t/x9erp3/Xtdpr2h9//5/gw/8MHAD7K8AIAnxUH0BhaDCwasRhj1run
+ 0REAeJfhBQA+Iv7SH3/1v1qUD6PSiMUIs93PDwkAUGJ4AYC3GFyk9/u+NMAAwCsMLwDwGoOL9LligDkc
+ 5wcIAAiGFwD4Wxwcf9yUD5aS3i/uQHIRLwA8MrwAwEtxaahfuUhfL3794gJeADC8AMAfq035ACnp37pc
+ TNPubn7AAGBMhhcAiFci4usspYOjpK8X9yUBwKAMLwCMLUYX97lI9TO+ADAowwsAY/NLF+l0xR1KADAY
+ wwsA43Kni3T69of5AQSAMRheABhTvPZQOhRKqltcuOtrRwAMxPACwHji0Fc6EEo6TfGKHwAMwvACwHi+
+ L8uHQUmny2W7AAzC8ALAWLxiJLWRV44AGIThBYBxxCHPr12kdvLKEQADMLwAMI7lunz4k3S+fOUIgOQM
+ LwCMwYW6Upv51QsAyRleABjDZlc+9Ek6f+56ASAxwwsAY3C3i9RuvnAEQGKGFwDyizskSoc9SW0UXzgC
+ gKQMLwDk51Jdqf1csgtAUoYXAPLzmpHUfl43AiApwwsAufmakdRHvm4EQFKGFwBy292VD3mS2so9LwAk
+ ZXgBILfVpnzIk9Reh+P84AJAHoYXAHKL1xdKBzxJ7bXdzw8uAORheAEgtx835QOepPZa7+YHFwDyMLwA
+ kJsvGkn9dLOZH1wAyMPwAkBupcOdpDZbrucHFwDyMLwAkFvpcCepzQwvACRkeAEgt9LhTlKbGV4ASMjw
+ AkBupcOdpDYzvACQkOEFgNxcriv10+12fnABIA/DCwC5+Zy01E8+Jw1AQoYXAHKLVxdKBzxJ7bW9mx9c
+ AMjD8AJAbqtN+YAnqb0Ox/nBBYA8DC8A5La7Kx/wJLXV5WJ+aAEgF8MLALk9PJQPeZLa6no1P7QAkIvh
+ BYD8XLArtZ+LdQFIyvACQH7xidrSQU9SO7nfBYCkDC8A5Lc/lA96ktroajk/rACQj+EFgDHE/RGlA5+k
+ 87fZzw8qAORjeAFgDHF/ROnAJ+n8He/nBxUA8jG8ADCG+LrR1aJ86JN0vpbr+SEFgJwMLwCMwyW7Unv5
+ tQsAyRleABjH469eluXDn6TT59cuAAzA8ALAWOISz9IBUNJpixHUr10AGIDhBYDx+MKRdP58yQiAQRhe
+ ABhP/JXdRbvS+fKKEQADMbwAMKb9oXwglFS3eMUo7lsCgEEYXgAYl68cSaftcuFeFwCGY3gBYGzGF+l0
+ HY7zgwcA4zC8AIDxRarf1mW6AIzJ8AIAwfgi1SleL/JLFwAGZngBgGfGF+n/LS7SdacLAIMzvADAS/GX
+ +Tgslg6Rkj7e9er3/2n6ehEAGF4A4G/xF/rlunyYlPR28WrRejc/TACA4QUAXrPZ+/WL9JlisPRqEQD8
+ h+EFAN5jgJHeLl4r2h/mBwYAeMnwAgAfFQNMHDBLB09ptOKVopuNLxYBwDsMLwDwWfEqRYwwi9unw2fp
+ UCplLH75FWOLX7cAwIcZXgDgq+Iv/ru7p89Rxx0X8auY5+KgKvXU87/dGBbj33NclBv/vn2hCAD+ieEF
+ AAAAoBLDCwAAAEAlhhcAAACASgwvAAAAAJUYXgAAAAAqMbwAAAAAVGJ4AQAAAKjE8AIAAABQieEFAAAA
+ oBLDCwAAAEAlhhcAAACASgwvAAAAAJUYXgAAAAAqMbwAAAAAVGJ4AQAAAKjE8AIAAABQieEFAAAAoBLD
+ CwAAAEAlhhcAAACASgwvAAAAAJUYXgAAAAAqMbwAAAAA3Xjoq+n+F0yZRzL8EdiPAAAAAElFTkSuQmCC
+
+
+
+ Данная программа позволяет вам посмотреть на графическую демонастрацию работы алгоритма "Бинарный поиск".
+
+Для этого вам потребуется создать базовый целочисленный массив и указать какой элемент вы хотите найти. Так же если у вас есть сохраненный .bin файл с сохраненным состоянием там, то можете выгрузить его (CTRL+L).
+После того как у вас появится в главной форме массив нажмите на кнопку запуска алгоритма. Теперь вы можете пройтись вперед и просмотреть шаги выполнения алгоритма. Так же можно сохранить данный массив (CTRL+S).
+
+Желаю вам успехов в изучении алгоритмов!
+
+
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/Forms/InitDataForm.Designer.cs b/BinarySearch/BinarySearch/Forms/InitDataForm.Designer.cs
new file mode 100644
index 0000000..19bf9be
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/InitDataForm.Designer.cs
@@ -0,0 +1,131 @@
+namespace BinarySearch
+{
+ partial class InitDataForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ numericUpDownNumber = new NumericUpDown();
+ labelAdd = new Label();
+ buttonAdd = new Button();
+ buttonSave = new Button();
+ listBoxArray = new ListBox();
+ buttonReset = new Button();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownNumber).BeginInit();
+ SuspendLayout();
+ //
+ // numericUpDownNumber
+ //
+ numericUpDownNumber.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ numericUpDownNumber.Location = new Point(159, 10);
+ numericUpDownNumber.Maximum = new decimal(new int[] { 200, 0, 0, 0 });
+ numericUpDownNumber.Minimum = new decimal(new int[] { 200, 0, 0, int.MinValue });
+ numericUpDownNumber.Name = "numericUpDownNumber";
+ numericUpDownNumber.Size = new Size(275, 23);
+ numericUpDownNumber.TabIndex = 0;
+ //
+ // labelAdd
+ //
+ labelAdd.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ labelAdd.AutoSize = true;
+ labelAdd.Location = new Point(12, 12);
+ labelAdd.Name = "labelAdd";
+ labelAdd.Size = new Size(141, 15);
+ labelAdd.TabIndex = 1;
+ labelAdd.Text = "Введите искомое число:";
+ //
+ // buttonAdd
+ //
+ buttonAdd.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ buttonAdd.Location = new Point(12, 157);
+ buttonAdd.Name = "buttonAdd";
+ buttonAdd.Size = new Size(422, 23);
+ buttonAdd.TabIndex = 2;
+ buttonAdd.Text = "Добавить элемент";
+ buttonAdd.UseVisualStyleBackColor = true;
+ buttonAdd.Click += buttonAdd_Click;
+ //
+ // buttonSave
+ //
+ buttonSave.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ buttonSave.Location = new Point(12, 186);
+ buttonSave.Name = "buttonSave";
+ buttonSave.Size = new Size(422, 23);
+ buttonSave.TabIndex = 3;
+ buttonSave.Text = "Сохранить";
+ buttonSave.UseVisualStyleBackColor = true;
+ buttonSave.Click += buttonSave_Click;
+ //
+ // listBoxArray
+ //
+ listBoxArray.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ listBoxArray.FormattingEnabled = true;
+ listBoxArray.ItemHeight = 15;
+ listBoxArray.Items.AddRange(new object[] { "" });
+ listBoxArray.Location = new Point(12, 43);
+ listBoxArray.Name = "listBoxArray";
+ listBoxArray.Size = new Size(422, 79);
+ listBoxArray.TabIndex = 4;
+ //
+ // buttonReset
+ //
+ buttonReset.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ buttonReset.Location = new Point(12, 128);
+ buttonReset.Name = "buttonReset";
+ buttonReset.Size = new Size(422, 23);
+ buttonReset.TabIndex = 5;
+ buttonReset.Text = "Сбросить";
+ buttonReset.UseVisualStyleBackColor = true;
+ buttonReset.Click += buttonReset_Click;
+ //
+ // InitDataForm
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(446, 220);
+ Controls.Add(buttonReset);
+ Controls.Add(listBoxArray);
+ Controls.Add(buttonSave);
+ Controls.Add(buttonAdd);
+ Controls.Add(labelAdd);
+ Controls.Add(numericUpDownNumber);
+ Name = "InitDataForm";
+ Text = "Добавление данных";
+ ((System.ComponentModel.ISupportInitialize)numericUpDownNumber).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private NumericUpDown numericUpDownNumber;
+ private Label labelAdd;
+ private Button buttonAdd;
+ private Button buttonSave;
+ private ListBox listBoxArray;
+ private Button buttonReset;
+ }
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/Forms/InitDataForm.cs b/BinarySearch/BinarySearch/Forms/InitDataForm.cs
new file mode 100644
index 0000000..cf1154b
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/InitDataForm.cs
@@ -0,0 +1,89 @@
+using BinarySearch.Algorithm;
+using BinarySearch.Forms;
+namespace BinarySearch;
+
+///
+/// Форма для инициализации данных перед выполнением поиска.
+///
+public partial class InitDataForm : Form
+{
+ ///
+ /// Делегат для передачи параметров поиска.
+ ///
+ /// Параметры поиска.
+ public delegate void InitParametersDelegate(SearchParameters searchParameters);
+
+ ///
+ /// Событие, срабатывающее при инициализации параметров поиска.
+ ///
+ public event InitParametersDelegate? InitParametersEvent;
+
+ private List _arrayInit;
+
+ ///
+ /// Инициализирует новый экземпляр формы InitDataForm.
+ ///
+ public InitDataForm()
+ {
+ _arrayInit = new List();
+ InitializeComponent();
+ }
+
+ ///
+ /// Обновляет элементы списка на форме.
+ ///
+ private void UpdateListBox()
+ {
+ listBoxArray.Items.Clear();
+ foreach (int number in _arrayInit)
+ {
+ listBoxArray.Items.Add(number);
+ }
+ }
+
+ ///
+ /// Обработчик события нажатия кнопки "Добавить число".
+ /// Открывает диалоговое окно для добавления числа.
+ ///
+ private void buttonAdd_Click(object sender, EventArgs e)
+ {
+ AddForm addForm = new();
+ addForm.AddNumberEvent += AddNumberEventHandler;
+ addForm.ShowDialog();
+ }
+
+ ///
+ /// Обработчик события добавления числа из диалогового окна.
+ /// Добавляет число в список и обновляет элементы списка на форме.
+ ///
+ /// Добавленное число.
+ private void AddNumberEventHandler(int number)
+ {
+ _arrayInit.Add(number);
+ UpdateListBox();
+ }
+
+ ///
+ /// Обработчик события нажатия кнопки "Сбросить".
+ /// Очищает список и обновляет элементы списка на форме.
+ ///
+ private void buttonReset_Click(object sender, EventArgs e)
+ {
+ _arrayInit.Clear();
+ UpdateListBox();
+ numericUpDownNumber.Value = 0;
+ }
+
+ ///
+ /// Обработчик события нажатия кнопки "Сохранить".
+ /// Формирует объект параметров поиска и вызывает событие инициализации параметров поиска.
+ ///
+ private void buttonSave_Click(object sender, EventArgs e)
+ {
+ SearchParameters parameters = new SearchParameters(_arrayInit, (int)numericUpDownNumber.Value);
+ InitParametersEvent?.Invoke(parameters);
+
+ this.Close();
+ }
+}
+
diff --git a/BinarySearch/BinarySearch/Forms/InitDataForm.resx b/BinarySearch/BinarySearch/Forms/InitDataForm.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/InitDataForm.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/Forms/MainForm.Designer.cs b/BinarySearch/BinarySearch/Forms/MainForm.Designer.cs
new file mode 100644
index 0000000..d20fe09
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/MainForm.Designer.cs
@@ -0,0 +1,306 @@
+namespace BinarySearch
+{
+ partial class MainForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ groupBoxTools = new GroupBox();
+ buttonStepBack = new Button();
+ buttonStart = new Button();
+ buttonStepForward = new Button();
+ buttonInfo = new Button();
+ buttonAddData = new Button();
+ flowLayoutPanelArray = new FlowLayoutPanel();
+ labelIsTarget = new Label();
+ labelTarget = new Label();
+ flowLayoutPanelIndex = new FlowLayoutPanel();
+ menuStrip1 = new MenuStrip();
+ файлToolStripMenuItem = new ToolStripMenuItem();
+ toolStripMenuItemSave = new ToolStripMenuItem();
+ toolStripMenuItemLoad = new ToolStripMenuItem();
+ saveFileDialog = new SaveFileDialog();
+ openFileDialog = new OpenFileDialog();
+ labelMid = new Label();
+ progressBarSteps = new ProgressBar();
+ groupBox1 = new GroupBox();
+ groupBox2 = new GroupBox();
+ textBoxSteps = new TextBox();
+ textBoxStep = new TextBox();
+ groupBoxTools.SuspendLayout();
+ menuStrip1.SuspendLayout();
+ groupBox1.SuspendLayout();
+ groupBox2.SuspendLayout();
+ SuspendLayout();
+ //
+ // groupBoxTools
+ //
+ groupBoxTools.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;
+ groupBoxTools.AutoSize = true;
+ groupBoxTools.Controls.Add(buttonStepBack);
+ groupBoxTools.Controls.Add(buttonStart);
+ groupBoxTools.Controls.Add(buttonStepForward);
+ groupBoxTools.Controls.Add(buttonInfo);
+ groupBoxTools.Controls.Add(buttonAddData);
+ groupBoxTools.Location = new Point(788, 27);
+ groupBoxTools.Name = "groupBoxTools";
+ groupBoxTools.Size = new Size(200, 384);
+ groupBoxTools.TabIndex = 0;
+ groupBoxTools.TabStop = false;
+ groupBoxTools.Text = "Инструменты";
+ //
+ // buttonStepBack
+ //
+ buttonStepBack.Location = new Point(11, 109);
+ buttonStepBack.Name = "buttonStepBack";
+ buttonStepBack.Size = new Size(183, 23);
+ buttonStepBack.TabIndex = 4;
+ buttonStepBack.Text = "Шаг назад";
+ buttonStepBack.UseVisualStyleBackColor = true;
+ buttonStepBack.Click += buttonStepBack_Click;
+ //
+ // buttonStart
+ //
+ buttonStart.Location = new Point(11, 138);
+ buttonStart.Name = "buttonStart";
+ buttonStart.Size = new Size(183, 23);
+ buttonStart.TabIndex = 3;
+ buttonStart.Text = "Начать бинарный поиск";
+ buttonStart.UseVisualStyleBackColor = true;
+ buttonStart.Click += buttonStart_Click;
+ //
+ // buttonStepForward
+ //
+ buttonStepForward.Location = new Point(11, 80);
+ buttonStepForward.Name = "buttonStepForward";
+ buttonStepForward.Size = new Size(183, 23);
+ buttonStepForward.TabIndex = 2;
+ buttonStepForward.Text = "Шаг вперед";
+ buttonStepForward.UseVisualStyleBackColor = true;
+ buttonStepForward.Click += buttonStepForward_Click;
+ //
+ // buttonInfo
+ //
+ buttonInfo.Location = new Point(11, 22);
+ buttonInfo.Name = "buttonInfo";
+ buttonInfo.Size = new Size(183, 23);
+ buttonInfo.TabIndex = 1;
+ buttonInfo.Text = "Информация";
+ buttonInfo.UseVisualStyleBackColor = true;
+ buttonInfo.Click += buttonInfo_Click;
+ //
+ // buttonAddData
+ //
+ buttonAddData.Location = new Point(11, 51);
+ buttonAddData.Name = "buttonAddData";
+ buttonAddData.Size = new Size(183, 23);
+ buttonAddData.TabIndex = 0;
+ buttonAddData.Text = "Ввести данные";
+ buttonAddData.UseVisualStyleBackColor = true;
+ buttonAddData.Click += buttonAddData_Click;
+ //
+ // flowLayoutPanelArray
+ //
+ flowLayoutPanelArray.Location = new Point(12, 96);
+ flowLayoutPanelArray.Name = "flowLayoutPanelArray";
+ flowLayoutPanelArray.Size = new Size(757, 36);
+ flowLayoutPanelArray.TabIndex = 3;
+ //
+ // labelIsTarget
+ //
+ labelIsTarget.AutoSize = true;
+ labelIsTarget.Location = new Point(12, 34);
+ labelIsTarget.Name = "labelIsTarget";
+ labelIsTarget.Size = new Size(114, 15);
+ labelIsTarget.TabIndex = 4;
+ labelIsTarget.Text = "Искомое значение:";
+ //
+ // labelTarget
+ //
+ labelTarget.AutoSize = true;
+ labelTarget.Location = new Point(132, 34);
+ labelTarget.Name = "labelTarget";
+ labelTarget.Size = new Size(74, 15);
+ labelTarget.TabIndex = 5;
+ labelTarget.Text = "Не выбрано";
+ //
+ // flowLayoutPanelIndex
+ //
+ flowLayoutPanelIndex.Location = new Point(12, 56);
+ flowLayoutPanelIndex.Name = "flowLayoutPanelIndex";
+ flowLayoutPanelIndex.Size = new Size(757, 36);
+ flowLayoutPanelIndex.TabIndex = 4;
+ //
+ // menuStrip1
+ //
+ menuStrip1.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem });
+ menuStrip1.Location = new Point(0, 0);
+ menuStrip1.Name = "menuStrip1";
+ menuStrip1.Size = new Size(988, 24);
+ menuStrip1.TabIndex = 6;
+ menuStrip1.Text = "menuStrip1";
+ //
+ // файлToolStripMenuItem
+ //
+ файлToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItemSave, toolStripMenuItemLoad });
+ файлToolStripMenuItem.Name = "файлToolStripMenuItem";
+ файлToolStripMenuItem.Size = new Size(48, 20);
+ файлToolStripMenuItem.Text = "Файл";
+ //
+ // toolStripMenuItemSave
+ //
+ toolStripMenuItemSave.Enabled = false;
+ toolStripMenuItemSave.Name = "toolStripMenuItemSave";
+ toolStripMenuItemSave.ShortcutKeys = Keys.Control | Keys.S;
+ toolStripMenuItemSave.Size = new Size(173, 22);
+ toolStripMenuItemSave.Text = "Сохранить";
+ toolStripMenuItemSave.Click += toolStripMenuItemSave_Click;
+ //
+ // toolStripMenuItemLoad
+ //
+ toolStripMenuItemLoad.Name = "toolStripMenuItemLoad";
+ toolStripMenuItemLoad.ShortcutKeys = Keys.Control | Keys.L;
+ toolStripMenuItemLoad.Size = new Size(173, 22);
+ toolStripMenuItemLoad.Text = "Загрузить";
+ toolStripMenuItemLoad.Click += toolStripMenuItemLoad_Click;
+ //
+ // saveFileDialog
+ //
+ saveFileDialog.Filter = "bin file | *.bin";
+ //
+ // openFileDialog
+ //
+ openFileDialog.FileName = "openFileDialog1";
+ openFileDialog.Filter = "bin file | *.bin";
+ //
+ // labelMid
+ //
+ labelMid.AutoSize = true;
+ labelMid.Location = new Point(12, 140);
+ labelMid.Name = "labelMid";
+ labelMid.Size = new Size(0, 15);
+ labelMid.TabIndex = 7;
+ //
+ // progressBarSteps
+ //
+ progressBarSteps.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+ progressBarSteps.Location = new Point(12, 377);
+ progressBarSteps.Name = "progressBarSteps";
+ progressBarSteps.Size = new Size(770, 23);
+ progressBarSteps.TabIndex = 8;
+ //
+ // groupBox1
+ //
+ groupBox1.Controls.Add(textBoxSteps);
+ groupBox1.Location = new Point(12, 310);
+ groupBox1.Name = "groupBox1";
+ groupBox1.Size = new Size(133, 61);
+ groupBox1.TabIndex = 9;
+ groupBox1.TabStop = false;
+ groupBox1.Text = "Количество шагов";
+ //
+ // groupBox2
+ //
+ groupBox2.Controls.Add(textBoxStep);
+ groupBox2.Location = new Point(151, 310);
+ groupBox2.Name = "groupBox2";
+ groupBox2.Size = new Size(131, 61);
+ groupBox2.TabIndex = 10;
+ groupBox2.TabStop = false;
+ groupBox2.Text = "Актуальный шаг";
+ //
+ // textBoxSteps
+ //
+ textBoxSteps.Enabled = false;
+ textBoxSteps.Location = new Point(6, 22);
+ textBoxSteps.Name = "textBoxSteps";
+ textBoxSteps.Size = new Size(121, 23);
+ textBoxSteps.TabIndex = 0;
+ //
+ // textBoxStep
+ //
+ textBoxStep.Enabled = false;
+ textBoxStep.Location = new Point(4, 22);
+ textBoxStep.Name = "textBoxStep";
+ textBoxStep.Size = new Size(121, 23);
+ textBoxStep.TabIndex = 1;
+ //
+ // MainForm
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ BackColor = Color.Moccasin;
+ ClientSize = new Size(988, 412);
+ Controls.Add(groupBox2);
+ Controls.Add(groupBox1);
+ Controls.Add(progressBarSteps);
+ Controls.Add(labelMid);
+ Controls.Add(flowLayoutPanelIndex);
+ Controls.Add(labelTarget);
+ Controls.Add(labelIsTarget);
+ Controls.Add(flowLayoutPanelArray);
+ Controls.Add(groupBoxTools);
+ Controls.Add(menuStrip1);
+ MainMenuStrip = menuStrip1;
+ Name = "MainForm";
+ Text = "Бинарный поиск";
+ groupBoxTools.ResumeLayout(false);
+ menuStrip1.ResumeLayout(false);
+ menuStrip1.PerformLayout();
+ groupBox1.ResumeLayout(false);
+ groupBox1.PerformLayout();
+ groupBox2.ResumeLayout(false);
+ groupBox2.PerformLayout();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private GroupBox groupBoxTools;
+ private Button buttonInfo;
+ private Button buttonAddData;
+ private Button buttonStepForward;
+ private Button buttonStart;
+ public FlowLayoutPanel flowLayoutPanelArray;
+ private Label labelIsTarget;
+ private Label labelTarget;
+ public FlowLayoutPanel flowLayoutPanelIndex;
+ private MenuStrip menuStrip1;
+ private ToolStripMenuItem файлToolStripMenuItem;
+ private ToolStripMenuItem toolStripMenuItemSave;
+ private ToolStripMenuItem toolStripMenuItemLoad;
+ private SaveFileDialog saveFileDialog;
+ private OpenFileDialog openFileDialog;
+ public Label labelMid;
+ private Button buttonStepBack;
+ private ProgressBar progressBarSteps;
+ private GroupBox groupBox1;
+ private GroupBox groupBox2;
+ private TextBox textBoxSteps;
+ private TextBox textBoxStep;
+ }
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/Forms/MainForm.cs b/BinarySearch/BinarySearch/Forms/MainForm.cs
new file mode 100644
index 0000000..788b9ba
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/MainForm.cs
@@ -0,0 +1,188 @@
+using BinarySearch.Algorithm;
+using BinarySearch.State;
+
+namespace BinarySearch;
+
+///
+/// Главная форма приложения для визуализации бинарного поиска.
+///
+public partial class MainForm : Form
+{
+ private readonly StateStorage _stateStorage;
+ private readonly Manager _manager;
+ private SearchParameters _parameters;
+ private BinarySearchVisualizer _visualizer;
+
+ ///
+ /// Конструктор главной формы.
+ ///
+ public MainForm()
+ {
+ InitializeComponent();
+ _stateStorage = new StateStorage();
+ _manager = new Manager(_stateStorage);
+ _parameters = new SearchParameters();
+ _visualizer = new BinarySearchVisualizer(this, _parameters.Array);
+ buttonStepForward.Enabled = false;
+ buttonStepBack.Enabled = false;
+ buttonStart.Enabled = false;
+ }
+
+ ///
+ /// Обработчик события добавления данных.
+ ///
+ ///
+ ///
+ private void buttonAddData_Click(object sender, EventArgs e)
+ {
+ InitDataForm initDataForm = new();
+ initDataForm.InitParametersEvent += InitParametersEventHandler;
+ initDataForm.ShowDialog();
+ }
+
+ ///
+ /// Обработчик события инициализации параметров поиска.
+ ///
+ ///
+ private void InitParametersEventHandler(SearchParameters searchParameters)
+ {
+ _parameters = new SearchParameters(searchParameters.Array, searchParameters.Target);
+ _visualizer = new BinarySearchVisualizer(this, _parameters.Array);
+ _visualizer.UpdateFlowLayoutPanel();
+ labelTarget.Text = searchParameters.Target.ToString();
+ buttonStart.Enabled = true;
+ }
+
+ ///
+ /// Обработчик события запуска бинарного поиска.
+ ///
+ ///
+ ///
+ private void buttonStart_Click(object sender, EventArgs e)
+ {
+ _stateStorage.Reset();
+ _visualizer.UpdateFlowLayoutPanel();
+ _manager.ExecuteBinarySearch(_parameters);
+ progressBarSteps.Maximum = _stateStorage.GetStatesCount();
+ textBoxSteps.Text = _stateStorage.GetStatesCount().ToString();
+ progressBarSteps.Value = 0;
+ textBoxStep.Text = 0.ToString();
+ toolStripMenuItemSave.Enabled = true;
+ buttonStepForward.Enabled = true;
+ buttonStepBack.Enabled = false;
+ }
+
+ ///
+ /// Обработчик события шага вперед бинарного поиска.
+ ///
+ ///
+ ///
+ private void buttonStepForward_Click(object sender, EventArgs e)
+ {
+ SearchState? searchState = _stateStorage.GetNextState();
+ progressBarSteps.Value = _stateStorage.GetCurrentIndex()+1;
+ textBoxStep.Text = (_stateStorage.GetCurrentIndex() + 1).ToString();
+ SearchState? searchStateCheck = _stateStorage.GetNextState();
+ if (searchStateCheck == null && searchState != null)
+ {
+ buttonStepForward.Enabled = false;
+ if (searchState.TargetIndex != null && searchState.TargetIndex >= 0)
+ {
+ MessageBox.Show($"Число {searchState.Target} найдено с индексом: {searchState.TargetIndex}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ } else if (searchState.TargetIndex != null && searchState.TargetIndex < 0)
+ {
+ MessageBox.Show($"Число {searchState.Target} не найдено", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ _visualizer.Visualize(searchState);
+ return;
+ }
+ searchState = _stateStorage.GetPreviousState();
+ if (searchState == null)
+ {
+ return;
+ }
+ _visualizer.Visualize(searchState);
+ buttonStepForward.Enabled = true;
+ buttonStepBack.Enabled = true;
+ }
+
+ ///
+ /// Обработчик события шага назад бинарного поиска.
+ ///
+ ///
+ ///
+ private void buttonStepBack_Click(object sender, EventArgs e)
+ {
+ SearchState? searchState = _stateStorage.GetPreviousState();
+ if (searchState == null)
+ {
+ return;
+ }
+ progressBarSteps.Value = _stateStorage.GetCurrentIndex()+1;
+ textBoxStep.Text = (_stateStorage.GetCurrentIndex() + 1).ToString();
+ _visualizer.Visualize(searchState);
+ buttonStepForward.Enabled = true;
+ buttonStepBack.Enabled = true;
+ }
+
+ ///
+ /// Обработчик события открытия формы информации
+ ///
+ ///
+ ///
+ private void buttonInfo_Click(object sender, EventArgs e)
+ {
+ InfoForm infoForm = new();
+ infoForm.ShowDialog();
+ }
+
+ ///
+ /// Обработчик события сохранения состояния в файл.
+ ///
+ ///
+ ///
+ private void toolStripMenuItemSave_Click(object sender, EventArgs e)
+ {
+ if (saveFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ if (_stateStorage.SaveToFile(saveFileDialog.FileName))
+ {
+ MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ else
+ {
+ MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+
+ ///
+ /// Обработчик события загрузки состояния из файла.
+ ///
+ ///
+ ///
+ private void toolStripMenuItemLoad_Click(object sender, EventArgs e)
+ {
+ if (openFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ if (_stateStorage.LoadFromFile(openFileDialog.FileName))
+ {
+ SearchState? state = _stateStorage.GetNextState();
+ if (state != null)
+ {
+ _parameters = new SearchParameters(state.Array, state.Target);
+ _visualizer = new BinarySearchVisualizer(this, _parameters.Array);
+ _visualizer.UpdateFlowLayoutPanel();
+ labelTarget.Text = state.Target.ToString();
+ _stateStorage.GetPreviousState();
+ }
+ buttonStart.Enabled = true;
+ MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ else
+ {
+ MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/Forms/MainForm.resx b/BinarySearch/BinarySearch/Forms/MainForm.resx
new file mode 100644
index 0000000..8214e5c
--- /dev/null
+++ b/BinarySearch/BinarySearch/Forms/MainForm.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+ 132, 17
+
+
+ 267, 17
+
+
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/Program.cs b/BinarySearch/BinarySearch/Program.cs
new file mode 100644
index 0000000..4105b5a
--- /dev/null
+++ b/BinarySearch/BinarySearch/Program.cs
@@ -0,0 +1,17 @@
+namespace BinarySearch
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+ Application.Run(new MainForm());
+ }
+ }
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/Properties/Resources.Designer.cs b/BinarySearch/BinarySearch/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..82b9587
--- /dev/null
+++ b/BinarySearch/BinarySearch/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// Этот код создан программой.
+// Исполняемая версия:4.0.30319.42000
+//
+// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+// повторной генерации кода.
+//
+//------------------------------------------------------------------------------
+
+namespace BinarySearch.Properties {
+ using System;
+
+
+ ///
+ /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
+ ///
+ // Этот класс создан автоматически классом StronglyTypedResourceBuilder
+ // с помощью такого средства, как ResGen или Visual Studio.
+ // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
+ // с параметром /str или перестройте свой проект VS.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BinarySearch.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Перезаписывает свойство CurrentUICulture текущего потока для всех
+ /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/BinarySearch/BinarySearch/Properties/Resources.resx b/BinarySearch/BinarySearch/Properties/Resources.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/BinarySearch/BinarySearch/Properties/Resources.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/State/SearchState.cs b/BinarySearch/BinarySearch/State/SearchState.cs
new file mode 100644
index 0000000..a972a7a
--- /dev/null
+++ b/BinarySearch/BinarySearch/State/SearchState.cs
@@ -0,0 +1,34 @@
+namespace BinarySearch.State;
+
+///
+/// Класс-состояние
+///
+[Serializable]
+public class SearchState
+{
+ public int Left { get; }
+ public int Right { get; }
+ public int Mid { get; }
+ public List Array { get; }
+ public int Target { get; }
+ public int? TargetIndex { get; }
+
+ ///
+ /// Конструктор класса состояния
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public SearchState(int left, int right, int mid, int? targetIndex, List array, int target)
+ {
+ Left = left;
+ Right = right;
+ Mid = mid;
+ TargetIndex = targetIndex;
+ Array = array;
+ Target = target;
+ }
+}
diff --git a/BinarySearch/BinarySearch/State/StateStorage.cs b/BinarySearch/BinarySearch/State/StateStorage.cs
new file mode 100644
index 0000000..f167e2e
--- /dev/null
+++ b/BinarySearch/BinarySearch/State/StateStorage.cs
@@ -0,0 +1,148 @@
+using System.Runtime.Serialization.Formatters.Binary;
+
+namespace BinarySearch.State;
+
+///
+/// Класс-Хранилище
+///
+public class StateStorage
+{
+ private List states;
+ private int currentIndex;
+
+ ///
+ /// Конструктор класса-хранилища
+ ///
+ public StateStorage()
+ {
+ states = new List();
+ currentIndex = -1;
+ }
+
+ ///
+ /// Получение количества элементов хранилище
+ ///
+ ///
+ public int GetStatesCount() { return states.Count; }
+
+ ///
+ /// Получения актуального индекса
+ ///
+ ///
+ public int GetCurrentIndex() { return currentIndex; }
+
+ ///
+ /// Добавление состояния в хранилище
+ ///
+ ///
+ public void AddState(SearchState state)
+ {
+ states.Add(state);
+ }
+
+ ///
+ /// Очистка хранилища
+ ///
+ public void Clear()
+ {
+ states.Clear();
+ Reset();
+ }
+
+ ///
+ /// Сброс актуального индекса
+ ///
+ public void Reset()
+ {
+ currentIndex = -1;
+ }
+
+ ///
+ /// Получение следующего состояния
+ ///
+ ///
+ public SearchState? GetNextState()
+ {
+ if (currentIndex+1 < states.Count)
+ {
+ currentIndex++;
+ return states[currentIndex];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ ///
+ /// Получение предыдущего состояния
+ ///
+ ///
+ public SearchState? GetPreviousState()
+ {
+ if (currentIndex > 0 && currentIndex < states.Count)
+ {
+ currentIndex--;
+ return states[currentIndex];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ ///
+ /// Проверка на то дошли ли мы до конца хранилища
+ ///
+ ///
+ public bool IsTraversalComplete()
+ {
+ return currentIndex >= states.Count - 1;
+ }
+
+ ///
+ /// Сохранение хранилища в бинарный файл
+ ///
+ ///
+ ///
+ public bool SaveToFile(string filename)
+ {
+ try
+ {
+ BinaryFormatter formatter = new BinaryFormatter();
+ using FileStream fs = new FileStream(filename, FileMode.Create);
+ #pragma warning disable SYSLIB0011
+ formatter.Serialize(fs, states);
+ #pragma warning restore SYSLIB0011
+ return true;
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Error saving file: {ex.Message}");
+ return false;
+ }
+ }
+
+ ///
+ /// Загрузка хранилища из бинарного файла
+ ///
+ ///
+ ///
+ public bool LoadFromFile(string filename)
+ {
+ try
+ {
+ BinaryFormatter formatter = new BinaryFormatter();
+ using FileStream fs = new FileStream(filename, FileMode.Open);
+ #pragma warning disable SYSLIB0011
+ states = (List)formatter.Deserialize(fs);
+ #pragma warning restore SYSLIB0011
+ return true;
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Error loading file: {ex.Message}");
+ return false;
+ }
+ }
+}
diff --git a/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.deps.json b/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.deps.json
new file mode 100644
index 0000000..d786b8a
--- /dev/null
+++ b/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.deps.json
@@ -0,0 +1,23 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v7.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v7.0": {
+ "BinarySearch/1.0.0": {
+ "runtime": {
+ "BinarySearch.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "BinarySearch/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.dll b/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.dll
new file mode 100644
index 0000000..aa96c92
Binary files /dev/null and b/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.dll differ
diff --git a/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.exe b/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.exe
new file mode 100644
index 0000000..a5c5141
Binary files /dev/null and b/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.exe differ
diff --git a/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.pdb b/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.pdb
new file mode 100644
index 0000000..4859466
Binary files /dev/null and b/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.pdb differ
diff --git a/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.runtimeconfig.json b/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.runtimeconfig.json
new file mode 100644
index 0000000..f76a63a
--- /dev/null
+++ b/BinarySearch/BinarySearch/bin/Debug/net7.0-windows/BinarySearch.runtimeconfig.json
@@ -0,0 +1,18 @@
+{
+ "runtimeOptions": {
+ "tfm": "net7.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "7.0.0"
+ },
+ {
+ "name": "Microsoft.WindowsDesktop.App",
+ "version": "7.0.0"
+ }
+ ],
+ "configProperties": {
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/obj/BinarySearch.csproj.nuget.dgspec.json b/BinarySearch/BinarySearch/obj/BinarySearch.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..e5a9579
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/BinarySearch.csproj.nuget.dgspec.json
@@ -0,0 +1,66 @@
+{
+ "format": 1,
+ "restore": {
+ "C:\\Users\\Shiplov\\source\\repos\\BinarySearch_PIBD-11_ShipilovNikita\\BinarySearch\\BinarySearch\\BinarySearch.csproj": {}
+ },
+ "projects": {
+ "C:\\Users\\Shiplov\\source\\repos\\BinarySearch_PIBD-11_ShipilovNikita\\BinarySearch\\BinarySearch\\BinarySearch.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\Shiplov\\source\\repos\\BinarySearch_PIBD-11_ShipilovNikita\\BinarySearch\\BinarySearch\\BinarySearch.csproj",
+ "projectName": "BinarySearch",
+ "projectPath": "C:\\Users\\Shiplov\\source\\repos\\BinarySearch_PIBD-11_ShipilovNikita\\BinarySearch\\BinarySearch\\BinarySearch.csproj",
+ "packagesPath": "C:\\Users\\Shiplov\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\Shiplov\\source\\repos\\BinarySearch_PIBD-11_ShipilovNikita\\BinarySearch\\BinarySearch\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\Shiplov\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0-windows"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0-windows7.0": {
+ "targetAlias": "net7.0-windows",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0-windows7.0": {
+ "targetAlias": "net7.0-windows",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ },
+ "Microsoft.WindowsDesktop.App.WindowsForms": {
+ "privateAssets": "none"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/obj/BinarySearch.csproj.nuget.g.props b/BinarySearch/BinarySearch/obj/BinarySearch.csproj.nuget.g.props
new file mode 100644
index 0000000..7a1ea45
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/BinarySearch.csproj.nuget.g.props
@@ -0,0 +1,15 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\Shiplov\.nuget\packages\
+ PackageReference
+ 6.8.0
+
+
+
+
+
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/obj/BinarySearch.csproj.nuget.g.targets b/BinarySearch/BinarySearch/obj/BinarySearch.csproj.nuget.g.targets
new file mode 100644
index 0000000..3dc06ef
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/BinarySearch.csproj.nuget.g.targets
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
new file mode 100644
index 0000000..4257f4b
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")]
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.AssemblyInfo.cs b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.AssemblyInfo.cs
new file mode 100644
index 0000000..f9ba2f8
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.AssemblyInfo.cs
@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+//
+// Этот код создан программой.
+// Исполняемая версия:4.0.30319.42000
+//
+// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+// повторной генерации кода.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("BinarySearch")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("BinarySearch")]
+[assembly: System.Reflection.AssemblyTitleAttribute("BinarySearch")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
+[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
+
+// Создано классом WriteCodeFragment MSBuild.
+
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.AssemblyInfoInputs.cache b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..b9ff95c
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+1d747fb8a31ff8aaece430d2476a61103b8e3209701086c3b8734998b4b745be
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.Forms.AddForm.resources b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.Forms.AddForm.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.Forms.AddForm.resources differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.GeneratedMSBuildEditorConfig.editorconfig b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..61673a8
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,19 @@
+is_global = true
+build_property.ApplicationManifest =
+build_property.StartupObject =
+build_property.ApplicationDefaultFont =
+build_property.ApplicationHighDpiMode =
+build_property.ApplicationUseCompatibleTextRendering =
+build_property.ApplicationVisualStyles =
+build_property.TargetFramework = net7.0-windows
+build_property.TargetPlatformMinVersion = 7.0
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property.EnforceExtendedAnalyzerRules =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = BinarySearch
+build_property.ProjectDir = C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\
+build_property.EnableComHosting =
+build_property.EnableGeneratedComInterfaceComImportInterop =
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.GlobalUsings.g.cs b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.GlobalUsings.g.cs
new file mode 100644
index 0000000..84bbb89
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.GlobalUsings.g.cs
@@ -0,0 +1,10 @@
+//
+global using global::System;
+global using global::System.Collections.Generic;
+global using global::System.Drawing;
+global using global::System.IO;
+global using global::System.Linq;
+global using global::System.Net.Http;
+global using global::System.Threading;
+global using global::System.Threading.Tasks;
+global using global::System.Windows.Forms;
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.InfoForm.resources b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.InfoForm.resources
new file mode 100644
index 0000000..b90cdec
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.InfoForm.resources differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.InitDataForm.resources b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.InitDataForm.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.InitDataForm.resources differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.MainForm.resources b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.MainForm.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.MainForm.resources differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.Properties.Resources.resources b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.Properties.Resources.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.Properties.Resources.resources differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.assets.cache b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.assets.cache
new file mode 100644
index 0000000..9b52e7c
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.assets.cache differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.csproj.BuildWithSkipAnalyzers b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.csproj.BuildWithSkipAnalyzers
new file mode 100644
index 0000000..e69de29
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.csproj.CoreCompileInputs.cache b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..566d6af
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+17617cbbbb9c70f103e1bc84611596da5414cd65c4cbfd62e5ffa2cd30ef04af
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.csproj.FileListAbsolute.txt b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..3b7a103
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.csproj.FileListAbsolute.txt
@@ -0,0 +1,20 @@
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\bin\Debug\net7.0-windows\BinarySearch.exe
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\bin\Debug\net7.0-windows\BinarySearch.deps.json
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\bin\Debug\net7.0-windows\BinarySearch.runtimeconfig.json
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\bin\Debug\net7.0-windows\BinarySearch.dll
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\bin\Debug\net7.0-windows\BinarySearch.pdb
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.GeneratedMSBuildEditorConfig.editorconfig
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.AssemblyInfoInputs.cache
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.AssemblyInfo.cs
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.csproj.CoreCompileInputs.cache
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.dll
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\refint\BinarySearch.dll
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.pdb
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.genruntimeconfig.cache
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\ref\BinarySearch.dll
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.MainForm.resources
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.csproj.GenerateResource.cache
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.InitDataForm.resources
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.InfoForm.resources
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.Forms.AddForm.resources
+C:\Users\Shiplov\source\repos\BinarySearch_PIBD-11_ShipilovNikita\BinarySearch\BinarySearch\obj\Debug\net7.0-windows\BinarySearch.Properties.Resources.resources
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.csproj.GenerateResource.cache b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.csproj.GenerateResource.cache
new file mode 100644
index 0000000..27cf8c6
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.csproj.GenerateResource.cache differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.designer.deps.json b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.designer.deps.json
new file mode 100644
index 0000000..e775195
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.designer.deps.json
@@ -0,0 +1,11 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v7.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v7.0": {}
+ },
+ "libraries": {}
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.designer.runtimeconfig.json b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.designer.runtimeconfig.json
new file mode 100644
index 0000000..3226ef3
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.designer.runtimeconfig.json
@@ -0,0 +1,23 @@
+{
+ "runtimeOptions": {
+ "tfm": "net7.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "7.0.0"
+ },
+ {
+ "name": "Microsoft.WindowsDesktop.App",
+ "version": "7.0.0"
+ }
+ ],
+ "additionalProbingPaths": [
+ "C:\\Users\\Shiplov\\.dotnet\\store\\|arch|\\|tfm|",
+ "C:\\Users\\Shiplov\\.nuget\\packages"
+ ],
+ "configProperties": {
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true,
+ "Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.dll b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.dll
new file mode 100644
index 0000000..aa96c92
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.dll differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.genruntimeconfig.cache b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.genruntimeconfig.cache
new file mode 100644
index 0000000..2ec02d6
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.genruntimeconfig.cache
@@ -0,0 +1 @@
+25f9c3050f970304723cee3b20bcbf874bf3fff9365ec968ddade2be0586b906
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.pdb b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.pdb
new file mode 100644
index 0000000..4859466
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/BinarySearch.pdb differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/TempPE/Properties.Resources.Designer.cs.dll b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 0000000..de03fc5
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/apphost.exe b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/apphost.exe
new file mode 100644
index 0000000..a5c5141
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/apphost.exe differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/ref/BinarySearch.dll b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/ref/BinarySearch.dll
new file mode 100644
index 0000000..8054b19
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/ref/BinarySearch.dll differ
diff --git a/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/refint/BinarySearch.dll b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/refint/BinarySearch.dll
new file mode 100644
index 0000000..8054b19
Binary files /dev/null and b/BinarySearch/BinarySearch/obj/Debug/net7.0-windows/refint/BinarySearch.dll differ
diff --git a/BinarySearch/BinarySearch/obj/project.assets.json b/BinarySearch/BinarySearch/obj/project.assets.json
new file mode 100644
index 0000000..57c4643
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/project.assets.json
@@ -0,0 +1,71 @@
+{
+ "version": 3,
+ "targets": {
+ "net7.0-windows7.0": {}
+ },
+ "libraries": {},
+ "projectFileDependencyGroups": {
+ "net7.0-windows7.0": []
+ },
+ "packageFolders": {
+ "C:\\Users\\Shiplov\\.nuget\\packages\\": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\Shiplov\\source\\repos\\BinarySearch_PIBD-11_ShipilovNikita\\BinarySearch\\BinarySearch\\BinarySearch.csproj",
+ "projectName": "BinarySearch",
+ "projectPath": "C:\\Users\\Shiplov\\source\\repos\\BinarySearch_PIBD-11_ShipilovNikita\\BinarySearch\\BinarySearch\\BinarySearch.csproj",
+ "packagesPath": "C:\\Users\\Shiplov\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\Shiplov\\source\\repos\\BinarySearch_PIBD-11_ShipilovNikita\\BinarySearch\\BinarySearch\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\Shiplov\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0-windows"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0-windows7.0": {
+ "targetAlias": "net7.0-windows",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0-windows7.0": {
+ "targetAlias": "net7.0-windows",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ },
+ "Microsoft.WindowsDesktop.App.WindowsForms": {
+ "privateAssets": "none"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BinarySearch/BinarySearch/obj/project.nuget.cache b/BinarySearch/BinarySearch/obj/project.nuget.cache
new file mode 100644
index 0000000..72a5e04
--- /dev/null
+++ b/BinarySearch/BinarySearch/obj/project.nuget.cache
@@ -0,0 +1,8 @@
+{
+ "version": 2,
+ "dgSpecHash": "HM7korIVwiBWjMmV/uHAObjv0X4KmytAWZoSMpBbHgkLArKWuV9FBcza8FWniuc9HTB3YhxSOB2WQ7stkxmMCQ==",
+ "success": true,
+ "projectFilePath": "C:\\Users\\Shiplov\\source\\repos\\BinarySearch_PIBD-11_ShipilovNikita\\BinarySearch\\BinarySearch\\BinarySearch.csproj",
+ "expectedPackageFiles": [],
+ "logs": []
+}
\ No newline at end of file