Теоретический материал (Паскаль)

Перестановка элементов массива

Перестановка двух элементов

Задача. Поменять местами два элемента массива с номерами k1 и k2.

Рассмотрите процедуру, с помощью которой эта задача легко решается.

Procedure Obmen2(Var m : MyArray; n, k1, k2 : integer;);
Var
  x : integer;
Begin
  x:=m[k1];
  m[k1] := m[k2];
  m[k2] := x;
End;

Перестановка части массива

Задача. Дан одномерный массив А, состоящий из 2n элементов. Поменять местами первую и вторую его половины

Задание. Оформите решение этой задачи, применив процедуру обмена значений Obmen2, рассмотренную выше.

Заметим лишь, что Вы должны поменять местами элементы с номерами 1 и n+1, 2 и n+2 и т.д., последняя пара - n и 2n, а значит, обмен происходит по правилу: элемент с номером i меняется местами с элементом с номером n+i. Эту закономерность следует применить в организации обращения к процедуре обмена. Например, так:

for i := 1 to n do
  Obmen2(A, 2*n, i, i+n,);

Работа с несколькими массивами

В Turbo Pascal можно одним оператором присваивания передать все элементы какого-либо массива другому массиву того же типа, например:

Var
  a, b: array [1 .. 5] of integer;
Begin
  ...
  a:=b;
  ...
End.

После такого присваивания все пять элементов массива a получат значения из массива b.

Рассмотрим одну из типичных задач.

Задача. Найти скалярное произведение двух массивов.

Скалярным произведением двух массивов одинаковой размерности называется сумма произведений соответствующих элементов. Это можно записать так:

a[1]*b[1] + a[2]*b[2] + ... + a[n-1]*b[n-1] + a[n]*b[n],

где n - это количество элементов в массивах (размерность).

Тогда можно составить следующую функцию:

Function Sp (a, b : MyArray; n ; integer) : LongInt;
Var
  i : Integer;
  s : LongInt;
Begin
  s:= 0;
  for i := 1 to n do
    s := s+a[i]*b[i];
  Sp := s;
End;