Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Процедуры.

Автор: gryzlik 30.11.2006 18:20

Ребят, я уже просила помощи по этой задаче, но до конца её так и не довели. Помогите, пожалуйста! Программа работает не так, как нужно!
Вот условие задачи:
Написать подпрограмму для вставки 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 30.11.2006 19:20

Цикл в процедуре нужно делать обратный (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 30.11.2006 19:55

Я не могу дать V несколько значений? То есть будет всегда вставляться одно и то же число?

Автор: мисс_граффити 30.11.2006 21:29

можешь, конечно smile.gif
просто внутри цикла каждый раз спрашивай новое V
то есть

for i:=1 to m do 
begin
readln(V);
l[k+i-1]:=V;
end

Автор: gryzlik 1.12.2006 1:49

Спасибо. Очень помогли!!!