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 знакомест (подробнее о форматах вывода см. здесь или здесь).

Hosted by uCoz