
- •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 Список рекомендуемой литературы
3 Вычисление массива значений функции
Весьма распространенной задачей является создание массива значений некоторой заданной функции f(x) на заданном отрезке изменения аргумента xн < x < xк (от x–начального до x–конечного) с заданным шагом x = h. Такая задача возникает в случаях приближенного вычисления интегралов, поиска локальных экстремумов функции , ее наибольших и наименьших значений, численного решения уравнений и т.п. Иногда одновременно с массивом значений функции необходимо иметь и массив соответствующих значений аргумента.
Рассмотрим программную реализацию данной задачи на конкретном примере, который без труда может быть обобщен на любые другие уравнения функций, величин отрезков и шагов.
Пример 3.1 Пусть необходимо создать массивы значений аргумента x и функции y для функции
на отрезке 0 x 6, с шагом h = 0.25.
Отметим прежде всего, что количество элементов массива в таком случае вычисляется по формуле
где хн и хк – начальное и конечное значения аргумента.
В данном случае n= + 1 = 25 .
Последовательные значения аргумента X удобно вычислять по формуле
Xi = Xн + h (i – 1) .
Фрагмент программы, реализующей поставленную задачу, может быть оформлен следующим образом:
program Masfun;
type mas=array[1..25] of real;
var x,y:mas; i:integer;
begin
for i:=1 to 25 do
begin
x[i] = 0 + 0.25*(i–1);
y[i] = 2*exp(1.5*x[i])*cos(x[i]/2–0.5);
writeln('x=';x[i]:5:2;' y=';y[i]:6:3)
end;
end.
4 Суммирование и перемножение элементов массивов
Рассмотрим задачу нахождения суммы и произведения всех элементов некоторого одномерного массива X т.е. пусть дано
X1,X2, ... Xk , ... Xn
и требуется вычислить:
S = X1 + X2 + ... + Xk + ...+ Xn ;
P = X1 * X2 * ... * Xk * ...* Xn .
Из математической формулировки задачи вытекает и алгоритм вычисления суммы: присваиваем сумме значение первого слагаемого, а затем наращиваем эту величину последовательным прибавлением к ней каждого очередного слагаемого, начиная со второго и кончая последним. Делать это следует, разумеется, в цикле. Таким образом сумма может быть вычислена фрагментом из двух операторов :
S := X[1];
for k := 2 to n do S:= S + x[k];
Аналогично вычисляется и произведение :
P := x[1];
for k := 2 to n do P := P * x[k];
Во многих случаях, однако, более удобно начинать вычисление суммы и произведения с присвоения им первоначально, соответственно нулевого и единичного значений, после чего наращивание суммы и произведения начинать с первого элемента массива, т.е. одновременное вычисление величин S и P может быть в данном случае выполнено и так:
S :=0;P :=1;
for k :=1 to n do
begin
S := S + x[k];
P := P * x[k];
end;
При суммировании и перемножении элементов двумерных массивов – матриц требуется перебирать все элементы по рядам : либо по строкам и в каждой строке по столбцам, либо по столбцам и в каждом столбце по строкам. Например вычислить сумму и произведение всех элементов матрицы A размером m * n (см. пример 2.9) можно с помощью следующих операторов:
S :=0; P :=1;
for i:=1 to m do
begin
for j:=1 to n do
begin
S := S + a[i,j];
P := P * a[i,j];
end;
end;
Результат не изменится, если в данном фрагменте операторы циклов по i и j поменять местами.
Рассмотрим еще одну задачу, довольно часто встречающуюся в работе с массивами. Пусть дано два одинаковых по размеру массива X и Y (i=1,2,...n). Требуется вычислить величину
SP = x1 y1 + x2 y2 + ... + xi yi + ... + xn yn .
Отметим, что такая сумма – сумма попарных произведений одноименных элементов двух массивов (векторов) называется скалярным произведением этих массивов. Вычисление этого произведения может быть выполнено так :
SP := 0;
for i:=1 to n do SP := SP + x[i]*y[i];