No Image

Как запустить программу в фри паскале

СОДЕРЖАНИЕ
201 просмотров
16 декабря 2019

После того как текст программы набран, его следует перевести в машинный код. Для этого необходимо вызвать транслятор с помощью команды Compile — Compile (комбинация клавиш Alt+F9). На первом этапе транслятор проверяет наличие синтаксических ошибок. Если в программе нет синтаксических ошибок, то на экране сообщается о количестве строк транслированной программы и объёме доступной оперативной памяти.

Если на каком-либо этапе транслятор обнаружит ошибку, то в окне редактора курсор укажет ту строку программы, в которой ошибка была обнаружена. При этом в верхней строке редактора появится краткое диагностическое сообщение о причине ошибки.

Для запуска транслированной программы необходимо выполнить команду Run — Run (комбинация клавиш Ctrl+F9), после чего на экране появляется окно командной строки, в котором пользователь и осуществляет диалог с программой. После завершения работы программы вновь появляется экран среды Free Pascal.

Лабораторная работа № 1

Условный оператор и программирование разветвляющихся алгоритмов.

Цель работы: Изучение приемов программирования разветвляющихся алгоритмов с использованием оператора сравнения и логических операций над данными типа boolean.

Пример первого задания.

Составить программу вычисления функции:

Sinx, 0 pi/2 then y := x-2.1

writeln( ‘ Y= ‘ , у: 6: 3)

Пример второго задания.

Составить программу определения произведения двух наименьших целых чисел А,В,С (А<>В<>С<>0) .

writeln(‘введите 3 целых числа А,В,С’); readln(a,b,c);

if b>max then max:=b;

if c>max then max:=c;

mul:= (a *b*с) div max ;

writeln(‘произведение двух наименьших=’,mul)

3. Лабораторная работа № 2.

Операторы цикла и программирование циклических алгоритмов.

1. Изучение приемов программирования циклических алгоритмов с применением трех различных операторов цикла.

2. Изучение приемов программирования при работе с перечисляемыми типами.

Пример первого задания.

Найти сумму членов знакопеременного ряда.

S= ( +3)/2-( +5)/4+…+ +35)/34- ( +35)/36

while i x +Sin 2 x*cos(x-2), x x + ), x>1

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

Необходимо написать программу, которая вычислит и выведет на экран результаты в виде таблицы (табл. 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 — (ИиИКТ)

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!».

Заключение

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

Комментировать
201 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев