Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Массивы.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
160.77 Кб
Скачать

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];