- •Занятие № 1. Алгоритм. Язык и среда программирования.
- •Занятие № 2. Язык программирования Pascal.
- •Занятие № 3. Переменные. Простейшие линейные алгоритмы.
- •Занятие № 4. Стандартные операции ввода/вывода.
- •Занятие № 5. Ветвление с простым условием.
- •Занятие № 6. Составные условия.
- •Занятие № 7. Множественное ветвление. Безусловный переход.
- •Занятие № 8. Самостоятельная работа. Занятие № 9. Цикл со встроенным счётчиком (с параметром).
- •Занятие № 10. Стандартные функции. Преобразование типов. Операции над строковым типом данных.
- •Занятие № 11. Циклы с условием
- •Занятие № 12. Самостоятельная работа. Занятие № 13. Введение в машинную графику в Pascal.
- •Занятие № 14. Вывод текста в графическом режиме.
- •Занятие № 15. Простейшая анимация.
- •Занятие № 16. Построение графиков функций.
- •Занятие № 17. Самостоятельная работа. Занятие № 18. Вспомогательный алгоритм. Процедуры и функции пользователя.
- •Занятие № 19. Структурные типы данных. Понятие линейного массива.
- •1. Заполнение вводом с клавиатуры:
- •4. Описание предустановленных массивов.
- •5. Заполнение данными из внешнего файла.
- •Занятие № 20. Простейшие задачи на операции с линейным массивом.
- •1. Подсчёт количества элементов удовлетворяющих некоторому условию.
- •3. Раскрашивание массива.
- •4. Поиск минимального и максимального элементов.
- •5. Копирование и перестановка элементов. Занятие № 21. Сортировка линейного массива.
- •1. Сортировка прямого обмена.
- •2. Обменная сортировка (метод «Пузырька»).
- •Занятие № 22. Понятие двумерного массива.
- •Занятие № 23. Решение задач на тему «Двумерные массивы».
- •Занятие № 24. Самостоятельная работа. Занятие № 25. Множества.
- •В этом случае описано множество a, которое может включать в себя элементы – целые числа в интервале от 1 до 12. Существует возможность описания константных множеств:
- •Задача: составить программу, определяющую количество дней в указанном месяце, указанного года.
- •Занятие № 26. Записи.
- •Занятие № 27. Файлы данных. Текстовые файлы.
- •Занятие № 28. Решение задач (текстовый файл). Занятие № 29. Файлы данных. Типизированные файлы.
- •Занятие № 30. Самостоятельная работа.
- •Занятие № 31. Библиотеки пользователя.
- •Занятие № 32. Некоторые процедуры и функции модуля dos.
- •Занятие № 33. Рекуррентные последовательности и формулы. Рекурсивные алгоритмы.
- •Занятие № 35. Элементы объектно-ориентированного программирования.
Занятие № 32. Некоторые процедуры и функции модуля dos.
На этом занятии мы более детально познакомимся с процедурами, функциями и типами ещё одного модуля интегрированного в стандартный файл системы Turbo Pascal turbo.tpl. Эта библиотека носит имя DOS, так как обеспечивает доступ к некоторым функциям дисково-операционной системы. Не забудем, первым делом, подключить эту библиотеку в описательной части программы:
uses dos;
Первые две процедуры позволят вам удалить и переименовать существующий файл. Для удаления используется процедура:
erase(<файловая переменная>);
Соответственно, первым делом следует ассоциировать файловую переменную с реальным файлом, а затем производить удаление:
assign(<файловая переменная>,<путь и имя файла>);
erase(<файловая переменная>);
Следует помнить, что невозможно удаление открытого файла.
Еще одна процедура, действующая аналогичным образом, позволит вам переименовать файл:
rename(<файловая переменная>, <новое имя файла>);
Теперь рассмотрим две функции, позволяющие определить информационный объем общего и занятого пространства соответственно:
DiskSize(<код устройства>): Longint;
Функция возвращает полный информационный объём диска в byte. <код устройства> - это число, где 0 – устройство по умолчанию, 1 – диск A, 2 – диск B и т.д. Работа этой функции ограничена типом результата возвращаемого ею. Не сложные подсчёты покажут, что вам не удастся определить правильный информационный объём диска превышающего 2 Gb. Например, если мы хотим увидеть информационный объём диска D в Mb, то можно воспользоваться следующей строкой:
WriteLn(DiskSize(4)/1024/1024:0:2);
Ещё одна функция возвращает объём свободного дискового пространства:
DiskFree(<код устройства>): Longint;
Часто также встречается задача просмотра содержимого того, либо иного каталога. Решается она с помощью следующих двух процедур. Сначала следует воспользоваться процедурой:
FindFirst(<путь>; <атрибуты файлов>; <переменная типа SearchRec>);
которая позволяет найти первый удовлетворяющий требованиям файл из списка файлов. У неё следующие параметры:
<путь> - путь, по которому осуществляется поиск файлов, <атрибуты файлов> - сумма атрибутов которыми должны быть наделены искомые файлы:
-
Зарезервированная константа
Обозначение
Шестнадцатеричное значение
ReadOnly
Только для чтения
$01
Hidden
Скрытый
$02
SysFile
Системный
$04
VolumeID
Метка тома
$08
Directory
Каталог
$10
Archive
Архивный
$20
AnyFile
Все файлы, метки тома и каталоги
$3F
Последний параметр – это переменная куда помещаются результаты поиска. Она должна быть обязательно зарегистрированного в модуле DOS типа SearchRec, который выглядит следующим образом:
type SearchRec = record
Fill: array[1..21] of Byte;
Attr: Byte;
Time: Longint;
Size: Longint;
Name: array[0..12] of Char;
end;
Fill – поле содержит служебную информацию DOS, Attr – код атрибутов найденного первого файла, Time – дата и время создания файла в специальном упакованном 4‑х байтовом формате, Size – информационный объём в byte, Name – имя файла.
Для распаковки упакованных даты и времени используется процедура:
UnpackTime(<переменная типа Longint>;<переменная типа DateTime>);
Тип DateTime также описан в модуле DOS и имеет следующую структуру:
type DateTime = record
Year, Month, Day, Hour, Min, Sec: Word;
end;
О назначении этих полей нетрудно догадаться.
Для последующего поиска файлов с описанными в FindFirst параметрами используется процедура:
FindNext(<переменная типа SearchRec>);
Возникает вопрос: когда закончится список найденных файлов? Чтобы отследить эту ситуацию следует обратиться к переменной:
DosError: integer
Если содержимое переменной равно 0, то можно успешно продолжать поиск, если отлично от нуля, то возникла ошибка – файлы в списке исчерпаны (2- файл не найден, 3 – путь не найден и т.д.) и именно в этом случае следует закончить поиск. Для лучшего понимания приведём фрагмент программы, позволяющий вывести на экран все файлы и каталоги корневого каталога диска C: с указанием года их создания:
var FindRes: SearchRec;
TimeRes: DateTime;
begin
Clrscr;
FindFirst('C:\*.*', AnyFile, FindRes);
while DosError = 0 do begin
UnpackTime(FindRes.Time, TimeRes);
Writeln(FindRes.Name:12, TimeRes.Year:5);
FindNext(FindRes);
end;
readkey;
end.
Следующие две процедуры достаточно просты. Они позволяют получить информацию о системной дате и системном времени:
GetDate(<год>,<месяц>,<день>,<день недели>);
GetTime(<часы>,<минуты>,<секунды>,<сотые доли секунд>);
Все параметры являются переменным типа Word в которые и возвращаются указанные значения. Дата возвращается в американском формате, поэтому 0 – соответствует воскресенью, 1 – понедельнику и т.д.
Обратную операцию по установки ваших системной даты и времени позволяют произвести процедуры:
SetDate(<год>,<месяц>,<день>);
SetTime(<часы>,<минуты>,<секунды>,<сотые доли секунд>);
Контрольные вопросы:
1.
Задание:
