Проверить, есть ли в массиве X идущие подряд элементы, совпадающие с содержимым массива Y - PascalABC.NET
Формулировка задачи:
Даны два целочисленных массива Х[1:n] и Y[1:k]. Можно ли в первом из них выбрать такие k идущих подряд элементов X[i+1], X[i+2], …, X[i+k], чтобы X[i+1]=Y[1], X[i+2]=Y[2], …, X[i+k]=Y[k]? Написать программу, которая решает эту задачу и печатает ответ ДА или НЕТ.
Я немного начала, но понимаю что делаю что-то не то. Помогите а)
Решение задачи: «Проверить, есть ли в массиве X идущие подряд элементы, совпадающие с содержимым массива Y»
textual
Листинг программы
const
n = 7;
k = 3;
var
ix, iy: integer;
found: boolean;
X: array [1..n] of integer := (1, 2, 3, 2, 3, 4, 7);
Y: array [1..k] of integer := (2, 3, 4);
begin
ix := 0;
repeat
inc(ix);
while (ix <= n - k) and (x[ix] <> y[1]) do inc(ix);
found := ix <= n - k;
for iy := 1 to k do found := found and (x[ix + iy - 1] = y[iy]);
until found or (ix + k >= n);
if found then write('DA')
else write('Net')
end.
Объяснение кода листинга программы
- Объявлены константы n = 7 и k = 3.
- Объявлены переменные ix, iy: integer; found: boolean; X: array [1..n] of integer; Y: array [1..k] of integer.
- Инициализированы массивы X и Y.
- Начинается цикл по переменной ix от 0 до n-k.
- Внутри цикла проверяется, что текущий элемент массива X не равен первому элементу массива Y.
- Если текущий элемент массива X равен первому элементу массива Y, то начинается цикл по переменной iy от 1 до k.
- Внутри цикла проверяется, что каждый последующий элемент массива X равен соответствующему элементу массива Y.
- Если все элементы массива X совпадают с элементами массива Y, то значение переменной found устанавливается в true.
- После завершения циклов выводится сообщение
DA, если были найдены совпадающие элементы, иначе выводится сообщениеNet.