Организация и описание процессов обработки данных с помощью одномерных массивов и подпрограмм, страница 2

function SumOdd(const a: array of real): Real;

//Возвращает сумму значений компонентов с нечётными индексами.

var i: integer;

begin

  result:= 0;

  for i:= Low(a) to high(a) do

    if Odd(i) then result:= result + a[i]

end;

//-------------------------------------------------------------------------------------

var

  S: real;//Сумма значений компонентов массива

       A: Vector = (1, 5, -3, 2, 7);// массив инициированный начальными

                                                       //значениями

begin

//----------Вызов функции-------------------------------------------------------

  S:= SumOdd(A);

  writeln('Summa = ',S:6:2);

//----------Вызов функции-------------------------------------------------------

  writeln('Summa = ',SumOdd(A):6:2);

  readln;

end.

З а д а ч а  № 4

Написать и оттестировать функцию. Функция получает через параметр одномерный массив вещественных переменных и возвращает компонент массива с максимальным значением среди всех компонентов массива.

Для нахождения максимального по значению компонента массива необходимо перебрать все компоненты массива, начиная со второго, сравнивая их значения с текущим максимальным значением. Перед началом цикла в текущее максимальное значение необходимо установить значение первого компонента массива. Для просмотра значений компонентов массива организуем цикл. С этой целью воспользуемся управляющей структурой FORDO.

Блок-схема решения представлена ниже на рисунке.

Пример консольного приложения, в котором представлена функция, реализующая нахождение максимального значения среди значений компонентов одномерного массива вещественных переменных, представлен ниже.

program PMax;

{$APPTYPE CONSOLE}

uses

  SysUtils;

Const

       Columns = 5; //компонентов в массиве

Type

       Index = 0.. Columns – 1;// тип индекса

       Vector = array [Index] of real;// тип массива

//-------------------------------------------------------------------------------------

function Max(const a: array of real): Real;

//Возвращает максимальное значение среди значений компонентов массива.

var i: integer;

begin

  result:= a[Low(a)];

  for i:= Low(a) + 1 to high(a) do

    if result < a[i] then result:= a[i]

end;

//------------------------------------------------------------------------------------

var

  S: real;//Максимальное среди значений компонентов массива

       A: Vector = (1, 5, -3, 2, 7);// массив инициированный начальными

                                                       //значениями

begin

//----------Вызов функции-------------------------------------------------------

  S:= Max(A);

  writeln('Max = ',S:6:2);

//----------Вызов функции-------------------------------------------------------

  writeln('Max = ',Max(A):6:2);

  readln;

end.

З а д а ч а  № 6

Написать и оттестировать процедуру. Процедура получает через параметр одномерный массив вещественных переменных. В полученном массиве процедура переставляет значения компонентов массива в обратном порядке. Вспомогательный массив не использовать.

Исходный массив

Элемент

A[0]

A[1]

A[2]

A[3]

A[4]

Значение

1

5

–3

2

7

Массив результатов

Элемент

A[0]

A[1]

A[2]

A[3]

A[4]

Значение

7

2

–3

5

1

Для перестановки значений компонентов массива в обратном порядке необходимо перебрать компоненты массива, начиная с первого и до среднего (от 0 до N div 2 – 1), исключая его, если он имеется, обменивая значениями компоненты массива с индексами I и  (N – I – 1). Об-мениваются значениями компоненты слева и справа массива, отстоящие от центра на одинаковом расстоянии. В случае чётного числа компонентов в массиве обмениваются значениями все компоненты. В случае нечётного числа компонентов в массиве центральный компонент массива остаётся неизменным. Индексация компонентов массива от 0. Для просмотра значений компонентов массива воспользуемся управляющей структурой FORDO. Рисунок, иллюстрирующий алгоритм, представлен ниже.

Блок-схема решения представлена ниже на рисунке.

Консольное приложение с процедурой, реализующей перестановку значений компонентов одномерного массива вещественных переменных в обратном порядке, представлено ниже.

program PReorder;

{$APPTYPE CONSOLE}

uses

  SysUtils;

Const

       Columns = 5; //компонентов в массиве

Type

       Index = 0.. Columns – 1;// тип индекса

       Vector = array [Index] of real;// тип массива

//-------------------------------------------------------------------------------------

procedure swap(var a,b: real);

//Осуществляет обмен значениями a, b.

var t: real;

begin

  t:= a;

  a:= b;

  b:= t;

end;

//-------------------------------------------------------------------------------------

procedure Reorder(var a: array of real);

//Осуществляет перестановку значений компонентов массива
//в обратном порядке.

var

  i,n: integer;

begin

  n:= high(a) + 1;

  for i:= 0 to n div 2 – 1 do

     swap(a[i],a[n – i -1]);

end;