- •Практикум по Турбо Паскалю
- •Первые занятия Первое знакомство с системой программирования Турбо Паскаль
- •Команды редактора
- •Задания
- •Режим помощи
- •Первая программа
- •Запуск программы
- •Сохранение программы
- •Выход из системы программирования Турбо Паскаль
- •Простейшие линейные программы
- •Арифметический квадрат. Абсолютная величина
- •Целый и логический типы данных Условный оператор
- •Логический тип данных
- •Условный оператор
- •Вложенные операторы условия
- •Целый тип данных. Цикл с параметром
- •Цикл с параметром (разбор на примере)
- •Работа с окнами. Метод пошагового выполнения программ
- •Работа с окнами
- •Решение задач с использованием цикла с параметром
- •Вопросы для обсуждения
- •Трассировка примера
- •Цикл с постусловием
- •Алгоритм Евклида
- •Вложенные циклы
- •Решение задач с использованием циклов с условием
- •Простые типы данных
- •Задания
- •Решение задач
- •Вещественный тип данных
- •Задание
- •Решение задач
- •Ограниченный, перечисляемый типы данных. Оператор варианта
- •Ограниченный тип данных
- •Оператор варианта
- •Перечисляемый тип данных
- •Решение задач
- •Описание переменных, констант и типов Раздел описания констант
- •Раздел описания переменных
- •Раздел описания типов
- •Решение задач
- •Преобразование типов. Совместимость типов
- •Задания
- •Решение задач
- •Решение задач
- •Контрольные работы Контрольная работа №1
- •Контрольная работа №2
- •Основы Паскаля
- •X y22m размер gamma alfa r15
- •Процедуры и функции
- •Описание процедур и функций
- •Файловый тип
- •Описание файлового типа
- •Подпрограммы
- •Процедура Assign
- •Процедура Reset
- •Процедура Rewrite
- •Процедура Write
- •Процедура Close
- •Функция FileSize
- •Функция FilePos
- •Текстовые файлы
- •Описание текстового файла
- •Консоль
- •Устройства
- •Соответствие текстовых файлов и логических устройств
- •Операции над текстовыми файлами
- •Процедура Assign
- •Процедура Reset
- •Процедура Rewrite
- •Процедура Append
- •Процедура Close
- •Функция Eof
- •Функция SeekEof
- •Блочные файлы Описание типа блочного файла
- •Процедура BlockRead
- •Процедура BlockWrite
- •Операции ввода-вывода
- •Регулярные типы данных Одномерные массивы. Работа с элементами
- •Способы задания одномерных массивов
- •Работа с элементами массива (разбор на примерах)
- •Методы работы с элементами одномерного массива Изменение значения некоторых элементов
- •Создание массива
- •Работа с несколькими массивами
- •Удаление элементов из одномерного массива Удаление элемента
- •Вставка элементов в одномерный массив Вставка одного элемента
- •Вставка нескольких элементов
- •Перестановка элементов массива
- •Перестановка части массива
- •Найти сумму элементов
- •Работа с несколькими массивами
- •Двумерный массив. Работа с элементами Изменение значений некоторых элементов, удовлетворяющих заданному свойству
- •Заполнение двумерного массива по правилу.
- •Вставка и удаление элементов двумерного массива
- •Перестановка элементов массива
- •Комбинированный тип данных (записи)
Вставка элементов в одномерный массив Вставка одного элемента
Вставлять элемент можно до или после данного элемента, номер этого элемента можно вводить с клавиатуры или искать при определённых условиях. Рассмотрим вставку элемента после элемента с данным номером, номер этого элемента будем вводить с клавиатуры.
Вставка элемента после элемента с заданным номером.
Пример
Вставить число 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; {x - вставляемое число, k - номер элемента, после которого вставляем}
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; {вставка элемента на место после k1-го} End;
Begin Init2(A); Print1(n,A) {первый вывод начального массива из n элементов} Writeln (' Номер элемента, после которого вставлять,'); Writeln ('и вставляемое число'); Readln (k,x); {ввод номера и вставляемого элемента} Insert1(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.
Таблица 3
Сдвиг элементов |
|||||||||||
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
Номер элемента, после которого вставлять, и вставляемое число
5 100
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; {x - вставляемое число; k - номер элемента, после которого вставляем}
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; {вставка x1 на место k1-го} 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. |
Таблица 4
Сдвиг элементов |
|||||||||||
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
Номер элемента, перед которым вставлять, и вставляемое число
5 100
3 -12 5 14 100 27 -6 1 -34 10 -15
