Фри паскаль как пользоваться

Фри паскаль как пользоваться

16.01.2006
Алексей Ю. Уласевич (STAKANOV)

Что такое Free Pascal

Free Pascal это свободно распространяемый компилятор языка Паскаль. Free Pascal работает на различных процессорах (Intel x86, Amd64/x86_64, PowerPC, Sparc) и операционных системах (Linux, FreeBSD, Mac OS X/Darwin, Mac OS classic, DOS, Win32, OS/2, Netware и MorphOS). Синтаксис Free Pascal полностью совместим с Turbo Pascal 7.0, а так же, по утверждению разработчиков, с большинством версий Delphi (классы, rtti, исключения, ansistrings, widestrings, интерфейсы). Для пользователей Apple есть режим совместимости с Mac Pascal. Кроме того Free Pascal поддерживает перегрузку функции, перегрузку оператора, глобальные свойства и некоторые другие особенности.

Сам компилятор распространяется бесплатно по лицензии GNU GPL, а идущие вместе с ним пакеты и библиотеки по модифицированной LGPL, что позволяет распространять ваши скомпилированные программы на любых удобных для вас условиях.

Получение

Как правило Free Pascal не продается в магазинах и для его получения необходим доступ в интернет. Установите соединение с интернет, запустите Internet Explorer (или тот броузер которым вы пользуетесь). В поле адрес наберите следующий текст (ссылку) – http://www.freepascal.org/down/i386/win32-ftp.freepascal.org.html и нажмите клавишу Enter.

Прим.: надо заметить, что это не единственное место где можно получить компилятор и если у вас достаточно для этого квалификации, то перейдите по ссылке http://www.freepascal.org/download.html и выберите тот вариант который вас больше устраивает.

Объем файла который вам потребуется скачать достаточно большой (26,4Мб) и процесс его получения займет много времени. На открывшейся странице, в разделе «Download as installer» кликните правой кнопкой мыши по fpc-2.0.2.i386-win32.exe, в появившемся меню выберите пункт «Сохранить объект как . », в диалоговом окне укажите каталог (по-умолчанию «Рабочий стол») в который вы хотите сохранить программу установки и нажмите кнопку «Сохранить». Обязательно запомните этот каталог. Дождитесь завершения загрузки, закройте ваш браузер и переходите к следующему разделу.

Установка

Если вы сохранили программу установки не на рабочем столе, то откройте проводник и выберите в нем свой каталог. Кликнув дважды (используйте левую кнопку мыши) по иконке «fpc-2.0.2.i386-win32» запустите программу установки.

В открывшемся окне нажмите кнопку «Next».

В следующем окне вам будет предложено указать каталог в который будет установлен Free Pascal. Лучше оставьте тот, что указан по-умолчанию. Для продолжения нажмите «Next».

В этом окне необходимо выбрать один из трех вариантов установки — «Full installation», «Minimum installation» и «Custom installation». Если вы планируете основательно использовать все пакеты Free Pascal и у вас достаточно места на диске, то выберите «Full installation». При этом будут установлены все пакеты, документация и примеры. Такой вариант установки потребует 101,6Мб дискового пространства. Если вам нужен только компилятор — «Minimum installation». Потребуется 20,8Мб дискового пространства. В случае выбора варианта «Custom installation» появится возможность выбрать устанавливаемые пакеты. Для написания своей первой программы так как это будет описано далее в этой статье выберите пункт «Custom installation»,а в появившемся списке оставьте (или установите) галочку только около «Integrated Development Environment» и нажмите «Next».

В следующем окне вам будет предложено выбрать название для раздела главного меню Windows. Ничего не меняйте, просто нажмите «Next».

В следующем окне («Select Additional Task») опять же ничего не меняйте, нажмите «Next».

Далее откроется окно, содержащее общую информацию о заданных параметрах установки. Чтобы начать нажмите «Install».

После завершения процесса копирования файлов появится окно («Information»), в окне содержится информация (на английском языке) о новшествах версии 2.0.2. Нажмите «Next» и вы перейдете к заключительному окну.

Если вы желаете ознакомится с файлом readme.txt (на английском языке), то оставьте галочку около «View readme.txt». Если нет, то уберите ее. Нажмите кнопку «Finish» для завершения установки.

Поздравляю! Вы установили Free Pascal.

Прим.: пользователям Windows 98 чтобы иметь возможность запускать команды компилятора из любого каталога необходимо в файле autoexec.bat добавить в переменную PATH каталог C:FPC2.0.2ini386-win32 и затем перезагрузить компьютер.

Первая программа

После того как вы выполнили описанные выше действия у вас на рабочем столе появилась иконка (ярлык) «Free Pascal IDE». При двойном клике по этой иконке запустится классическая интегрированная среда разработки. Среда имеет текстовый интерфейс. Если вы программировали с использование Turbo Pascal, то у вас не возникнет проблем с освоением этой среды. В любом случае помните, что это не единственный вариант. Для Free Pascal есть множество различных вспомогательных средств от простых редакторов с подсветкой синтаксиса до систем визуального проектирования.

Теперь запустите IDE. После открытия окна можете нажать клавиши Alt+Enter для полноэкранного режима. Нажмите клавишу F10 для перехода в главное меню. Выберите меню File и нажмите Enter. В появившемся меню выберите команду New и нажмите клавишу Enter. Откроется новое окно редактора вашей программы. В нем наберите:

Нажмите клавишу F2 для сохранения файла. Откроется диалоговое окно «Save File As ..», в котором среда предложит вам выбрать каталог и имя для хранения файла. Для перемещения между элементами окна пользуйтесь клавишей «Tab». В центральной части окна находится список каталогов. Для поднятия на уровень выше выберите «..» и нажмите Enter, пользуйтесь стрелками для выбора каталога из списка. Естественно вы можете проделать все это с помощью мыши. Выберите нужный вам каталог, а в поле «Name» наберите имя файла программы, например «hello». Расширение «.pas» будет добавлено автоматически.

Прим.: если вы используете Windows 98, то сохраняйте свои программы в каталогах короткими английски именами. Если вы сохраните программу в каталоге «c:Мои докумениты», то возникнут проблемы во процессе компиляции.

Для компиляции и выполнения программы нажмите Ctrl+F9. Если вы сделали все как написано, то процесс должен пройти успешно. Чтобы посмотреть результат работы программы воспользуйтесь сочетанием клавиш Alt+F5. Там вы увидете столь любимое всеми сообщение «Hello, world!».

Заключение

В заключении хочу выразить свою особую благодарность всем кто дочитал до этого места. Спасибо.

Free Pascal, также известный как FPC (free pascal compiler), а ранее как FPK — свободно распространяемый в исходных текстах 32-разрядный кроссплатформенный компилятор языка Pascal.

Кроссплатформенность

Первое, что впечатляет, это его кроссплатформенность: поддерживаются не две-три операционных системы, а сразу шесть ОС и два типа процессоров. На базе i386 — Win32, DOS, Linux, FreeBSD и OS/2. На базе процессора Motorola 680×0 — AmigaOS.

Что это значит? Это значит, что под все эти операционные системы вы можете писать программы, пользуясь одним языком и одной библиотекой базовых функций. А зачастую, вообще, для переноса программы или библиотеки достаточно ее перекомпилировать. Думаю, что особенно приятно должно быть инженерам и научным работникам — если не вдаваться в интерфейсные заморочки, любые расчеты можно написать один раз, не задумываясь над тем, под какой операционной системой они будут выполняться.

Надежность и удобство

Существует мнение, что бесплатные и открытые програмные продукты менее надежны, чем коммерческие. К сожалению, в большинстве случаев это действительно так.

Однако и здесь Free Pascal является приятным исключением. Лично мне пришлось столкнуться в лоб только с одним глюком, причем только тогда, когда я использовал возможность Free Pascal’я работать не с родным для него GNU-ассемблером, а с TASM. Bug-list на сайте freepascal.org весьма обширен, однако подавляющее большинство багов обычному программисту никогда не встретится. Кроме того, в отличие от коммерческих систем эти ошибки не скрываются и исправляются командой разработчиков.

Читайте также:  Стиральная машина занусси или электролюкс что лучше

Сообщения об ошибках, выдаваемые компилятором — четкие и информативные, с указанием номера строки и позиции в ней, где обнаружена ошибка. Сделано это в таком формате, что например, редактор UltraEdit-32 позволяет автоматически перейти к нужной строке (кстати, очень хороший редактор для программирования, жаль только, что не бесплатный).

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

Модули и библиотеки

Базовая библиотека включает в себя стандартные модули, реализующие управление памятью, работу с файловой системой, управление консольным вводом/выводом, работу со строками и датами, математические функции, обработку исключений и интерфейс к API поддерживаемых операционных систем. При этом все вышеперечисленное, кроме API, для различных систем реализовано единообразно a-la Borland Pascal.

Если сравнивать с Turbo Pascal, то мы видим модули CRT, DOS, Graph (реализует работу с VGA-графикой), Strings, Objects. Сравнивая с Borland Delphi, видим соответствующие модули SysUtils и Classes. Для работы с API в базовой библиотеке предусмотрены модули Linux, Windows и GO32 (API DOS-расширителя GO32v2).

Существуют также дополнительные библиотеки модулей, часть из которых включается в дистрибутив Free Pascal, а часть — нет.

Несколько библиотек, находящихся пока в состоянии разработки, предназначено для объектной реализации GUI-интерфейса для Windows и XWindow.

Существует аналог Turbo Vision — Free Vision, однако пока он недоступен: первоначальная версия содержала много кода от Borland, и сейчас перерабатывается для лицензионной чистоты.

В процессе разработки библиотека доступа к базам данных. Предполагаются InterBase, MySQL и Postgress. Сейчас пока можно с ними работать только через их API.

В дистрибутив входят модули, облегчающие написание CGI-программ — разбор HTTP-заголовка и т.д., модули упаковки и распаковки файлов в формате zip, работа с SVGA-графикой и OpenGL, и многое другое.

Лицензия

Free Pascal распространяется на условиях GNU General Public License (GNU GPL). Модули и библиотеки распространяются на условиях GNU Library General Public License (GNU LGPL), последняя версия данной лицензии называется GNU Lesser Public License.

Ознакомиться с ними и узнать, что за зверь GNU можно на gnu.org или gnu.ru.

Впечатлившись кроссплатформенностью, мы скачиваем документацию, дабы поподробнее узнать о возможностях компилятора. Обычно freeware компиляторы особыми изысками не балуют — совместимость с Turbo Pascal 7.0 практически максимум их притязаний. Конечно, и TP — шаг вперед по сравнению со стандартами Pascal и Extended Pascal, однако мы живем в мире уже других стандартов, так называемых "промышленных". "Промышленный стандарт" на Pascal сейчас — это последняя версия Borland Delphi, то есть Object Pascal со всеми прелестями классов и настоящего объектного программирования.

Так вот, Free Pascal поддерживает классы и RTTI. Поддерживает также перегрузку (overloading) процедур и функций и обработку исключений в try-блоках. Поддерживает он и длинные строки (тип ansistring) по модели Delphi.

В общем, до Delphi Free Pascal "не дотягивает" совсем чуть-чуть: отсутствует поддержка динамических массивов, "широкие строки" (WideString) для работы с Unicode, и поддержка OLE Automation. Однако все эти возможности группа разработчиков намерена включить уже в следующий релиз — версию 1.2. Впрочем, я думаю, что с OLE Automation они скорее всего подзадержатся, поскольку это нужно только на одной платформе. Поживем, увидим.

Зато присутствуют такие вкусности, как перегрузка операторов (+, -, *, /, **, =, , =, :=), последний обеспечивает также скрытое преобразование типов, посему с ним надо обращаться осторожно. Inline- процедуры, функции и операторы, причем не нужно извращаться, как в Turbo Pascal, и писать в машкодах. Правда, действуют они только в пределах модуля — вне его вызываются как обычные.

IDE и утилиты

А теперь о грустном — IDE, можно сказать, отсутствует. Для Win32 и DOS существует консольная оболочка fp, построенная по образу и подобию Turbo Pascal 7.0. Единственное достоинство этой оболочки — декларированная интеграция с gdb — GNU-отладчиком. Сам я этим отладчиком не пользуюсь, однако в конференциях встречал жалобы, что интеграция эта весьма несовершенна.

Отладчик прилагается в дистрибутиве (см. выше). К сожалению, GNU-отладчик не ориентирован на Free Pascal, зато Free Pascal ориентирован на него. Лично я отладчиком стараюсь не пользоваться, предпочитая "метод вилки".

Ассемблер и компоновщик — GNU as и ld (для Win32 — asw и ldw, соответственно).

Из прочих утилит, прилагаемых к компилятору, отмечу h2pas — переводчик С-шных заголовочных файлов .h в модули .pas; и компилятор ресурсов windres — аналог brcc32 из поставки Delphi.

Должен заметить, что ситуация с IDE не такая безнадежная, как может показаться. Существуют отдельные проекты, некоторые из которых весьма неплохи, однако характеризуются хотя бы одним из трех недостатков: написаны не на Free Pascal (хороший пример — редактор-оболочка Dev-Pascal, написанный на Delphi), не распространяются в исходниках, или недостаточно отлажены, попросту говоря, глючат. Очевидно, любой из этих причин достаточно, чтобы не вносить эти инструменты в дистрибутив.

Справка

Справка Free Pascal распространяется с дистрибутивом в двух форматах: PDF и HTML, при желании можно скачать отдельно справку и в других форматах. И в том и в другом виде она хорошо структурирована и прекрасно читается. Состоит из четырех книг:

"Руководство программиста", которое описывает различные аспекты программирования, такие как директивы компилятора, использование ресурсов, использование встроенного ассемблера и т.д.

"Справочник", где описывается язык Pascal в его Free Pascal диалекте и содержимое модулей System и ObjPas.

"Справочник модулей". Описываются модули: CRT, DOS, DXELoad, Emu387, GetOpts, GPM, GO32, Graph, HeapTrc, IPC, Linux, Math, MMX, MSMouse, Objects, Ports, Printer, Sockets, Strings, SysUtils.

"Руководство пользователя", где рассматриваются такие вопросы, как инсталляция Free Pascal, ключи командной строки, файл настроек и проч.

Резюме

Надеюсь, данный краткий обзор заинтересовал вас и станет первым шагом на пути к обстоятельному знакомству с одним из интереснейших открытых проектов — кроссплатформенным компилятором Free Pascal. Жду вопросов и тем для обзоров.

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

Необходимо написать программу, которая вычислит и выведет на экран результаты в виде таблицы (табл. 2.1).

Обратите внимание на то, что в таблице аргумент x задается в радианах. Хоте- лось бы написать более универсальную программу, которая выводит k строк по- добной таблицы, начиная с заданного значения x0. Приведенный выше фрагмент таблицы должен получиться при k=10 и x0=0.

Самый простой (и одновременно самый тупой) вариант тела программы может состоять из строк, представленных в листинге 2.1.

Листинг 2.1. Программа table1

program table1; var

В программе table1 использована единственная переменная с именем x, кото- рая может принимать вещественные значения с удвоенной точностью (тип double). Первый оператор writeln предназначен для вывода заголовка таблицы. Его три аргумента представлены строковыми константами, которые, в принципе, можно было бы объединить в одну строку. Затем переменной x присваивается начальное значение. Операция присваивания, образованная двумя символами :=, унаследова- на Паскалем от своего предшественника — языка АЛГОЛ-60. После этого 10 раз повторяется пара операторов, которая выводит на экран значения x, sin(x) и cos(x) и увеличивает значение переменной x на 0.1.

Читайте также:  Что будет если заблокировать человека в инстаграм

В поле редактора FPC IDE эта программа выглядела бы следующим образом

Рис. 2.1. Внешний вид первого варианта программы

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

Рис. 2.2. Окно для сохранения текста программы

Сохранив программу под именем table.pas (расширение среда добавляет сама) и снова запустив ее, мы не заметим на экране никаких изменений. Дело в том, что после выполнения программы управление автоматически возвращается среде, а за то ничтожное время, которое программа работала, результаты промелькнули на экране слишком быстро. Увидеть их можно, нажав комбинацию клавиш

readln, который приостановит работу программы до нажатия клавиши .

Результаты, выданные программой и приведенные на рис. 2.3, очень слабо на- поминают вид таблицы, указанной в задании. Во-первых, по умолчанию использо- ван так называемый "научный формат" записи вещественных чисел. Символ "E" означает, что число, расположенное слева, надо умножить на 10 в степени, распо- ложенной справа. Во-вторых, нам выдано слишком много значащих цифр.

Рис. 2.3. Выдача результатов программы table1.pas

С этим легко побороться — достаточно в операторе writeln после каждого вы- водимого значения указать его общую длину и количество цифр в дробной части:

Однако самая большая нелепость в первом варианте программы заключается в десятикратном повторении однотипных операций. Любой алгоритмический язык, и Free Pascal в том числе, предусматривает возможность циклического повторения таких действий. Этих способов не один, мы воспользуемся оператором цикла for. В результате второй вариант нашей программы будет выглядеть так, как представ- лено в листинге 2.2.

Листинг 2.2. Программа table2

program table2; var

for k:=1 to 10 do

Второй вариант программы выводит результаты в соответствии с заданием. Единственная небрежность — заголовок таблицы немного смещен относительно столбцов соответствующих значений (рис. 2.4).

Рис. 2.4. Усовершенствованный вывод

Это легко исправить, добавив к оператору вывода заголовков указание о тре- буемой длине выводимого текста или нужное количество пробелов в соответст- вующих текстовых константах:

writeln(‘ x’,’ sin(x)’,’ cos(x)’);

Завершая работу над первой программой, мы можем включить в нее ввод таких данных, как начальное значение x и количество k выводимых строк таблицы (лис- тинг 2.3).

Листинг 2.3. Программа table3

program table3; var

Обратите внимание на ввод числовых данных по запросу программы — в на- шем примере программа остановит свою работу на первом же операторе тела про- граммы и будет ждать завершения ввода значений k и x с клавиатуры. Между на- бираемыми значениями должен быть хотя бы один пробел. Внутри чисел пробелы

недопустимы, ибо они рассматриваются как разделители числовых данных. При- знаком завершения набора является нажатие клавиши .

Натуральное число N называется простым, если оно имеет только два разных делите- ля — 1 и само себя. Примеры простых чисел — 2, 3, 5, 7, 11, 13, … Некоторые матема- тики считают, что 1 не является простым числом, т. к. имеет единственный делитель. Считать 1 составным числом тоже нет никакого резона. Задачей нашей следующей про- граммы является запрос у пользователя числа N и анализ его на простоту.

В математике известен достаточно сложный алгоритм такого анализа, требую- щий минимального числа операций. Но мы воспользуемся следующим алгоритмом, более затратным по времени, но более простым по реализации. Если число N — четное и не равно 2, то оно составное. Если N — нечетное, то будем делить его на последовательные нечетные числа (3, 5, 7, 9, 11, …, M, где M не превосходит N ) и анализировать остатки от деления. Первый же нулевой остаток свидетельствует о том, что N — составное число. Если все остатки будут отличны от 0, то N — про- стое.

Первый вариант программы, реализующий описанный алгоритм, может выглядеть так, как представлено в листинге 2.4.

Листинг 2.4. Программа prime1

msg1=’ is prime’; msg2=’ is not prime’;

if N 000 000 тому, кто докажет или опровергнет эту гипотезу. Приз пока не востребован. Задача нашей следующей программы — запро- сить четное число N и найти хотя бы одно его разложение на сумму двух простых чисел (то, что задача имеет не единственное решение, вытекает из конкретных примеров: 4 = 2 + 2 и 4 = 1 + 3).

Идея реализуемого алгоритма предельно проста. Пусть, например, N=a+b и a a[j] then

В этой программе появились новые типы данных. Во-первых, массив a, объяв- ляемый с помощью служебного слова array (массив), вслед за которым указывает- ся диапазон изменения индексов элементов массива (от 1 до 100) и их тип (integer). Во-вторых, для переменных i, j, N выбран тип byte, обеспечивающий хранение данных в диапазоне от 0 до 255. Элемент a[i] сравнивается со всеми ос- тальными — a[j]. Поэтому в цикле по i появился вложенный цикл по j. Наконец, для перестановки пары a[i] и a[j] понадобилось использовать временную пере- менную tmp. Соответствующий блок перестановки данных — достаточно широко используемый программистский прием.

Результат работы программы сортировки приведен на рис. 2.7.

Применим описанный выше алгоритм для сортировки фамилий. Два строковых значения в Паскале сравниваются побуквенно — сначала первая буква первого операнда с пер- вой буквой второго операнда, затем сравниваются вторые буквы и т. д.

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

Рис. 2.7. Сортировка числового массива

Листинг 2 .8 . Программа sort_nam

program sort_nam; var

a: array [1..100] of string [20];

for i:=1 to N-1 do

Теперь элементы массива a могут хранить строковые значения длиной до 20 сим- волов. Переменную tmp тоже пришлось объявить типа string [20].

Пример работы программы сортировки фамилий приведен на рис. 2.8.

Рис. 2.8. Сортировка фамилий

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

Читайте также:  Символ номера в автокаде

Еще одна программа, связанная с обработкой символьной информации. Она должна

определить, является ли введенная фраза палиндромом. Один из наиболее цитируемых в литературе палиндромов — фраза "А роза упала на лапу Азора". Произношения ее при чтении слева направо и справа налево звучат одинаково. Естественно, что при этом не обращают внимания на разницу в больших и малых буквах и не учитывают располо- жение пробелов в строке и ее перевертыше.

Чтобы не усложнять алгоритм очередной программы, мы будем считать, что введенная фраза S1 набирается только малыми буквами. Первым нашим шагом должно стать удаление пробелов, мешающих решению задачи. Устранив пробелы и получив строку S2, мы сформируем строку S3, в которой символы следуют в об- ратном порядке. Если строки S2 и S3 окажутся равными, то введенная фраза явля- ется палиндромом.

Описанный выше алгоритм реализуется программой из листинга 2.9.

Листинг 2.9. Программа palindrome

program palindrome; var

S1,S2,S3: string; j,n: byte;

if S1[j] = ‘ ‘ then continue;

if S2=S3 then writeln(‘S1 – palindrome’) else writeln(‘S1 – not palindrome’);

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

строки по его номеру, например, S1[j] или S3[j]. Символы в строке нумеруются с 1, их можно читать или присваивать им новые значения. В цикле удаления пробе- лов важную роль играет оператор continue (продолжить), после которого продол- жение тела цикла обходится, но сам цикл продолжается. В этом же цикле исполь- зована операция конкатенации (от англ. concatenation — сцепка), обозначаемая знаком +. Ее действие сводится к присоединению второго операнда вслед за по- следним символом первого операнда. Еще одна деталь, на которую следует обра- тить внимание, связана с использованием полной формы условного оператора if… then… else (если… то… иначе). Оператор, расположенный справа от then, не должен завершаться точкой с запятой. Точка с запятой в Паскале считается при- знаком конца оператора, тогда как фрагмент else… является не самостоятельным оператором, а всего лишь продолжением предыдущего фрагмента.

Работа программы palindrome продемонстрирована на рис. 2.9.

Рис. 2.9. Анализ палиндромов

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

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

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

карт. Мы остановимся на самом примитивном способе, когда каждой карте колоды при- своен порядковый номер, например, от 1 до 36 или от 1 до 52.

Идея алгоритма базируется на использовании датчика случайных чисел. Пред- ставим себе, что в нашем распоряжении имеется физический (типа лототрона) или программно реализованный датчик случайных чисел из диапазона [1, N], где N равно 36 или 52. Первоначально наша колода напоминает фабричную упаковку карт, в которой все разложено по мастям и внутри каждой масти по возрастающим номиналам — 2, 3, 4, …, 10, валет, дама, король, туз. Это соответствует тому, что коды карт образуют последовательность натуральных чисел — 1, 2, 3, …, N. Обра- щаемся к датчику случайных чисел и получаем число k, принадлежащее диапазону [1..N]. Меняем местами первый элемент массива A[1] с элементом A[k]. Затем повторяем аналогичную операцию достаточно много раз, например 10 000. После этого первоначальный массив A окажется достаточно хорошо перемешанным. И если последовательность случайных чисел, выдаваемых генератором, окажется непред- сказуемой, то такой алгоритм можно взять на вооружение.

В арсенале стандартных функций языка Паскаль имеется функция random(M), которая при каждом новом обращении выдает очередной элемент последователь- ности равномерно распределенных случайных целых чисел из диапазона [0, M-1]. Ею мы и воспользуемся в новой программе (листинг 2.10).

Листинг 2.10. Программа mixer

program mixer; const

A: array [1..Nmax] of byte; j,k,tmp: byte;

for j:=1 to Nmax do

Обратите внимание на использование в программе константы Nmax. Если мы перейдем на колоду из 52 карт, то нам понадобится изменить единственную строч- ку в программе. Без константы Nmax такой переход потребовал бы изменения в че- тырех операторах.

Первый же запуск программы mixer приводит к вполне приличным результа- там (рис. 2.10). Каждое число из диапазона [1..36] представлено по одному разу (т. е. дублирующихся карт нет), да и об их порядке тоже ничего плохого сказать нельзя.

Рис. 2.10. Структура перетасованной колоды карт

Но второй запуск программы mixer приводит к тем же результатам. Такого по- втора в карточной игре терпеть нельзя. Игра с заранее известным порядком карт в колоде — это не игра. Причина кроется в работе системной функции random(). Ко- гда она вызывается в первый раз, то в ее теле присутствуют две начальные кон- станты, назовем их x и y. По вполне определенному алгоритму из них генерируется новое случайное число z. Перед тем как возвратить результат z, функция осущест- вляет пересылки y®x и z®y. Теперь становится понятным, что при повторном за- пуске программы функция random() начинает свою работу с тех же самых значе- ний x и y, и последовательность "случайных" чисел снова повторяется.

Для того чтобы "возмутить" начальное состояние программы random, использу-

ется процедура randomize, которая, применяя различные ухищрения, непредска- зуемым образом изменяет значения начальных констант x и y. Например, это мож- но сделать по текущему показанию системных часов, меняющих свое состояние каждую миллисекунду (листинг 2.11).

Листинг 2 .1 1 . М од иф ик а ция програ ммы mixer

program mixer; const

A: array [1..Nmax] of byte; k,tmp: byte;

j: integer; begin

for j:=1 to 10000 do

На рис. 2.11 приведены результаты пяти последовательных запусков модифи- цированной программы mixer. Теперь ее можно использовать при разработке кар- точных игр.

Рис. 2.11. Результаты работы модифицированной программы mixer

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

Ссылка на основную публикацию
Фотографии купе в поезде
Интересный фотоотчет о поездке на одном из первых рейсов двухэтажных поездов. Смотрим далее, как все устроено внутри таких двухэтажных вагонов...
Уравнение окружности в полярных координатах
Определение: замкнутая плоская кривая, все точки которой одинаково удалены от данной точки (центра О), лежащей в той же плоскости, что...
Уравнение пучка прямых проходящих через точку
Совокупность прямых, проходящих через некоторую точку, называется пучком прямых с центром в этой точке. Если и - уравнения двух пересекающихся...
Фотография с самым большим разрешением в мире
Представляем вашему вниманию нашу подборку самых больших фотографий в мире. Для их просмотра вам будет необходим FlashPlayer. Его можно скачать...
Adblock detector