Помощь - Поиск - Пользователи - Календарь
Полная версия: Cдвиги в массиве
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
keeply
Помогите плиз!
Задача:описать процедуру, дублирующую в целочисленном массиве А размера N элементы равные числу X. Вывести размер и содержимое полученного массива.

Например: 5 6 8 9 продублировать 6
рез-тат: 5 6 6 8 9
volvo
Цитата
Вывести размер и содержимое полученного массива.

keeply, можно поинтересоваться, что именно ПОЛУЧАЕТ процедура, и в каком виде? Какие параметры в нее передаются?
Altair
мне так нравиться:

{$apptype console}
program Untitled;
Type
 Telem = integer;
 ArrType=array[1..100] of Telem;

procedure duble_elem(var A:Arrtype; var N:Integer; X:Telem);
var

 j,i:integer;

begin
 i:=1;
 while i<=n do begin
  if a[i]=x then begin
   inc(n);
   for j:=n downto i+1 do a[j]:=a[j-1];
   inc (i,2)
  end else inc(i);
 end
end;

var a:arrtype;
    n,i:integer;
begin
{ ввод массива } 
 {...}
 {тестовые присвоения}
 {n:=6; a[1]:=1; a[2]:=2; a[3]:=3; a[4]:=2; a[5]:=6; a[6]:=7; }
 {ввод x} 
 readln(x); {x:=2}
 duble_elem(a,n,x);
 {вывод результата} 
 writeln('size: ',n);
 for i:=1 to n do write(a[i], ' ');
 readln
end.

Процедура. Вход:
массивв А
размер N
число X
----------
в условии ничего не сказанно про то что вывод должен быть в процедуре.
volvo
Как вариант (если только не отрабатывается тема "циклы") :
while i<=n do begin
  if a[i]=x then begin
    inc(n); 
    move(a[i], a[i+1], (n - i)*sizeof(Telem)); { <-- Должно быть быстрее }
    inc(i);
  end;
  inc(i);
end;
Guest
Volvo, Altair, :D спасибо огромное!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.