Задачи для самостоятельного решения
- Удалить первый отрицательный элемент, если таковой имеется.
- Удалить все отрицательные элементы.
- Удалить все элементы, большие данного числа А (А вводить с клавиатуры).
- Удалить все четные элементы, стоящие на нечетных местах.
- Удалить все повторяющиеся элементы, оставив только их первые вхождения, то есть получить массив различных элементов.
- Удалить последний четный элемент.
- Удалить все элементы, кратные 3 или 5.
- Удалить все элементы, начиная с k1-го по k2-ой. Сделать проверку корректности ввода значений k1 и k2, если ввод некорректный, то вывести сообщение об ошибке и закончить работу.
Вставка элементов в одномерный массив.
Вставка одного элемента
Вставлять элемент можно до или после данного элемента, номер этого элемента можно вводить с клавиатуры или искать при определенных условиях.
Пусть 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.
|
Задание. Дополните программу необходимыми операторами и комментариями и добейтесь работоспособности программы. Покажите результат работы учителю для оценки.
Задачи для самостоятельного решения
- Вставить элемент после первого отрицательного элемента.
- Вставить элемент перед отрицательным последним элементом.
- Вставить два элемента: первый - после максимального элемента, второй - перед максимальным элементом.
- Вставить по одному элементу перед всеми элементами, кратными заданному числу.
- Вставить по одному элементу перед всеми отрицательными элементами.
- Вставить два элемента: первый - после всех элементов, больших данного числа Р, а второй - перед всеми элементами, большими данного числа Р (Р вводить с клавиатуры).
- Вставить число А перед всеми элементами, большими А, а число В - после всех элементов, меньших его.
|
| Перестановка элементов массива.
|
|
Перестановка двух элементов
Задача. Поменять местами два элемента массива с номерами k1 и k2.
Рассмотрите процедуру, с помощью которой эта задача легко решается.
| Procedure Obmen2(Var m: MyArray; n, k1, k2: integer;); Var x: integer; Begin x:=m[k1]; m[k1]:= m[k2]; m[k2]:= x; End;
|
Перестановка части массива
Задача. Дан одномерный массив А, состоящий из 2n элементов. Поменять местами первую и вторую его половины
Задание. Оформите решение этой задачи, применив процедуру обмена значений Obmen2, рассмотренную выше.
Заметим лишь, что Вы должны поменять местами элементы с номерами 1 и n+1, 2 и n+2 и т.д., последняя пара - n и 2n, а значит, обмен происходит по правилу: элемент с номером i меняется местами с элементом с номером n+i. Эту закономерность следует применить в организации обращения к процедуре обмена. Например, так
| for i:= 1 to n do Obmen2(A, 2*n, i, i+n,);
|
Задание. Выберите с учителем задачи для самостоятельного решения из предложенного списка:
- Поменять местами:
а) первый элемент и максимальный;
б) второй и минимальный;
в) первый и последний из отрицательных чисел. - Дан одномерный массив А, состоящий из 2n элементов. Поменять его половины следующим образом: первый элемент поменять с последним, второй с предпоследним и так далее.
- Дан одномерный массив В, состоящий из 2n элементов. Переставить его элементы по следующему правилу:
а) b[n+1], b[n+2],..., b[2n],b[1], b[2],..., b[n];
b) b[n+1], b[n+2],..., b[2n],b[n], b[n-1],..., b[1];
c) b[1], b[n+1],b[2], b[n+2],..., b[n], b[2n];
d) b[2n], b[2n-1],..., b[n+1],b[1], b[2],..., b[n]; - Дан одномерный массив. Переставить в обратном порядке элементы массива, расположенные между минимальным и максимальным элементами.
Воспользуйтесь поиском по сайту: