-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
227 lines (214 loc) · 11.8 KB
/
Program.cs
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
using System;
using System.Threading;
namespace study
{
class Program
{
public static void Main()
{
cyanColor();
startPos: Console.WriteLine("Вас приветствует мастер создания двумерного массива!");
question1: Console.WriteLine("Введите высоту вашего массива:");
if (int.TryParse(Console.ReadLine(), out int length)) { }
else
{
redColor(); //создание переменной высоты массива, ввод высоты массива и ошибка в случае если пользователь введёт не int
Console.WriteLine("Ошибка ввода, введите цифру!");
timer3second();
goto question1;
}
question2: Console.WriteLine("Введите ширину вашего массива:");
if (int.TryParse(Console.ReadLine(), out int width)) { }
else
{
redColor(); //создание переменной ширины массива, ввод ширины массива и ошибка в случае если пользователь введёт не int
Console.WriteLine("Ошибка ввода, введите цифру!");
timer3second();
goto question2;
}
int[,] userArray = new int[length, width];//создание массива
arrayCreate(userArray, length, width);//цикл заполнения массива пользователем
Console.Clear();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Массив успешно создан!\n");
cyanColor();
choice: Console.WriteLine("Нажмите w для вывода массива,\n" +
"r для вывода массива и перезапуска программы,\n" +
"d для поиска элемента массива по индексу массива,\n" +
"z для поиска индекса по элементу,\n" +
"любую другую клавишу для выхода.");
ConsoleKey consoleKey = Console.ReadKey().Key;
switch (consoleKey)
{
case ConsoleKey.W:
Console.Clear();
arrayDisplay(userArray, length, width); //очистка консоли и вывод массива на экран
break;
case ConsoleKey.R:
Console.Clear();
arrayDisplay(userArray, length, width); //очистка консоли и вывод массива на экран
timer(); //таймер
Console.Clear();
goto startPos; //очистка консоли и последующий перезапуск программы
case ConsoleKey.D:
arrayElementFind(userArray, length, width);
break;
case ConsoleKey.Z: Console.Clear(); arrayIndexFind(userArray, length, width);
break;
default: goto end;
}
Console.WriteLine("Нажмите s для перехода в меню выбора операции,\n" +
"x для перезапуска программы,\n" +
"любую другую клавишу для завершения работы программы.");
consoleKey = Console.ReadKey().Key;
switch (consoleKey)
{
case ConsoleKey.S: Console.Clear(); goto choice; //финальный выбор после всех операций между перезапуском и переходм в меню выбора
case ConsoleKey.X: Console.Clear(); goto startPos;
}
end:;
}
private static void arrayCreate(int[,] userArray, int length, int width) //создаёт массив по данным пользователя с помощью цикла
{
int a = 1;
for (int i = 0; i < length; i++)
{
for (int j = 0; j < width; j++)
{
arrayCreate:
Console.Clear();
Console.WriteLine("Введите {0} элемент массива:", a);
try { userArray[i, j] = int.Parse(Console.ReadLine()); }
catch
{
redColor();
Console.WriteLine("Ошибка ввода, введите цифру!");
timer3second();
goto arrayCreate;
}
a++;
}
}
}
private static void arrayDisplay(int[,] userArray, int length, int width) //выводит массив в виде таблички в консоль с помощью цикла
{
magentaColor();
for (int a = 0; a < length; a++)
{
for (int b = 0; b < width; b++)
{
Console.Write(userArray[a, b] + "\t");
}
Console.WriteLine();
}
cyanColor();
}
private static void timer() //таймер для перезапуска программы через 10 секунд
{
for (int i = 10; i > 0; i--)
{
Console.WriteLine("Программа перезапустится через {0} секунд(ы).", i);
Thread.Sleep(1000);
}
}
private static void timer3second() //таймер 3 секунды (используется в программе для перезапуска после ошибки)
{
cyanColor();
for (int i = 3; i > 0; i--)
{
Console.WriteLine("Повторите попытку через {0} секунд(ы).", i);
Thread.Sleep(1000);
}
Console.Clear();
}
private static void cyanColor() //меняет цвет консоли на голубой
{
Console.ForegroundColor = ConsoleColor.Cyan;
}
private static void redColor() //меняет цвет консли на красны (для ошибок)
{
Console.ForegroundColor = ConsoleColor.Red;
}
private static void magentaColor() //меняет цвет консоли на фиолетовый (для успешного вывода результата на консоль)
{
Console.ForegroundColor = ConsoleColor.Magenta;
}
private static void arrayElementFind(int[,] userArray, int length, int width) //находит элемент по индексу пользователя подробней внутри метода
{
int firstUserIndex; //переменные в которые будет заполняться информация данная пользователем
int secondUserIndex;
firstIndexCreate: Console.Clear();
Console.WriteLine("Введите индекс элемента по высоте(первый индекс):");
try { firstUserIndex = int.Parse(Console.ReadLine()); } //ввод пользователем первого индекса
catch
{
redColor();
Console.WriteLine("Ошибка ввода, введите цифру!"); //ошибка если ввод не интуется
timer3second(); goto firstIndexCreate;
}
if (firstUserIndex >= length)
{
redColor(); //ошибка если ввод выходит за массив
Console.WriteLine("Ошибка ввода, вы вышли за пределы массива, введи цифру от 0 до {0}!", length - 1);
timer3second();
goto firstIndexCreate;
}
secondIndexCreate: Console.Clear();
Console.WriteLine("Введите индекс элемента по ширине(второй индекс):");
try { secondUserIndex = int.Parse(Console.ReadLine()); } //ввод пользователем первого индекса
catch
{
redColor();
Console.WriteLine("Ошибка ввода, введите цифру!"); //ошибка если ввод не интуется
timer3second(); goto secondIndexCreate;
}
if (secondUserIndex >= width)
{
redColor(); //ошибка если ввод выходит за массивы
Console.WriteLine("Ошибка ввода, вы вышли за пределы массива, введи цифру от 0 до {0}!", width - 1);
timer3second();
goto secondIndexCreate;
}
magentaColor();
Console.WriteLine("Элемент под индексом [{0}, {1}]: {2}.", firstUserIndex, secondUserIndex, userArray[firstUserIndex, secondUserIndex]);
cyanColor(); //вывод нужного пользователю элемента
}
private static int findSecondIndex(int[,] userArray, int userNumber, int length, int width)
{
for (int indexFirst = 0; indexFirst < length; indexFirst++)
{
for (int indexSecond = 0; indexSecond < width; indexSecond++)
{
if (userArray[indexFirst, indexSecond] == userNumber)
{
return indexSecond;
}
}
}
return -1;
} //идентичные методы но первый возвращает второй
private static int findFirstIndex(int[,] userArray, int userNumber, int length, int width)
{
for (int indexFirst = 0; indexFirst < length; indexFirst++)
{
for (int indexSecond = 0; indexSecond < width; indexSecond++)
{
if (userArray[indexFirst, indexSecond] == userNumber)
{
return indexFirst;
}
}
}
return -1;
} // индекс, а второй - первый
private static void arrayIndexFind(int[,] userArray, int length, int width)
{
int userNumber;
startFind: Console.WriteLine("Введите число индекс которого хотите получить:");
try { userNumber = int.Parse(Console.ReadLine()); }
catch { redColor(); Console.WriteLine("Ошибка ввода, введите цифру!"); timer3second(); goto startFind; }
Console.WriteLine("Индекс числа {0}: [{1}, {2}]", userNumber, findFirstIndex(userArray, userNumber, length, width),
findSecondIndex(userArray, userNumber, length, width));
} //использует 2 предыдущих метода, чтобы найти индекс элемента пользователя
}
}