Скачиваний:
0
Добавлен:
26.10.2025
Размер:
66.59 Кб
Скачать

2.2. Входные данные InputData.Cs

using System;

using System.Collections.Generic;

namespace PerceptronSymbols

{

// Класс для представления обучающего примера.

public class TrainingSample

{

public int[] Input; // одномерный массив длины 25 (5x5)

public string Label; // метка символа

public TrainingSample(int[] input, string label)

{

Input = input;

Label = label;

}

}

public static class InputData

{

static Random rnd = new Random();

// Метод возвращает список шаблонов для распознаваемых символов.

public static List<TrainingSample> GetSymbolSamples()

{

var samples = new List<TrainingSample>();

// Символ "├": вертикальная линия слева и горизонтальная линия в центре

int[] symbol1 = new int[]

{

1, 0, 0, 0, 0,

1, 0, 0, 0, 0,

1, 1, 1, 1, 1,

1, 0, 0, 0, 0,

1, 0, 0, 0, 0

};

samples.Add(new TrainingSample(symbol1, "├"));

// Символ "┤": вертикальная линия справа и горизонтальная линия в центре

int[] symbol2 = new int[]

{

0, 0, 0, 0, 1,

0, 0, 0, 0, 1,

1, 1, 1, 1, 1,

0, 0, 0, 0, 1,

0, 0, 0, 0, 1

};

samples.Add(new TrainingSample(symbol2, "┤"));

// Символ "┬": горизонтальная линия сверху и вертикальная линия по центру

int[] symbol3 = new int[]

{

1, 1, 1, 1, 1,

0, 0, 1, 0, 0,

0, 0, 1, 0, 0,

0, 0, 1, 0, 0,

0, 0, 1, 0, 0

};

samples.Add(new TrainingSample(symbol3, "┬"));

// Символ "┴": горизонтальная линия снизу и вертикальная линия по центру

int[] symbol4 = new int[]

{

0, 0, 1, 0, 0,

0, 0, 1, 0, 0,

0, 0, 1, 0, 0,

0, 0, 1, 0, 0,

1, 1, 1, 1, 1

};

samples.Add(new TrainingSample(symbol4, "┴"));

// Символ "┼": пересечение горизонтальной и вертикальной линий

int[] symbol5 = new int[]

{

0, 0, 1, 0, 0,

0, 0, 1, 0, 0,

1, 1, 1, 1, 1,

0, 0, 1, 0, 0,

0, 0, 1, 0, 0

};

samples.Add(new TrainingSample(symbol5, "┼"));

// Символ "═": двойная горизонтальная линия

int[] symbol6 = new int[]

{

0, 0, 0, 0, 0,

1, 1, 1, 1, 1,

0, 0, 0, 0, 0,

1, 1, 1, 1, 1,

0, 0, 0, 0, 0

};

samples.Add(new TrainingSample(symbol6, "═"));

// Символ "║": двойкая вертикальная линия

int[] symbol7 = new int[]

{

0, 1, 0, 1, 0,

0, 1, 0, 1, 0,

0, 1, 0, 1, 0,

0, 1, 0, 1, 0,

0, 1, 0, 1, 0

};

samples.Add(new TrainingSample(symbol7, "║"));

return samples;

}

// Генерация шумового (случайного) образца размером 5x5.

public static TrainingSample GenerateNoiseSample()

{

int[] pattern = new int[25];

for (int i = 0; i < 25; i++)

{

pattern[i] = rnd.NextDouble() > 0.5 ? 1 : 0;

}

return new TrainingSample(pattern, "None");

}

// Чтение пользовательского ввода – матрица 5x5.

public static int[] ReadUserInput()

{

int[] userInput = new int[25];

for (int i = 0; i < 5; i++)

{

string? line = Console.ReadLine();

if (string.IsNullOrWhiteSpace(line))

{

Console.WriteLine("Ошибка ввода. Попробуйте снова.");

i--;

continue;

}

string[] parts = line.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);

if (parts.Length != 5)

{

Console.WriteLine("Некорректный ввод. Ожидалось 5 значений. Повторите ввод строки.");

i--;

continue;

}

for (int j = 0; j < 5; j++)

{

userInput[i * 5 + j] = parts[j] == "1" ? 1 : 0;

}

}

return userInput;

}

}

}