7. Организация программ циклической структуры на примере вычисления суммы и произведения. Запоминание результатов вычислений в виде массивов. Ввод-вывод массивов. Пример.
Организация программ циклической структуры на примере вычисления суммы и произведения.
Прием накопления суммы часто используется в различных приложениях. Суммируемыми элементами могут быть элементы массива или вычисляемые значения функции. В любом случае накопление суммы производится в цикле по рекуррентной формуле S=S+ Y, где S- промежуточная сумма, Y- слагаемое. Перед циклом в большинстве случаев начальное значение S должно быть равным нулю.
Фрагмент программы для вычисления суммы первых n элементов массива Y будет иметь вид:
S:=0;
for i:=1 to n do
S:= S+Y[i];
Фрагмент программы для вычисления среднего первых n значений функции Y(x), вычисляемых при значениях x, изменяемых от x0 с шагом dx будет иметь вид:
S:=0;
x:=x0;
for i:=1 to n do
begin
S:=S+Y(x)
x:=x+dx
end;
S:=S/n;
Вычисление произведения выполняется аналогичным образом, но перед циклом в большинстве случаев начальное значение P должно быть равным единице P:=1, а в цикле произведение накапливается по рекуррентной формуле P:=P·Y.
Пример. Вычислить значение суммы элементов массива X(n), n≤30.
const
nMax=30;
var S:Real;
X: array [1..nMax] of Real;
i:Integer;
begin
Write(' Введите количество элементов: ');
ReadLn (n);
WriteLn(' Введите элементы массива: ');
for i:=1 to n do
Read (X[i]);
ReadLn;
S:=0; //Начальное значение суммы
for i:=1 to n do
S:= S+X[i]; //Накопление суммы
WriteLn('Сумма элементов массива равна ', S:6:2);
. . . . . .
end.
Запоминание результатов вычислений в виде массивов.
При решении задач, связанных с обработкой множеств значений в массивах или получаемых в результате вычисления значений функций, может потребоваться сохранение результатов вычислений для дальнейшего использования. В таких случаях необходимо выделить память для хранения результатов, объявив в разделе var массив соответствующего типа, и очередное вычисленное значение сохранять в очередной ячейке массива, присваивая его индексной переменной - элементу этого массива с очередным значением индекса.
Пример. Составить программу вычисления и сохранения в массиве Y значений функции y=sin x и в массиве X - соответствующих значений аргумента. Аргумент должен изменяться с шагом dX от начального значения X0.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
tMas=array[1..10] of Real;
var
i:Integer;
X0, dX:Real;
X, Y:tMas;
begin
Write('Введите начальное значение X и шаг dX: ');
ReadLn(X0, dX);
for i:=1 to 10 do
begin
X[i]:=X0;
Y[i]:=Sin(X0);
X0:=X0+dX;
end;
for i:=1 to 10 do
WriteLn(X[i]:10:4,Y[i]:10:4);
ReadLn;
end.
Ввод-вывод массивов.
Пусть в программе описана переменная-массив:
VAR
V : Array [1..100] of Integer;
Значения элементов массива необходимо ввести с клавиатуры. Поскольку с элементами массива можно обращаться как с обычными переменными, мы вправе написать следующие строчки:
Write(‘Введите V[1]: ’); ReadLn(V[1]);
Write(‘Введите V[2]: ’); ReadLn(V[2]);
. . .
. . .
. . .
Write(‘Введите V[100]: ’); ReadLn(V[100]);
Однако писать сто почти одинаковых строчек занятие весьма утомительное и главное не разумное. Отличие этих строк состоит лишь в индексе элемента массива. Здесь на помощь приходит оператор FOR, так как именно он позволяет самым эффективным образом организовать циклический процесс с заданным числом повторений. Кроме этого параметр цикла можно использовать в качестве индекса массива V. Итак, ввод элементов массива V можно оформить следующим образом:
FOR i:=1 TO 100 DO begin
Write(‘Введите V[‘,i,’]: ’);
ReadLn(V[i])
end;
Если необходимо вывести все элементы массива на экран (в строчку), то это также можно сделать с помощью оператора FOR:
FOR i:=1 TO 100 DO Write( V[i]:5 );
Примечание: Запись V[i]:5 в процедуре Write означает, что при выводе значения переменной V[i] под число будет отведено 5 знакомест (подробнее о форматах вывода см. здесь или здесь).