Из вычисленного массива 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" для нужного мне результата
Для решения данной проблемы можно использовать дополнительную переменную, которая будет отслеживать индекс для изменения значения массива. В данном случае вы можете использовать переменную "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" используется для изменения значения массива, и программа должна правильно удалить все положительные элементы, расположенные до последнего отрицательного элемента.
Для решения данной проблемы можно использовать дополнительную переменную, которая будет отслеживать индекс для изменения значения массива. В данном случае вы можете использовать переменную "l" вместо "i" во вложенном цикле. Вот исправленный вариант программы:
typemas = 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" используется для изменения значения массива, и программа должна правильно удалить все положительные элементы, расположенные до последнего отрицательного элемента.