Дан массив размера N. Преобразовать его, вставив перед каждым положительным элементом введенный элемент - Pascal
Формулировка задачи:
Задача: Дан массив размера N. Преобразовать его, вставив перед каждым положительным элементом введенный элемент.
У меня что-то не получилось сделать, помогите исправить программу. Что изменить?
program vstavka;
const
n = 10; {количество элементов в массиве}
type mas=array [1..n+1] of integer;
var
B: mas; {описание длины и типа массива}
k,x,y,i: Integer;
procedure WWOD(var A: mas);
var i:integer;
begin
randomize;
for i:=1 to n do
A[i]:=random(20)-random(20);{i-ому элементу массива присваивается случайное значение от -20 до 20}
end;
procedure WIWOD (var A: mas);
var i:integer;
begin
for i:=1 to n do {вывод исходного массива на экран}
write(A[i],' ');
writeln;
end;
Procedure Insert(Var A: mas; Var y: integer; Mesto, Element: integer);
Var
i: integer;
Begin
for i := y downto Mesto+1 do
A[i+1] := A[i];
A[Mesto+1]:= Element;
Inc(y);
End;
Begin
WWOD(B);
writeln('Исходный массив: ');
WIWOD(B);
Writeln('Вставляемое число:');
Readln(x);
for i:=n downto k+1 do
if B[i]>0 then
Insert(B, y, k, x);
Writeln('Полученный массив:');
WIWOD(B);
End.Решение задачи: «Дан массив размера N. Преобразовать его, вставив перед каждым положительным элементом введенный элемент»
textual
Листинг программы
program pr;
type
arr = array [1..100] of integer;
var
a: arr;
n, x: integer;
procedure fill(var v: arr; var f: integer);
var
i: integer;
begin
for i := 1 to n do
begin
v[i] := random(21) - 10;
end;
end;
procedure print(var v: arr);
var
i: integer;
begin
for i := 1 to n do
begin
write(v[i]:3);
end;
end;
procedure inset(var v: arr; var f: integer; var c: integer);
var
i, temp, j: integer;
begin
i := 1;
while i <= f do
begin
if v[i] > 0 then
begin
f := f + 1;
for j := f downto i + 1 do
v[j] := v[j - 1];
v[i] := c;
i := i + 2;
end
else i := i + 1;
end;
end;
begin
writeln('Введите размер массива');
readln(n);
writeln;
writeln('Введите число для вставки');
readln(x);
fill(a, n);
print(a);
inset(a, n, x);
writeln;
writeln('После преобразования');
print(a);
end.
Объяснение кода листинга программы
- В программе объявлены три переменные:
a,nиx. Переменнаяaявляется массивом размером 100, переменнаяn- целочисленной, а переменнаяx- также целочисленной. - В процедуре
fillиспользуется циклforдля заполнения массива случайными числами от -10 до 10. - В процедуре
printиспользуется циклforдля вывода элементов массива на экран. - В процедуре
insetиспользуется циклwhileдля проверки каждого элемента массива на положительность. Если элемент положительный, то он заменяется введенным числомc. Циклwhileпродолжается, пока не будет проверен весь массив. - После ввода размера массива и числа для вставки, вызывается функция
fillдля заполнения массива случайными числами. - Затем вызывается функция
printдля вывода массива на экран. - После этого вызывается функция
insetдля вставки числаxперед каждым положительным элементом массива. - Наконец, вызывается функция
printеще раз для вывода преобразованного массива.