
- •Обработка одномерных массивов на языке программирования turbo pascal Учебное пособие для студентов
- •Оглавление
- •Введение
- •Теоретический материал по массивам Понятие массива
- •Индексы массива
- •Представление массива в памяти
- •Пользовательский тип – массив
- •Одномерные и n-мерные массивы
- •Двумерные массивы
- •Основные алгоритмы обработки массивов Общие замечания
- •Ввод/вывод массива
- •Вычисление суммы и среднего арифметического элементов массива
- •Поиск максимального/минимального элемента массива
- •Подсчет количества элементов, удовлетворяющих заданному условию
- •Удаление элемента из массива
- •Вставка новых элементов в массив
- •Удаление нескольких элементов массива
- •Обработка нескольких массивов
- •Проверка соседних элементов массива
- •Методы сортировок массивов Сортировка массивов
- •Сортировка методом вставки
- •Сортировка методом выбора
- •"Пузырьковая" сортировка
- •Быстрая сортировка
- •Примеры решения задач на сортировку массивов
- •Задания для самостоятельного решения Вариант №1
- •Вариант №2
- •Вариант №3
- •Вариант №4
- •Вариант №5
- •Вариант №6
- •Вариант №7
- •Вариант №8
- •Вариант №9
- •Вариант №10
- •Вариант №11
- •Вариант №12
- •Вариант №13
- •Вариант №14
- •Вариант №15
- •Список используемой литературы
- •420012, Казань, ул. Чехова, 36
Удаление элемента из массива
Пример 9: Удалить из массива 1-ый элемент.
Удаление элемента заключается в:
1. сдвиге элементов, стоящих правее удаляемого влево;
2. уменьшении количества элементов массива n на количество удаляемых элементов.
Пример исходного массива A:
-
5
3
9
4
-5
11
52
Массив после удаления первого элемента:
-
3
9
4
-5
11
52
Сдвиг элементов выполняется так:
1. Начиная с удаляемого элемента, копируем содержимое элемента, стоящего правее в текущий элемент: A[i]:=A[i+1].
2. Переходим к следующему элементу вправо: i:=i+1.
3. Заканчиваем сдвиг, когда i=n-1, так как i+1 при i=n-1 равен n.
Фрагмент программы:
…………………………….
{1 - сдвигаем элементы на одну позицию вправо}
{вначале i:=1, потому что надо удалить 1-ый элемент}
for i:=1 to n-1 do
A[i]:=A[i+1];
{2 - уменьшаем количество элементов в массиве}
n:=n-1;
…………………………….
Пример 10: Удалить из массива максимальный элемент массива.
Для этого надо:
1. Найти индекс максимального элемента.
2. Удалить элемент с найденным индексом.
Пример исходного массива A:
-
5
3
9
94
-5
11
52
Массив после удаления максимального элемента:
-
5
3
9
-5
11
52
Фрагмент программы:
Var {дополнительные переменные}
imax:IndexEl; {индекс максимального элемента}
…………………………….
Begin
…………………………….
{1 - ищем индекс максимального элемента массива}
imax:=1; {вначале imax указывает на первый элемент}
{в цикле начиная со 2-го элемента}
for i:=2 to n do
{сравниваем i-ый элемент с максимальным на текущий момент времени, и если i-ый элемент больше максимального, то максимальным становится i-ый элемент}
if A[i]>A[imax] then imax:=i;
{2 - удаляем элемент массива с индексом imax}
for i:=imax to n-1 do
A[i]:=A[i+1];
dec(n); {уменьшаем n на 1}
…………………………….
Замечание: в ТР имеются процедуры увеличения и уменьшения
переменной целого типа.
Inc - увеличение значения переменной.
Вид вызова для целого X
Inc(x); x:=x+1;
Inc(x,n); x:=x+n;
где x - переменная целого типа;
n - целочисленное выражение.
В первом случае переменной x присваивается следующее значение (например, x была равна 10, тогда после выполнения inc(x) x равна 11). Таким образом, можно сказать, что запись inc(x) эквивалентна записи x:=x+1.
Можно также сказать, что запись inc(x,n) эквивалентна записи x:=x+n.
Dec – уменьшение значения переменной.
Вид вызова Для целого X
Dec(x); x:=x-1;
Dec(x,n); x:=x-n;
Вставка новых элементов в массив
Пример 11: В массив после максимального элемента вставить элемент, равный 0.
Пример исходного массива A:
-
1
2
5
1
0
1
2
максимальный элемент A[3]=5
Массив после вставки элемента:
-
1
2
5
0
1
0
1
2
Алгоритм вставки элемента в массив:
1. Сдвинуть элементы от позиции вставляемого элемента в конец.
2. В позицию вставляемого элемента вписать нужное значение.
3. Количество элементов n увеличить на 1 .
Общий алгоритм программы следующий:
1 . Введем массив А.
2 . Найдем индекс max элемента.
3 . Вставим после max 0.
4 . Выведем получившийся массив.
Приведем полный текст программы:
{Пример обработки одномерного массива}
{ Задание: В массив после максимального элемента вставить элемент, равный 0}
Program InsertExample;
Const {определение констант}
maxN = 20; {максимально возможное количество элементов в массиве}
Type {определение типов}
IndexEll = 1 .. maxN; {индексы массива лежат в интервале от 1 до maxN}
masInt = array[interval] of integer; {массив целых чисел, содержащий до maxN элементов}
Var
a:masInt; {массив}
n:integer; {количество элементов в массиве}
i:IndexEl; {переменная для сканирования массива}
max: IndexEl; {номер max элемента массива}
Begin
{1 - ввод массива - генерируем случайные элементы}
randomize;
n:=random(6)+5; {n в интервале 5..10}
for i:=1 to n do
A[i]:=random(19)-9; {Генерируем элементы массива}
{ каждый элемент имеет значение в интервале -9..9}
{2 - ищем индекс max элемента}
max:=1;
for i:=2 to n do
if A[i]>A[max] then max:=i;
{3- вставляем 0 после максимального элемента}
{сначала сдвигает “хвост” массива вправо}
for i:=n downto max+1 do
A[i+1]:=A[i];
{заносим в следующий за максимальным элемент 0}
A[max+1]:=0;
{увеличиваем количество элементов массива}
Inc(n);
{4 - выводим массив}
writeln('Массив А после вставки:');
for i:=1 to n do
write(A[i]:3);
readln; {ждем нажатия клавиши Enter}
End.
Данная программа демонстрирует модульный подход к решению задач - задача разбивается на подзадачи, полученные подзадачи решаются отдельно. Если подзадача не решается непосредственно, то она снова разбивается на подзадачи и т.д. Такой подход называется "программирование сверху вниз".
Замечание: данная программа таит в себе ошибку. Если n=20, то после вставки еще одного элемента n станет равной 21, и, скорее всего, программа повиснет (потому что элементов в массиве может быть НЕ БОЛЬШЕ 20). Следовательно, при вставке элементов необходимо следить, чтобы было n<=maxN .