- •Ответственный за выпуск: Бивойно п.Г. , декан факультета электронных и информационных технологий, канд. Техн. Наук, доцент
- •Содержание
- •Лабораторная работа № 7. Одномерные массивы
- •Краткие теоретические сведения о массивах
- •7.1.1Понятие массив.
- •7.1.2Объявление массива.
- •7.1.3Передача массивов в процедуры и функции
- •7.1.4Операции с массивами.
- •Типовые процедуры и функции для работы с массивами
- •7.1.5Описание типа учебного массива
- •7.1.6Процедуры создания, ввода и вывода массивов
- •Процедура создания случайного массива
- •Процедура ввода массива из строки текста
- •Процедура ввода массива из компонента tMemo
- •Процедура ввода массива с помощью функции InputBox
- •Функция преобразования массива в строку символов
- •Процедура вывода массива в компонент tMemo
- •7.1.7Обработка массивов
- •Функция вычисления суммы элементов массива
- •Процедура определения минимального, максимального, и их индексов в массиве
- •Функция определения позиции элемента в массиве
- •Процедура удаления элементов из массива
- •Процедура переворота массива
- •Процедура циклического сдвига части элементов массива влево
- •Процедура формирования массива накопленных значений
- •Задание для самостоятельной работы
- •Содержание отчета.
- •Контрольные вопросы
- •Лабораторная работа № 8. Сортировка массивов
- •Методы сортировки массивов
- •7.1.8Сортировка выбором.
- •Пример сортировки массива по возрастанию методом выбора
- •Процедура сортировки массива методом выбора
- •7.1.9Сортировка обменом (метод пузырька)
- •Пример сортировки массива по возрастанию методом обмена
- •Процедура сортировки массива методом обмена
- •7.1.10Сортировка вставкой или включением.
- •Пример сортировки массива по возрастанию методом вставки
- •Процедура сортировки методом вставки
- •Сортировка по усложненным правилам
- •Обработка упорядоченных массивов
- •7.1.11Вставка элемента в отсортированный массив
- •7.1.12Слияние двух отсортированных массивов в один
- •7.1.13Поиск позиции элемента в отсортированном массиве
- •7.1.14Удаление элемента из отсортированного массива
- •Задание для самостоятельной работы
- •7.1.15Описание матриц
- •7.1.16Использование компонента StringGrid для ввода-вывода матриц
- •7.1.17 Тотальная обработка данных в матрицах
- •7.1.18Выборочная обработка матрицы
- •7.1.19Перестановки элементов матрицы
- •7.1.20Удаление и вставка элементов матрицы
- •7.1.21Сортировка элементов матрицы
- •Задание для самостоятельной работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 10. Работа с записями
- •Краткие теоретические сведения
- •7.1.22Объявление типа для записи
- •7.1.23Массивы записей
- •7.1.24Поля записей как массивы
- •7.1.25Сортировка массивов записей
- •7.1.26Ввод-вывод записей
- •Создание проекта «Результаты аттестации»
- •7.1.27Интерфейс пользователя для проекта
- •7.1.28Определение типов данных
- •7.1.29Инициализация интерфейса
- •7.1.30Добавление строки в таблицу
- •7.1.31Удаление строки из таблицы
- •7.1.32Процедура создания массива записей по содержимому StringGrid
- •7.1.33Процедура отображения массива в компоненте StringGrid
- •7.1.34Процедура сортировки массива записей по группе и фамилии
- •7.1.35Сортировка записей по количеству неудовлетворительных оценок и среднему баллу
- •7.1.36Выборка студентов какой-нибудь группы, имеющих средний балл выше 4
- •7.1.37Подсчет числа студентов, имеющих более 2-х неудовлетворительных оценок и вывод упорядоченного списка этих студентов
- •Задание для самостоятельной работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 11. Работа с типизироваными файлами
- •Краткие теоретические сведения
- •7.1.38Объявление файловой переменной
- •7.1.39Назначение файла файловой переменной
- •7.1.40Открытие файла
- •7.1.41Текущая позиция файла
- •7.1.42Чтение данных из файла
- •7.1.43Запись данных в файл
- •7.1.44Обрезка “хвоста” файла
- •7.1.45Закрытие и удаление файлов
- •Перечень основных процедур и функций для работы с типизированными файлами
- •Создание проекта «Результаты аттестации»
- •7.1.46Требования к проекту
- •7.1.47Интерфейс пользователя для проекта
- •7.1.48Определение типов данных
- •7.1.49Настройка интерфейса пользователя
- •7.1.50Вспомогательные процедуры для работы с файлом Процедура выбора имени файла
- •Процедура открытия файла
- •Процедура вывода файла в StringGrid
- •7.1.51Процедуры работы со StringGrid1
- •7.1.52Процедуры реализации пунктов меню fileMenu Добавление данных из StringGrid1 в файл
- •Поиск записи по фамилии
- •Удаление записи по фамилии
- •Сохранение файла под другим именем
- •7.1.53Процедуры для работы с упорядоченными файлами Процедура сортировки файла
- •Поиск записи в отсортированном файле
- •Добавление записи в отсортированный файл
- •Удаление записи из отсортированного файла
- •7.1.54Процедуры реализации пунктов меню sortMenu Реализация пункта меню «Сортировка файла по фамилиям»
- •Реализация пункта меню «Поиск студента по фамилии»
- •Реализация пункта меню «Добавление в упорядоченный файл из StringGrid1»
- •Реализация пункта меню «Удаление записи из отсортированного файла»
- •Задание для самостоятельной работы
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 12. Работа с текстовыми файлами
- •Краткие теоретические сведения
- •7.1.55Объявление файловой переменной для текстового файла
- •7.1.56Связывание файловой переменной с конкретным файлом
- •7.1.57Открытие файла
- •Создание нового файла
- •Открытие файла для чтения
- •Открытие файла для дополнения
- •7.1.58Текущая позиция файла
- •7.1.59Записи данных в файл.
- •7.1.60Чтение данных из файла
- •Особенности чтения чисел из текстового файла
- •Особенности чтения данных типа String
- •Особенности чтения и записи символов
- •7.1.61Закрытие и удаление файлов
- •Перечень основных процедур для работы с текстовыми файлами
- •Общая схема работы с текстовым файлом
- •7.1.62Примеры работы с текстовыми файлами
- •Пример ввода-вывода при решении простейшей задачи
- •Пример добавления данных из одного файла к другому
- •Пример чтение из файла в поле Memo
- •Пример ввода-вывода при работе с массивом
- •Пример ввода-вывода при работе с матрицей
- •Пример ввода-вывода при работе с записями
- •Задания для самостоятельной работы
- •Содержание отчета
- •Контрольные вопросы
- •Рекомендованая литература
Создание нового файла
Первый способ заключается в том, что файл создается заново, независимо от того, существовал он ранее или нет. Используя этот способ, нужно помнить, что если открываемый файл содержал какие-то данные, то они будут безвозвратно потеряны. Учитывая то обстоятельство, что в текстовом файле информация может обрабатываться только последовательно, можно прийти к выводу, что при открытии файла таким способом в него можно только писать. Читать из него просто нечего.
Реализуется такой способ открытия файла процедурой Rewrite.
Обращение к этой процедуре выглядит так:
Rewrite ( <файловая переменная>);
Ниже приведен пример вызова процедуры Rewrite:
Rewrite (f1) ;
Открытие файла для чтения
Второй способ открытия файла, предполагает, что файл существует, и информация из него будет считываться.
Реализуется такой способ открытия файла процедурой Reset.
Обращение к этой процедуре выглядит так:
Reset ( <файловая переменная>);
Ниже приведен пример вызова процедуры Reset:
Reset (f1) ;
Процедура Reset устанавливает файл в начало, поэтому эту процедуру часто применяют для уже открытых файлов с тем, чтобы начать чтение файла с начала.
Хотя вызов процедуры Reset одинаков как для текстовых, так и для типизированных файлов, но возможности обработки файлов при таком способе открытия неодинаковы. Текстовый файл при таком способе открытия можно только читать, тогда как типизированный, можно не только читать, но можно и записывать в него.
Открытие файла для дополнения
Третий способ открытия файла используется в тех случаях, когда к существующему файлу необходимо добавить какой то текст. Добавление возможно только в конец файла.
Реализуется такой способ открытия файла процедурой Append.
Обращение к этой процедуре выглядит так:
Append ( <файловая переменная>);
Ниже приведен пример вызова процедуры Append:
Append (f1) ;
Следует заметить, что при работе с типизированными файлами процедура Append не используется. В этом нет необходимости, так как для добавления записей в конец типизированного файла достаточно указатель файловой позиции переместить в конец файла и после этого производить запись, независимо от режима открытия файла.
7.1.58Текущая позиция файла
При работе с текстовым файлом, так же как и при работе с типизированным, используется понятие «текущая позиция файла». В текстовом файле под «текущей позицией файла» подразумевается то место в файле, откуда будет продолжаться чтение, или откуда начнется запись при очередном обращении к файлу. Фактически, это номер очередного байта в файле, но в Object Pascal нет доступа к этой позиции текстового файла.
7.1.59Записи данных в файл.
Как было сказано выше, запись данных в текстовый файл возможна в случае открытия файла с помощью процедур Rewrite или Append. Напомним, что при открытии файла с помощью процедуры Rewrite текущая позиция файла находится в начале файла, а при открытии с помощью процедуры Append текущая позиция находится в конце файла.
Запись данных в текстовый файл осуществляется при помощи инструкций write и writeln.
В общем виде запись этих инструкций выглядит так:
write( f , a1 , a2 .. an );
writeLn( f , a1 , a2 .. an );
В этой записи f – файловая переменная; a1 , a2 .. an – это список параметров вывода. Параметром вывода может быть переменная одного из простых типов, константа или выражение. Каждый параметр может иметь спецификаторы вывода, которые определяют количество позиций выделяемых в файле для выводимого параметра и способ вывода значений параметров. Спецификаторы в виде целых числе записываются после параметра через вертикальные двоеточия.
В общем случае параметр вывода со спецификаторами может иметь такую форму:
<выводимое выражение>[: <minWidth>[:<decPlaces>]] , где minWidth, если присутствует, то указывает минимальную ширину поля вывода, а decPlaces используется для вывода значений вещественных чисел и задает количество знаков после запятой.
Использование спецификаторов в процедуре write подобно использованию спецификаторов в функции format.
Рассмотрим простейший пример:
v := 12,456
write(f, v : 6: 2);
Эта инструкция запишет значение переменной v в текстовый файл в таком виде: 12,45 – т.е. для строкового представления этого числа отведется 6 позиций и для десятичных знаков после запятой – 2 позиции.
Ниже приводится еще один пример использования процедуры write со спецификаторами для вывода значения числа π, его квадрата и корня из этого числа.
write (t,'-пи =',-pi,', его квадрат =',sqr(pi):6:2,', и корень =',sqrt(pi):3);
Результатом выполнения этой процедуры будет строка символов, приведенная ниже.
-пи =-3.14159265358979E+0000, его квадрат = 9.87, и корень = 1.8E+0000
Проанализировав эту строку, можно заметить влияние спецификаторов на способ вывода чисел.
Рассмотренные выше примеры свидетельствует о том, что вывод информации в текстовый файл существенно отличается от вывода в типизированный файл.
При выводе информации в типизированный файл параметром вывода может быть только переменная, и только одна. Кроме того, не происходит преобразования информации. Данные просто копируются из памяти в файл.
При выводе в текстовый файл параметров может быть сколько угодно и каждый из них перед выводом вычисляется и преобразуется в текст. Преобразование производится так как, например, для вещественных чисел вызывается функция floatToStr или функция format.
Различие между инструкциями write и writeLn состоит в том, что инструкция writeLn после занесения в файл всех значений, указанных в списке параметров, записывает в файл символ перехода на новую строку - EOLN (новая строка).
При вызове процедуры writeLn список параметров может быть пустым. В этом случае в файл передается пустая строка
Фрагмент кода, в котором осуществляется запись содержимого поля Memo1 в файл с именем ‘Primer.txt’ в режиме перезаписи, с использованием процедуры writeLn представлен ниже.
begin
assignFile(f, ‘Primer.txt’);
rewrite(f); // открыть для перезаписи
// Запись в файл
for i:=0 to Memo1.Lines.Count do writeln(f, Memo1.Lines[i]);
closeFile(f);
End;
После выполнения этого фрагмента кода в текстовом файле появится копия содержимого компонента Memo.