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 + 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 + + + + Данная программа позволяет вам посмотреть на графическую демонастрацию работы алгоритма "Бинарный поиск". + +Для этого вам потребуется создать базовый целочисленный массив и указать какой элемент вы хотите найти. Так же если у вас есть сохраненный .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