Найти в массиве наибольшую по количеству элементов арифметическую прогрессию - Pascal
Формулировка задачи:
Добрый день. Нахожусь очень у трудной ситуации. Дано условие : В массиве Z(n) найти наибольшую по количеству элементов арифметическую прогрессию ( элементы прогрессии стоят в массиве в произвольном порядке ). Сейчас потею на курсовым проектом, и это ещё дали. На ваш суд, буду рад каким либо предложениям по задаче.
Решение задачи: «Найти в массиве наибольшую по количеству элементов арифметическую прогрессию»
textual
Листинг программы
type
TProgression = record
startId, count: Byte;
d: ShortInt;
end;
var
z: Array[Byte] Of ShortInt;
i, j, n: Byte;
curr, max: TProgression;
begin
repeat
Write('Input n (>1) =');
ReadLn(n);
until (n > 1);
WriteLn('Original array:');
for i := 0 to n - 1 do
begin
Write('z[', i + 1, ']=');
ReadLn(z[i]);
end;
with max do
begin
startId := 0;
count := 0;
d := 0;
end;
for i := 1 to n - 1 do
begin
with curr do
begin
startId := i - 1;
count := 1;
d := z[i] - z[i - 1];
j := i + 1;
while (j < n) do
if (z[j] - z[j - 1] = d)
then
begin
Inc(count);
Inc(j);
end
else
Break;
end;
if (curr.count > max.count)
then
max := curr;
end;
WriteLn; Write('Max progression:');
for i := max.startId to max.startId + max.count do
Write(z[i]:4);
end.
Объяснение кода листинга программы
- Определение типа структуры
TProgressionс полямиstartId,countиd. - Объявление массива
zтипаArray[Byte] Of ShortInt, и переменныхi,j,nтипаByte, а также переменныхcurrиmaxтипаTProgression. - Ввод значения переменной
nс клавиатуры до тех пор, пока введенное число не будет больше 1. - Ввод значений элементов массива
zс клавиатуры. - Инициализация полей структуры
max(startId, count, d) нулями. - Выполнение цикла для нахождения наибольшей арифметической прогрессии в массиве: a) Определение начального элемента, количества и разности для текущей прогрессии. b) Поиск остальных элементов прогрессии и увеличение их счетчика, пока разность между соседними элементами равна заданной. c) Сравнение количества элементов текущей прогрессии с максимальной и обновление максимальной, если необходимо.
- Вывод наибольшей прогрессии на экран.