Как вставить элемент в массив паскаль
Перейти к содержимому

Как вставить элемент в массив паскаль

Вставка элемента в массив

Требуется добавить элемент в произвольное место массива.

Алгоритм решения задачи:

  1. Задаем длину массива на один элемент больше, чем он будет заполнен в начале.
  2. Выясняем значение и позицию добавляемого элемента
  3. Все элементы до указанной позиции сдвигаем на один назад.
  4. Присваиваем по указанному индексу (позиции) значение.
  5. Остальная (передняя) часть массива не изменяется.

Программа на языке Паскаль:

const n = 6; var arr: array[1..n] of integer; i, j, num, id: integer; begin writeln('Заполните массив: '); for i := 1 to n - 1 do readln(arr[i]); write('Ваш массив: '); for i := 1 to n - 1 do write(arr[i]:5); writeln; write('Укажите еще один элемент: '); readln(num); write('Позиция в массиве: '); readln(id); for i := n - 1 downto id do arr[i+1] := arr[i]; arr[id] := num; write(' Ваш массив: '); for i := 1 to n do write(arr[i]:5); writeln; end.

Массивы

Рассмотрите предложенные ниже фрагменты программ для решения некоторых типичных задач.

Изменение значения некоторых элементов

Задача. Заменить отрицательные элементы на противоположные по знаку. Для этого опишем процедуру. Ей будем передавать параметры — количество элементов в массиве и массив, который будет также и результатом выполнения процедуры, так как некоторые его элементы могут быть заменены.

Procedure Zamena (Var m : MyArray; n:integer);
Var
i : integer;
Begin
for i := 1 to n do
if m[i] < 0
then
m[i] := -m[i];
End;

Нахождение номеров элементов с заданным свойством

Задача. Найти и вывести на экран номера четных элементов. Для решения задачи необходимо просмотреть весь массив, и если просматриваемый элемент является четным, то выводить его номер.

Procedure PoiskChet(m : MyArray; n:integer);
Var
i : integer;
Begin
for i := 1 to n do
if m[i] mod 2 =0
then
Write(i:5);
End;

Нахождение количества элементов с заданным свойством

Задача. Найти количество положительных и отрицательных элементов в данном массиве. Опишем процедуру, которой будем отправлять параметры — массив, количество элементов в массиве и два счетчика, один для элементов, больших нуля, а второй — для отрицательных элементов.

Procedure OtrPol(m : MyArray; n:integer; Var k1, k2 : Integer);
Var
i : integer;
Begin
k1 :=0;
k2 :=0;
for i := 1 to n do
if m[i] > 0
then
Inc(k1)
else
if m[i] < 0
then
Inc(k2);
End;

Есть ли в данном массиве элементы с данным свойством?

Для решения таких задач удобнее использовать циклы с условиями и составлять функции, результат которых имеет логический тип. Задача. Есть ли отрицательный элемент в массиве? Начинаем с первого элемента (i=1). Пока не просмотрен последний элемент (i<=n) и не найден отрицательный (m[i]>=0), будем переходить к следующему (Inc(i)). Таким образом, мы закончим просмотр массива в одном из двух случаев: первый – просмотрели все элементы и не нашли отрицательный, тогда i>n, второй – нашли нужный, при этом i

Function Control (m : MyArray; n:integer) : Boolean;
Var
i : integer;
Begin
i := 1;
while (i<=n) and (m[i]>0) do
Inc(i);
Control := (i<=n);
End;

Вставка элемента в массив

Написать процедуру вставки элемента в массив. Все элементы после него сдвигаются на
один вправо, а последний элемент массива теряется.

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Вставка элемента в массив
Дан одномерный массив с возрастающими значениями элементов. Надо, если получится, вставить в массив.

Вставка элемента в массив
Есть массив. В цикле находится произведение пар этого массива и сразу заносятся в другой массив. .

Вставка элемента в массив
Всем привет. вот условие задачи: Сформировать массив а, элементы которого выбираются случайным.

вставка элемента в одномерный массив
Вставить два элемента с данными значениями:первый-после всех элементов, больше данного числа Р, а.

Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181

Лучший ответ

Сообщение было отмечено Anastasiaya как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
type mas=array[1..100] of integer; procedure vstavka(var a:mas;x,k,n:integer); var i:integer; begin for i:=n downto k+1 do a[i]:=a[i-1]; a[k]:=x; end; var a:mas; n,x,k,i:integer; begin repeat write('Введите размер массива от 3 до 100 n='); readln(n); until n in [3..100]; randomize; writeln('Исходный массив'); for i:=1 to n do begin a[i]:=10+random(80); write(a[i]:4); end; writeln; write('Введите число для вставки x='); readln(x); repeat write('Введите место вставки от 1 до ',n,' k='); readln(k); until k in [1..n]; vstavka(a,x,k,n); writeln('Вставка элемента'); for i:=1 to n do write(a[i]:4) end.

TURBO PASCAL

Вставка элементов в одномерный массив

Вставка одного элемента

Вставлять элемент можно до или после данного элемента, номер этого элемента можно вводить с клавиатуры или искать при определённых условиях. Рассмотрим вставку элемента после элемента с данным номером, номер этого элемента будем вводить с клавиатуры.

Вставка элемента после элемента с заданным номером.

Пример

Вставить число 100 после пятого элемента массива.

Пусть k — это номер элемента, после которого мы должны вставить элемент х (k и х будем вводить с клавиатуры). Тогда вставка осуществляется следующим образом:

первые k элементов массива остаются без изменений;

все элементы, начиная с (k+1)-го, необходимо сдвинуть на один назад;

на место (k+1)-го элемента записываем значение х, то есть после k-го элемента массива.

Рассмотрим на конкретном примере. Пусть дан следующий одномерный массив из N (N = 10) элементов: 3, -12, 5, 14, 27, -6, 1, -34, 10, -15.

Надо вставить 100 после пятого элемента массива. Тогда получим следующий массив:

3, -12, 5, 14, 27, 100, -6, 1, -34, 10, -15.

Таким образом, в массиве стало 11 элементов, то есть массив надо определять на N+1 элемент:

Type myarray = Array[1..n+1] Of Integer.

Кроме того, в программе необходимо выводить массив два раза, сначала первые N элементов массива, а затем все N+1 элементы. Поэтому будем использовать уже известную процедуру Print1.

Составим теперь основную программу с использованием новой процедуры Insert1 (k1, x1, m), которой передаются: k1 — номер элемента, после которого надо вставить, х1 — число, которое вставляем, m — массив, в котором делаем преобразования. Кроме того, сдвиг элементов будем начинать с последнего элемента.

Program Example_42;
Const n = 10; dd = 51;
Type myarray = Array[1.. n+1] Of Integer;
Var A : myarray;
x, k : Integer;

Procedure Init2 (Var m: myarray);

Procedure Print1 (n1: Integer; m: myarray);

Procedure Insert1 (k1,x1: Integer; Var m: myarray);
Var i; Integer;
Begin
For i:=n Downto k1+1 Do
m[i+1]:= m[i]
m[k1+1]:= x1;
End;

Рассмотрим выполнение программы по шагам выполнения. Пусть начальное заполнение массива сделано и имеется массив из десяти целых чисел:

3, -12, 5, 14, 27, -6, 1, 34, 10, -15.

Кроме того, пусть первый вывод массива тоже уже сделан и на экране появились 10 целых чисел. Введём номер элемента, после которого будем вставлять новый элемент и сам этот новый элемент:

k = 5 — будем вставлять после пятого элемента;

x = 100 — вставлять будем число 100.

Сдвиг элементов
i m[1] m[2] m[3] m[4] m[5] m[6] m[7] m[8] m[9] m[10] m[11]
3 -12 5 14 27 -6 1 34 10 -15=>
10 3 -12 5 14 27 -6 1 34 10=> -15 -15
9 3 -12 5 14 27 -6 1 34=> 10 10 -15
8 3 -12 5 14 27 -6 1=> 34 34 10 -15
7 3 -12 5 14 27 -6=> 1 1 34 10 -15
6 3 -12 5 14 27 -6 -6 1 34 10 -15
на (k1+1)-ое место записываем значение x1 — m[k1+1] := 100
3 -12 5 14 27 100 -6 1 34 10 -15

Итак, получили новый массив, который уже имеет N+1 элемент, его и будем выводить на экран. На экране всё это будет выглядеть следующим образом:

3 -12 5 14 27 -6 1 34 10 -15

Номер элемента, после которого вставлять, и вставляемое число

3 -12 5 14 27 100 -6 1 34 10 -15

Вставка элемента перед данным

Пример

Вставить число 100 перед пятым элементом массива.

Эта вставка немногим отличается от предыдущей: в первой сдвигали назад все элементы, стоящие после k-го, то есть с (k+1)-го, а на его место записывали новый элемент, в этой — сдвигаем все элементы с k-го, а затем на его место записываем новый,

Пусть дан следующий одномерный массив из N (N=10) элементов:

3, -12, 5, 14, 27, -6, 1, 34, 10, -15.

Надо вставить 100 перед пятым элементом массива. Тогда получим следующий массив:

3, -12, 5, 14, 100, 27, -6, 1, 34, 10, -15.

Изменим программу для этой вставки:

Program Example_43;
Const n = 10; dd = 51;
Type myarray = Array[1..n+1] Of Integer;
Var A : myarray;
x, k : Integer;

Procedure Init2(Var m: myarray);

Procedure Print1(n1: Integer; m: myarray );

Procedure Insert2(k1, x1: Integer; Var m: myarray );
Var i : Integer;
Begin
For i:=n Downto k1 Do
m[i+1]:=m[i];
m[k1]:=x1;
End;

Begin
Init2(A);
Print1 (n,A);
Writeln (‘Номер элемента, перед которым вставлять,’);
Writeln (‘ u вставляемое число ‘);
Readln (k,x);
Insert2(k,x,A);
Print1(n+1,A);
Readln;
End.

Рассмотрим на том же примере пошаговое выполнение программы. Пусть начальное заполнение массива сделано и имеется массив из десяти целых чисел:

3, -12, 5, 14, 27, -6, 1, -34, 10, -15.

Кроме того, пусть первый вывод мвссива тоже уже сделан и на экране появились 10 целых чисел. Введём номер элемента, перед которым будем вставлять новый элемент и сам этот новый элемент:

k = 5 — будем вставлять перед пятым элементом;

x = 100 — вставляемое число 100.
Сдвиг элементов
i m[1] m[2] m[3] m[4] m[5] m[6] m[7] m[8] m[9] m[10] m[11]
3 -12 5 14 27 -6 1 34 10 -15=>
10 3 -12 5 14 27 -6 1 34 10=> -15 -15
9 3 -12 5 14 27 -6 1 34=> 10 10 -15
8 3 -12 5 14 27 -6 1=> 34 34 10 -15
7 3 -12 5 14 27 -6=> 1 1 34 10 -15
6 3 -12 5 14 27=> -6 -6 1 34 10 -15
5 3 -12 5 14 27 27 -6 1 34 10 -15
на k1-ое место записываем значение x1 — m[k1] := 100
3 -12 5 14 100 27 -6 1 34 10 -15

Итак, получили новый массив, который уже имеет N+1 элемент, его и будем выводить на экран. На экране всё это будем выглядеть следующим образом:

3 -12 5 14 27 -6 1 -34 10 -15

Номер элемента, перед которым вставлять, и вставляемое число

3 -12 5 14 100 27 -6 1 -34 10 -15

Вставка нескольких элементов

Предположим, что необходимо вставлять не один элемент в массив, а по одному элементу после всех элементов с заданным свойством. Рассмотрим эту вставку на примере вставки после всех элементов с заданным свойством.

Пример

Вставить число после всех элементов массива, кратных 3.

Первое, на что необходимо обратить внимание — это описание массива: на сколько элементов может увеличиться массив? Максимальное количество элементов, после которых будет вставлен новый элемент, совпадает с количеством элементов массива, так как может случиться, что все элементы массива отвечают заданному свойству. Поэтому массив может увеличиться в два раза (это его самая большая размерность), а значит, соответствующее ему описание будет следующим:

Type myarray = Array[1..2*n] Of Integer;

Второе. Если мы будем просматривать элементы массива с начала и вставлять новый после элемента заданным свойством, то номер последнего элемента каждый раз может меняться, кроме того, будем просматриваться и новый (вставленный) элемент и его необходимо будет пропускать («перепрыгивать»), поэтому решение будет не очень эффективным.

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

Program Example-44;
Const n = 10; dd = 51;
Type myarray = Array[1.. 2*n] Of Integer;
Var A : myarray;
x, k, i :Integer;

Procedure Init2(Var m: myarray);

Procedure Print1(n1: Integer; m: myarray);

Begin
Init2 (A) Print1(n,A);
Writeln(‘ Введите вставляемое число’);
Readln(x);
k: = 0;
For i:= n Downto 1 Do
If A[i] Mod 3=0 Then Insert3 (i,x,A);
Print1 (n+k,A);
Readln;
End.

Рассмотрим выполнение программы в пошаговом режиме. Будем вставлять после всех элементов, кратных 3, число 100, то есть х = 100. Пусть дан массив из 10-ти элементов:

3, -12, 5, 14, 27, -6, 1, 34, 10, -15.

Пусть так же первый вывод массива сделан. Трассировка примера приведена в таблице 5.

Таким образом, массив увеличился на k элементов.

На экране всё это будет выглядеть следующим образом:

3 -12 5 14 27 -6 1 -34 10 -15

3 100 -12 100 5 14 27 100 -6 100 1 -34 10 -15 100

Просмотр элементов массива
A[i] mod 3 = 0 k i массив
да 0 10 3, -12, 5, 14, 27, -6, 1, 34, 10, -15
вставляем 100 после i-го (десятого)
1 10 3, -12, 5, 14, 27, -6, 1, 34, 10, -15, 100
нет 1 9 3, -12, 5, 14, 27, -6, 1, 34, 10, -15, 100
нет 1 8 3, -12, 5, 14, 27, -6, 1, 34, 10, -15, 100
нет 1 7 3, -12, 5, 14, 27, -6, 1, 34, 10, -15, 100
да 1 6 3, -12, 5, 14, 27, -6, 1, 34, 10, -15, 100
вставляем 100 после i-го (шестого)
2 6 3, -12, 5, 14, 27, -6, 100, 1, 34, 10, -15, -15, 100
да 2 5 3, -12, 5, 14, 27, -6, 100, 1, 34, 10, 10, -15, 100
вставляем 100 после i-го (пятого)
3 5 3, -12, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
нет 3 4 3, -12, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
нет 3 3 3, -12, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
да 3 2 3, -12, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
вставляем 100 после i-го (второго)
4 2 3, -12, 100, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
да 4 1 3, -12, 100, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
вставляем 100 после i-го (первого) элемента
да 5 1 3, 100, -12, 100, 5, 14, 27, 100, -6, 100, 1, 34, 10, -15, 100
На главную страницу
(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *