Сортировка массива - 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.
Объяснение кода листинга программы
В этом коде реализована сортировка массива методом сортировки пузырьком
.
- Тип FCompare определяет функцию сравнения двух целых чисел.
- В процедуре sort() происходит сортировка массива a по возрастанию с использованием функции сравнения less.
- Функция less1() сравнивает два целых числа и возвращает True, если первое число положительно и второе число меньше или равно нулю, или если второе число равно нулю.
- Функция less2() сравнивает два целых числа и возвращает True, если первое число положительно и второе число меньше или равно нулю.
- В начале основной части программы генерируется случайный массив a, выводится на экран, затем вводится число L, которое будет использоваться для проверки, и выбирается опорный элемент массива (в данном случае - элемент с индексом 5).
- Если сумма квадратов опорного элемента и элемента, на который указывает введенное число L, больше, чем значение L, то вызывается функция sort() с функцией сравнения less1().
- Если меньше - то вызывается функция sort() с функцией сравнения less2().
- После сортировки массив выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д