
- •Практикум по Турбо Паскалю
- •Первые занятия Первое знакомство с системой программирования Турбо Паскаль
- •Команды редактора
- •Задания
- •Режим помощи
- •Первая программа
- •Запуск программы
- •Сохранение программы
- •Выход из системы программирования Турбо Паскаль
- •Простейшие линейные программы
- •Арифметический квадрат. Абсолютная величина
- •Целый и логический типы данных Условный оператор
- •Логический тип данных
- •Условный оператор
- •Вложенные операторы условия
- •Целый тип данных. Цикл с параметром
- •Цикл с параметром (разбор на примере)
- •Работа с окнами. Метод пошагового выполнения программ
- •Работа с окнами
- •Решение задач с использованием цикла с параметром
- •Вопросы для обсуждения
- •Трассировка примера
- •Цикл с постусловием
- •Алгоритм Евклида
- •Вложенные циклы
- •Решение задач с использованием циклов с условием
- •Простые типы данных
- •Задания
- •Решение задач
- •Вещественный тип данных
- •Задание
- •Решение задач
- •Ограниченный, перечисляемый типы данных. Оператор варианта
- •Ограниченный тип данных
- •Оператор варианта
- •Перечисляемый тип данных
- •Решение задач
- •Описание переменных, констант и типов Раздел описания констант
- •Раздел описания переменных
- •Раздел описания типов
- •Решение задач
- •Преобразование типов. Совместимость типов
- •Задания
- •Решение задач
- •Решение задач
- •Контрольные работы Контрольная работа №1
- •Контрольная работа №2
- •Основы Паскаля
- •X y22m размер gamma alfa r15
- •Процедуры и функции
- •Описание процедур и функций
- •Файловый тип
- •Описание файлового типа
- •Подпрограммы
- •Процедура Assign
- •Процедура Reset
- •Процедура Rewrite
- •Процедура Write
- •Процедура Close
- •Функция FileSize
- •Функция FilePos
- •Текстовые файлы
- •Описание текстового файла
- •Консоль
- •Устройства
- •Соответствие текстовых файлов и логических устройств
- •Операции над текстовыми файлами
- •Процедура Assign
- •Процедура Reset
- •Процедура Rewrite
- •Процедура Append
- •Процедура Close
- •Функция Eof
- •Функция SeekEof
- •Блочные файлы Описание типа блочного файла
- •Процедура BlockRead
- •Процедура BlockWrite
- •Операции ввода-вывода
- •Регулярные типы данных Одномерные массивы. Работа с элементами
- •Способы задания одномерных массивов
- •Работа с элементами массива (разбор на примерах)
- •Методы работы с элементами одномерного массива Изменение значения некоторых элементов
- •Создание массива
- •Работа с несколькими массивами
- •Удаление элементов из одномерного массива Удаление элемента
- •Вставка элементов в одномерный массив Вставка одного элемента
- •Вставка нескольких элементов
- •Перестановка элементов массива
- •Перестановка части массива
- •Найти сумму элементов
- •Работа с несколькими массивами
- •Двумерный массив. Работа с элементами Изменение значений некоторых элементов, удовлетворяющих заданному свойству
- •Заполнение двумерного массива по правилу.
- •Вставка и удаление элементов двумерного массива
- •Перестановка элементов массива
- •Комбинированный тип данных (записи)
Вставка и удаление элементов двумерного массива
Вставка строки
Мы уже рассматривали такие действия для одномерных массивов. Обобщим для двумерных.
Пример 12
Вставить строку из нулей после строки с номером k.
Решение
Для решения этой задачи необходимо:
Первые k строк оставить без изменения.
Все строки после k-й сдвинуть на одну назад, это лучше начать с последней строки и идти до (k+1)-й.
Элементы строки k+1 присвоить заданное значение.
Кроме того, необходимо изменить размерность массива. Так как мы вставляем строку, то число строк будет на одну больше:
Const n = 5; m = 7; Type dmyarray = Array[1..n+1, 1..m] Of Integer; Var A : dmyarray;
Теперь опишем процедуру вставки:
Procedure Insert(k1: Integer; Var x: dmyarray); Var i, j : Integer; Begin For i:=n Downto k1+1 Do For j:=1 To m Do x[i+1,j]:=x[i,j]; {элементу столбца j присваиваем элемент этого же столбца, но из предыдущей строки} End;
Так как число строк меняется, то процедуру Print надо изменить, она должна выводить данное количество строк, начиная с первой:
Procedure Print1(n1: Integer; x: dmyarray); Var i, j : Integer; Begin For i:=1 To n1 Do Begin For j:=1 To m Do Write(x[i,j]:4); Writeln; End; End
Часть основной программы будет такой:
Begin Init(A); Print(n,A); Writeln('Введите номер строки, после которой вставляем'); Readln(k); Insert(k,A); Print(n+1,A); Readln; End.
Примечания:
Если необходимо вставить после строки, удовлетворяющей некоторому условию, то надо лишь найти её номер и задача сводится к решению первого примера.
Если надо вставлять после всех строк с заданным условием, то надо увеличить размерность по строкам, и если строка удовлетворяет условию, то к ней применять вставку. При этом надо заметить, что лучше просматривать строки с последней и ввести счётчик вставленных строк.
Вставка перед строкой с данным номером изменится только тем, что сдвигать назад надо не с (k+1)-й строки, а с k-й.
Если надо вставлять столбцы, то размерность увеличивается для столбцов, а всё остальное практически не меняется: надо сдвинуть столбцы назад и на данное место записать новый столбец.
Пример 13
Удалить строку с номером k.
Решение
Для того, чтобы удалить строку с номером k, необходимо:
|
Сдвинуть все строки, начиная с данной, на одну вверх. |
|
Последнюю строку "обнулить", то есть всем элементам последней строки присвоить значение 0. |
Описание массивов оставим прежнее (для размерности n*m). Также в программе будем использовать процедуру вывода Print1 из предыдущего параграфа. Будем выводить на экран сначала все строки, а второй раз, после удаления, на одну меньше. Теперь опишем процедуру удаления строки с данным номером:
Procedure Delete(k1: Integer; Var x: dmyarray); Var i, j : Integer; Begin For i:=k1 To n-1 Do For j:=1 To m Do x[i,j]:=x[i+1,j]; For j:=1 To m Do x[n,j]:=0 End;
Примечания:
Задачу об удалении строки с заданным условием можно решить этим же способом, достаточно только найти её номер, а в случае отсутствия такой строки можно просто сообщить об этом и закончить программу.
Ещё одну задачу можно решить, используя данную процедуру - удаление всех строк, которые отвечают некоторым свойствам - просматриваем строки от последней до первой, если строка удовлетворяет требованиям, то удаляем её и переходим к следующей, иначе сразу переходим. Для эффективного вывода надо ввести счётчик, который учитывает количество удалённых строк, а при выводе изменённого массива передаём процедуре Print1 значение n-k, где k - это счётчик.