Считывание и запись по заданному алгоритму.
Язык написания программы С#
Консольный вариант
Описание задачи:
- Имеется пять колонок с произвольными числами из которых необходимо по нижеуказанному алгоритму считывать числа и записывать в две таблички одна из которых будет показывать считанные числа в порядке считывания. Запись в таблицу №1 осуществляется сверху в низ. Таблица №2 формируется из чисел указанных в первой таблице с тем лишь отличием, что в таблице №2 будут содержаться данные из таблицы №1 отсортированные по убыванию и без повторяющихся чисел отдельно в каждой колонке.
- Последовательность алгоритма считывания из колонки и запись в таблицу №1 чисел.
Иметься пять колонок, ( тут список неполный):
25 55 87 125 167
39 76 114 159 210
23 44 66 109 155
47 89 137 187 238
15 43 83 124 166
32 52 88 125 177
12 34 69 113 162
26 47 86 129 174
21 46 74 116 165
37 63 91 121 153
13 28 44 77 113
27 46 87 132 179
11 26 57 93 142
16 42 72 107 146
12 24 37 53 94
27 53 84 121 160
21 38 75 119 171
56 88 128 176 228
34 67 101 151 202
31 59 96 144 193
37 68 116 165 215
13 29 77 126 178
20 41 70 103 142
43 68 110 156 204
23 59 103 151 202
31 54 91 133 181
15 26 51 78 109
23 45 78 123 169
14 30 47 91 139
34 71 114 161 213
46 83 125 169 215
15 31 59 89 127
13 27 44 73 110
34 69 106 147 197
15 28 47 91 142
26 52 81 124 173
10 26 60 96 136
46 76 111 149 199
11 28 46 87 136
5 33 66 111 161
19 46 79 120 170
23 39 62 92 123
16 28 44 67 103
Алгоритм запускается с нижней строки
Шаг 1
Программа считывает первое число нижней строки (это число 16);
Шаг 2
Находит выше числа 16 в первой колонке ближайшее число 16, вся строка с ближайшей строкой содержащей число 16 выглядит вот так
16 42 72 107 146
Шаг 3
Найденное выше число 16 является точкой отсчета, отталкиваясь от которой мы находим искомое число, это число будет расположено на одну строку ниже в четвертой колонке. Это число 53
16 42 72 107 146
12 24 37 53 94
Шаг 4
Записываем число 53 в таблицу №1 в одноименную колонку с той в которой было найдено число 53, в данном случае это колонка №4.
Шаг 5
Программа считывает второе число нижней строки (это число 28).
16 28 44 67 103
Шаг 6
Находит выше числа 28 во второй колонке ближайшее число 28, вся строка с ближайшим числом содержащим число 28 выглядит вот так
11 28 46 87 136
Шаг 7
Найденное выше второе число 28 является точкой отсчета, отталкиваясь от которой мы находим искомое число, это число будет расположено на одну строку ниже в пятой колонке. Это число 161
11 28 46 87 136
5 33 66 111 161
Шаг 8
Записываем найденное число 161 в таблицу №1 в одноименную колонку с той в которой было найдено число 161, в данном случае это колонка №5.
Шаг 9
Программа считывает третье число нижней строки (это число 44).
16 28 44 67 103
Шаг 10
Находит выше числа 44 в третьей колонке ближайшее число 44, вся строка с ближайшим числом содержащим число 44 выглядит вот так
3 27 44 73 110
Шаг 11
Найденное выше третье число 44 является точкой отсчета, отталкиваясь от которой мы находим искомое число, это число будет расположено на одну строку ниже в первой колонке. Это число 34
3 27 44 73 110
34 69 106 147 197
Шаг 12
Записываем найденное число 34 в таблицу №1 в одноименную колонку с той в которой было найдено число 34, в данном случае это колонка №1.
Шаг 13
Программа считывает четвертое число нижней строки (это число 67).
16 28 44 67 103
Шаг 14
Находит выше числа 67 во второй колонке ближайшее число 67, вся строка с ближайшим числом содержащим число 67 выглядит вот так
19 34 50 67 107 (в указанном вначале массиве этой строки нет, данная строка будет в полном массиве в прилагаемом файле).
Шаг 15
Найденное выше четвертое число 67 является точкой отсчета, отталкиваясь от которой мы находим искомое число, это число будет расположено на одну строку ниже во второй колонке. Это число 27
19 34 50 67 107
6 27 71 116 166
Шаг 16
Записываем найденное число 27 в таблицу №1 в одноименную колонку с той в которой было найдено число 27, в данном случае это колонка №2.
Шаг 17
Программа считывает пятое число нижней строки (это число 67).
16 28 44 67 103
Шаг 18
Находит выше числа 103 в пятой колонке ближайшее число 103, вся строка с ближайшим числом содержащим число 103 выглядит вот так
15 31 51 75 103 (в указанном вначале массиве этой строки нет, данная строка будет в полном массиве в прилагаемом файле).
Шаг 19
Найденное выше пятое число 103 является точкой отсчета, отталкиваясь от которой мы находим искомое число, это число будет расположено на одну строку ниже в третей колонке. Это число 49
15 31 51 75 103
9 16 49 99 151
Шаг 20
Записываем найденное число 49 в таблицу №1 в одноименную колонку с той в которой было найдено число 49, в данном случае это колонка №3.
Пройдя первую строку программа полностью записывает в таблицу №1 итоговую первую строку такого вида
34 27 68 53 161
Далее алгоритм повторяется полностью но с итерацией +1 при отсчете вниз от строки с числом являющегося точкой отсчета. То есть если в описанных выше шагах при работе с первой строкой отсчет был +1 то вторая строка нуждается в отсчете +2.
Приведу пример:
Число 23 которое является первым во второй строке снизу
23 39 62 92 123
23 как точка отсчета находиться выше в строке вида
23 45 78 123 169
При этом искомые числа отсчитываемые от чисел первой строки искались в первой снизу строке находящейся под строкой с числом являющимся точкой отсчета, а для второй строки с низу искомые числа будут считываться со второй нижней от числа являющегося точкой отсчета строки.
23 45 78 123 169
14 30 47 91 139
34 71 114 161 213
Полный вид этой части массива выглядит так
23 45 78 123 169
14 30 47 91 139
34 71 114 161 213
46 83 125 169 215
15 31 59 89 127
13 27 44 73 110
34 69 106 147 197
15 28 47 91 142
26 52 81 124 173
10 26 60 96 136
46 76 111 149 199
11 28 46 87 136
5 33 66 111 161
19 46 79 120 170
23 39 62 92 123
16 28 44 67 103
Третья строка соответственно добавит еще +1, и если бы в третьей строке первое число снова было 23 результат был бы 169.
23 45 78 123 169
14 30 47 91 139
34 71 114 161 213
46 83 125 169 215
15 31 59 89 127
13 27 44 73 110
34 69 106 147 197
15 28 47 91 142
26 52 81 124 173
10 26 60 96 136
46 76 111 149 199
11 28 46 87 136
5 33 66 111 161
19 46 79 120 170
23 39 62 92 123
16 28 44 67 103
В коде программы необходимо предусмотреть возможность определения количества задаваемых строк для операций считывания начиная с нижней.
Желательно сопроводить код подробными комментариями.
В случае если искомое число находиться в строке которой ниже просто нет строка считается сверху. Список строк как бы закольцовывается и первая строка сверху становиться продолжением списка.
Надеюсь все описал понятно.