
- •1 Основные определения. Размерность и описание массивов, индексирование их элементов
- •2 Ввод и вывод массивов
- •2.1 Ввод массивов
- •2.2 Создание пробных, отладочных массивов
- •2.3 Вывод одномерных массивов
- •2.4 Вывод матриц
- •3 Вычисление массива значений функции
- •4 Суммирование и перемножение элементов массивов
- •5 Типовые задачи обработки массивов
- •5.1 Задачи выборок
- •5.2 Преобразование одних массивов в другие
- •5.3 Выбор наименьших и наибольших элементов в массивах
- •5.4 Вычисление статистических характеристик массивов
- •6 Некоторые задачи работы с матрицами
- •7 Контрольные вопросы и упражнения
- •8 Задания для самостоятельной работы
- •9 Список рекомендуемой литературы
2.2 Создание пробных, отладочных массивов
При разработке какой–либо конкретной программы вовсе не обязательно проверять и отлаживать ее на реальном массиве исходных данных, особенно, когда последний велик по объему. Проверку и отладку программ гораздо удобнее делать на пробных, отладочных массивах, создание которых можно поручить самой ЭВМ, предусмотрев в программе несколько дополнительных операторов, которые после окончания отладки программы могут быть удалены и заменены операторами ввода подлинных массивов данных.
Создание пробного массива может быть осуществлено с помощью любой функции от его индексов включенной в простой (для одномерных массивов) или двойной (для двумерных) цикл. Наиболее удобными для этого являются функции sin и cos. Т.к. они принимают значения в пределах [–1,1], то подбором соответствующих множителей легко регулировать порядок элементов формируемых массивов.
Например массив X из 100 вещественных чисел, принимающих значения в пределах от –n до +n может быть создан следующим оператором:
for k:=1 to 100 do x[k]:=n*sin(0.1*k);
Заметим, что множитель 0.1 в аргументе sin введен здесь во избежание вычисления синуса слишком больших аргументов, что связано с увеличением времени работы программы. Этот множитель может быть и любым другим, а также может и отсутствовать. Если элементы массива должны быть положительными, то оператор присваивания в данном случае можно записать в виде abs(к*sin(к/10));
Пример 2.6. Сформировать матрицу m размером 5x6 из положительных и отрицательных целых чисел в пределах от –10 до 10 можно с помощью следующего фрагмента:
for i=1 to 5 do
begin
for j:=1 to 6 do m[i,j]=round(10*sin(i+j));
end;
Наиболее простым и удобным способом создания пробных массивов является использование специальной функции Random – датчика случайных чисел. Эта функция записывается в виде: Random или Random(N), где аргумент N представляет собой число или выражение целого типа. Если этот аргумент задан, функция генерирует случайные целые числа в интервале от 0 до N, если не задан, то вещественные числа в интервале 0–1. Например, включенный в цикл оператор Random (10), генерирует случайные целые числа в интервале от 0 до 10, а оператор Random–вещественные числа в интервале от 0 до 1. Если необходим вещественный массив, то целые числа, выдаваемые функцией Random, переводится в вещественные умножением (или делением) на любой вещественный множитель, а если необходимы положительные и отрицательные элементы массива, то они получаются вычитанием из результатов функции Random соответствующим образом подобранной константы.
Рассмотрим, например оператор:
a[i]:=Random(100)*0.521–26.0;
Функция Random (100) при каждом i генерирует случайные целые числа в пределах от 0 до 100; множитель 0.521 преобразует эти числа в вещественные в пределах от 0 до 52.1. Т.к. примерно половина этих чисел будет меньше 52.1/2, то вычитаемое 26.0 преобразует их в отрицательные. В результате весь этот оператор при изменении индекса i от 1 до n, сформирует n случайных вещественных чисел в пределах –26 до +26.0. Примерно половина этих чисел будет положительными , остальные отрицательные.
Пример 2.7. Пусть необходимо создать пробный одномерный массив a из 20 целых чисел в пределах от 0 до 100, а также матрицу b размером 10x10 с вещественными элементами в пределах от –100 до 100.
Поставленная задача может быть решена с помощью следующего программного фрагмента:
program Massiv;
Var a: array[1..20] of integer;
b: array[1..10,1..10] of real;
i,j,k: integer;
begin
for k:=1 to 20 do a[k]:=Random(100);
for i:=1 to 10 do
begin
for j:=1 to 10 do b[i,j]=199.9*Random–100
end;
(продолжение программы)
В данном примере функция Random(100) генерирует случайные целые числа в пределах от 0 до 1, а функция Random–вещественные числа от 0 до 1. Множитель 199.9 преобразует их в вещественные в пределах от 0 до 199.9, а константа–100 переводит те из них, которые >100, в положительные числа, а те, которые <100, в отрицательные.