Упорядочить часть массива - 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 выполняется сортировка по возрастанию методом пузырька.
- Код завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д