Помощь - Поиск - Пользователи - Календарь
Полная версия: Процедуры.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
gryzlik
Ребят, я уже просила помощи по этой задаче, но до конца её так и не довели. Помогите, пожалуйста! Программа работает не так, как нужно!
Вот условие задачи:
Написать подпрограмму для вставки m элементов в одномерный массив на указанное место


Program Zad_1;
type a=array [1..100] of real;
var l:a;
k, m,n,i: integer;
procedure Vstavka (var l:a; var n:integer; k,m:integer );
var i:integer;
begin
for i:= k+m to n do
l[i+m]:=l[i];
n:=n+m;
end;
begin
writeln('Vvedite razmer massiva');
readln(n);
writeln ('Vvedite poziciu nachala vstavki i kol-vo vstavlaemih elementov');
readln(k,m);
for i:=1 to n do begin
l[i]:=random(40)+10;
writeln(l[i] :4 :1);
end;
Vstavka(l,n,k,m);
writeln('Rezultat vstavki ');
for i:=1 to n do
writeln (l[i]4.gif1);
end.


Программа вставляет числа на позицию позже,чем я задаю, и копирует их до конца массива.
Lapp
Цикл в процедуре нужно делать обратный (downto), иначе ты затираешь сам массив при передвижении:

for i:=n downto k do l[i+m]:=l[i];

Кроме того, непонятно, что именно ты вставляешь. По идее, за этим циклом должен быть другой - например, такой:

for i:=1 to m do l[k+i-1]:=V

Здесь V - это некая (real) величина для вставки, которую ты можешь тоже запросить для ввода, как запрашиваешь остальные данные.
gryzlik
Я не могу дать V несколько значений? То есть будет всегда вставляться одно и то же число?
мисс_граффити
можешь, конечно smile.gif
просто внутри цикла каждый раз спрашивай новое V
то есть
for i:=1 to m do 
begin
readln(V);
l[k+i-1]:=V;
end
gryzlik
Спасибо. Очень помогли!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.