Type
tE = record
v: integer;
p: integer;
end;
procedure Swap2E(var a: tE; var b: tE);
// Обмен содержимым пары записей
var
Buff: integer;
begin
Buff := a.v; a.v := b.v; b.v := Buff;
Buff := a.p; a.p := b.p; b.p := Buff
end;
procedure Swap3E(var a: tE; var b: tE; var c: tE);
// Обмен содержимым трех записей
// Предполагается, что до вызова процедуры a.v>=b.v,
// после вызова значение с.v помещается в a.v или b.v так,
// чтобы большее из трех значений попало в a.v, а следующее
// по величине попало в b.v. Младшее значение теряется.
begin
if c.v >= a.v then begin
Swap2E(a, b); Swap2E(a, c)
end
else
if c.v > b.v then Swap2E(b, c);
end;
const
n = 50;
var
a: array[1..n] of integer;
R1, R2, T: tE;
i, e, m: integer;
begin
i := 1;
writeln('Вводите числа, 0 - конец ввода');
repeat
read(e);
a[i] := e;
i:=i+1;
until e = 0;
m := i;
if a[1] > a[2] then begin
R1.v := a[1]; R1.p := 1;
R2.v := a[2]; R2.p := 2
end
else begin
R1.v := a[2]; R1.p := 2;
R2.v := a[1]; R2.p := 1
end;
for i := 3 to m do
begin
T.v := a[i];
T.p := i;
Swap3E(R1, R2, T)
end;
writeln('Максимальные значения имеют элементы с номерами ', R1.p, ' и ', R2.p);
writeln('Сумма этих элементов равна ', R1.v + R2.v)
end.
Контрольный пример:
Вводите числа, 0 - конец ввода
18
6
13
40
14
52
0
Максимальные значения имеют элементы с номерами 6 и 4
Сумма этих элементов равна 92