Fix: правки в коде

This commit is contained in:
Никита Шипилов 2024-05-12 01:30:46 +04:00
parent bcd334d031
commit c2f20659f9
28 changed files with 231 additions and 54 deletions

View File

@ -127,7 +127,7 @@
3. Сравниваем срединный элемент с заданным искомым элементом. 3. Сравниваем срединный элемент с заданным искомым элементом.
4. Если искомое число больше среднего — продолжаем поиск в правой части массива (если он отсортирован по возрастанию): делим ее пополам, повторяя пункт 3. Если же заданное число меньше — алгоритм продолжит поиск в левой части массива, снова возвращаясь к пункту 3. 4. Если искомое число больше среднего — продолжаем поиск в правой части массива (если он отсортирован по возрастанию): делим ее пополам, повторяя пункт 3. Если же заданное число меньше — алгоритм продолжит поиск в левой части массива, снова возвращаясь к пункту 3.
</value> Сложность: O(logN)</value>
</data> </data>
<metadata name="fontDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="fontDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
@ -136,7 +136,7 @@
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAABF4AAASFCAYAAACWvRgTAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL iVBORw0KGgoAAAANSUhEUgAABF4AAASFCAYAAACWvRgTAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EQAACxEBf2RfkQAApzZJREFUeF7s/U+PHOeBLnoefYEW9QHaLa+PZVDb/gPIO0tqwPRKts6C9KIJqzeU DgAACw4BQL7hQQAApzZJREFUeF7s/U+PHOeBLnoefYEW9QHaLa+PZVDb/gPIO0tqwPRKts6C9KIJqzeU
AWkk3DtzxZGOdHcWJVizG5OGvT2i0Z7VTNuEe+uG1V5d2AbEXlzg+khukqJsWrLUlZNPVr3Ft4JvZmVW AWkk3DtzxZGOdHcWJVizG5OGvT2i0Z7VTNuEe+uG1V5d2AbEXlzg+khukqJsWrLUlZNPVr3Ft4JvZmVW
5Z+IzN8PeEBWZmREZFZWVsRTb0T8lxEAAAAAq7CneAEAAABYDcULAAAAwIooXgAAAABWRPECAAAAsCKK 5Z+IzN8PeEBWZmREZFZWVsRTb0T8lxEAAAAAq7CneAEAAABYDcULAAAAwIooXgAAAABWRPECAAAAsCKK
FwAAAIAVUbwAAAAArIjiBQAAAGBFFC8AAAAAK6J4AQAAAFgRxQsAAADAiiheAAAAAFZE8QIAAACwIooX FwAAAIAVUbwAAAAArIjiBQAAAGBFFC8AAAAAK6J4AQAAAFgRxQsAAADAiiheAAAAAFZE8QIAAACwIooX
@ -855,7 +855,7 @@
<data name="richTextBox2.Text" xml:space="preserve"> <data name="richTextBox2.Text" xml:space="preserve">
<value>Данная программа позволяет вам посмотреть на графическую демонастрацию работы алгоритма "Бинарный поиск". <value>Данная программа позволяет вам посмотреть на графическую демонастрацию работы алгоритма "Бинарный поиск".
Для этого вам потребуется создать базовый целочисленный массив и указать какой элемент вы хотите найти. Так же если у вас есть сохраненный .bin файл с сохраненным состоянием там, то можете выгрузить его (CTRL+L). Для этого вам потребуется создать базовый целочисленный массив и указать какой элемент вы хотите найти. Так же если у вас есть сохраненный .bin или .json файл с состоянием, то можете загрузить его (CTRL+L).
После того как у вас появится в главной форме массив нажмите на кнопку запуска алгоритма. Теперь вы можете пройтись вперед и просмотреть шаги выполнения алгоритма. Так же можно сохранить данный массив (CTRL+S). После того как у вас появится в главной форме массив нажмите на кнопку запуска алгоритма. Теперь вы можете пройтись вперед и просмотреть шаги выполнения алгоритма. Так же можно сохранить данный массив (CTRL+S).
Желаю вам успехов в изучении алгоритмов!</value> Желаю вам успехов в изучении алгоритмов!</value>

View File

@ -45,15 +45,26 @@
saveFileDialog = new SaveFileDialog(); saveFileDialog = new SaveFileDialog();
openFileDialog = new OpenFileDialog(); openFileDialog = new OpenFileDialog();
labelMid = new Label(); labelMid = new Label();
progressBarSteps = new ProgressBar();
groupBox1 = new GroupBox(); groupBox1 = new GroupBox();
groupBox2 = new GroupBox();
textBoxSteps = new TextBox(); textBoxSteps = new TextBox();
groupBox2 = new GroupBox();
textBoxStep = new TextBox(); textBoxStep = new TextBox();
groupBox3 = new GroupBox();
labelResult = new Label();
labelConditional = new Label();
textBoxTarget = new TextBox();
textBoxCurrent = new TextBox();
statusStrip1 = new StatusStrip();
toolStripStatusLabel1 = new ToolStripStatusLabel();
toolStripStatusLabelElems = new ToolStripStatusLabel();
toolStripStatusLabel2 = new ToolStripStatusLabel();
toolStripProgressBarSteps = new ToolStripProgressBar();
groupBoxTools.SuspendLayout(); groupBoxTools.SuspendLayout();
menuStrip1.SuspendLayout(); menuStrip1.SuspendLayout();
groupBox1.SuspendLayout(); groupBox1.SuspendLayout();
groupBox2.SuspendLayout(); groupBox2.SuspendLayout();
groupBox3.SuspendLayout();
statusStrip1.SuspendLayout();
SuspendLayout(); SuspendLayout();
// //
// groupBoxTools // groupBoxTools
@ -65,9 +76,9 @@
groupBoxTools.Controls.Add(buttonStepForward); groupBoxTools.Controls.Add(buttonStepForward);
groupBoxTools.Controls.Add(buttonInfo); groupBoxTools.Controls.Add(buttonInfo);
groupBoxTools.Controls.Add(buttonAddData); groupBoxTools.Controls.Add(buttonAddData);
groupBoxTools.Location = new Point(788, 27); groupBoxTools.Location = new Point(797, 27);
groupBoxTools.Name = "groupBoxTools"; groupBoxTools.Name = "groupBoxTools";
groupBoxTools.Size = new Size(200, 384); groupBoxTools.Size = new Size(200, 255);
groupBoxTools.TabIndex = 0; groupBoxTools.TabIndex = 0;
groupBoxTools.TabStop = false; groupBoxTools.TabStop = false;
groupBoxTools.Text = "Инструменты"; groupBoxTools.Text = "Инструменты";
@ -124,9 +135,10 @@
// //
// flowLayoutPanelArray // flowLayoutPanelArray
// //
flowLayoutPanelArray.Location = new Point(12, 96); flowLayoutPanelArray.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
flowLayoutPanelArray.Location = new Point(12, 101);
flowLayoutPanelArray.Name = "flowLayoutPanelArray"; flowLayoutPanelArray.Name = "flowLayoutPanelArray";
flowLayoutPanelArray.Size = new Size(757, 36); flowLayoutPanelArray.Size = new Size(779, 36);
flowLayoutPanelArray.TabIndex = 3; flowLayoutPanelArray.TabIndex = 3;
// //
// labelIsTarget // labelIsTarget
@ -149,9 +161,10 @@
// //
// flowLayoutPanelIndex // flowLayoutPanelIndex
// //
flowLayoutPanelIndex.Location = new Point(12, 56); flowLayoutPanelIndex.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
flowLayoutPanelIndex.Location = new Point(12, 61);
flowLayoutPanelIndex.Name = "flowLayoutPanelIndex"; flowLayoutPanelIndex.Name = "flowLayoutPanelIndex";
flowLayoutPanelIndex.Size = new Size(757, 36); flowLayoutPanelIndex.Size = new Size(779, 36);
flowLayoutPanelIndex.TabIndex = 4; flowLayoutPanelIndex.TabIndex = 4;
// //
// menuStrip1 // menuStrip1
@ -159,7 +172,7 @@
menuStrip1.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem }); menuStrip1.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem });
menuStrip1.Location = new Point(0, 0); menuStrip1.Location = new Point(0, 0);
menuStrip1.Name = "menuStrip1"; menuStrip1.Name = "menuStrip1";
menuStrip1.Size = new Size(988, 24); menuStrip1.Size = new Size(997, 24);
menuStrip1.TabIndex = 6; menuStrip1.TabIndex = 6;
menuStrip1.Text = "menuStrip1"; menuStrip1.Text = "menuStrip1";
// //
@ -189,12 +202,12 @@
// //
// saveFileDialog // saveFileDialog
// //
saveFileDialog.Filter = "bin file | *.bin"; saveFileDialog.Filter = "bin file (*.bin)|*.bin|json file (*.json)|*.json";
// //
// openFileDialog // openFileDialog
// //
openFileDialog.FileName = "openFileDialog1"; openFileDialog.FileName = "openFileDialog1";
openFileDialog.Filter = "bin file | *.bin"; openFileDialog.Filter = "All files (*.bin, *.json)|*.bin;*.json|Binary files (*.bin)|*.bin|JSON files (*.json)|*.json";
// //
// labelMid // labelMid
// //
@ -204,59 +217,143 @@
labelMid.Size = new Size(0, 15); labelMid.Size = new Size(0, 15);
labelMid.TabIndex = 7; 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
// //
groupBox1.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
groupBox1.Controls.Add(textBoxSteps); groupBox1.Controls.Add(textBoxSteps);
groupBox1.Location = new Point(12, 310); groupBox1.Location = new Point(11, 182);
groupBox1.Name = "groupBox1"; groupBox1.Name = "groupBox1";
groupBox1.Size = new Size(133, 61); groupBox1.Size = new Size(133, 61);
groupBox1.TabIndex = 9; groupBox1.TabIndex = 9;
groupBox1.TabStop = false; groupBox1.TabStop = false;
groupBox1.Text = "Количество шагов"; groupBox1.Text = "Количество шагов";
// //
// textBoxSteps
//
textBoxSteps.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
textBoxSteps.Enabled = false;
textBoxSteps.Location = new Point(6, 25);
textBoxSteps.Name = "textBoxSteps";
textBoxSteps.Size = new Size(110, 23);
textBoxSteps.TabIndex = 0;
textBoxSteps.Text = "0";
//
// groupBox2 // groupBox2
// //
groupBox2.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
groupBox2.Controls.Add(textBoxStep); groupBox2.Controls.Add(textBoxStep);
groupBox2.Location = new Point(151, 310); groupBox2.Location = new Point(150, 182);
groupBox2.Name = "groupBox2"; groupBox2.Name = "groupBox2";
groupBox2.Size = new Size(131, 61); groupBox2.Size = new Size(131, 61);
groupBox2.TabIndex = 10; groupBox2.TabIndex = 10;
groupBox2.TabStop = false; groupBox2.TabStop = false;
groupBox2.Text = "Актуальный шаг"; 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
// //
textBoxStep.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
textBoxStep.Enabled = false; textBoxStep.Enabled = false;
textBoxStep.Location = new Point(4, 22); textBoxStep.Location = new Point(6, 25);
textBoxStep.Name = "textBoxStep"; textBoxStep.Name = "textBoxStep";
textBoxStep.Size = new Size(121, 23); textBoxStep.Size = new Size(110, 23);
textBoxStep.TabIndex = 1; textBoxStep.TabIndex = 1;
textBoxStep.Text = "0";
//
// groupBox3
//
groupBox3.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
groupBox3.Controls.Add(labelResult);
groupBox3.Controls.Add(labelConditional);
groupBox3.Controls.Add(textBoxTarget);
groupBox3.Controls.Add(textBoxCurrent);
groupBox3.Location = new Point(287, 182);
groupBox3.Name = "groupBox3";
groupBox3.Size = new Size(313, 61);
groupBox3.TabIndex = 11;
groupBox3.TabStop = false;
groupBox3.Text = "Рассчеты";
//
// labelResult
//
labelResult.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
labelResult.AutoSize = true;
labelResult.Location = new Point(152, 32);
labelResult.Name = "labelResult";
labelResult.Size = new Size(0, 15);
labelResult.TabIndex = 3;
//
// labelConditional
//
labelConditional.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
labelConditional.AutoSize = true;
labelConditional.Location = new Point(52, 32);
labelConditional.Name = "labelConditional";
labelConditional.Size = new Size(0, 15);
labelConditional.TabIndex = 2;
//
// textBoxTarget
//
textBoxTarget.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
textBoxTarget.Enabled = false;
textBoxTarget.Location = new Point(105, 25);
textBoxTarget.Name = "textBoxTarget";
textBoxTarget.Size = new Size(40, 23);
textBoxTarget.TabIndex = 1;
//
// textBoxCurrent
//
textBoxCurrent.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
textBoxCurrent.Enabled = false;
textBoxCurrent.Location = new Point(6, 25);
textBoxCurrent.Name = "textBoxCurrent";
textBoxCurrent.Size = new Size(40, 23);
textBoxCurrent.TabIndex = 0;
//
// statusStrip1
//
statusStrip1.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel1, toolStripStatusLabelElems, toolStripStatusLabel2, toolStripProgressBarSteps });
statusStrip1.Location = new Point(0, 261);
statusStrip1.Name = "statusStrip1";
statusStrip1.Size = new Size(997, 22);
statusStrip1.TabIndex = 12;
statusStrip1.Text = "statusStrip1";
//
// toolStripStatusLabel1
//
toolStripStatusLabel1.BackColor = SystemColors.Control;
toolStripStatusLabel1.Name = "toolStripStatusLabel1";
toolStripStatusLabel1.Size = new Size(137, 17);
toolStripStatusLabel1.Text = "Количество элементов:";
//
// toolStripStatusLabelElems
//
toolStripStatusLabelElems.BackColor = SystemColors.Control;
toolStripStatusLabelElems.Name = "toolStripStatusLabelElems";
toolStripStatusLabelElems.Size = new Size(13, 17);
toolStripStatusLabelElems.Text = "0";
//
// toolStripStatusLabel2
//
toolStripStatusLabel2.BackColor = SystemColors.Control;
toolStripStatusLabel2.Name = "toolStripStatusLabel2";
toolStripStatusLabel2.Size = new Size(197, 17);
toolStripStatusLabel2.Text = "Прогресс выполнения алгоритма:";
//
// toolStripProgressBarSteps
//
toolStripProgressBarSteps.Name = "toolStripProgressBarSteps";
toolStripProgressBarSteps.Size = new Size(100, 16);
// //
// MainForm // MainForm
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
BackColor = Color.Moccasin; BackColor = Color.Moccasin;
ClientSize = new Size(988, 412); ClientSize = new Size(997, 283);
Controls.Add(statusStrip1);
Controls.Add(groupBox3);
Controls.Add(groupBox2); Controls.Add(groupBox2);
Controls.Add(groupBox1); Controls.Add(groupBox1);
Controls.Add(progressBarSteps);
Controls.Add(labelMid); Controls.Add(labelMid);
Controls.Add(flowLayoutPanelIndex); Controls.Add(flowLayoutPanelIndex);
Controls.Add(labelTarget); Controls.Add(labelTarget);
@ -274,6 +371,10 @@
groupBox1.PerformLayout(); groupBox1.PerformLayout();
groupBox2.ResumeLayout(false); groupBox2.ResumeLayout(false);
groupBox2.PerformLayout(); groupBox2.PerformLayout();
groupBox3.ResumeLayout(false);
groupBox3.PerformLayout();
statusStrip1.ResumeLayout(false);
statusStrip1.PerformLayout();
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
@ -302,5 +403,15 @@
private GroupBox groupBox2; private GroupBox groupBox2;
private TextBox textBoxSteps; private TextBox textBoxSteps;
private TextBox textBoxStep; private TextBox textBoxStep;
private GroupBox groupBox3;
private Label labelResult;
private Label labelConditional;
private TextBox textBoxTarget;
private TextBox textBoxCurrent;
private StatusStrip statusStrip1;
private ToolStripProgressBar toolStripProgressBarSteps;
private ToolStripStatusLabel toolStripStatusLabel1;
private ToolStripStatusLabel toolStripStatusLabelElems;
private ToolStripStatusLabel toolStripStatusLabel2;
} }
} }

View File

@ -63,9 +63,10 @@ public partial class MainForm : Form
_stateStorage.Reset(); _stateStorage.Reset();
_visualizer.UpdateFlowLayoutPanel(); _visualizer.UpdateFlowLayoutPanel();
_manager.ExecuteBinarySearch(_parameters); _manager.ExecuteBinarySearch(_parameters);
progressBarSteps.Maximum = _stateStorage.GetStatesCount(); toolStripStatusLabelElems.Text = _parameters?.Array?.Count.ToString();
toolStripProgressBarSteps.Maximum = _stateStorage.GetStatesCount();
textBoxSteps.Text = _stateStorage.GetStatesCount().ToString(); textBoxSteps.Text = _stateStorage.GetStatesCount().ToString();
progressBarSteps.Value = 0; toolStripProgressBarSteps.Value = 0;
textBoxStep.Text = 0.ToString(); textBoxStep.Text = 0.ToString();
toolStripMenuItemSave.Enabled = true; toolStripMenuItemSave.Enabled = true;
buttonStepForward.Enabled = true; buttonStepForward.Enabled = true;
@ -80,7 +81,7 @@ public partial class MainForm : Form
private void buttonStepForward_Click(object sender, EventArgs e) private void buttonStepForward_Click(object sender, EventArgs e)
{ {
SearchState? searchState = _stateStorage.GetNextState(); SearchState? searchState = _stateStorage.GetNextState();
progressBarSteps.Value = _stateStorage.GetCurrentIndex()+1; toolStripProgressBarSteps.Value = _stateStorage.GetCurrentIndex()+1;
textBoxStep.Text = (_stateStorage.GetCurrentIndex() + 1).ToString(); textBoxStep.Text = (_stateStorage.GetCurrentIndex() + 1).ToString();
SearchState? searchStateCheck = _stateStorage.GetNextState(); SearchState? searchStateCheck = _stateStorage.GetNextState();
if (searchStateCheck == null && searchState != null) if (searchStateCheck == null && searchState != null)
@ -101,6 +102,7 @@ public partial class MainForm : Form
{ {
return; return;
} }
calculateInfo(searchState);
_visualizer.Visualize(searchState); _visualizer.Visualize(searchState);
buttonStepForward.Enabled = true; buttonStepForward.Enabled = true;
buttonStepBack.Enabled = true; buttonStepBack.Enabled = true;
@ -118,13 +120,35 @@ public partial class MainForm : Form
{ {
return; return;
} }
progressBarSteps.Value = _stateStorage.GetCurrentIndex()+1; toolStripProgressBarSteps.Value = _stateStorage.GetCurrentIndex()+1;
textBoxStep.Text = (_stateStorage.GetCurrentIndex() + 1).ToString(); textBoxStep.Text = (_stateStorage.GetCurrentIndex() + 1).ToString();
calculateInfo(searchState);
_visualizer.Visualize(searchState); _visualizer.Visualize(searchState);
buttonStepForward.Enabled = true; buttonStepForward.Enabled = true;
buttonStepBack.Enabled = true; buttonStepBack.Enabled = true;
} }
private void calculateInfo(SearchState state)
{
int currentNumber = state.Array[state.Mid];
int target = state.Target;
textBoxCurrent.Text = currentNumber.ToString();
textBoxTarget.Text = target.ToString();
if (target < currentNumber)
{
labelConditional.Text = "больше";
labelResult.Text = "берём левый подмассив";
} else if (target > currentNumber)
{
labelConditional.Text = "меньше";
labelResult.Text = "берём правый подмассив";
} else
{
labelConditional.Text = "равно";
labelResult.Text = "берём это значение";
}
}
/// <summary> /// <summary>
/// Обработчик события открытия формы информации /// Обработчик события открытия формы информации
/// </summary> /// </summary>

View File

@ -126,4 +126,7 @@
<metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>267, 17</value> <value>267, 17</value>
</metadata> </metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>400, 17</value>
</metadata>
</root> </root>

View File

@ -1,4 +1,5 @@
using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization.Formatters.Binary;
using System.Text.Json;
namespace BinarySearch.State; namespace BinarySearch.State;
@ -101,7 +102,7 @@ public class StateStorage
} }
/// <summary> /// <summary>
/// Сохранение хранилища в бинарный файл /// Сохранение хранилища в бинарный файл или JSON файл
/// </summary> /// </summary>
/// <param name="filename"></param> /// <param name="filename"></param>
/// <returns></returns> /// <returns></returns>
@ -109,11 +110,30 @@ public class StateStorage
{ {
try try
{ {
BinaryFormatter formatter = new BinaryFormatter(); string extension = Path.GetExtension(filename).ToLower();
using FileStream fs = new FileStream(filename, FileMode.Create);
#pragma warning disable SYSLIB0011 if (extension == ".bin")
formatter.Serialize(fs, states); {
#pragma warning restore SYSLIB0011 // Сохранение в бинарный формат
BinaryFormatter formatter = new BinaryFormatter();
using FileStream fs = new FileStream(filename, FileMode.Create);
#pragma warning disable SYSLIB0011
formatter.Serialize(fs, states);
#pragma warning restore SYSLIB0011
}
else if (extension == ".json")
{
// Сохранение в формат JSON
string json = JsonSerializer.Serialize(states);
File.WriteAllText(filename, json);
}
else
{
// Неподдерживаемое расширение файла
Console.WriteLine("Unsupported file extension");
return false;
}
return true; return true;
} }
catch (Exception ex) catch (Exception ex)
@ -124,7 +144,7 @@ public class StateStorage
} }
/// <summary> /// <summary>
/// Загрузка хранилища из бинарного файла /// Загрузка хранилища из бинарного файла или JSON файла
/// </summary> /// </summary>
/// <param name="filename"></param> /// <param name="filename"></param>
/// <returns></returns> /// <returns></returns>
@ -132,11 +152,30 @@ public class StateStorage
{ {
try try
{ {
BinaryFormatter formatter = new BinaryFormatter(); string extension = Path.GetExtension(filename).ToLower();
using FileStream fs = new FileStream(filename, FileMode.Open);
#pragma warning disable SYSLIB0011 if (extension == ".bin")
states = (List<SearchState>)formatter.Deserialize(fs); {
#pragma warning restore SYSLIB0011 // Загрузка из бинарного файла
BinaryFormatter formatter = new BinaryFormatter();
using FileStream fs = new FileStream(filename, FileMode.Open);
#pragma warning disable SYSLIB0011
states = (List<SearchState>)formatter.Deserialize(fs);
#pragma warning restore SYSLIB0011
}
else if (extension == ".json")
{
// Загрузка из файла в формате JSON
string json = File.ReadAllText(filename);
states = JsonSerializer.Deserialize<List<SearchState>>(json);
}
else
{
// Неподдерживаемое расширение файла
Console.WriteLine("Unsupported file extension");
return false;
}
return true; return true;
} }
catch (Exception ex) catch (Exception ex)

View File

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("BinarySearch")] [assembly: System.Reflection.AssemblyCompanyAttribute("BinarySearch")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+bcd334d0311ab8e6c59928bb18adb95b23630025")]
[assembly: System.Reflection.AssemblyProductAttribute("BinarySearch")] [assembly: System.Reflection.AssemblyProductAttribute("BinarySearch")]
[assembly: System.Reflection.AssemblyTitleAttribute("BinarySearch")] [assembly: System.Reflection.AssemblyTitleAttribute("BinarySearch")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
1d747fb8a31ff8aaece430d2476a61103b8e3209701086c3b8734998b4b745be 695aa2c69608c0253b250b29a1ce56a3094f8fd99413ff79c586e97848417cf0