Вставить число к между всеми соседними элементами, имеющими одинаковый знак - Pascal
Формулировка задачи:
Здравствуйте!
Прошу помочь. Есть задание: вставить число К между всеми соседними элементами, имеющими одинаковый знак.новый массив не создавать.
Но могу только так, то есть с созданием нового массива. Прошу подтолкнуть в правильное русло.Спасибо!
program vstavka;
const N=10;
k=3;
var a: array[1..N]of Integer;
b: array[1..2*N]of Integer;
i,j,m: Integer;
f:boolean;
begin
writeln ('исходный массив');
writeln ('=====================');
for i:=1 to N do
begin
a[i]:=Random(40)-20;
writeln ('a[',i,']=',a[i]);
end;
j:=1;
for i:=1 to N-1 do
begin
b[j]:=a[i];
if a[i]*a[i+1]>0 then begin
j:=J+1;
b[j]:=k;
end;
j:=j+1;
end;
writeln ('=====================');
for i:=1 to j-1 do
writeln ('b[',i,']=',b[i]);
writeln ('=====================');
end.Решение задачи: «Вставить число к между всеми соседними элементами, имеющими одинаковый знак»
textual
Листинг программы
const n=20;
var
a:array[1..2*n]of integer;
b,c,d,e,f:integer;
begin
repeat
write('Enter N:');
readln(b);
until (b>0)and(b<n);
for c:=1 to b do
begin
a[c]:=random(40)-20;
write(a[c]:3);
end;
writeln;
write('Enter K:');
readln(d);
c:=1;
while c<b do
begin
if a[c]*a[c+1]>0 then
begin
inc(c);
e:=c;
inc(b);
repeat
f:=a[e];
a[e]:=d;
d:=f;
inc(e);
until e=b;
a[b]:=d;
d:=a[c];
end;
inc(c);
end;
for c:=1 to b do
write(a[c]:3);
end.
Объяснение кода листинга программы
- Создается переменная n, которая представляет собой количество элементов в массиве a.
- Создается переменная a, которая представляет собой массив из 2*n элементов типа integer.
- Создаются переменные b, c, d, e, f, которые представляют собой входные данные для программы.
- Запускается цикл repeat, который продолжается до тех пор, пока не будет введено корректное значение для b (больше 0 и меньше n).
- Внутри цикла for c:=1 до b do выполняется цикл, который продолжается до тех пор, пока c не станет равным b.
- Внутри цикла for c=1 до b do выполняется блок кода, который вставляет значение d между элементами a[c] и a[c+1] при условии, что a[c]*a[c+1]>0.
- После вставки значения d между элементами a[c] и a[c+1] обновляется значение e и увеличивается значение b.
- Повторяется шаг 7 до тех пор, пока e не станет равным b.
- После того, как значение d было вставлено между элементами a[c] и a[c+1], обновляется значение a[b] и увеличивается значение d.
- Цикл for c=1 до b do выводит значение a[c].
- Запускается цикл repeat, который продолжается до тех пор, пока не будет введено корректное значение для d (больше 0 и меньше n).
- После ввода корректного значения для d, запускается цикл while c<b do, который повторяется до тех пор, пока c не станет равным b.
- Внутри цикла while c=1 до b do выполняется блок кода, который вставляет значение d между элементами a[c] и a[c+1] при условии, что a[c]*a[c+1]>0.
- После вставки значения d между элементами a[c] и a[c+1] обновляется значение e и увеличивается значение b.
- Повторяется шаг 14 до тех пор, пока e не станет равным b.
- После того, как значение d было вставлено между элементами a[c] и a[c+1], обновляется значение a[b] и увеличивается значение d.
- Цикл for c=1 до b do выводит значение a[c].
- Выводится значение k.
- Запускается цикл repeat, который продолжается до тех пор, пока не будет введено корректное значение для k (больше 0 и меньше n).
- После ввода корректного значения для k, программа завершается.