1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
| program HelloWorld;
// Будем считать, что максимальная длина последовательности - 11(можно поменять на любую другую)
const MaxN = 11;
// Объявление типа массивов, которые мы будем использовать в программе
type arr = array [1..MaxN] of real;
var a, b: arr; // массивы, которые будут хранить значения элементов последовательности
na,nb: integer; // количество элементов в массива а и b соответственно
// Процедура inputArr предназначена для считывания массива.
// Параметр А - считываемый массив
// Параметр n - количество элементов в массиве.
// Они передаются по ссылке, так как в ходе этой
// процедуры будут менятся их значения.
procedure inputArr(var A: arr;var n: integer);
var i: integer; // переменная для цикла
begin
// Запрашиваем у пользователя длинну последовательности
write('Enter size of array:');
// Считываем её
readln(n);
// Заправшиваем ввести последовательность
write('Enter ',n,' elements of array');
// Считываем её
for i:=1 to n do
read(A[i]);
end;
// Процедура outputArr предназначена для вывода элементов массива на экран
// Параметр а - выводимый массив
// Параметр n - количество элементов, которые нужно вывести
// После вывода массива она также производит переход на новую строку
procedure outputArr(a: arr; n: integer);
var i: integer; // переменная для цикла
begin
for i := 1 to n do
begin
// Если выводим не первый элемент, разделим его с предыдущим пробелом
if i <> 1 then write(' ');
// Выводим элемент с двумя знаками после запятой
write(a[i]:0:2);
end;
writeln;
end;
// Функция findIndexOfMax предназначеня для поиска индекса максимального
// элемента в массиве
// Параметр а - массив в котором нужно найти максимальный элемент
// Параметр n - количество просматриваемых элементов массива
// Подразумевается, что в массиве есть хотя бы один элемент
function findIndexOfMax(a: arr; n: integer): integer;
var maxInd: integer; // Переменная, которая будет хранить результат
i: integer; // Переменная для цикла
begin
maxInd := 1; // Для начала предположим, что максимальный элемент - 1-й
for i := 1 to n do
begin
// Если предыдущее предположение было не верным, и
// нам встретился элемент больший, чем тот, который
// хранится под индексом maxInd, то этот просматриваемый
// элемент будем считать максимальным
if a[i] > a[maxInd] then maxInd := i;
end;
// Так как мы просмотрели все элементы до n,
// То в maxInd хранится индекс максимального
// элемента
findIndexOfMax := maxInd; // Возвращаем maxInd
end;
// Процедура process выполняет основную работу, указанную в задаче
// Параметр а - массив, который хранит элементы первой последовательности
// Параметр - количество элементов первой последовательности
// Параметр b - массив, который хранит элементы второй последовательности
// Параметр - количество элементов второй последовательности
// Подразумевается, что эти последовательности - не пустые
procedure process(var a: arr; na: integer;var b: arr; nb: integer);
var maxA, maxB: integer; // переменные для хранения индексов макс-ых элементов
temp: real; // Временная переменная для обмена
begin
// Находим индекс максимального элемента первой последовательности
maxA := findIndexOfMax(a, na);
// Находим индекс максимального элемента второй последовательности
maxB := findIndexOfMax(b, nb);
// Меняем их значения местами
temp := a[maxA];
a[maxA] := b[maxB];
b[maxB] := temp;
end;
// Основная программа производит вызов процедур, в необходимой последовательности
begin
// Считываем первую последовательность
inputArr(a,na);
// Считываем вторую последовательность
inputArr(b,nb);
// Меняем местами максимальные элементы последовательностей
process(a,na,b,nb);
// Выводим на экран изменённую первую последовательность
writeln('A:');
outputArr(a,na);
// Выводим на экран вторую последовательность
writeln('B:');
outputArr(b,nb);
end. |