Миг между прошлым и будущим
Вот и все. На этом изложение программирования на Паскале я заканчиваю. Того, что вы знаете, вполне достаточно для программирования любых задач из любой сферы человеческой деятельности. Дальнейшее изучение Паскаля позволит вам составлять более эффективные программы, имеющие новые возможности в смысле использования объектов, богатства цветов, быстрой работы с графикой и т.п.
Если вы решите стать профессиональным программистом, то будете работать с современными версиями языков программирования, такими как Delphi, и узнаете, что они полностью объектно-ориентированы и имеют богатый набор «модулей», предназначенных для удобного решения часто встречающихся типов задач, таких, например, как управление базами данных, создание окон и кнопок на экране и т.п. По сути, настолько удобного решения, что программу для этих задач компьютер пишет сам, а программист только задает исходные данные. Однако, писать программный текст вам придется все равно.
А теперь я хочу предложить вам задание 135 и последнее на звание «Программист-любитель II ранга». На выбор – одно из трех:
· Игра в морской бой
· Игра в крестики-нолики на бесконечном поле
· Игра в шашки
Во всех трех программах игра должна вестись между человеком и компьютером.
Правила морского боя и шашек общеизвестны. Правила крестиков-ноликов на бесконечном поле такие же, как и у крестиков-ноликов на поле 3 на 3, с тем отличием, что в линию нужно выстроить не 3, а 5 ноликов или крестиков. Конечно, запрограммировать игру на бесконечном поле довольно трудно, поэтому рекомендую ограничиться полем 20 на 20 или 10 на 10.
Требования и рекомендации к программам:
· Компьютер должен обнаруживать незаконное расположение кораблей, незаконные ходы в крестики-нолики и в шашки.
· Компьютер должен вести счет партий и отображать его на экране
· Компьютер должен обеспечить возможность сохранения игры и загрузки сохраненной игры
· Удобный интерфейс. В частности, человек должен иметь возможность легко делать ходы шашками, расставлять корабли, ставить нолики или крестики (например, при помощи клавиш передвижения курсора и клавиши пробела)
· При нажатии на клавишу F1 любая порядочная программа предлагает помощь. В вашем случае достаточно показать правила игры
· Неплохо сделать в углу экрана управляемое с клавиатуры меню с такими, примерно, пунктами: сохранить игру, загрузить игру, выход из игры, помощь.
· Для того, чтобы не было игр-близнецов, ходы компьютера не должны быть железно заданы. Например, свои корабли компьютер должен располагать от игры к игре с разумной долей случайности, чтобы человек не мог легко догадаться, где будут стоять корабли в следующей игре. То же относится к выстрелам, ходам в крестики-нолики и в шашки.
· Рекомендации по выбору уровня сложности стратегии: В морском бое стратегия компьютера должна быть очень сильной, чтобы человеку было трудно у него выиграть. В крестиках-ноликах стратегию компьютера затруднительно сделать очень сильной. Достаточно, если компьютер будет обнаруживать простейшие угрозы человека: четверки с одним свободным концом и тройки с двумя свободными концами - и сам стремиться к их созданию. Что касается шашек, то шашечного чемпиона сделать очень трудно. Достаточно, если компьютер не будет бестолку подставлять свои шашки под бой. Правила шашек упростите – например, откажитесь от дамок.
Любая из этих задач достаточно сложна и потребует многих дней напряженной работы. Если вам кажется, что вы не сможете удовлетворить всем перечисленным в задании требованиям, потому что «мы этого не проходили», то я вам заявляю – все, что нужно, мы проходили! Нужно только немножко подумать.
У вас есть все шансы сделать так, что программа в морской бой будет играть очень сильно, а значит, может приобрести популярность во всем мире, так как при выполнении всех требований задания у нее будет достаточно «товарный» вид. В принципе, если вы очень постараетесь со стратегией, то сможете достигнуть того же и в крестики-нолики.
Желаю успеха!
Часть IV. Работа в Паскале на компьютере
В этой части мы не будем изучать программирование. Мы будем учиться, как написанные заранее программы вводить в компьютер, отлаживать и выполнять.
Что нужно знать и уметь к моменту выполнения первой программы?
· Вы должны иметь работающий компьютер с установленным на жестком диске Паскалем. Вы должны знать, где у компьютера кнопка включения. Очень желательно, чтобы кто-то опытный сказал вам, что Паскаль работает нормально, и показал, как его запускать. Если опытных рядом нет, я с грехом пополам попробую рассказать вам, как запустить Паскаль («с грехом пополам» потому, что для запуска Паскаля нужно иметь минимальные навыки работы или в Windows или в Norton или в чем-нибудь подобном, а это тема отдельной книги).
· Вы должны уметь работать с текстом в простейшем текстовом редакторе. Если не умеете, то вам вполне достаточно изучить приложение П1, где вам будут даны все необходимые навыки.
· Считаю совершенно необходимым, чтобы вы сохраняли все ваши программы, даже самые маленькие, на диске. Поэтому вы должны заранее знать, что такое каталоги (папки) и файлы. Если не знаете, то вам вполне достаточно прочитать приложение П2, где вы узнаете все необходимое.
· Вы должны знать имя каталога Паскаля и дорожку к нему (что это такое, читайте там же – П2).
Порядок работы в Паскале
(1)Запустите Паскаль
(2)Введите программу
(3)Сохраните программу на жестком диске
(4)Выполните программу
Если результаты вас удовлетворяют, перейдите к пункту 6
(5)Исправьте ошибки в программе
Вернитесь к пункту 3
(6)Отдыхайте
Рассмотрим подробно и по порядку пункты этого алгоритма.
(1) Запуск Паскаля
Итак, вы в отчаянном положении. Вы хотите запустить Паскаль, но не знаете, как это сделать, и некому вам объяснить. Я сейчас попробую вам помочь, но шансы на успех – 50 на 50.
Прежде всего прочитайте приложение П2 и параграфы (2) и (3) из этой главы, так как они помогут вам путешествовать по каталогам (обратите, кстати, внимание на двойную точку (..)). Напомню, что вы должны знать имя каталога Паскаля на вашем компьютере и дорожку к нему. Если не знаете, то могу вам подсказать, что скорее всего имя каталога – TP или TP70 или PASCAL или что-то очень близкое (если у вас Borland Pascal, то, возможно, BP). А находится этот каталог скорее всего в корне одного из логических дисков. Если его нет в корне, то он – внутри какого-нибудь каталога, скажем, PROGRAMS. Только не ищите его в каталоге WINDOWS, это опасно, да и не бывает его там. Вы должны также знать имя запускающего файла в каталоге Паскаля. Это turbo.exe (если у вас Borland Pascal, то bp.exe). Он может находиться не в самом каталоге Паскаля, а в его подкаталоге BIN.
А теперь вперед:
Включите компьютер, если он еще не включен. Некоторое время по черному экрану бегут белые слова – это компьютер рапортует вам о том, как он сам себя проверяет, загружает операционную систему (ОС) и, возможно, другие программы. Затем на экране устанавливается и замирает картинка. Ее вид зависит от ОС и других загруженных программ. В подавляющем большинстве случаев возможны три варианта:
А) Независимо от ОС, у вас автоматически загружается операционная оболочка Norton Commander. Это было бы легче всего.
Б) Ваша ОС – Windows 95.
В) Ваша ОС – Windows 3.1 или 3.11.
Рассмотрим все эти три варианта.
А) Загружен Norton Commander. Его вы узнаете по синему экрану, разделенному по вертикали пополам на две “панели”. На каждой панели – список файлов и подкаталогов какого-нибудь каталога какого-нибудь логического диска вашего компьютера. Имена каталогов приведены заглавными буквами, а имена файлов с расширениями – строчными. Обе панели совершенно равноправны. Это просто два независимых “окна”, глядящие внутрь ваших дисков. Наверху каждой панели написана дорожка к каталогу, внутренность которого вы лицезреете на панели.
Для начала щелкните по клавише F2. Возможно, в открывшемся меню вы сразу найдете Паскаль. Если нет, то при помощи клавиши Esc уберите меню с экрана.
При помощи клавиш , ® , , ¯ , Tab, Enter попробуйте добраться до каталога Паскаля на манер того, как я вам советую в параграфе (3) добраться до вашего каталога. Только вместо полос прокрутки пользуйтесь мышкой или клавишами , ¯, , ® , а вместо двойного щелчка мышкой можете пользоваться клавишей Enter. Если вы хотите посмотреть содержимое другого логического диска, то, удерживая нажатой клавишу Alt, щелкните по клавише F1 или F2 и из появившегося меню выберите нужный диск.
Вот вы нашли Паскаль. Зайдите внутрь каталога Паскаля. Здесь вам нужно найти запускающий файл. Запустите Паскаль, щелкнув по этому файлу клавишей Enter. Дело сделано.
Б) Загружена ОС Windows 95. Попробуйте найти на экране значок с надписью Turbo Pascal или близкой, и если нашли, щелкните по ней мышкой дважды. Если двойной щелчок не получается, щелкните один раз, а затем нажмите клавишу Enter. Дело сделано.
Если значок не нашли, найдите в левом нижнем углу экрана «кнопку» Пуск или «подковырните» ее оттуда мышкой. Щелкните по ней мышкой. Щелкните в выпавшем меню слово Программы, а там – Проводник. Откроется окно, в котором вы попробуйте добраться до каталога Паскаля на манер того, как я вам советую в параграфе (3) добраться до вашего каталога. Но рычаги управления здесь другие. В левой половине окна Проводника вы увидите дерево, похожее на то, что я описывал в П2. Пользуясь полосами прокрутки, найдите на нем значок нужного вам логического диска и если слева от него стоит значок “+”, щелкните по плюсу. Из логического диска “выскочат” ветки-каталоги. Щелкните по значку нужного каталога. В правой половине окна Проводника вы увидите список файлов и подкаталогов этого каталога. Каталоги изображены значками в виде желтых папочек, файлы – любыми другими. Найдите запускающий файл в виде белого прямоугольника с нужным именем и щелкните его дважды.
Может так случиться, что Паскаль заартачится, не захочет запускаться, начнет предупреждать и жаловаться на что-то. Мой совет – попробуйте запустить Norton Commander. Для этого повторите все описанные действия, но не для запуска Паскаля, а для запуска Нортона. Его запускающий файл – nc.exe, находится он в каталоге, имя которому, скорее всего, NC или NC50 или Norton или близкий. Затем перейдите к пункту А).
В) Загружена ОС Windows 3.1 или 3.11. Перед вами – окно с надписью “Диспетчер программ”. Если окна нет, значит – значок с такой надписью. Щелкните по нему дважды, чтобы он превратился в окно. Если двойной щелчок не получается, щелкните один раз, а затем щелчок по слову «Развернуть». Окно раскрылось.
Щелкните по слову “Файл”. В выскочившем из него меню – по слову “Выполнить”. В узеньком окошке с названием “Командная строка” мигает курсор. Наберите на клавиатуре дорожку до Паскаля (например, c:\tp\turbo.exe) и щелкните по клавише ввода. Если дорожка верна, то дело сделано. Если нет, то Windows сообщит вам, что файл она не нашла. Щелкните по сообщению “ОК” на экране и попробуйте найти Паскаль, щелкнув на экране по кнопке “Пролистать”. Выберите мышкой “устройство” (нужный диск). Затем попробуйте найти “каталог”, щелкая дважды по значкам кажущихся вам подходящими каталогов. Начните с самого верхнего значка. Если двойной щелчок не получается, щелкайте один раз, а затем щелчок по слову «ОК». При этом в левом окне внимательно просматривайте имена файлов, входящих в выбранный вами каталог. В окне “Каталоги” значки каталогов-родителей расположены чуть левее, а каталогов-“детей и внуков” – правее. Пользуйтесь прокруткой. Заметив в левом окне запускающий файл Паскаля, щелкайте по нему – и ОК. И еще раз ОК. Дело сделано.
(2) Начало работы. Ввод программы. Выход из Паскаля
Итак, вы запустили Паскаль и первое, что вы увидели, это пустой синий экран. В верхнем левом углу мигает черточка – курсор. Значит, Паскаль приглашает вас вводить текст программы. Это пустое синее пространство, со всех сторон взятое как бы в рамочки, называется окном редактора.
Иногда Паскаль настроен так, что при запуске вместо окна редактора показывает бессмысленное серое пространство - рабочий стол. Курсора нигде не видно, программу вводить некуда. Не огорчайтесь - дело легко поправить. Поправить или мышкой или с клавиатуры.
Мышкой быстрее - щелкните по слову Fileв главном меню наверху экрана, а затем в выпавшем из него другом меню - по слову New.
Если с клавиатуры, то нажмите клавишу F10, затем клавишами или ® подсветите слово File и нажмите клавишу ввода. Затем клавишами или ¯ подсветите слово New и снова нажмите клавишу ввода.
Можно вводить программу. Напоминаю, что вводится она, как обычный текст в простейшем текстовом редакторе. Если вы этого не умеете, то вам вполне достаточно изучить приложение П1, где вы получите все необходимые навыки.
(В дальнейшем для краткости я не буду писать, как выбирать пункты меню. Я просто напишу File ® New).
Выход из Паскаля - File ® Exit.
(3) Сохранение программына диске. Загрузка программыс диска
Итак, у вас на экране программа, готовая к выполнению. Во время выполнения может произойти неприятная вещь – компьютер может зависнуть. Это означает, что изображение на экране замрет, и никакими клавишами или мышкой вы не сможете вывести компьютер из ступора. Придется компьютер выключать и вновь включать. Поскольку ваша программа находится пока только на экране и в оперативной памяти, то при выключении компьютера она пропадет и вам придется вводить ее снова. Чтобы избежать лишней работы, вы должны перед выполнением программы записать (сохранить) ее на диск.
Для этого в меню File есть опция Save. Как только вы ее выберете, перед вами появится диалоговое окно – Паскаль предлагает вам выбрать каталог, в который вы хотите записать программу, и имя, которое вы хотите дать файлу вашей программы (Если вы не очень хорошо знаете, что такое файл и каталог, то сейчас самое время прочесть приложение).
Если вас не устраивает каталог, который предлагает Паскаль, то пролистайте его, щелкнув по стрелкам полосы прокрутки, чтобы найти две точки (..), которые служат выходной дверью из каталога. Щелкните по ним дважды – и вы окажетесь в родительском каталоге. Интерфейс Паскаля менее удобен, чем интерфейс Windows, но вы сможете все-таки отличать имена подкаталогов от имен файлов по косой черте (BackSlash) в конце имени подкаталога.
Путешествуя подобным образом по каталогам, вы в конце концов дойдете до нужного. Дважды щелкните по нему и вы окажетесь внутри него. После этого щелкните внутри поля для имени файла. Там замигает курсор. Сотрите все, что там написано, и введите туда придуманное вами имя файла. После этого нажмите клавишу ввода или щелкните на экране по кнопке OK. Ваша программа записана на диск. В качестве подтверждения заголовок вашего листа изменился с NONAME00.PAS на имя вашего файла с расширением PAS.
Теперь программу можно запускать на выполнение.
После выполнения программу обычно исправляют и дополняют и перед следующим выполнением опять сохраняют: File ® Save. Но в этот раз диалоговое окно не появляется. Паскаль, ни о чем вас не спрашивая, стирает с диска всю вашу старую программу и на ее место записывает с тем же именем ту, что вы видите на экране (и то, что вы видите, прокрутив окно, конечно). Так поступают все современные программные продукты.
Если старый вариант программы вам по каким-то соображениям дорог и вы не хотите его стирать, вам нужно выполнить File ® Save as… На экране возникает то же самое диалоговое окно, предлагающее вам то же самое имя файла в том же самом каталоге. Измените имя или каталог и щелкните по кнопке OK. Ваша программа с экрана будет записана в другое место диска, а старый файл будет нетронут.
Загрузка программы с диска. Предположим, вы вчера сохранили свою программу, а сегодня хотите продолжить с ней работу. Вы включаете компьютер, запускаете Паскаль, перед вами пустое окно редактора. Ваши действия: File ® Open. На экране появляется диалоговое окно, очень похожее на то, что появляется при сохранении программы:
И действия ваши очень похожи: вы должны отыскать в окне файл вашей сохраненной вчера программы, для чего вам придется попутешествовать по каталогам. Найдя файл, щелкните по нему дважды или один раз по нему, один раз по Open. Ваша программа появляется на экране.
(4) Выполнение программы
Перед тем, как выполнить программу, убедитесь, что курсор мигает внутри окна этой программы или что это окно обведено двойной, а не одинарной рамочкой. Я об этом упоминаю потому, что если вы работаете с несколькими окнами (о чем речь ниже), то курсор может мигать в любом из них.
Выберите пункт главного меню Run. В выскочившем подменю щелкните по опции Run. Все остальное делает компьютер. Начинает он с того, что за долю секунды компилирует вашу программу. После этого, не прерываясь ни на мгновение, он начинает выполнять откомпилированную программу. При этом окно редактора уходит с экрана и на нем возникает черное окно пользователя, на котором Паскаль и будет печатать и рисовать все, что прикажет программа. Если программа короткая и не содержит остановок и пауз, то Паскаль мгновенно печатает и рисует все, что приказано, и возвращает на экран окно редактора. Поскольку все произошло мгновенно, то создается впечатление, что ничего и не произошло – на экране было окно редактора, потом что-то мелькнуло, - и снова на экране окно редактора, а результатов никаких и не видно.
Чтобы увидеть результаты, можно пойти двумя путями:
· После того, как программа уже выполнилась, выбрать опцию User Screen. В Турбо-Паскале 7.0 она находится в пункте меню Debug. Если вам не хочется искать ее в меню, нажмите Alt-F5. На экране возникнет окно пользователя с результатами. Этот способ плох при работе в графическом режиме: изображение или искажено, или вообще не просматривается.
· Гораздо удобнее использовать в программе оператор ReadLn. В этом случае, наткнувшись во время выполнения программы на ReadLn, Паскаль останавливает программу, окно пользователя с экрана не пропадает, и вы можете смотреть на результаты, сколько хотите. Программа продолжит работу с места остановки, когда вы нажмете на клавишу ввода.
Прокрутка окна пользователя. Если ваша программа печатает много результатов, то все они могут и не поместиться на экране. В этом случае Паскаль начинает прокручивать окно пользователя, и самые верхние результаты исчезают из окна (их уж не вернуть!). Поскольку прокрутка обычно идет быстро, то вы просто не успеваете рассмотреть бегущие по экрану и убегающие наверх результаты. Спокойно посмотреть на них вы сможете только при остановке программы (по ReadLn или по окончанию работы). Чтобы результаты не успели убежать нерассмотренными наверх, используйте не один, а несколько ReadLn, расставив их в нужных местах программы.
Зацикливание. Нормальная программа, выполнив все, что нужно, заканчивает работу. Однако, если вы допустили ошибку и в программе выполняется бесконечный цикл, то программа не завершится никогда. Вы вечно будете смотреть на экран, по которому бесконечно бегут непонятные числа или слова или рисуются графические объекты, а возможно и ничего не происходит, экран пустой – все зависит от характера ошибки.
Для прерывания работы программы (в том числе и зациклившейся) существует комбинация клавиш Ctrl-Break. На экран возвращается окно редактора. Строка программы, на которой она была прервана, выделяется полосой белого цвета. Если вы снова запустите программу, она продолжит работу с прерванного места. Чтобы начать сначала, уберите полосу с экрана клавишами Ctrl-F2.
(5) Исправление ошибок. Отладка программы.
Сообщения об ошибках. Ошибки в программах делятся на те, которые Паскаль замечает, и на те, что не замечает и в принципе заметить не может. К первым относятся все синтаксические погрешности, например, BIGIN вместо BEGIN. Их Паскаль замечает еще на стадии компиляции. На стадии выполнения он замечает такие ошибки, как Sqrt(-25), то есть квадратный корень из ‑25. Но вот, если вы, желая возвести число a в куб, вместо a*a*a пишете a*a, то этого не заметит ни один язык в мире.
Обнаружив грамматическую ошибку, Паскаль выдает золотыми буквами на красном фоне краткое описание ошибки и ставит курсор в то место программы, где, по его мнению, она находится.
Обнаружив ошибку на стадии выполнения, Паскаль выдает белыми буквами на черном фоне окна пользователя сообщение Runtime error и иногда золотыми буквами на красном фоне краткое описание ошибки и ставит курсор в то место программы, где, по его мнению, она находится.
Вот наиболее типичные для начинающих сообщения об ошибках того и другого рода:
Сообщение
| Перевод
| Вероятная причина ошибки
| Unexpected end of file
| Неожиданный конец файла
| Вы забыли поставить точку после последнего END. Или не совпадает количество begin и количество end
| “;” expected
| Ждал точку с запятой
| Вы забыли поставить точку с запятой после предыдущего оператора
| “,” expected
| Ждал запятую
| Вы указали слишком мало параметров в обращении к подпрограмме
| “)” expected
| Ждал скобку “)”
| Вы указали слишком много параметров в обращении к подпрограмме
| Unknown identifier
| Неизвестное имя
| Вы забыли описать это имя в разделе описаний
Неправильно записали стандартное имя, например, ReedLn вместо ReadLn
| Type mismatch
| Несовпадение типов
| В вашей программе встречаются примерно такие «сладкие парочки»: VAR c:String; … c:=1+2 или VAR h:Integer; … h:=9/7
| Duplicate identifier
| Дубль имени
| Одно и то же имя описано два раза. Например, VAR a, c, a :String;
| Syntax error
| Синтаксическая ошибка
| Паскаль затрудняется назвать причину ошибки. Часто причина в том, что вы забыли взять строковую константу в кавычки
| BEGIN expected
| Ждал BEGIN
| Возможно, не совпадает количество begin и количество end
| END expected
| Ждал END
| Возможно, не совпадает количество begin и количество end
| String constant exeeds line
| Строковая константа превышает допустимую длину
| Вы забыли закрыть кавычки в строковой константе
| Line too long
| Строчка слишком длинна
| Слишком длинная строчка в программе (не путать со строковой константой, которую нужно брать в кавычки). Не рекомендую залезать программным текстом за правый край экрана
| Disk full
| Диск заполнен
| На вашем диске не осталось места. Надо что-то стереть
| Lower bound greater than upper bound
| Нижняя граница диапазона больше верхней
| Например, вы вместо array[2..5] написали array[5..2].
| Invalid floating point operation
| Неправильная операция с вещественным результатом
| Sqrt(-25) или a/0 или что-нибудь в этом роде
| Ordinal expression expected
| Ждал выражение порядкового типа
| Например, вы вместо for i:=1 to 8 написали for i:=1 to 8.5
| Error in expression
| Ошибка в выражении
| Например, вы вместо k:=а*8 написали k:=а**8
| Range check error
| Ошибка проверки диапазона
| Переменная в процессе выполнения программы вышла за пределы допустимого диапазона, как например, в 12.9
| Constant out of range
| Константа не в диапазоне
| Величина константы в программе превосходит допустимый диапазон
| Invalid numeric format
| Неправильный числовой формат
| Если, например, вы по оператору ReadLn(k) в программе VAR k:Integer; …. ReadLn(k) … пытаетесь ввести число 25.3
| Более подробное описание некоторых ошибок вы найдете в 4.3.
Понять смысл многих других сообщений об ошибках вам поможет перевод некоторых часто встречающихся в сообщениях слов:
expected ждал
identifier имя
invalid неправильный
operation операция
error ошибка
variable переменная
Невозможно создать компилятор, который бы всегда точно находил место и причину ошибки. Поэтому приготовьтесь к тому, что некоторые сообщения вы будете долго разглядывать в недоумении. Считайте их не реальными ошибками, а намеками на реальные ошибки.
Пошаговый режим
Вы запускаете программу, Паскаль на ошибки не жалуется, но результаты вас не удовлетворяют. Предположим, что внимательно просмотрев программу, ошибку вы не обнаружили. Все. Вы в тупике.
На случай возникновения таких ситуаций Паскаль предлагает ряд отладочных средств. Я начну с пошагового режима.
Идея пошагового режима вот в чем. Компьютер слишком быстро выполняет программу и человек не успевает проследить «за ходом его мыслей». Хорошо бы мы сами задавали темп выполнения программы. Тогда ошибку обнаружить было бы значительно легче.
Рассмотрим задачу из 5.1: В компьютер вводятся два произвольных положительных числа - длины сторон двух кубиков. Компьютер должен подсчитать объем одного кубика - большего по размеру . Обозначаем a1 - сторону одного кубика, a2 - сторону другого, V - объем кубика. Приведем второй вариант программы:
VAR a1,a2,V : Real;
BEGIN
ReadLn (a1,a2);
if a1>a2
then V:=a1*a1*a1
else V:=a2*a2*a2;
WriteLn (V : 15:5)
END.
Запускайте программу, но не обычным образом, а клавишей F7, которая является более быстрым способом вызова меню Run®Trace into. (Кстати, обратите внимание, что справа от многих опций меню обозначены «горячие» клавиши, которыми эти опции можно быстро вызывать.) Паскаль откомпилирует вашу программу и сделает паузу перед началом выполнения программы, подсветив горизонтальной полосой строку BEGIN.
Еще разF7. Ничего не происходит, только полоса подсветки прыгает на следующую строку. В ней находится первый исполняемый оператор вашей программы – ReadLn (a1,a2).
Итак, правило простое – при нажатии на F7Паскаль выполняет одну строку программы и подсвечивает ту строку, которой предстоит быть выполненной.
F7. Паскаль выполняет ReadLn (a1,a2), в результате чего у вас, как и при обычном выполнении программы, во весь экран распахивается черное окно пользователя. Оператор требует ввода двух чисел. Введите, например, 5 и 4, не забыв нажать на клавишу ввода. Окно пользователя пропадет, снова возникнет окно редактора и вы увидите, что серая полоса подсветки перескочила на строку if a1>a2.
F7. Паскаль выполняет if a1>a2, в результате чего полоса прыгает на then V:=a1*a1*a1, так как 5>4.
F7. Полоса перепрыгивает через else V:=a2*a2*a2 и попадает на WriteLn (V : 15:5).
F7. Паскаль выполняет WriteLn (V : 15:5), в результате чего печатается результат, а полоса перескакивает на строку END.
F7. Полоса пропадает. Программа выполнена. Посмотрим на результат при помощи Alt-F5.
Теперь еще раз выполните ту же программу в пошаговом режиме. Но когда ReadLn (a1,a2) потребует двух чисел, введите 2 и 3. Теперь уже после if a1>a2 полоса прыгает не на then V:=a1*a1*a1, а на else V:=a2*a2*a2.
В любой момент пошагового выполнения программы вы можете вместо F7выбрать Run®Run(клавиши Ctrl-F9) и программа продолжит выполняться в обычном режиме. Чтобы прервать пошаговый режим, выберите Run®Program reset(клавиши Ctrl-F2).
Работа с окнами пользователя и отладчика
Предположим, у вас не получается задание из 6.1 - определить без компьютера, что будет печатать следующая программа:
LABEL m1,met5; VAR n,k : Integer; BEGIN n:=10;
k:=0;
WriteLn('Считаем зайцев' );
met5: Write(n);
n:=n+k;
goto m1;
n:=n+1;
m1: Write(' зайцев ');
ReadLn;
k:=k+1;
goto met5;
WriteLn('Посчитали зайцев')
END.
Ответ: Эта программа должна печатать:
Считаем зайцев 10 зайцев
10 зайцев
11 зайцев
13 зайцев
16 зайцев
20 зайцев
………
С ответом у вас не сходится. Значит, вы чего-то не понимаете. Чего? Чтобы определить это, вы вводите программу в компьютер. Он печатает все, как в ответе. Почему? Вероятно, вы не понимаете, как изменяются в процессе выполнения программы значения переменных n и k. Хорошо бы можно было подсмотреть за их значениями в оперативной памяти. Хорошо бы также напечатанные результаты не пропадали с экрана, а были бы всегда перед глазами.
Проделайте следующее. (При дальнейшем объяснении я буду предполагать, что вы умеете обращаться с несколькими окнами на экране. Кто не умеет, читайте следующий параграф.)
Сузьте окно вашей программы так, чтобы оно освободило примерно половину ширины экрана. Далее - Debug®Output. Перед вами появляется черное окно пользователя, в котором вы привыкли наблюдать результаты, но в уменьшенном виде. Измените его размер и отбуксируйте на свободное место экрана.
Далее - Debug®Watch. Перед вами появляется окно отладчика, в котором вы будете наблюдать значения переменных величин в оперативной памяти. Измените его размер и отбуксируйте на оставшуюся часть экрана.
Вот как будет выглядеть ваш экран после всех манипуляций (и уже после нескольких выполнений цикла в пошаговом режиме, о чем дальше):
Вы сами должны сказать Паскалю, за какими переменными хотите следить. Очевидно, в вашем случае это n и k. Ваши действия: Debug®Add watch…,запишите имя n в открывшемся диалоговом окне и – щелчок по кнопке OK. В окне отладчика появится сообщение n:7 или n:0или какое-нибудь другое число или сообщение. Не обращайте на это внимания. Повторите всю процедуру с k.
Теперь можно запускать программу на выполнение в пошаговом режиме. Для этого нажмите на F7. Паскаль откомпилирует вашу программу, возможно, изменит значения в окне отладчика и сделает паузу перед началом выполнения программы, подсветив горизонтальной полосой строку BEGIN.
F7. Паскаль, возможно, обнулит значения в окне отладчика. Полоса подсветки прыгает на следующую строку. В ней находится первый исполняемый оператор вашей программы – n:=10.
Итак, правило простое – при нажатии на F7Паскаль выполняет одну строку программы и подсвечивает ту строку, которой предстоит быть выполненной.
F7. Паскаль выполняет n:=10, в результате чего в окне отладчика значение n меняется на 10, а серая полоса прыгает на строку k:=0.
F7. Паскаль выполняет k:=0, в результате чего в окне отладчика значение k становится равным 0, а полоса прыгает на строку WriteLn('Считаем зайцев' ).
F7. Паскаль выполняет WriteLn('Считаем зайцев' ), в результате чего в окне пользователя появляется напечатанный текст Считаем зайцев, а полоса прыгает на строку met5: Write(n).
F7. Паскаль выполняет Write(n). В окне пользователя в новой строке появляется число 10, так как в оперативной памяти n равно 10 (об этом нам говорит окно отладчика). а полоса прыгает на строку n:=n+k.
F7. Паскаль выполняет n:=n+k, в результате чего в окне отладчика значение n остается равным 10, так как в оперативной памяти k равно 0. Полоса прыгает на строку goto m1.
F7. Паскаль выполняет goto m1. Полоса перепрыгивает на строку m1: Write(' зайцев ').
F7. Паскаль выполняет Write(' зайцев ' ), в результате чего в окне пользователя справа от числа 10 появляется текст зайцев, а полоса прыгает на строку ReadLn.
F7. Паскаль выполняет ReadLn, в результате чего окно пользователя распахивается на весь экран и ReadLn ждет, когда вы нажмете на клавишу ввода. Вы нажимаете – и полоса прыгает на строку k:=k+1.
F7. Паскаль выполняет k:=k+1, в результате чего в окне отладчика значение k меняется на 11. Полоса прыгает на строку goto met5.
F7. Паскаль выполняет goto met5. Полоса перепрыгивает вверх, на строку met5: Write(n).
И так далее.
Если ваша программа рисует что-то в графическом режиме, то, к сожалению, при описанном способе работы картинки видны не будут.
Если в вашей программе есть подпрограммы, то серая полоса проникнет и внутрь подпрограмм и будет скакать там, как ни в чем не бывало. Таким образом, вы сможете анализировать и работу подпрограмм. Если же вы не хотите утомлять себя прыжками внутри подпрограмм, нажимайте не F7, а F8. Тогда Паскаль будет выполнять подпрограмму мгновенно в автоматическом режиме и серая полоса будет путешествовать только внутри основной программы. Вы можете свободно чередовать нажатия F7 и F8. Клавиша F7 будет направлять вас «вглубь» подпрограмм, а F8 - «наружу».
Отладка больших программ
Точки прерывания - Breakpoints. Будем считать “большими” программы, превышающие пару размеров экрана. Для них изложенный только что пошаговый режим может быть очень утомительным, так как слишком часто приходится жать F7. Вы можете заставить Паскаль при выполнении программы задерживаться не на каждой строке, а только на некоторых - тех, что вам нужно.
Поставьте курсор на одну из этих строк и нажмите Ctrl-F8. Строка станет красной. Это знак того, что при выполнении программа на ней остановится. Будем называть эту строку точкой прерыванияили контрольной точкой.
Поставьте курсор на другую строку и снова нажмите Ctrl-F8. Эта строка тоже станет точкой прерывания.
Так проделайте со всеми нужными вам строками. Затем можете обычным образом вывести на экран окна пользователя и отладчика.
А теперь обычным образом (Run®Run или Ctrl-F9) запускайте программу. Программа будет выполняться до тех пор, пока не наткнется на какую-нибудь точку прерывания. На ней она встанет и продолжит работу с того места, где остановилась, только при новом нажатии Ctrl-F9. И так далее.
Убирается точка прерывания точно так же, как ставится - Ctrl-F8.
“Иди до курсора” - Goto cursor. Это еще один способ остановки в нужной вам строке. Поставьте курсор в нужную строку и нажмите F4. Программа будет выполняться до тех пор, пока не наткнется на строку с курсором. А теперь поставьте курсор в другую строку и снова нажмите F4. Программа продолжит работу с того места, где остановилась, и будет выполняться до тех пор, пока не наткнется на строку с курсором. И так далее.
Кстати, в процессе выполнения программы вы можете достаточно свободно переключаться между разными способами ее выполнения – F7, F4 или Ctrl-F9.
Испольование Write и ReadLn. Если программа работает с графикой, то пользоваться вышеописанными средствами отладки или неудобно или нельзя. Не беда. Еще до существования всех и всяческих отладчиков программисты пользовались вспомогательной печатью значений переменных. Действительно, вместо использования окна отладчика для подсматривания за переменными n и k, вы просто можете в программу вставить дополнительный оператор Write(’ n=‘,n,’ k=‘,k). А вместо пошагового режима можете в нужных местах программы поставить ReadLn. Когда программа будет отлажена, вы уберете эти дополнительные операторы.
Только имейте в виду, что когда экран с вашими картинками донизу будет заполнен информацией, напечатанной оператором Write, он начнет прокручиваться вверх, а вместе с ним вверх уползут и ваши картинки. Чтобы избежать этого, нужно сделать так, чтобы не допечатав донизу, компьютер при помощи ReadLn сделал паузу (чтобы вы успели посмотреть результаты печати) и снова стал печатать бы сверху. А для печати сверху необходимо вставить в нужное место программы оператор GotoXY (см.15.7). А уж для этого вам нужно использовать модуль CRT (см. 9.1) и вставить в начало программы оператор DirectVideo:=false (см.10.3).
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|