function findMax(var v:vector; l,r:integer):integer; {индекс максимального элемента в диапазоне от l до r} var i, m:integer; begin m := l; for i := l + 1 to r do if v[i] > v[m] then m := i; findMax := m end;
procedure swap(var v:vector; l,r:integer); {меняет местами элементы массива с заданными индексами} var t: integer; begin t := v[l]; v[l] := v[r]; v[r] := t end;
procedure print(var v: vector; l,r:integer); {печатает элементы массива под номерами от l до r} var i: integer; begin for i := l to r do write(v[i],' ') end;
function sum(x: integer): integer; var s: integer; begin s := 0; x := abs(x); while x > 0 do begin s := s + x mod 10; x := x div 10 end; sum := s end;
var v1, v2: vector; i: integer; {просто цикловая переменная} l,r: integer; {переменные для задачи 1} k: integer; {для задачи 2}
begin
{1} for i := 1 to n do v1[i] := c[i]; l := findMax(v1, 1, n div 2); r := findMax(v1, n div 2 + 1, n); swap(v1, l, r); print(v1, 1, n); writeln;
{2} k := 0; for i := 1 to n do if sum(c[i]) = 10 then begin k := k + 1; v2[k] := c[i] end; print(v2, 1, k) end.
0 votes Thanks 0
mihailzamorin
что-то я не очень понял решение, но все равно спасибо!
mihailzamorin
Можешь написать просто две раздельных проги?
Answers & Comments
const
n = 8;
type
vector = array[1..n] of integer;
const
c : vector = (14, 28, 55, 46, 23, 424, 32, 18);
function findMax(var v:vector; l,r:integer):integer;
{индекс максимального элемента в диапазоне от l до r}
var
i, m:integer;
begin
m := l;
for i := l + 1 to r do
if v[i] > v[m] then
m := i;
findMax := m
end;
procedure swap(var v:vector; l,r:integer);
{меняет местами элементы массива с заданными индексами}
var
t: integer;
begin
t := v[l];
v[l] := v[r];
v[r] := t
end;
procedure print(var v: vector; l,r:integer);
{печатает элементы массива под номерами от l до r}
var
i: integer;
begin
for i := l to r do
write(v[i],' ')
end;
function sum(x: integer): integer;
var
s: integer;
begin
s := 0;
x := abs(x);
while x > 0 do
begin
s := s + x mod 10;
x := x div 10
end;
sum := s
end;
var
v1, v2: vector;
i: integer; {просто цикловая переменная}
l,r: integer; {переменные для задачи 1}
k: integer; {для задачи 2}
begin
{1}
for i := 1 to n do
v1[i] := c[i];
l := findMax(v1, 1, n div 2);
r := findMax(v1, n div 2 + 1, n);
swap(v1, l, r);
print(v1, 1, n);
writeln;
{2}
k := 0;
for i := 1 to n do
if sum(c[i]) = 10 then
begin
k := k + 1;
v2[k] := c[i]
end;
print(v2, 1, k)
end.