Упорядочить часть массива - 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.

Объяснение кода листинга программы

  1. Объявляются константы и переменные: n=10, mas=тип массива real, a, b=массивы, i, j, k, j1, j2=целые числа, tmp=реальное число.
  2. Выполняется инициализация генератора случайных чисел.
  3. Массив a заполняется случайными числами от -10 до 10 с шагом 1.
  4. В цикле выводятся элементы массива a.
  5. Переменная i инициализируется значением high(a).
  6. Переменная k инициализируется значением 0.
  7. Цикл while выполняется до тех пор, пока i больше или равно low(a) и k меньше 2.
  8. Если a[i] отрицательное, то выполняется условие: если k=0, то j2=i, иначе j1=i; k увеличивается на 1.
  9. i уменьшается на 1.
  10. Если k меньше 2, то выводится сообщение нет двух отрицательных.
  11. Если k=2, то выполняется условие: если j2-j1=1, то выводится сообщение предпоследний и последний отрицательные рядом, иначе: k увеличивается на 1; создается массив b размером j2-j1; выводится сообщение массив между предпоследним и последним отрицательными, упорядоченный по не возрастанию:; для каждого элемента b[i] выводится его значение.
  12. Если high(b) больше или равно 0, то выполняется условие: для каждого элемента b[i] от low(b) до high(b)-1 выводится его значение; для каждого элемента b[i] от low(b) до high(b)-i-1 выполняется сортировка по возрастанию методом пузырька.
  13. Код завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.625 из 5
Похожие ответы