Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi / песни о паскале.pdf
Скачиваний:
63
Добавлен:
26.03.2016
Размер:
5.16 Mб
Скачать

Глава 27 Дайте кораблю минутный отдых!

{ P_27_1 – определение наличия заданного файла }

function FileExists(const aName: string): boolean; var F: text;

begin

FileExists:= false;

{ предполагаем, что файла нет }

Assign(F, aName);

 

 

 

{$I-}

Reset(F); {$I+} { контроль отключен на время Reset }

if IOResult=0 then begin

{ если файл существует }

 

Close(F);

 

{ закрываем файл }

end;

FileExists:= true;

 

 

 

 

 

 

end;

 

 

 

 

begin

{--- главная программа ---}

 

Writeln( FileExists('AUTO.BAT') );

{ печатает false }

Writeln( FileExists('C:\AUTOEXEC.BAT') );

{ печатает true }

end.

 

 

 

 

В подчеркнутой строке процедура открытия файла Reset заключена между парой директив. Первая из них отключает контроль ошибок ввода-вывода, а вторая снова включает его. Это значит, что при выполнении процедуры Reset программа не прервется даже при отсутствии открываемого файла. Причем это уже не будет зависеть от состояния флажка в опциях компилятора, поскольку директивы имеют преимущество перед флажками, то есть более высокий приоритет.

Как сработает наша функция? После попытки открыть файл вызовем функцию IOResult. Если она вернула ноль, значит, файл существует, и его надо закрыть, поскольку никаких действий с ним внутри функции FileExists не намечается. Проверьте работу этой полезной функции, она ещё пригодится вам!

Парад директив

Разбогатев со временем собственными программами, вам, вероятно, захочется поделиться ими. При передаче исходных текстов важно передать и настройки опций компилятора, иначе EXE-файл может быть построен неправильно. Эти настройки лучше передать путём вставки директив компилятора прямо в программу. Но директив много, — запомнить их трудно, а ошибиться легко. Впрочем, есть один волшебный способ…

Откройте опции компилятора (рис. 61) и настройте в нём флажки так, как нужно, не забыв сохранить их кнопкой ОК. Затем откройте файл с программой и нажмите волшебную комбинацию клавиш Ctrl+O+O. То есть, удерживая клавишу

183

Глава 27 Дайте кораблю минутный отдых!

CTRL, дважды нажмите латинскую букву «O». И — о, чудо! — в начале программы появятся строчки с настройками всех директив, например, такие.

{$IFDEF NORMAL} {$H-,I+,OBJECTCHECKS-,Q-,R-,S-}

{$ENDIF NORMAL}

{$IFDEF DEBUG} {$H-,I+,OBJECTCHECKS-,Q+,R+,S-}

{$ENDIF DEBUG}

{$IFDEF RELEASE} {$H-,I-,OBJECTCHECKS-,Q-,R-,S-}

{$ENDIF RELEASE}

Здесь представлены настройки директив для трех вариантов компиляции. Эти варианты (Normal/Debug/Release) выбираются в пункте меню Options à Mode…. Знаки «+» и «» соответствуют состоянию флажков в окне опций. Директивы вида $IFDEF нужны для выбора одного из вариантов компиляции (об условных директивах я расскажу в главе 60). Можно упростить эту конструкцию, оставив, лишь одну строку.

{$H-, I+, OBJECTCHECKS-, Q-, R-, S-}

Потребовалось изменить настройки? Пожалуйста! — Удалите эти строчки и повторите «волшебные заклинания». Или расставьте плюсы и минусы вручную.

Итоги

Программист допускает два рода ошибок: синтаксические и семантические (смысловые).

Синтаксические ошибки обнаруживает компилятор. Пока вы не исправите все такие ошибки, исполняемый файл не сформируется.

Смысловые ошибки проявляются в ходе выполнения программы, – это ошибки времени исполнения. Такие ошибки кроются либо в алгоритме программы, либо в неправильных действиях пользователя.

Реакция программы на некоторые ошибки определяется настройкой опций компилятора. Программа может либо пренебречь ошибкой, либо аварийно завершиться.

Опции компилятора настраивают двумя способами: в диалоговом окне и вставкой директив непосредственно в программу.

Директивы в тексте программы имеют преимущество (приоритет) перед настройками опций в диалоговом окне.

184

Глава 27 Дайте кораблю минутный отдых!

А слабо?

А) Выясните код ошибки, возвращаемый функцией IOResult при попытке открыть для чтения несуществующий файл. Напишите для этого небольшую программу.

Б) Сделайте то же самое, когда программа пытается открыть для записи файл с установленным атрибутом «только чтение». Для настройки атрибутов файла щелкните по файлу правой кнопкой мыши и выберите пункт «Свойства».

В) Дан файл, строки которого содержат круглые скобки (это может быть программа или математические выкладки — неважно). Ваша программа должна распечатать строки, где скобки расставлены неверно, вот примеры.

2+3 – правильно, хотя скобок нет;

(2+3 – ошибка – здесь нет закрывающей скобки; ()2+3() – это правильно (хоть и лишено смысла); ))2+3(( – ошибка – скобки закрываются до открытия.

Рекомендация: для исследования строки напишите булеву функцию Check, возвращающую TRUE, если скобки расставлены без ошибок.

Г) Дребезг контактов давно уже бесит специалистов по электронике. Дребезг возникает кратковременно при замыкании-размыкании кнопок, тумблеров, реле и других подобных устройств. Сигнал от контактов поступает в микропроцессор с периодичностью, скажем, 100 раз в секунду. Если контакт постоянно разомкнут, микропроцессор принимает «0», а если замкнут — «1». При замыканииразмыкании контакт неустойчив, и процессор получает пачки чередующихся нулей и единиц, — надо отфильтровать эти ложные срабатывания.

Ваша программа будет моделировать поведение микропроцессора. Входной файл содержит последовательность нулей и единиц (по одному символу в строке). Первый символ примите как исходное значение сигнала, а дальше сигнал на выходе программы формируется так: если три подряд идущие значения совпадают, то берется это новое значение, а иначе сохраняется текущее, например:

На входе

На выходе

0

0

1

0

0

0

1

0

1

0

1

1

0

1

В выходной файл запишите в две колонки входной и выходной сигналы.

185

Соседние файлы в папке delphi