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