Сортировка массива - Free Pascal (584)

Узнай цену своей работы

Формулировка задачи:

Прошу помощи в решении задачи: Дан массив {X} размерностью n. Нужно: Превратить его так, чтобы в начале массива находились положительные элементы в порядке их прохождения в исходном массиве, а после них отрицательные элементы также в порядке их прохождения в исходном массиве, если произведение минимального элемента и его номера меньше числа L. В противном случае: превратить его так, чтобы в начале массива находились положительные элементы в порядке их прохождения в исходном массиве. Ограничения: создание вспомогательного массива не разрешается Я только учусь, так что прошу не писать о том, что, мол, это совсем легко и стыдно такого не знать. Прошу вашей помощи. Заранее спасибо.

Решение задачи: «Сортировка массива»

textual
Листинг программы
type FCompare=function(a, b: Integer): Boolean;
procedure sort(var a: array of Integer; less: FCompare);
var
  i, j, t: Integer; Done: Boolean;
begin
  for i:=High(a) downto Low(a)+1 do begin
    Done:=True;
    for j:=Low(a)+1 to i do
      if less(a[j],a[j-1]) then begin
        t:=a[j-1]; a[j-1]:=a[j]; a[j]:=t; Done:=False;
      end;
    if Done then Break;
  end;
end;
{$F+}
function less1(a, b: Integer): Boolean; begin less1:=(a>0) and (b<=0) or (b=0); end;
function less2(a, b: Integer): Boolean; begin less2:=(a>0) and (b<=0); end;
const n=10;
var
  a: array [1..n] of Integer;
  i, l, m: Integer;
  Done: Boolean;
begin
  Randomize;
  for i:=1 to n do a[i]:=-50+Random(101); a[5]:=0;
  Write('A ='); for i:=1 to n do Write(' ',a[i]); WriteLn;
  Write('Введите L: '); ReadLn(l);
  m:=1; for i:=2 to n do if a[m]>a[i] then m:=i;
  if a[m]*m<l then sort(a,less1) else sort(a,less2);
  Write('A ='); for i:=1 to n do Write(' ',a[i]); WriteLn;
end.

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

В этом коде реализована сортировка массива методом сортировки пузырьком.

  1. Тип FCompare определяет функцию сравнения двух целых чисел.
  2. В процедуре sort() происходит сортировка массива a по возрастанию с использованием функции сравнения less.
  3. Функция less1() сравнивает два целых числа и возвращает True, если первое число положительно и второе число меньше или равно нулю, или если второе число равно нулю.
  4. Функция less2() сравнивает два целых числа и возвращает True, если первое число положительно и второе число меньше или равно нулю.
  5. В начале основной части программы генерируется случайный массив a, выводится на экран, затем вводится число L, которое будет использоваться для проверки, и выбирается опорный элемент массива (в данном случае - элемент с индексом 5).
  6. Если сумма квадратов опорного элемента и элемента, на который указывает введенное число L, больше, чем значение L, то вызывается функция sort() с функцией сравнения less1().
  7. Если меньше - то вызывается функция sort() с функцией сравнения less2().
  8. После сортировки массив выводится на экран.

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


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

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

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