Олег Деревенец - Песни о Паскале
- Название:Песни о Паскале
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Олег Деревенец - Песни о Паскале краткое содержание
Песни о Паскале - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
{ $ifdef ABC – начало директивы }
{ эта часть скомпилируется, если имя ABC определено }
{ $endif }
Таким образом, пара директив $DEFINE и $IFDEF-$ELSE-$ENDIF совместно образуют механизм условной компиляции.
Рассмотрим ещё пример. Предположим, вы пишите программу, выводящую результат в дисковый файл, однако при отладке вам хочется наблюдать результат на экране. Ну что ж, перенаправить вывод на экран совсем несложно, достаточно указать для файла пустое имя. Но при этом надо ещё организовать остановку программы после вывода на экран, чтобы успеть рассмотреть что-то. По окончании отладки надо восстановить имя дискового файла и удалить лишний оператор. Все эти хитрости легко устроить директивами условной компиляции.
{ $define Debug – Определяем признак отладочной компиляции }
const
{$ifdef Debug}
FName = ''; { Предстоит вывод на экран }
{$else}
FName = 'Hello.out'; { Предстоит вывод в файл на диске }
{$endif}
var F : text;
begin
Assign (F, FName); Rewrite(F);
Writeln(F, ’Привет, мартышка!');
{$ifdef Debug} Readln; {$endif}
Close(F);
end.
Здесь определено некое условное имя Debug (отладка), а программа содержит два варианта вывода: на экран и в файл. Разумеется, что после компиляции такой программы вывод пойдет на экран. Но переделка программы в боевую версию будет элементарна: достаточно удалить знак доллара в первой строке, и тогда директива $DEFINE превратится в безобидный комментарий.
{ define Debug – это всего лишь комментарий, а не директива! }
Теперь, когда условное имя Debug не определено, при повторной компиляции константа FName примет значение «Hello.out», оператор Readln не откомпилируется, и мы получим вывод в дисковый файл.
А что, если надо компилировать многофайловый проект в разных вариантах: отладочном и боевом? Здесь разумно сосредоточить определения условных имен в одном месте, разместив их во включаемом файле (как мы сделали это с опциями компилятора). Возьмем, например, созданный ранее файл опций «Options.inc». Добавив в него определения условных имен, мы сможем воздействовать на компиляцию сразу всех файлов проекта.
{$A+,B-,D+,E-,F-,G+,I-,L+,N+,O-,P-,Q-,R-,S-,T+,V-,X+,Y+}
{$M 16384,0,655360}
{$define Test – действует на условия типа $IFDEF Test }
{$define Print – действует на условия типа $IFDEF Print }
Разумеется, что в модулях проекта должны быть расставлены надлежащие директивы условной компиляции.
• Включаемые (INCLUDE) файлы – это части программы, которые в момент компиляции автоматически вставляются в указанные директивами $I места. Содержимое включаемого файла должно сочетаться с окружением, в которое оно вставляется.
• Условная компиляция – это удобное средство создания различных версий одной программы. Собрав условные имена и опции во включаемом файле, можно централизовано управлять компиляцией крупного проекта.
А) Создайте отладочный вариант программы обработки классного журнала (глава 31), в котором вывод результатов будет выполняться на экран. Примените условную компиляцию.
Задачи на темы предыдущих глав
Б) Контрразведка перехватила несколько зашифрованных файлов, и подозревала, что это тексты написанных на Паскале вирусов. Позвали Шерлока Ивановича Холмского в надежде, что тот расшифрует их. Шерлок Иванович предположил, что шифровали методом Юлия Цезаря (вспомните главу 24). Нужен ключ! После недолгих раздумий Шерлок Иванович создал программу для подбора ключей к таким текстам. Повторите ещё один «подвиг контрразведчика», или слабо? Подсказка: в таких файлах после расшифровки обязательно встречаются ключевые слова BEGIN и END – воспользуйтесь этим.
В) Рейтинговое голосование. Избирательный закон Иксляндии даёт каждому избирателю право голосовать за всех кандидатов, расставляя их в порядке своего предпочтения. Побеждает кандидат, набравший наименьшую сумму мест (если таковых несколько, то проводят второй тур). Предположим, баллотируются четыре кандидата с номерами 1-4, а бюллетени содержат следующие предпочтения избирателей:
3 4 2 1
2 4 3 1
4 1 3 2
Здесь первый кандидат набирает сумму 10, второй – 8, третий – 7, четвертый – 5. Таким образом, побеждает четвертый кандидат в списке.
Количество кандидатов известно и равно пяти. Ваша программа принимает файл, каждая строка которого содержит 5 чисел – данные одного бюллетеня. Надо выдать список победителей голосования (одного или нескольких).
Глава 61
«Кубики» программиста (ООП)

А напоследок отведайте волшебного объектно-ориентированного программирования (ООП). Эта технология преобразила ремесло программиста, – так пройдем ли мимо?
Вначале дадим слово Паскалю. Если вы работаете в IDE Borland Pascal, введите и запустите следующую программку. Только убедитесь в том, что библиотечный файл «APP.TPU» доступен компилятору (обычно он находится в папке «UNITS», где собраны фирменные библиотечные модули).
{P_61_1 – демонстрация работы Turbo Vision }
uses App;
var A : TApplication;
begin
A.Init;
A.Run;
A.Done;
end.
Как это работает? – не спрашивайте, ведь программка очень проста, что ещё надо? После ее запуска вам откроется следующая картина (рис. 152).

Неужто «сломалась» IDE? В самом деле, где меню и окно с текстом программы? Да и статусная строка совсем не та. Но мышка по-прежнему бегает, и клавиатура жива. Можно щелкнуть по слову «Exit» и выйти из программы, или сделать то же самое нажатием Alt+X. Да, друзья, вы наблюдаете действие той самой малюсенькой программки! Ее поведение чудесно, но возможности этим не исчерпаны. Своей мощью она обязана объектам из библиотеки Turbo Vision, на которой построена вся IDE Borland Pascal.
Все восторгаются объектным программированием. А откуда оно взялось?
Представьте, что при покупке телевизора вместо работающего изделия вам вручают его схему и коробку с деталями. И предлагают собрать телевизор самому! Примерно в таком же положении находились когда-то и программисты. Используемые ими библиотеки хранили массу полезных процедур и функций, – своего рода «схемы» для сборки программ. А «деталями» были обрабатываемые данные. Программист распределял эти данные в программе, придавая им нужную структуру, применял к данным в надлежащем порядке процедуры и функции, отслеживая при этом влияние одних данных на другие. Работа эта сродни сборке телевизора! Плодовитость программистов и качество их изделий оставляли желать лучшего, ненадежные программы было трудно править, да и пользоваться ими было неудобно.
Читать дальшеИнтервал:
Закладка: