Песни о Паскале
Шрифт:
• Смысловые ошибки проявляются в ходе выполнения программы, – это ошибки времени исполнения. Такие ошибки кроются либо в алгоритме программы, либо в неправильных действиях пользователя.
• Реакция программы на некоторые ошибки определяется настройкой опций компилятора. Программа может либо пренебречь ошибкой, либо аварийно завершиться.
• Опции компилятора настраивают двумя способами: в диалоговом окне и вставкой директив непосредственно в программу.
• Директивы в тексте программы имеют преимущество (приоритет) перед настройками опций в диалоговом окне.
А
А) Выясните код ошибки, возвращаемый функцией IOResult при попытке открыть для чтения несуществующий файл. Напишите для этого небольшую программу.
Б) Сделайте то же самое, когда программа пытается открыть для записи файл с установленным атрибутом «только чтение». Для настройки атрибутов файла щелкните по файлу правой кнопкой мыши и выберите пункт «Свойства».
В) Дан файл, строки которого содержат круглые скобки (это может быть программа или математические выкладки – неважно). Ваша программа должна распечатать строки, где скобки расставлены неверно, вот примеры.
2+3 – правильно, хотя скобок нет;
(2+3 – ошибка – здесь нет закрывающей скобки;
2+3 – это правильно (хоть и лишено смысла);
))2+3(( – ошибка – скобки закрываются до открытия.
Рекомендация: для исследования строки напишите булеву функцию Check, возвращающую TRUE, если скобки расставлены без ошибок.
Г) Дребезг контактов давно уже бесит специалистов по электронике. Дребезг возникает кратковременно при замыкании-размыкании кнопок, тумблеров, реле и других подобных устройств. Сигнал от контактов поступает в микропроцессор с периодичностью, скажем, 100 раз в секунду. Если контакт постоянно разомкнут, микропроцессор принимает «0», а если замкнут – «1». При замыкании-размыкании контакт неустойчив, и процессор получает пачки чередующихся нулей и единиц, – надо отфильтровать эти ложные срабатывания.
Ваша программа будет моделировать поведение микропроцессора. Входной файл содержит последовательность нулей и единиц (по одному символу в строке). Первый символ примите как исходное значение сигнала, а дальше сигнал на выходе программы формируется так: если три подряд идущие значения совпадают, то берется это новое значение, а иначе сохраняется текущее, например:
На входе
На выходе
0 1 0 1 1 1 0
0 0 0 0 0 1 1
В выходной файл запишите в две колонки входной и выходной сигналы.
Глава 28
Редактор и справочная система
Ошибки, ошибки… Мы отбиваемся от них всеми средствами, и компилятор, как вы убедились, – важный рубеж в этой обороне. Важный, но не единственный. Согласитесь, лучше не допускать ошибок, чем устранять их. Хорошо, когда рядом есть мудрый советчик, – вовремя подскажет, объяснит, остережет. К счастью, в IDE есть такие «советчики» – это редактор текста и справочная система, – о них спою в этой главе.
Сегодня никого не удивишь возможностями нынешних IDE: тут и встроенный редактор и справочная система. Но так было не всегда. В начале 90-х годов прошлого века появление замечательных продуктов фирмы Borland было сродни чуду. Подумать только!
Небьющиеся окна
Встроенный многооконный редактор – одно из новшеств Borland Pascal, он появился там едва ли не раньше самой MS Windows. Пока мы обходились одним окном редактора, но так будет не всегда, – в сложных проектах приходится одновременно открывать несколько файлов. Впрочем, это нужно уметь и сейчас, например, для копирования частей одной программы в другую.
Окна встроенного редактора схожи с окнами Windows: они открываются и закрываются, меняют размер и положение, допускают перенос кусков текста из одного окна в другое. Для управления окнами IDE служит раздел меню «Window». На рис. 62 рядом с названиями пунктов этого раздела показаны соответствующие им горячие комбинации клавиш.
Рассмотрим самые полезные возможности этого меню.
Команды Next и Previous переключают окна редактора. То же самое делается нажатием клавиш F6 и Sift+F6 или щелчками мыши по окнам. Текущее активное окно выдвигается на передний план и обрамляется особой рамкой с полосами прокрутки (в пассивных окнах этих полос нет).
Рис.62 – Пункт меню «Window»
Касательно активного окна надо сделать важное замечание, связанное с компиляцией. Когда открыто несколько окон, нажатие клавиши F9 вызовет, вероятней всего, компиляцию файла, открытого в активном окне. Поэтому не забывайте перед компиляцией своей программы переключаться в нужное окно!
В скопище окон не мудрено заблудиться, и тогда выручит команда Window –> List (комбинация Alt+0, где «0» – это цифра). Нажав её, вы увидите список всех открытых в данный момент окон (рис. 63).
Рис.63 – Список окон
Для перехода в нужное окно выделите его в списке и щелкните по кнопке OK (или сделайте двойной щелчок по строке с именем окна).
Изменить размер и положение окна можно командами Size/Move и мышью. Для перетаскивания окна «схватите» его мышью за верхнюю границу рамки, а для изменения размера – за правый нижний угол.
Буфер обмена
Кто сказал, что списывать – плохо? Копирование кусков текста – любимое занятие программистов. В самом деле, разумно ли набивать заново такой же или похожий кусок текста? Куда быстрее и надежней «скопипастить» его (от слов Copy – «копировать» и Paste – «вставить»). И время сбережем, и ошибиться трудней, – а ошибки мы душим всеми средствами, не так ли?
Куски текста копируются и в пределах одного файла, и между разными файлами. При этом копируемый фрагмент временно сохраняется в памяти – так называемом буфере обмена. Фокус с копированием выполняем в четыре счета: