Возможны несколько способов заполнения числовых массивов.
П3.1. Заполнение массива разными значениями, не подчиняющимися общему закону
Если все значения элементов разные и не подчиняются общему закону, то для заполнения массива используются п операторов присваивания: m[l] — … m[2] := …
M[n] := …
Здесь и далее ∏ — число элементов массива (индексы элементов от 1 до п).
Если при каждом запуске программы значения элементов меняются, целесообразно для заполнения использовать оператор ввода данных и делать это следует в цикле:
НЦ ДЛЯ 1 от 1 до п ввод m[i]
Кц
Однако при таком оформлении пользователю нужно контролировать количество уже введенных значений. Более рациональный вариант: Нц для 1 От 1 До п
Вывод не, «Введите значение «, i, «-го элемента массива»Ввод M[i]
КЦ
Для двумерных массивов соответствующие фрагменты:
M[l, 1] := …
M[l, 2] := …
M[l, s] := …
M[2, 1] := …
M[2z2} := …
M[2, s] := …
M[n, 1] := …
M[n, 2] := …
M[n, s] := …
Где п — число строк, s — число столбцов (эти же величины будут использоваться и далее).
Нц для i от 1 до п
Нц для j от 1 до s
Ввод M[i, j]
Кц
Кц
Нц для i от 1 до п
НЦ ДЛЯ j ОТ 1 ДО S
Вывод нс, «Введите значение элемента в «, i, «-й строке «
Вывод «в «, j, «-M столбце»
Ввод M[i, j]
«Ц
Кц
П3.2. Заполнение массива одинаковыми значениями
В этом случае фрагмент программы для заполнения имеет вид:
А) одномерного массива:
НЦ ДЛЯ 1 от 1 до п
M[i] := …
КЦ
Б) двумерного массива:
Нц для i от 1 до п
Нц для j от 1 до s
M[i, j] : = …
Кц
Кц
Например, при заполнении одномерного массива нулями:
Нц для i от 1 до п
M[i] := О
Кц
290
ПЗ. З. Заполнение массива последовательностью чисел, закон построения которой известен
Когда зависимость значения элемента массива от его индекса M[I∖ = Fij)Указана явно, задача является простой:
M[l] := 2
Нц для i от 2 до п
M[i] := m[i-l]+3
Кц
Где вместо многоточия должно быть записано выражение, соответствующее заданной зависимости. Например, для случая заполнения массива по закону M∖I∖ = Z2:
Нц для i от 1 до п m[i] := i * i
Кц
Для двумерного массива:
Нц для i от 1 до п
Нц для j от 1 до s m[i, j] := …
Кц
КЦ
Где вместо многоточия должно быть записано выражение, соответствующее заданной зависимости. Эта может быть зависимость от номера строки и/или номера столбца. Например, для случая заполнения массива по закону w[∕,√] = I ÷7:
Нц для i от 1 до п
Нц для j от 1 до s m[i, j] := i + j
Кц
КЦ
Другим примером последовательностей, закон построения которых известен, являются значения членов прогрессий (арифметической или геометрической). В таких случаях первый элемент массива равен первому члену соответствующей прогрессии, а остальные рассчитываются с использованием формул:
□ z-ro члена арифметической прогрессии: Ai = ам+ √, Где D — разность прогрессии;
ΓJ z-ro члена арифметической прогрессии: Ai- Cιl^ ∙ z,
Где z — знаменатель прогрессии.
ПРИМЕР 1.Заполнить одномерный массив из ∏ элементов членами арифметической прогрессии, первый член которой равен 2, а разность — 3.
Решение. В соответствии с определением арифметической прогрессии можно так оформить фрагмент программы, в котором проводится заполнение массива:
Ш[1] := 2
ИЦ ДЛЯ 1 от 1 до п
M[i] := m[i — 1] + 3 Кц
ПРИМЕР 2.Заполнить одномерный массив из п элементов членами геометрической прогрессии, первый член которой равен 1, а знаменатель — 1,5.
Решение. Учитывая закон построения геометрической прогрессии, можем записать: m[l] : = 1 нц для i от 2 до п m[i] := m[i — 1] * 1.5 кц
Прогрессии являются частным случаем так называемых «рекуррентных” последовательностей — последовательностей чисел, каждый элемент которых зависит от одного или нескольких предшествующих элементов1.
П3.4. Заполнение массива случайными значениями
Для получения случайных чисел во всех современных языках программирования имеется стандартная функция. В школьном алгоритмическом языке ее имя — md, в языке Бейсик — rnd(верхний регистр букв, естественно, не обязателен), в языке Паскаль— random. Формулы для расчета случайного числа Х различного типа в программах на этих языках программирования приведены в табл. ∏3.1-∏3.3. [37][38]
Таблица П3.1. Школьный алгоритмический язык2
Тип величины X |
Диапазон возможных значений |
Формула |
Вещественный |
0 |
Х — rnd(l) |
0 ≤x <А |
Х = rnd (А) |
|
A≤x |
X = A + rnd (В — А) |
|
Целый |
Q≤x≤A |
Х = int(rnd(А + 1)) |
A≤x≤B |
X=A+ int (rnd(В — А + 1) ) |
Таблица П3.2. Язык Паскаль
Тип величины X |
Диапазон возможных значений |
Формула |
Вещественный |
0≤x< 1 |
Х = random |
0 <х <А |
Х — random ★ А |
|
A |
X=A+ random * (B-A) |
|
Целый |
0 |
Х = random(А + 1) |
A≤x≤B |
Х = А + random(В — А + 1) |
В случае заполнения массива случайными значениями следует использовать оператор цикла:
А) для одномерного массива:
Нц для i от 1 до п
M [i] := …
Кц
Б) для двумерного массива:
Нц для i от 1 до п
Нц для j от 1 до s
M[i, j] := …
КЦ
КЦ
Где вместо многоточия должно быть записано выражение, соответствующее типу и диапазону случайных значений.
Внимание!
В программах на языках Бейсик и Паскаль, в случае, когда в них указанные функции используются несколько раз (например, в операторе цикла), при каждом новом запуске программы будут генерироваться одни и те же случайные числа. Чтобы исключить это, необходимо записать (до первого использования функций):
• в программах на языке Бейсик оператор RANDOMIZE с параметром TIMER (в виде RANDOMIZE TIMER);
• в программах на языке Паскаль — оператор randomize (без параметров).
ПРИЛОЖЕНИЕ 4