ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Вставка одного элементаВставлять элемент можно до или после данного элемента, номер этого элемента можно вводить с клавиатуры или искать при определенных условиях. Пусть k – это номер элемента, после которого мы должны вставить элемент х. Тогда вставка осуществляется следующим образом: · первые k элементов массива остаются без изменения, · все элементы, начиная с (k+1)-го, необходимо сдвинуть на один назад, · на место (k+1)-го элемента записываем значение х; · увеличить количество элементов в массиве на единицу. Задача. Вставить число 100 после пятого элемента массива. Рассмотрим на конкретном примере. Пусть задан следующий одномерный массив из 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 элементы. Рассмотрите процедуру вставки Insert1(m, n, Mesto, Element), которой передаются: m – массив, в котором делаем преобразования; n – количество элементов в массиве. Mesto – номер элемента, после которого надо вставить данный, Element – число, которое вставляем, Кроме того, сдвиг элементов будем начинать с последнего элемента. Program Vstavka1; Const n=10; dd=51; Type MyArray = array [1..n+1] of integer; Var A: MyArray; k, x: Integer; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure InsertMas1(Var m: MyArray; n: integer); ... {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure InsertMas2(Var m: MyArray; n: integer); ... {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure PrintMas(m: MyArray; n: integer); ... {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure Insert1(Var m: MyArray; Var n: integer; Mesto, Element: integer); Var i: integer; Begin for i:= n downto Mesto+1 do m[i+1]:= m[i]; m[Mesto+1]:= Element; Inc(n); End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Begin ... Writeln('Номер элемента, после которого вставлять > '); Readln(k); Writeln('Вставляемое число > '); Readln(x); Insert1(A, n, k, x); ... End. Задание. На основе разобранной задачи вставьте число перед некоторым заданным элементом самостоятельно. Дополните программу необходимыми операторами и комментариями и добейтесь работоспособности программы. Покажите результат работы учителю для оценки. Вставка нескольких элементов Задача. Вставить число после всех элементов массива, кратных трем. Первое, на что необходимо обратить внимание – это описание массива: на сколько элементов может увеличиться массив? Максимальное количество элементов, после которых будет вставлен новый элемент, совпадает с количеством элементов массива, так как может случиться, что все элементы массива отвечают заданному свойству. Поэтому массив может увеличиться в два раза, а значит, соответствующее ему описание будет следующим: Type MyArray[1..2*n] of Integer; Второе. Если мы будем просматривать массив с начала и вставлять новый после элемента с заданным свойством, то номер последнего элемента каждый раз может меняться, кроме того, будет просматриваться и новый (вставленный) элемент и его необходимо будет пропускать, поэтому решение будет не очень эффективным. Лучше всего просматривать массив, начиная с конца, тогда вставляемый элемент мешать не будет. Кроме того, номер последнего элемента можно будет знать (если знать, сколько элементов вставлено на данный момент), при этом просмотр будет последовательным от N-го до 1-го. Program VstavkaN; Const n=10; dd=51; Type MyArray = Array [1..2*n] of Integer; Var A: MyArray; k, x, i: Integer; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure InsertMas1(Var m: MyArray; n: integer); ... {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure InsertMas2(Var m: MyArray; n: integer); ... {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure PrintMas(m: MyArray; n: integer); ... {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure InsertN(Var m: MyArray; Var n: integer; Mesto, Element: Integer;); Var i: Integer; Begin for i:= n downto Mesto+1 do m[i+1]:= m[i]; m[Mesto+1]:= Element; Inc[n]; End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Begin ... Writeln('Вставляемое число > '); Readln(x); k:=0; for i:=n downto 1 do if A[i] mod 3=0 then InsertN(A, n, i, x); ... End. Задание. Дополните программу необходимыми операторами и комментариями и добейтесь работоспособности программы. Покажите результат работы учителю для оценки. Не нашли, что искали? Воспользуйтесь поиском:
|