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