Упорядочить часть массива - Free Pascal
Формулировка задачи:
Помогите решить задачу:
Дан массив x вещественных чисел. Получить упорядоченный по не возрастанию массив, состоящий из чисел данного массива, находящихся между предпоследним и последним отрицательным членом. Указание:проверить массив на наличие элементов между ними.
Решение задачи: «Упорядочить часть массива»
textual
Листинг программы
const n=10;
type mas=array of real;
var a,b:mas;
i,j,k,j1,j2:integer;
tmp:real;
begin
randomize;
setlength(a,n);
for i:=low(a) to high(a)do
begin
a[i]:=random*(-10+random(31));
write(a[i]:7:2);
end;
writeln;
i:=high(a);
k:=0;
while (i>=low(a))and(k<2) do
begin
if a[i]<0
then
begin
if k=0 then j2:=i
else j1:=i;
inc(k)
end;
dec(i)
end;
if k<2 then writeln('нет двух отрицательных')
else
begin
if j2-j1=1
then writeln('предпоследний и последний отрицательные рядом')
else
begin
inc(j1);
setlength(b,j2-j1);
writeln('массив между предпоследним и последним отрицательными, упорядоченный по не возрастанию:');
for i:=low(b) to high(b) do begin b[i]:=a[j1];inc(j1) end;
if high(b)>=0
then
begin
for i:=low(b) to high(b)-1 do
for j:=low(b) to high(b)-i-1 do
if b[j]<b[j+1] then begin tmp:=b[j];b[j]:=b[j+1];b[j+1]:=tmp end;
for i:=low(b) to high(b) do write(b[i]:7:2)
end
end
end
end.
Объяснение кода листинга программы
- Объявляются константы и переменные: n=10, mas=тип массива real, a, b=массивы, i, j, k, j1, j2=целые числа, tmp=реальное число.
- Выполняется инициализация генератора случайных чисел.
- Массив a заполняется случайными числами от -10 до 10 с шагом 1.
- В цикле выводятся элементы массива a.
- Переменная i инициализируется значением high(a).
- Переменная k инициализируется значением 0.
- Цикл while выполняется до тех пор, пока i больше или равно low(a) и k меньше 2.
- Если a[i] отрицательное, то выполняется условие: если k=0, то j2=i, иначе j1=i; k увеличивается на 1.
- i уменьшается на 1.
- Если k меньше 2, то выводится сообщение
нет двух отрицательных. - Если k=2, то выполняется условие: если j2-j1=1, то выводится сообщение
предпоследний и последний отрицательные рядом, иначе: k увеличивается на 1; создается массив b размером j2-j1; выводится сообщениемассив между предпоследним и последним отрицательными, упорядоченный по не возрастанию:; для каждого элемента b[i] выводится его значение. - Если high(b) больше или равно 0, то выполняется условие: для каждого элемента b[i] от low(b) до high(b)-1 выводится его значение; для каждого элемента b[i] от low(b) до high(b)-i-1 выполняется сортировка по возрастанию методом пузырька.
- Код завершается.