-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
146 lines (130 loc) · 8.34 KB
/
Program.cs
File metadata and controls
146 lines (130 loc) · 8.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using System.Text;
class Program
{
static void Main()
{
// Встановлюємо кодування консолі на Unicode та змінюємо колір тексту на зелений.
Console.OutputEncoding = Encoding.Unicode;
Console.ForegroundColor = ConsoleColor.Green;
// Створюємо екземпляр класу HammingEncoder.
HammingEncoder hammingEncoder = new();
while (true)
{
// Виводимо меню опцій.
Console.WriteLine("╭───────────────────────────────╮");
Console.WriteLine("│ Меню │");
Console.WriteLine("├───────────────────────────────┤");
Console.WriteLine("│ 1. Кодувати │");
Console.WriteLine("│ 2. Декодувати │");
Console.WriteLine("│ 3. Внести помилку │");
Console.WriteLine("│ 4. Вийти │");
Console.WriteLine("╰───────────────────────────────╯");
Console.Write("-> Введіть номер опції: ");
string option = Console.ReadLine();
switch (option)
{
case "1":
// Опція кодування.
Console.Write("-> Введіть шлях до вихідного файлу: ");
string sourcePath = Console.ReadLine();
if (!File.Exists(sourcePath))
{
Console.WriteLine("-> ПОМИЛКА: Файл не існує. Спробуйте ще раз.");
break;
}
// Зчитуємо байти з вихідного файлу.
byte[] sourceBytes = File.ReadAllBytes(sourcePath);
Console.WriteLine("-> Початкові байти:");
PrintBytes(sourceBytes);
// Виконуємо кодування і зберігаємо закодовані байти в інший файл.
byte[] encodedBytes = hammingEncoder.Encode(sourceBytes);
Console.Write("-> Введіть шлях для збереження закодованого файлу: ");
string encodedPath = Console.ReadLine();
File.WriteAllBytes(encodedPath, encodedBytes);
Console.WriteLine("-> Файл успішно закодовано.");
Console.WriteLine("-> Закодовані байти:");
PrintBytes(encodedBytes);
break;
case "2":
// Опція декодування.
Console.Write("-> Введіть шлях до закодованого файлу: ");
string toDecodePath = Console.ReadLine();
if (!File.Exists(toDecodePath))
{
Console.WriteLine("-> ПОМИЛКА: Файл не існує. Спробуйте ще раз.");
break;
}
// Зчитуємо закодовані байти з файлу.
byte[] toDecodeBytes = File.ReadAllBytes(toDecodePath);
Console.WriteLine("-> Закодовані байти:");
PrintBytes(toDecodeBytes);
// Виконуємо декодування і зберігаємо декодовані байти в інший файл.
byte[] decodedBytes = hammingEncoder.Decode(toDecodeBytes);
Console.Write("-> Введіть шлях для збереження декодованого файлу: ");
string decodedPath = Console.ReadLine();
File.WriteAllBytes(decodedPath, decodedBytes);
Console.WriteLine("-> Файл успішно декодовано.");
Console.WriteLine("-> Декодовані байти:");
PrintBytes(decodedBytes);
break;
case "3":
// Опція введення помилки.
Console.Write("-> Введіть шлях до закодованого файлу: ");
string errorPath = Console.ReadLine();
if (!File.Exists(errorPath))
{
Console.WriteLine("-> ПОМИЛКА: Файл не існує. Спробуйте ще раз.");
break;
}
// Зчитуємо закодовані байти з файлу.
byte[] errorBytes = File.ReadAllBytes(errorPath);
Console.WriteLine("-> Ваші дані у двійковій формі:");
PrintBytes(errorBytes);
Console.Write("-> Введіть позицію помилки: ");
int errorPosition;
if (!int.TryParse(Console.ReadLine(), out errorPosition) || errorPosition <= 0 || errorPosition > errorBytes.Length * 8)
{
Console.WriteLine("-> Невірна позиція помилки. Спробуйте ще раз.");
break;
}
// Коригуємо введену позицію, оскільки користувач лічить з 1, а не з 0.
errorPosition--;
// Вводимо помилку в байти та зберігаємо в інший файл.
byte[] errorIntroducedBytes = hammingEncoder.IntroduceError(errorBytes, errorPosition);
Console.Write("-> Введіть шлях для збереження файлу з помилкою: ");
string errorIntroducedPath = Console.ReadLine();
File.WriteAllBytes(errorIntroducedPath, errorIntroducedBytes);
Console.WriteLine("-> Помилка введена.");
Console.WriteLine("-> Байти з помилкою:");
PrintBytes(errorIntroducedBytes);
Console.WriteLine("-> Позиція помилки (від 0): " + errorPosition);
// Визначаємо та виправляємо помилку у байтах.
byte[] correctedBytes = hammingEncoder.DetectAndCorrectError(errorIntroducedBytes);
Console.Write("-> Введіть шлях для збереження виправленого файлу: ");
string correctedPath = Console.ReadLine();
File.WriteAllBytes(correctedPath, correctedBytes);
Console.WriteLine("-> Помилка виправлена.");
Console.WriteLine("-> Виправлені байти:");
PrintBytes(correctedBytes);
break;
case "4":
// Вихід із програми.
return;
default:
Console.WriteLine("-> ПОМИЛКА: Невірний вибір. Спробуйте ще раз.");
break;
}
}
}
static void PrintBytes(byte[] bytes)
{
Console.WriteLine("╭───────────────────────────────╮");
Console.WriteLine("│ Index │ Byte Data │");
Console.WriteLine("├───────────────────────────────┤");
for (int i = 0; i < bytes.Length; i++)
{
Console.WriteLine("│ " + (i + 1).ToString().PadRight(12) + "│ " + Convert.ToString(bytes[i], 2).PadLeft(8, '0') + " │");
}
Console.WriteLine("╰───────────────────────────────╯");
}
}