- •Сборник МетодическиХ указаниЙ по выполнению лабораторных работ
- •Информатика
- •Введение. Назначение Delphi и его особенности
- •Начало работы
- •Меню и команды Delphi
- •Полоска кнопок быстрого доступа SpeedBar
- •Локальные меню SpeedMenu
- •Работа с формами
- •Палитра компонентов
- •Система подсказок
- •Навигатор кода
- •Написание кода
- •Справочная система
- •Структура проекта
- •Окончательная настройка приложения
- •Событие и процедура обработки события
- •Запуск программы
- •Предупреждения и подсказки
- •Ошибки времени выполнения
- •Компиляция
- •Отладка программы
- •Файлы, создаваемые системой
- •Репозиторий объектов и его страницы
- •Тула 2014 г.
- •Создание приложения в среде разработки Delphi
- •Первый проект
- •Компоненты
- •Начальные сведения о программах на языке Pascal
- •Комментарии
- •Директивы компилятора
- •Идентификаторы
- •Переменные и типы данных
- •Константы
- •Неименованные константы
- •Нетипизированные константы
- •Типизированные константы
- •Простейшие операторы
- •1. Простейшие арифметические и логические операции
- •2. Линейные программы
- •Тула 2014 г.
- •Сущность задач с ветвлениями
- •Логический тип данных
- •Организация ветвлений
- •Объединение операторов
- •Сложные условия
- •Множественное ветвление
- •Применение оператора-переключателя Case
- •Тула 2014 г.
- •Сущность задач с циклами
- •Цикл с предусловием
- •Вечный цикл
- •Цикл с постусловием
- •Цикл с переменной
- •Дополнительные операторы управления циклами
- •Вложенные циклы
- •Инструкция goto
- •1. Циклические программы
- •2. Задачи, решаемые методом перебора.
- •Тула 2014 г.
- •Статические массивы
- •Многомерные статические массивы
- •Ввод-вывод массивов
- •Считывание массива из файла
- •Поиск максимума и минимума
- •Пример программы
- •Динамические массивы
- •Создание динамических массивов
- •Многомерные динамические массивы
- •1. Одномерные массивы
- •2. Двумерные массивы
- •Тула 2014 г.
- •Процедуры и функции
- •Что такое функция?
- •Функция: туда и обратно
- •Процедуры
- •Передача данных в процедуры
- •Вложенные процедуры и функции
- •Тула 2014 г.
- •Символьный тип
- •Символ-константа и строка-константа Неименованные константы
- •Нетипизированные константы
- •Типизированные константы
- •Действия с символами Операции
- •Стандартные функции и процедуры обработки строк
- •Операции со строками Сравнения
- •Обращение к компонентам строки
- •Конкатенация
- •Удаление символов в строке
- •Определение позиции подстроки
- •Выделение подстроки
- •Множества
- •Описание множеств
- •Множество-константа Неименованная константа
- •Нетипизированная константа
- •Типизированная константа
- •Операции с множествами
- •Представление множеств массивами
- •Представление множеств линейными массивами
- •Представление множеств битовыми массивами
- •1. Строковый тип данных
- •2. Типы данных «множество» и «запись»
- •Тула 2014 г.
- •Введение
- •Что такое файл?
- •Когда нужно использовать файлы
- •Разновидности файлов
- •Описание файлов
- •Текстовые файлы
- •Оперирование файлами
- •Назначение файла
- •Открытие файла
- •Закрытие файла
- •Считывание из файла
- •Запись в файл
- •Пробельные символы
- •Пример использования файлов
- •Изменение реакции на ошибку
- •Бинарные файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Подпрограммы обработки директорий
- •Применимость подпрограмм обработки файлов
- •Индивидуальные задания
- •Свойства в Delphi
- •Вложенных свойств
- •Управление свойствами визуальных компонент в режиме выполнения
- •Программа shapedem2
- •Тула 2014 г.
- •Графические компоненты
- •Построение графиков с помощью компонентной технологии
- •Тула 2014 г.
- •Создание меню
- •Использование компонента tTimer
- •Тула 2014 г.
- •Работа с компонентом RichEdit
- •Тула 2014 г.
- •Тула 2014 г.
- •Что такое мультимедиа
- •Мультимедиа в Delphi
- •Компонент tMediaPlayer
- •Два вида программ мультимедиа
- •Пример программы с мультимедиа
Пример использования файлов
Задача. В текстовом файле f.txt записаны (вперемешку) целые числа: поровну отрицательных и положительных. Используя только один вспомогательный файл, переписать в текстовый файл h.txt все эти числа так, чтобы:
порядок отрицательных чисел был сохранен;
порядок положительных чисел был сохранен;
любые два числа, стоящие рядом, имели разные знаки.
Решение
Если бы нам разрешили использовать два вспомогательных файла, мы бы просто переписали все положительные числа в один из них, а все отрицательные - в другой. А затем объединили бы два этих файла. В нашем же случае придется переписать во вспомогательный файл только положительные числа. Затем при "сборке" мы будем считывать из вспомогательного файла "все подряд", а из исходного - только отрицательные числа.
Реализация.
program z1;
var f,g,h: text;
k: integer;
begin
assign(f,'f.txt');
assign(g,'g.txt');
assign(h,'h.txt');
{Переписываем положительные числа в доп.файл}
reset(f);
rewrite(g);
while not eof(f) do
begin read(f,k);
if k>0 then write(g,k,' ');
end;
{Собираем числа в новый файл h.txt}
reset(f); {Возвращаем указатель на начало файла f}
reset(g);
rewrite(h);
while not eof(g) do
begin read(g,k);
write(h,k,' ');
repeat
read(f,k)
until k<0;
write(h,k,' ');
end;
close(f);
close(g);
close(h);
end.
Изменение реакции на ошибку
По умолчанию любая ошибка ввода или вывода вызывает аварийную остановку работы программы. Однако существует возможность отключить такое строгое реагирование; в этом случае программа сможет либо игнорировать эти ошибки (что, правда, далеко не лучшим образом отразится на результатах ее работы), либо обрабатывать их при помощи системной функции IOResult: integer.
Директива компилятора {$I-} отключает режим проверки, соответственно директива {$I+} - включает.
Если при отключенной проверке правильности ввода-вывода ({$I-}) происходит ошибка, то все последующие операции ввода-вывода игнорируются - вплоть до первого обращения к функции IOResult. Ее вызов "очищает" внутренний показатель ("флаг") ошибки, после чего можно продолжать ввод или вывод.
Если функция IOResult возвращает 0, значит, операция ввода-вывода была завершена успешно. В противном случае функция вернет номер произошедшей ошибки.
Пример использования директив {$I}
flag:= false;
write('Введите имя файла: ');
repeat
readln(s); {s:string}
{$I-}
assign(f,s);
reset(f);
case IOResult of
0: flag:= true;
3: write('Путь к файлу указан неверно. Измените путь: ');
5: write('Доступа к файлу нет. Измените имя файла: ');
152: write('Такого диска нет. Измените имя диска: ');
else write('Такого файла нет. Измените имя файла: ');
end;
until flag;
{$I+}
Номер ошибки |
Описание ошибки |
Генерирующие процедуры |
|
2 |
File not found |
Файл не найден |
append, erase, rename, reset, rewrite |
3 |
Path not found |
Директория не найдена |
append, chdir, erase, mkdir, rename, reset, rewrite, rmdir |
4 |
Too many open files |
Открыто более 15 файлов одновременно |
append, reset, rewrite |
5 |
File access denied |
Отказ в доступе к файлу |
append, blockread, blockwrite, erase, mkdir, read, readln, rename, reset, rewrite, rmdir, write, writeln |
12 |
Invalid file access code |
Попытка использовать текстовый файл как типизированный или наоборот |
append, reset |
16 |
Cannot remove current directory |
Невозможно удалить заданную директорию |
rmdir |
100 |
Disk read error |
Попытка чтения после конца файла |
read, readln |
101 |
Disk write error |
Ошибка записи на диск (диск полон) |
close, write, writeln |
102 |
File not assigned |
Файл не назначен |
append, erase, rename, reset, rewrite |
103 |
File not open |
Файл не открыт{бинарные файлы} |
blockread, blockwrite, close, eof, filepos, filesize, read, seek, write |
104 |
File not open for input |
Файл не открыт для ввода {текстовые файлы} |
eof, eoln, read, readln, seekeof, seekeoln |
105 |
File not open for output |
Файл не открыт для вывода {текстовые файлы} |
write, writeln |
106 |
Invalid numeric format |
Неправильный числовой формат {текстовые файлы} |
read, readln |
152 |
Drive not ready |
Задано неверное имя диска |
append, erase, rename, reset, rewrite |
