Заменить знаки чисел массива так, чтобы все элементы массива стали отрицательными - PascalABC.NET
Формулировка задачи:
Дан массив {X} размерностью n.
Нужно: заменить знаки так, чтобы все элементы массива стали отрицательными, только если на k позициях подряд элементы одинаковы. При невыполнении заданного условия выдать сообщение «Решения не существует».
Ограничения: создание вспомогательного массива и использование принудительных средств выхода из цикла с параметром не допускается
Помогите решить
Решение задачи: «Заменить знаки чисел массива так, чтобы все элементы массива стали отрицательными»
textual
Листинг программы
var
i,j,k,l,n:integer;
x:array of integer;
begin
write('Введите количество элементов: ');
readln(n);
write('Введите количество позиций:');
readln(k);
SetLength(x,n);
write('Введите элементы массива через пробел:');
for i:=0 to n-1 do read(x[i]);
l:=x[0];
j:=1;
for i:=1 to n-1 do
if l=x[i] then j:=j+1 else if j<k then begin j:=1;l:=x[i];end;
if j<k then writeln('Решения не существует')else
begin
write('Полученный массив:');
for i:=0 to n-1 do begin x[i]:=-abs(x[i]);write(x[i],' ');end;
end;
end.
Объяснение кода листинга программы
- Ввод количества элементов массива и количества позиций.
- Инициализация массива с помощью функции SetLength.
- Ввод элементов массива через пробел.
- Создание переменной l и присваивание ей первого элемента массива.
- Создание переменной j и присвоение ей значения 1.
- Цикл по всем элементам массива, начиная со второго.
- Если элемент массива равен l, то увеличиваем значение j на 1.
- Если j меньше k и элемент массива не равен l, то сбрасываем значение j на 1, присваиваем l значение этого элемента и продолжаем цикл.
- Если j меньше k, то выводим сообщение о том, что решения не существует.
- Если j больше или равно k, то выводим полученный массив.
- Для каждого элемента массива вычисляем его абсолютное значение и присваиваем его обратно с отрицательным знаком.
- Выводим полученный массив на экран.