Из вычисленного массива R удалить все положительные элементы, расположенные до последнего отрицательного элемента
Программа:type mas = array [1..100] of real;var x, h, a: real; i, n, j, k, l: integer; r: mas;begin repeat writeln ('Введите 1<=n<=100'); readln (n); if (n<1) or (n>100) then writeln ('Некорректный ввод'); until (n>=1) and (n<=100); writeln ('Введите h и a'); readln (h, a); writeln ('Введите х'); readln (x); for i:=1 to n do begin r[i]:=6*cos(a*x+i*h); end; write('Массив: '); for i:=1 to n do writeln(r[i]); {Найденный массив} j:=0; k:=0; for i:=1 to n do if r[i]<0 then k:=i; for i:=1 to n do if (r[i]>0) and (i<k) then begin (28 строка) for i:=k to n do begin j:=j+1; r[j]:=r[i]; end; n:=j;end;writeln('Новый массив');for i:=1 to n do writeln (r[j]);end.
Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла (строка 28)
Я понимаю суть ошибки, но не знаю, чем заменить "i" для нужного мне результата

21 Сен 2019 в 15:41
199 +1
0
Ответы
1

Для решения данной проблемы можно использовать дополнительную переменную, которая будет отслеживать индекс для изменения значения массива. В данном случае вы можете использовать переменную "l" вместо "i" во вложенном цикле. Вот исправленный вариант программы:

type
mas = array [1..100] of real;
var
x, h, a: real;
i, n, j, k, l: integer;
r: mas;
begin
repeat
writeln('Введите 1<=n<=100');
readln(n);
if (n<1) or (n>100) then
writeln('Некорректный ввод');
until (n>=1) and (n<=100);
writeln('Введите h и a');
readln(h, a);
writeln('Введите х');
readln(x);
for i := 1 to n do begin
r[i] := 6 * cos(a*x + i*h);
end;
write('Массив: ');
for i := 1 to n do
writeln(r[i]);
j := 0;
k := 0;
for i := 1 to n do
if r[i] < 0 then
k := i;
l := 0;
for i := 1 to n do
if (r[i] > 0) and (i < k) then begin
for j := k to n do begin
l := l + 1;
r[l] := r[j];
end;
n := l;
Break;
end;
writeln('Новый массив');
for i := 1 to n do
writeln(r[i]);
end.

Теперь переменная "l" используется для изменения значения массива, и программа должна правильно удалить все положительные элементы, расположенные до последнего отрицательного элемента.

19 Апр 2024 в 20:39
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир