Алгоритмический язык ТурбоПаскаль как средство решения задач САПР и ТММ


Методические указания к практическим занятиям

по курсу «Основы программирования и алгоритмические языки»

(Модуль «Алгоритмический язык ТурбоПаскаль как средство решения задач САПР и ТММ»)

для студентов специальности «Информационные технологии проектирования»

ВВЕДЕНИЕ

Повсеместное использование персональных компьютеров в системах автома- тизованого проектирования механизмов и машин требует от современного инженера приобретение навыков использования вычислительной техники. Одной из дисциплин, непосредственно связанных с применением компьютеров, является «Основы программу- ния и алгоритмические языки». Основным разделом курса является изучение методики разработки алгоритмов и языка программирования Паскаль для использования в соз- ренни вычислительных программ при проектировании механизмов и машин, в кур- Совьем и дипломном проектировании.

Паскаль — одна из самых распространенных языков программирования 80-90-х ро ков, поддерживающий самые современные методологии проектирования программ (нисходящее, модульное проектирование, структурное программирование). Новая жизнь в язык вдох нула фирма Борланд, разработавшая на его базе семейство Паскаль-систем, называются ТурбоПаскаль. Компиляторы фирмы поддерживались многими по-расширен операционными системами персональных ЭВМ, такими как СР / М-80, MSDOS, MSX DOS, средами Windows и т. П. Позже появились аналогичны ские вильнорозповсюджувальни компиляторы, например FreePascal.

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

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

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

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

Целью методических указаний является улучшение подготовки студентов специаль- ности «Основы программирования и алгоритмические языки» в ходе изучения ими языка Паскаль для разработки вычислительных программ при проектировании, а также при создании модулей для систем автоматического проектирования.

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

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

ТЕХНИКА БЕЗОПАСНОСТИ ПРИ РАБОТЕ С ЭВМ

1. К работе на ЭВМ допускаются студенты, изучившие правила тех- ники безопасности, имеют навыки работы с системой и текст программы для реализации.

2. Подготовка ЭВМ к работе, техническое обслуживание и ремонт про- водятся персоналом кафедры, имеющий соответствующую подготовку. Поэтому о каких-либо неполадках в работе ЭВМ необходимо сообщить преподавателя.

3. Студентам при работе на ЭВМ разрешается пользоваться только кла- Виатур, манипулятором «мышь» и дисплеем. Использование других устройств без разрешения преподавателя запрещается.

4. Категорически запрещается пользоваться дискетами, а не перевире- ними преподавателем.

1. Основные КОМАНДЫ СРЕДЫ FREEPASCAL

1.1 секция File

Секция содержит подменю, изображенное на рисунке 1.1.

Рисунок 1.1 — Подменю Рисунок 1.2 — Окно Open a File

секции File

Эта секция меню предоставляет возможности для открытия и загрузки от- дных файлов, создание новых файлов, выхода в оболочку DOS, сохранение файлов на диске и выхода из ТурбоПаскаля.С командами New и Save as Вы уже знакомы после изучения темы «Текстовые редакторы», рассмотрим остальные команды.

Команда Open открывает диалоговое окно Open а File (рис.1.2), в котором можно выбрать файл для открытия в окне Edit.

Диалоговое окно содержит поле ввода, список файлов, информационную па нель, стандартные «кнопки» CANCEL и HELP, две другие кнопки (OPEN, REPLACE), список предыстории, приписанный к входному поля Name.

Входное поле Name — это место для размещения (набора с помощью клавиатуры) имени файла, который Вы хотите загрузить в окно редактирования.Здесь же можно поместить маску для использования в качестве фильтра содержания поля Files.

Поле Files содержит имена файлов в текущем каталоге, в соответствии с ма- ски, установленной в поле Name.Например, если в поле Name записано *.PAS, то в поле Files появятся имена всех файлов каталога, содержащие расширение

.PAS.

Список предыстории добавляет к входному поля все имена, которые появлялись в ньо- м на последних вызовов диалогового окна Open а File.В список предыстории можно войти в том случае, если справа от входного поля Name Вы видите стрелку «вниз».Для входа в список следует нажать курсор «вниз».Этот список используется для повторного вхождения в текст, в который Вы уже входили.

Выбор нужного элемента осуществляется курсором, при этом пидсвичу- ется выбранная позиция. Затем следует нажать клавишу ENTER. Выбранное имя файла попадает в входящее поле Name.Вывод текста файла в редакционное окно осуществляется нажатием клавиши ENTER. Если выбор не сделан, для выхода из списка предыстории нажмите клавишу ESC.

Информационная панель отображает дорожное имя выбранного файла, его имя, дату, время создания и размер.

Кнопка OPEN открывает новое окно редактирования и помещает выбранный текст в это окно.

Кнопка REPLACE заменяет файл в активном окне редактирования вибра- ним файлом, не открывая новое окно.

Кнопка CANCEL отменяет все действия и выводит из диалогового окна.Кнопка HELP выводит окно с подсказкой.

Переключение внутри диалогового окна осуществляются клавишей TAB.

Внутри списочных полей переключение осуществляется курсором.

Команда New Вам уже знакома.

Команда Save записывает файл с активного окна на диск.Если файл имеет имя по умолчанию (NONAME00.PAS), ТурбоПаскаль открывает диалоговое возраст- но Save File As для переименования файла и сохранение его в другом катало- с или на другом диске.

Диалоговое окно содержит входное поле, список файлов, информационную панель, стандартные переключатели OK, CANCEL, HELP и список предыстории.

Во входном поле Save file as записывается имя, под которым Вы собираетесь сохранить файл (или файловая маска для поля Files).

Поле Files содержательно не отличается от одноименного поля, описанного ниже в этой главе.То же самое относится и к остальным элементам диалогового возраст- на: информационной панели, переключателей CANCEL и HELP.

Переключатель OK служит для подтверждения выполненных действий.

Команда Save as Вам уже знакома.

Команда Save All запоминает все файлы в открытых окнах.Если среди файлов были поименованы по умолчанию как NONAME00.PAS, FreePascal для них проведет диалог с использованием диалогового окна Save File as.

Команда Change dir открывает диалоговое окно Change Directory, в яко- м можно задать каталог, который Вы хотите сделать текущим.Текущий ката- лог — тот, который используется FreePascal для запоминания файлов и их поиска.

Входное поле Directory Name предназначено для ввода дорожного имени нового каталога.

Поле Directory Tree содержит дерево каталогов.Здесь Вы указываете имя ката- лога, который хотите сделать текущим. Сделав выбор курсором, нажмите кла- Вишу ENTER, затем или выберите ОК, или выйдите из меню клавишей ESC.

Переключатель Chdir инициирует смену каталога как только Вы выбрали имя ново го каталога в дереве или набрали его во входном поле.Если Вы передумали, выберите CANCEL.

Переключатель Revert возвращает к предыдущему каталога, если Вы еще не вышли из диалогового окна.

Команда Print печатает содержание активного окна редактирования.FreePascal ро зширюе знаки TAB (заменяет их соответствующим числом пробелов) и затем посылает содержание окна DOS Print Handler. Команда становится неправомочным, если окно не может быть напечатано. Для печати выделенного текста наберите CTRL-K- P.

Команда DOS Shell выводит из среды ТурбоПаскаля в среду DOS для выполнения команд DOS или входа в другую программу.Для возврата в среду FreePascal наберите в ответ на подсказку DOS слово EXIT, по-том нажмите ENTER.

1.2 секция Edit

Секция содержит подменю, изображенное на рисунке 1.3.

Секция меню EDIT обеспечивает команды для выделения, копирования и вставки фрагментов текста в редакционные окна.Можно также от- ты «окно вставок» Clipboard (окно, в которое FreePascal помещает для хранения все выделенные фрагменты) для осмотра или изменения его содержания.

Команда Restore Line возвращает последний

отредактирован строку.              Она также занимает

Рисунок 1.3 — Секция Edit

CTRL-Y или текст, набранный на пустом

строке. Команда работает только на последнем модифицированном или уведены строке.

Команда Cut забирает выделенный текст из документа и помещает его в Clipboard.Для выделения текста используйте клавишу Shift и клавишу управления курсором (одновременно).Для вклеивания выделенного фрагмента с Clipboard в другое место используется команда Paste (см. Далее).Текст остается в Clipboard, и его можно вклеивать неограниченное число раз (пока он остается выделенным в Clipboard).

Команда Copy не меняет выбранный текст, помещая копию выделенного фрагмента в Clipboard.Выделенный фрагмент может быть вклеен в любое место с использованием команды Paste.

Команда Paste вставляет выбранный текст с Clipboard в текущее окно с позицией курсора.Вклеивается текст, выделенный в Clipboard.

Команда Clear удаляет выбранный текст, а не помещая его в Clipboard.

Текст, забранный этой командой, теряется. Команда Paste не возвращает его.

Команда Show Clipboard открывает окно Clipboard, в котором за- памьятовуеться текст, выбранный из редакционных окон с помощью команд ме ню EDIT (Cut, Copy, Copy Example).Последний выбранный текст прилагается к Clipboard, не убирая предыдущего.Только что добавлен текст выделен (подсвечивается) в Clipboard, именно этот текст будет использован FreePascal при выполнении команды Paste.Текст в окне Clipboard можно отредактировать.После использования команды Paste текст остается в окне Clipboard и может ис ристовуватися для вклеивания сколько угодно раз (пока он остается подсвеченным).

1.3 секция Search

Секция содержит подменю, изображенное на рисунке 1.4.

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

 

 

 

 

 

 

 

Рисунок 1.4 — Подменю секции

Search

Команда Find (CTRL-QF) открывает диалоговое окно Find, содержащий входное поле со списком предыстории, три набора переми- качив, группу управляющих установок и стандартные кнопки OK, CANCEL и HELP.

Для быстрого входа в диалоговое окно достаточно нажать клавиши CTRL-QF.

Для выхода в список предыстории при высвеченные Text to find достаточно нажать

клавишу управления курсором «вниз». Откроется окно, содержащее список использованных Вами ранее текстов. Выбор нужного осуществляется курсором, после чего необходимо нажать клавишу ENTER. Выход из списка при неоправданно брань позиции осуществляется нажатием клавиши ESC.

Переключение между полями, наборами и клавишами диалогового окна про- водится клавишей TAB, внутри наборов — курсором.

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

Для изменения активности установки внутри поля достаточно «наехать» на нее курсором и нажать клавишу пробел так же работают и с перемикача- мы. Включена установка содержит знак Х внутри прямых скобок ([Х]), вимк- не на не содержит ([]). Для переключателей таким опознавательным знаком является точка внутри круглых скобок.

Входное поле Text to Find предназначенное для ввода искомой строки, пис- ля чего следует выбрать ОК для начала поиска.

Если Вы хотите ввести строку, которую Вы уже искали, используйте клавишу управления курсором «вниз». Откроется дополнительное окно, содержащее список предыстории, в котором можно сделать выбор.

Поле Directions переключает направление поиска от текущей позиции кур- Сору: вперед (Forward) или назад, в начало текста (Backward).По умолчанию выбран направление вперед (Forward).

Поле Scope определяет объем файла подвергается пересмотру при поиске.По умолчанию переключатель устанавливается в положение Global — просматривается весь файл.Если установить Selected Text, поиск будет происходить только в пределах помеченного блока текста в направлении, указанном в Direction.

Отметка текста осуществляется с помощью блочных команд, возведенных в таблицу 1.1.

Поле Origin задает начало поиска.При выборе From cursor поиск начи- ет ся с текущей позиции курсора в направлении, заданном в Direction.

При выборе Entire Scope просматривается или целый блок выбранного текста или весь файл (независимо от того, где установлен курсор).

Поле Options представляет группу установок, задают типы строк, ищет FreePascal.

При включенном Case Sensitive различаются верхний и нижний регист-

ры.

 

Таблица 1.1

назначение команды используемые клавиши
Маркировка начала блока Clrl-К-В
Маркировка конца блока Clrl-K-K
Маркировка единого слова Clrl-K-T
копирование блока Ctrl-K-C
передвижения блока Clrl-K-V
исключение блока Ctrl-K-Y
Чтение блока с диска Ctrl-K-R
Запись блока на диск Clrl-K-W
Показать / Скрыть блок Ctrl-K-H
печать блока Clrl-K-P
Индентация блока (отступление) Ctrl-K-l
Деиндентация блока (забрать отступление) Clrl-K-U

При выборе Whole words only FreePascal ищет только слова, то есть шука- ный строка должна иметь пунктуацию или пропуски с обеих сторон.При включе- ном Regular Expression FreePascal распознает в искомом строке специальные символы, показанные в табл.1.2.

Таблица 1.2

символ толкование символа
^ Циркумфлекс в начале выражения соответствует началу строки
$ Знак доллара в конце выражения соответствует концу строки
. Точка используется вместо любого символа
* Звездочка после символа соответствует любому числу символов

(Включая ноль). Например, b * соответствует bot, b, boo, а также be

+ Знак плюс после символа соответствует одной или более (но не ну- Леви) появление символа. Например, bo + соответствует bot и boo, но не b или be
[…] Символы в скобках соответствуют любому символу, который появился в скобках, но не другим
[^] Циркумфлекс в скобках в начале строки означает NOT. То есть [^ bot]

соответствует любому символу, кроме b, о или t

[-] Дефис в скобках означает диапазон символов. Например, [b о] со- ведает любому символу от b до о
\ Бэксли перед спецсимволов сообщает FreePascal, что этот сим- вол нужно воспринимать буквально, а не как спецсимвол. Например

\ ^ Соответствует символу ^, а не символа начала строки

Команда Replace открывает диалоговое окно Replace, в котором набирается

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

Почти все поля идентичны полям диалогового окна Find за исключением установки Promt on replace в поле Options и кнопки Change all.[] Promt on replace.Установка обеспечивает подсказку ТурбоПаскаля каждый раз перед за- миной найденного текстовой строки на новый. Кнопка Change all исполь- ется для начала поиска.При нахождении заданного Вами текста FreePascal спрашивает, хотите ли Вы сделать замену. При нажатой кнопке Change all пидт- вердження нужно для каждой замены.

Команда Search again повторяет последние команды Find Replace.Все установки, сделанные в окне Find, остаются действующими.

1.4 секция Run

Секция содержит подменю, изображенное на рисунке 1.5.

Рисунок 1.5 — Подменю секции Run Рисунок 1.6 — Подменю секции

Compile

Команды меню Run позволяют запускать программу на выполнение, по-чинать и заканчивать сеанс отладки.

Команда Step over позволяет проводить пошаговое выполнение программы без захода в подпрограммы (в том числе процедуры и функции).

Команда Trace into позволяет проводить пошаговое выполнение программы с заходом в подпрограммы.

1.5 секция Compile

Секция содержит подменю, изображенное на рисунке 1.6.

Меню Compile содержит набор функций, обеспечивающих функции компи- ции и выполнения вашей программы.

Команда Compile компилирует файл в активном редакционном окне.При компиляции или выполнении команды Make на экране высвечивается окно состояния с результатами.

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

верхней части редакционного окна появляется сообщение.

Команда Make включает встроенный Project Manager для создания файла

.ЕХЕ.

Файлы рекомпилюються соответствии со следующими правилами:

• если Compile / Primary File содержит в список первичный файл, он ком-

пилюеться, иначе компилируется последний файл, загруженный в редактор. FreePascal проверяет все файлы, от которых зависит компилируемый файл.

• Если исходный файл для данного модуля модифицировался после того, как объектный код (.TPU) файла был создан, модуль перекомпилируется.

• Если интерфейс для данного модуля изменен, все остальные модули, от него зависимы, перекомпилируются.

• Если модуль включает файл типа Include и он новее, чем файл с ро зширенням.TPU данного модуля, модуль перекомпилируется.

Команда Build перестраивает все файлы независимо от их новизны.Коман- да идентична команде Make, но не является условным (Make перестраивает только файлы, не являющиеся текущими).

 

1.6 секция Debug

Секция содержит двухуровневое подменю, изображенное на рисунке 1.7.

Команды меню Debug управляют все- ю средствами интегрированного отладчика.Можно изменять настройки, сделанные по умолчанию, в меню Options / Debugger.

Команда Evaluate / modify.По по- мощью этой команды можно:

• вычислить значение переменной или вы-

Рисунок 1.7 — Подменю секции

Debug

раз;

• наблюдать за значениями, которые при-

имеет переменная или другой элемент данных;

• изменить значение простых элементов данных.Команда открывает диало- говый бокс Evaluate and Modify.

Входное поле Expression показывает слово, замечено курсором в редакций- ном окне.Это слово является наблюдаемым выражением по умолчанию. Для Исчис- ления выражения по умолчанию необходимо нажать клавишу ENTER. Можно из- дредагуваты это выражение или заменить его, в т.ч. выбрав нужное из списка предыстории раскрывающемся нажатием клавиши управления курсором

«Вниз».

если отладчик может оценить выражение, он показывает значение в поле

Result.

Если выражение ссылается на переменную или простой элемент данных, Вы може-

то передвинуть курсор в позицию New Value и ввести выражение как новое значение.

Для удаления окна нажмите ESC. Если Вы изменили содержание по-ля New Value и не нажали ENTER, отладчик проигнорирует изменения.

Поле Result высвечивает значение выражения, введенного в входящее поле

Expression.

Поле New Value предназначенное для ввода нового значения.Кнопка Evaluate используется для вычисления выражения, введенного в бокс Expression.

Кнопка Modify используется для изменения значения переменной или прос того элемента данных, введенного в Expression, на значение, введенное в New Value.

команда Watches

Команда Add watch помещает наблюдаемый выражение в окно Watch.При выборе Add Watch отладчик открывает диалоговое окно Add Watch.В вхи- дном поле Watch expression высвечивается выражение по умолчанию (то, на которое ука- зуе курсор в редакционном окне). Для поиска и выбора другого выражения (из числа, уже использовались) можно открыть список предыстории.

Если Вы вводите допустимый выражение нажатием клавиши ENTER или задействовав ОК, отладчик добавляет выражение и его текущее значение в окно Watch.

Если окно Watch является активным, для введения нового выражения для на- дения нужно нажать клавишу INS.

Команды Delete Watch и Edit watch.Эти команды становятся доступными в ря- ГКУ состояния, когда идет работа с окном Watch.Команда Delete Watch забирает текущий выражение Watch из окна Watch (текущий выражение замечен в окне Watch).Того же эффекта можно достичь, нажимая DEL или CTRL-Y.

Команда Edit watch дает возможность редактировать выражение в окне Watch.Команда открывает диалоговое окно Edit Watch, содержащий копию текущего наблюдаемого выражения.В поле Watch expression редактируется выражение, заданное по умолчанию (выражением по умолчанию выбирается выражение, на который уста- ный курсор в редакционном окне).Можно использовать список передисто- рии. Отредактированный выражение заменяет начальную версию при нажатии клавиши ENTER или выборе кнопки ОК.

Команда Toggle breakpoint.Этой командой можно установить или снять безусловную точку прерывания (точку останова при налаживании) на строке, позиционируется курсором. Установлена ​​точка отмечается подсветкой. После повторного нажатия Ctrl-F8 точка прерывания снимается.

2 ОСНОВЫ ЯЗЫКА

2.1 синтаксические диаграммы

В настоящее время одним из самых распространенных формальных методов, которые ис- пользуются для описания синтаксических правил языков программирования, являются диаграммы, называемые синтаксическими.Н. Вирт — создатель языка Паскаль, популяризовав синтакси- ские диаграммы, и поэтому они носят название синтаксических диаграмм Вирта.На синтак- сичних диаграммах использовано два вида четырехугольников — с прямыми и закругле- ними углами.В прямоугольники помещают элементы языка, значение которых должно быть определено (так называемые «нетерминальные» символы).В четырехугольниках с за- кругленный углами (или иногда в кругах) размещают так называемые терминальные сим- волы, или иероглифы языка.Значение их определения не нуждается.Стрелки на диаграмме показывают направление движения по диаграмме при раскрытии структуры понятия, за- писаного при входе в диаграмму.

 

Рисунок 2.1.пример синтаксич- ной диаграммы

 

неться выход.

Пример синтаксической диаграммы для определения синтаксиса понятие «идентифи- катор» показан на рис. 2.1.

Чтобы получить правильные грамматические конструкции языка, используя синтак- сични диаграммы, нужно идти по путям, указанных стрелками, от одного чотирикут- ника к другому до тех пор, пока не встре-

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

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

2.2 структура Паскаль программы

По стандарту языка каждая Паскаль-программа начинается со слова Program, за которым следует имя программы.Это имя идентифицирует программу, но не имеет никакого значения внутри нее. Операторы, составляющих тело программы, должны быть ограничены так называемыми операторными скобками begin и end.После end в конце программы обязательно присутствие ».» (Точки), которая служит для компилятора признаком логического конца программы.

Самая Паскаль-программа имеет вид:

Program First (Output);

begin

Writeln ( ‘Наша первая программа’) end.

Как первая строка программы записывается ее название. Кроме имени про- граммы в заголовке могут записываться имена файловых переменных, используемом в данной программе. В конце заголовка обязательно ставится символ «; ». С синтаксической диаграммы, изображенной на рис. 2.2, видно, что все секции являются необязательными, за исключением секции операторов.

 

 

Рисунок 2.2 — Диаграмма Паскаль-программы

Оператором является составной оператор, содержащий один или последовательность операторов, помещенных в операторные скобки begin и end.Паскаль-программы мо гут содержать одну или более операторных скобок begin-end.Каждой дужке begin должна соответствовать end.В программе допустимая произвольная вложенность операторных скобок. Единственным ограничением при использовании вложенных скобок следующее: каждая более внешняя пара операторных скобок должна полностью включать более внутреннюю пару операторных скобок, то есть они не должны перекрываться.

Например,

begin

begin

(Операторы 1-х) end

begin

(Операторы 2-х) end

end.

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

ПНУ пару операторных скобок смещать вправо.

В ТурбоПаскале заголовок программы и параметры оператора Program не обязательны.Если заголовок присутствует, то он проверяется на правильность синтаксиса, но никакого влияния на программу не делает.Кроме того, на глобаль- ном уровне программы (то есть на ограниченном рамками процедуры) FreePascal до- пускает произвольный порядок следования секций label, const, type, var и произвольную их количество.

Одна из возможных структур Паскаль-программы имеет вид:

var I: integer; const Pi = 3.1415; var Pi2: real; type f2 = text; label 1,2;

type f3 = file of real; begin

{Операторы} end.

Точка с запятой используется в Паскале для разделения двух опера- торов, идущих друг за другом.

По зарезервированным словом begin никогда не ставится точка с запятой.Можно опустить точку с запятой и перед зарезервированным словом end, поскольку begin и end аналогичные скобки.

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

2.3 константы

Константой в Паскале может быть идентификатор константы, целое или действий; сне число, строка. Число без знака считается действительным, если в его состав вхо- дить десятичная точка или символ «Е».Остальные цифр считается цели. Си- мвол «Е» при представлении чисел в форме с плавающей точкой заменяет ос новую степень 10, а непосредственно за ним следует порядок.

В стандарте Паскаля предусмотрены именованные константы.именуемая константа

— это фиксированное значение, которому при объявлении константы в секции констант да- ется имя. Например, пусть сделано объявление:

const Speed = 120; Pi = 3.14159;

Beta = Speed;

Присваивания имен константам делает программу более удобной для пони- мение и внесения поправок в программу. При изменении констант достаточно изменить их значения в секции констант. Синтаксическая диаграмма именуемой константы при-

ведома на рис. 2.3.

 

 

 

 

Рисунок 2.3 — Синтаксическая диаграмма именуемой константы

2.4 Переменные.типы переменных

Переменная — это величина, обращение к которой производится по имени.Любая переменная, которая встречается в Паскаль-программе, должна быть объявлена ​​в секции переменных. Исключение составляют лишь обусловленные имена, то есть имена с заранее определенным компилятором смыслом. Лучше использовать осмысленные имена, поскольку это делает программу доступной для понимания. Диаграмма секции переменных приведена на рисунке 2.4.

 

Рисунок 2.4 — Диаграмма секции переменных

С помощью объявления имен в секции переменных устанавливается в ли- е факт существования переменной, но и задается ее тип. В стандарте языка обусловлено четыре стандартные типы переменных:

integer (целый) значения — все цели числа;

real (действительный) значения — все действительные числа;

boolean (логический) значения — true или false;

char (символьный) значения — элементы конечного и упорядоченного множества символов.

Элементами множества символов являются символы на устройствах ввода-вывода, поэтому одной, стандартной множества нет. Однако независимо от реа- лизации для множества символов должны выполняться следующие условия:

упорядоченность в алфавитном порядке множества больших латинских букв A, B, C, …Z (непрерывность для этого множества не требуется);

— множество десятичных цифр должно быть упорядоченной и непрерывной;

— в множество должно быть включен символ «пробел».Для кода ASCII все эти вы- моги выполняются. Каждый символ этого кода имеет неотъемлемый порядковый но- мер. То есть множество символов является порядковой. Множество чисел типа real по- вой НЕ есть.

Размер переменных в зависимости от их типа приведен в таблице 2.1.

 

 

 

Таблица 2.1

Тип диапазон значений Количество значащих цифр Размер в байтах
Real 2.9E-39..1.7E38 11-12 6
Single 1.5E-45..3.4E38 7-8 4
Double 5.0E-324..1.7E308 15-16 8
Extended 3.4E-4932..1.1E4932 19-20 10
Comp -9.2E18..9.2E18 19-20 8
Shortint -128..127 Signed 8-bit
Integer -32768..32767 Signed 16-bit
Longint -2147483648..2147483647 Signed 32-bit
Byte 0..255 Unsigned 8-bit
Word 0..65535 Unsigned 16-bit
Boolean     8-bit

Примеры объявления переменных:

Var A: ГЕА 1; BI, CI: integer; L: boolean;

S: char:

3 ВЫРАЖЕНИЯ И ФУНКЦИИ В Паскаля

3.1 выражения

Н. Вирт пишет: «Выражениями являются конструкции, задающие правила получения значений переменными и создания путем применения операций новых значений». Выражения состоят из операндов и операций.

Существуют следующие типы операций:

— арифметические;

— отношение;

— логические (булевы)

— операции над множествами.

В таблице 3.1 приведены арифметические операции, типы операндов и ре-

тов.

Операции «+» или «-» (в отличие от остальных арифметических операций) мо

жуть быть использованы с одним операндом. Ряд арифметических операций может использоваться с операндами типа integer или real, результат при этом будет типа real, если хотя бы один из операндов имеет тип real.

 

 

 

Таблица 3.1

операция Операция Тип

операндов

Тип результата
+ Добавления integer, real integer, real
Вычитание integer, real integer, real
* Умножения integer, real integer, real
/ Диленные integer, real real
div деления нацело integer integer
mod вычисления остатка от деления integer integer

Примеры записи арифметических выражений: 10 + 4 {равна 14};

9 * (-3) {равна -27}; 10 div 3 {равна 3};

15 div 3 {равна 5}.

Операция div вычисляет целую часть доли, а его остаток можно найти с помощью операции mod.Требование стандарта Паскаля состоит в том, чтобы ре- зультат выполнения операции mod был положительным, независимо от знаков операн- дев.Для двух положительных целых операндов А и В для этой операции выполняется равенство вида:

A mod B = A — (A div B) * B

Операции «*», «/», «+», «-» необязательно окружать разделителями, на- пример, пробелами, но пробелы обязательны при употреблении зарезервированных слов mod, div, поскольку AMODB является идентификатором, а A mod В — выражением, исполь товуваним для вычисления остатка от деления А на В.

При исчислении арифметических выражений приняты следующие правила, определяющие приоритет операторов. Операции «*», «/», div, mod имеют более высокий приоритет, чем операции «+» и «-».Операции с высшим приоритетом выполняются раньше. Если операции имеют одинаковый приоритет, то операция, стоит ли- Вишеу, выполняется первой.

В Паскале предусмотрены 3 булевы (логические) операции:

not — отрицание (логическая инверсия)

and — конъюнкция (логическое умножение):

or — дизъюнкций (логическое добавления)

Эти операции являются фундаментом булевой логики, разработанной в XIX веке математиком Джорджем Булем. Результат операции and является истинным, если оби- два ее операнда истинны.Результат операции в r является истинным, если какой-либо из ее

 

операндов истинный. Операция not имеет один операнд и образует его логическое за- прекословия.Результаты логических операций сведены в таблицу 3.2.

Булевы выражения могут быть сложными. Операнды этих выражений имеют бу ты булевого типа. Приоритетной булевой операцией является операция not, за ней следует операция and, а затем операция or.

Пример булевых выражений: not С and К, где С и К — булевы переменные.

Таблица 3.2

операция переменная значение
X True True False False
Y False True False True
возражения NOT X False False True True
Конъюнкция (логическое умножение) X AND Y False True False False
Дизъюнкция (логическое сложение) X OR Y True True False True

Булево тип в языке Паскаль определен таким образом, что false меньше true (при этом порядковый номер false равна нулю, true — единицы).Поэтому к буле- вых операндов могут быть применены операции отношения.Примеры выражений:

= 0) and (Y = 0) {при Х = 5, Y = -2 выражение имеет значение false}.

В таблице 3.3 приведен порядок выполнения операций в порядке убуван- ния приоритетности

Таблица 3.3

приоритетность Тип операции имя
Инверсия not
1 мультипликативные операции +, /. div, mod. and
2 аддитивные операции +, -, or
3 операции отношения =, <>>,> =, <, <=

3.2 стандартные функции

Для выполнения вычислительных операций, часто встречающиеся и пе преобразованию данных, относящихся к разным типам, существуют заранее опреде- ные стандартные функции. Ниже приведена таблица типов аргументов и ре- папин стандартных функций языка Паскаль. Во всех тригонометрических функциях (Sin, Cos, Arctan) аргумент задается в радианах.Действия функций следующие: Abs (X)

— вычисляет абсолютное значение X; Ехр (Х) — е возвышается до степени X; Ln (X)

— вычисляется натуральный логарифм X; Sqr (X) — Х возвышается квадрату; Sqrt (X) — исчисляется квадратный корень из X.

Для стандартных функций Arctan, Cos, Sin, Exp, Ln, Sqr, Sqrt аргумент может быть целым или действительным, но результат — всегда настоящий.

Функции Trunc, Round, Chr, Ord принято называть функциями перет- разования типов.

Trunc (X) — Х имеет тип real.Результатом является целая часть числа X. Напри- мер, Trunc (6.7) = 6, Trunc (-6.7) = — 6.

Round (X) — X имеет тип real.Результатом является ближайшее к Х целое число.

Например, Round (4.8) = 5, Round (4.5) = 5.

Chr (I) — I имеет тип integer.Результатом является символ, порядковый номер которого на множестве символов равна I. Например, Chr (66) = B.

Ord (C) — имеет порядковый тип.Результатом является номер (код) С в впорядко- ваний последовательности элементов. Например, Ord ( ‘B’) = 66, Ord (False) = 0.

Для функций Ord и Chr на множестве символов справедливое спиввидно- ния Chr (Ord (C)) = C.

Функции Pred, Succ принято называть функциями порядковых типов.

Pred (K) — К имеет порядковый тип.Результатом является предварительный К элемент на порядковой множественном числе. Pred (K) считается неопределенным, если К является первым по порядку элементом множества.Например: Pred ( ‘B’) = A, Pred (10) = 9.

Succ (K) К имеет порядковый тип.Результатом является следующий по порядку по К элемент на порядковой множественном числе. Succ (K) считается неопределенным, если К является последним элементом на порядковой множественном числе.Например, Succ ( ‘A’) = ‘B’, Succ (false) = true

Функции Odd, Eoln, Eof является булевыми, поскольку результат этих функций имеет тип boolean.

Odd (X) — X имеет целый типа.Если Х — непарный, то результат принимает значение true, если парный — false.

Ео 1n (Х) — X — файловая переменная.Результат приобретает значение true, если при чтении текстового файла достигнут конец текущей строки.В остальных вы- ча ев результат равен false.

Eof (X) — X — файловая переменная.Результат приобретает значение true, если при чтении текстового файла достигнут конец файла, в противоположных случаях результат равен false.

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

Таблица 3.4

  Integer Real Boolean Char File
Integer Pred, Succ, Abs, Sqr Trunc, Round Ord Ord  
Real Sin, Cos, Arctan, Ln, Exp, Sqr Abs, Sqr, Sin, Cos, Arctan, Ln, Exp, Sqrt      
Boolean Odd   Pred, Succ   Eof, Eoln
Char Chr     Pred, Succ  

В ТурбоПаскале к арифметическим функций добавлено три функции: Pi — по-

возвращает значение числа Pi; Int — возвращает целую часть аргумента; Frac — воз- тает дробную часть аргумента.

Для переменных порядкового типа в ТурбоПаскали введены дополнительные функ- ции: Dec — уменьшает значение переменной Inc — увеличивает значение переменной.Прик- лад:

var D, R, A: char; S, B: real;

K, l: integer; begin

B = 1.75;

S = lnt (B) {Значение S равен 1}

A: = ‘P’;

R == lnc (A); {Значение R равна ‘R’} D = Dec (R) {Значение D равно ‘P’} I = 25;

К = lnc (l) {Значение К равен 26}

end.

Для того, чтобы преподнести к любому степени число, необходимо воспользо-

ваться известной формуле a x e x ln a, то есть exp (x * ln (a)).

Задания для контроля.Напишите выражения в том виде, в котором его необходимо записать в Паскаль-программе:

4 ОПЕРАТОРЫ Паскаля

4.1 Простые и структурные операторы

Алгоритм решения задачи, записанный на языке Паскаль, является послидовнис- ю операторов. Оператор — это основной элемент входного языка. Операторы ди ляться на простые и сложные (структурные).

Простые операторы не содержат в себе других операторов. Струк турне являются конструкциями, в состав которых входят простые операторы.К простым операторов относятся оператор присваивания, пустой оператор, оператор пере- хода и оператор вызова процедуры.

К структурным операторов отнесены составной оператор, условный оператор, все операторы цикла, оператор варианта, оператор присоединения.

Все операторы языка Паскаль представлены на диаграмме (рис. 4.1) в насту- Пном порядке:

— оператор присвоение;

— оператор процедуры (или вызова процедуры)

— составлен оператор;

— условный оператор (If)

— оператор варианта (Case)

— оператор цикла с предусловием (While)

— оператор цикла с пост-условием (Repeat)

— оператор цикла с параметром (For)

— оператор присоединения (With)

— оператор перехода (goto)

— пустой оператор (оператор не выполняет никакого действия, поэтому на диаграмме он пред- ставлений прямой линией).

Рисунок 4.1 — Диаграмма оператора

4.2 оператор присвоение

Форма записи оператора имеет вид: переменная = выражение.Знак «=» назива-

ется знаком операции присвоения.

Действие оператора заключается в том, что сначала вычисляется значение выражения и после этого вновь вычисленное значение присваивается переменной.Переменная и выражение по- должны иметь тот же самый тип.примеры:

А: = 0;

К = 2 * К + М + Sqr (X + 4);

Фрагмент программы:

Var А, В: Integer;

Rez: Real;

begin

Rez = A + B; (* При выполнении этого оператора вычисляется значение выражения справа (он имеет целый тип).Вычислено значение пере- творюеться в настоящий тип и после этого присваивается переменными ней REZ *)

А = Rez; (* Переменная Rez — действительного типа, а А — целого, поэтому операция прис- военной ошибочно, поскольку в Паскале запрещено присваивать значение выражения действительного типа переменной целого типа *)

Пример 4.1.Приведем программу вычисления расстояния между двумя точками по следующей формуле [7]:

L AB

, (4.1)

где приняты следующие обозначения: А и В.

Program TEST;

Var Xb, Xa, Yb, Ya, Lab: Real; Begin

X A ,

X B, Y A, Y B

— соответствующие координаты точек

Xb = 45; Xa = 38; Yb = 123.9; Ya = 93;

Lab = sqrt (sqr (xb-xa) + sqr (yb-ya)) Writeln ( ‘Lab =’, Lab)

end.

4.3 оператор перехода

Форма записи оператора: Goto <метка>.Оператор перехода — простой оператор, указывающий, что дальнейшая работа программы должна продолжаться с оператора, на котором стоит метка. Метка — целое число без знака. Не более чо- тирьох цифр. Метки программы должны быть обязательно описаны в секции метки (рис. 4.2). Оператор перехода следует использовать в исключительных ситуациях, когда приходится нарушать естественную структуру алгоритма.

 

Рисунок 4.2 — Диаграмма секции меток

4.4 оператор вызова процедур

Форма записи оператора процедур имеет вид: имья_процедуры [(список фактических параметров)]. Квадратные скобки означают, что список фактических параметров может отсутствовать. Понятие процедуры, ее структура, способ вы- клика будут рассмотрены ниже. Прежде всего рассмотрим стандартные процедуры ввода-вывода, поскольку трудно реализовать простую Паскаль-программу без организации ввода-вывода данных.

4.5 Ввода вывода в Паскаль стандарте

Задача обеспечения взаимодействия человека и ЭВМ принято называть вве- приведением-выводом. В Паскале эти функции реализованы с помощью четырех стандартных процедур: Read, Readln, Write, Writeln.

Для ввода информации используются две процедуры вида:

Read (C1, С2, ….Cn), Readln (C1, C2, ….Cn)

Read — процедура читает данные с именем Ci.Действие процедуры Read закинчуеть- ся, как только иссякнет список переменных С1, …, Сn.

Действие процедуры Readln аналогичная.Однако после исчерпания переменных (фа ктичних параметров) действие процедуры заканчивается переходом курсора на нача- ток следующей строки.

Операторы вывода имеют вид:

Write (P1, Р2, ….Pn), Writeln (P1, P2 …..Pn)

Р1, …, Pn — имена переменных, составляющих список вывода. Процедура Write реализует вывод значений переменных Р1, …, Pn.

Процедура Writeln реализует вывод значений переменных Р1 …, Рn в одну строку и переходит на начало следующей строки.Процедура Writeln без пара метров реализует пропуск строки (переход строки).

Таблица 4.1

 

примеры значение устройство вывода
Write (I: 4) I = 5 _5
Write (I: 5, J: 4) I = — l, J = 297 _ _ _ — 1_297
Write (I, J) I = — l, J = — 435 _- l_ .._- 435
Write (I: 1, J: l) I = — 1, J = — 435 — 1 — 435
Write (I: l, ‘,’, J: l) I = — l, J = — 435 — 1 — 435
Write ( ‘Метод Гаусса’)   метод Гаусса
Write ( ‘I =’, l: 2) I = — l I = — l

При этом следует помнить, что параметры Р1 …Рn могут быть вида:

Е

Е: m

Е: m: n,

где Е — выражение, значение которого необходимо вывести, m, n- выражения типа integer, нео бовьязкови параметры, которые указывают соответственно ширину поля, выводится, и количество дробных цифр.

Выражение Е может быть типа real, integer, char, boolean, а также может быть ря- дком символов. Конструкция вида Е: m: n может использоваться только для данных типа real.Для данных остальных типов используется конструкция вида Е: m.

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

Если параметры m и n опущены, то имеются в виду их некоторые, зависящие от реализации, значение.

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

Program Test;

Var Xb, Xa, Yb, Ya, Lab: Real; Begin

Write ( ‘Напишите X и Y координаты точки А’); Readln (Xa, Ya)

Write ( ‘Напишите X и Y координаты точки B’); Readln (Xb, Yb)

Lab = sqrt (sqr (xb-xa) + sqr (yb-ya))

Writeln ( ‘Расстояние между двумя точками =’, fk, «единиц») Writeln ( ‘Lab =’, Lab)

Readln; end.

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

 

 

i Б

, (4.2)

где Т

ра; Б

— коэффициент ширины зубчатых колес быстроходной ступени редукто-

— коэффициент ширины зубчатых колес тихоходной ступени редуктора;

i -передатне число всего редуктора.

4.6 условный оператор IF

В Паскале существуют средства, с помощью которых можно организовать галу- ния в программе. Одним из таких операторов является оператор If, представленный на синтаксической диаграмме (рис.4.1).

Действие оператора заключается в следующем: вычисляется значение выражения бу левого типа. Если оно истинно, то выполняется оператор, следующий за сло- вом then.Если значение ошибочное, выполняется оператор, следующий за сло- вом else.Если после зарезервированных слов then или else нужно выполнить деки- лька операторов, то их нужно объединить в составной оператор с помощью операторных скобок begin, end.

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

Необходимо отметить, что оператор, фигурирует в синтаксической диаграмме условного оператора, может быть составным.

Пример 4.3.Напишем программу, которая определяет и печатает всего из двух цифр:

Program Мах;

Var А, В: Integer; begin Read (А, В);

if A> B

then Writeln (A) else Writeln (B)

end.

Для наглядности желательно соблюдать вида записи условных операторов.

Альтернативные части этого оператора должны смещаться по отношению к условию:

if Условие

then оператор

else оператор

Если операторы составлены — их расположение может быть следующее:

if условие

then begin

 

end

операторы

else begin

операторы

end

4.7 оператор варианта CASE и его расширение в ТурбоПаскали

Более общим случаем условного оператора является оператор варианта case.Условный оператор в зависимости от значения булевого выражения обеспечивает вы- ния одного из двух возможных операторов. Оператор case дает возможность вы- ваты один из нескольких операторов в зависимости от значения выражения, фигурирует на синтаксической диаграмме (рис.4.1) и часто называется селектором. Другими сло- вами case выполняет роль переключателя в зависимости от значения селектора.Селектор может быть целого, символьного или булевого типа.

Константы на синтаксической диаграмме (рис. 4.1) называют метками вариан- тов. Метки должны иметь тот же тип, что и селектор. После каждой метки (по-слидовности меток) после знака двоеточия записывается оператор, который может бу ты составным.

Если для некоторых значений варианта никаких действий производить не надо, то записывается пустой оператор. Каждое отличное от других значение селектора может появиться только в одном элементе case- списка.

Действие оператора заключается в следующем: вычисляется значение выражения (селе- кторый).После этого выполняется лишь тот оператор, который имеет метку варианта, значением которой совпадает со значением селектора.

Желательно, чтобы любое возможное значение селектора было указано среди констант case- оператора.В ситуации, когда какая-то константа отсутствует, управ- ния передается операторам, следующим за служебным словом else.

Пример 4.4.Рассмотрим Паскаль-программу, в которой вычисляется значение условного навантажениия подшипника [Киркач-Баласанян], которое опреде- ется типом подшипника (значение типов приведены в таблице). Пусть значение всех параметров, используемых в формуле заранее известны и по- даются константами (таблица 4.2).

Таблица 4.2

 

Номер по порядку Тип подшипника формула
1 радиально шарикоподшипники P (XVF r YF a) K б K Т

P = (XVF r + YF a) K б K Т

2 Подшипник с цилиндрическим роликами P = VF r K бы K Т
3 Упорно-радиально подшипник P = (XF r + YF a) K б K Т
4 упорный подшипник P = F a K бы K Т

Программа на Паскале имеет вид:

Program Test;

Const X = 0.56; V = 1; Fr = 950; Y = 1.45; Fa = 588; Kb = 1.2; Kt = 1.05;

Var P: real;

Tip: integer;

 

Begin

Writeln ( ‘Выберите тип пидшиника и введите цифру’); Writeln ( ‘1- радиально шарикоподшипники’);

Writeln ( ‘2 Подшипник с цилиндрическим роликами’); Writeln ( ‘3 Упорно радиально подшипник’);

Writeln ( ‘4 Упорный подшипник’); Readln (Tip)

Case Tip of

1: P = (X * V * Fr + Y * Fa) * Kb * Kt;

2: P = V * Fr * Kb * Kt;

3: P = (X * Fr + Y * Fa) * Kb * Kt;

4: P = Y * Fa * Kb * Kt;

else Writeln ( ‘Значение типа неверно ‘); end;

Writeln ( ‘Условное навантажениия подшипника P =’, P: 4: 2) Readln;

End.

В приведенной программе предусмотрена обработка ситуации, когда вместо цифр 1

— 4 считана другая цифра. В этом случае, можно выдавать сообщение «значением типа неверно». Для выдачи уведомления в программе в case- оператор после строки с меткой 4 добавлен оператор Writeln ( ‘значение …. «).Оператор, следующий за словом else, называется оператором умолчания и вы- конуеться, если ни одно значение метки не соответствует значению селектора.

4.8 Операторы цикла

Для реализации циклов в Паскале предусмотрены три оператора. Операторы while и repeat используются в том случае, если число повторений опе- ратора (может быть составным) неизвестно.Оператор for используется, если число повторений оператора известно заранее.

Действие оператора цикла с постусловием repeat заключается в следующем.Ис гается оператор или последовательность операторов, следующих за словом repeat.Вычисляется значение логического выражения, расположенного по ключевому слову until.Если значение ошибочное, то повторяется выполнение оператора (пос лидовности операторов), следующих за ключевым словом repeat.В случае послидо-

 

вность операторов операторные скобки begin, end не нужны.Если значение вы- раз — истинно, то выполнение указанных операторов прекращается.

Пример 4.5.Пусть необходимо рассчитать удельный эффективный расход пали- ва ДВС в диапазоне изменения угловой скорости коленчатого вала двигателя от минимального значения

— удельный эффективный расход топлива в режиме максимальной мощности

ДВС — примем равным 80 мг / кДж.

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

вид:

Program Test;

Const geN = 80; Wmin = 50; WN = 300; dW {Δ W} = 5, Var W, ge: integer;

begin W = Wmin;

Repeat

ge = geN * (1.55-1.55 * W / WN + sqr (W / WN)) Writeln ( ‘W =’, W, ‘ ge = ‘, ge)

W = W + dW

Until W> WN; end.

Действие оператора цикла с предусловием while состоит в следующем. Исчис-

ся значение логического выражения. Если оно истинно, то выполняется оператор (или составной оператор), следующий за ключевым словом do.Если оно ложно, то на этом выполнение цикла прекращается и выполняется опера- тор, следующий за while- конструкцией.

Реализация примера 4.5 с использованием while- конструкции будет на- ступни вид:

Program Test;

Const geN = 80; Wmin = 50; WN = 300; dW {Δ W} = 5, Var W, ge: integer;

begin W = Wmin; while W <= WN do

begin ge = geN * (1.55-1.55 * W / WN + sqr (W / WN)) Writeln ( ‘W =’, W, ‘ ge = ‘, ge)

W = W + dW

end;

end.

Идентификатор оператора for определяет управляющую переменную цикла.Управляющая переменная принимает значения, начиная с первого (им является выражение после символа «=») и заканчивая последним (им является выражение после ключевых слов to или downto).При ко- жному новом значении управляющей переменной выполняется оператор (или складе- ный оператор), следующий за ключевым словом do.Типы управляющей переменной и вы- раз должны совпадать. Управляющая переменная должна быть порядкового типа, то есть для которого определены функции Succ (в случае ключевого слова to) или Pred (в случае ключевого слова downto).

Если используется ключевое слово to, значение управляющей переменной растет в ходе выполнения цикла, если используется ключевое слово downto, значение управляющей переменной убывает.

Если первое значение управляющей переменной превышает последнее (для to) или меньше последнего (для downto), то оператор, стоящий после ключевого слова do, не выполняется ни разу.

Пример 4.6.Написать Паскаль-программу вычисления факториала числа.

Program Fact;

Var F, I, N: integer; begin F = l;

Read (N)

for l = l to N do F = F * I; Writeln (F)

end.

Пример 4.7.Распечатать последовательность латинских букв от «А» до ‘Z’

Program Letter;

Var L: char; I: integer;

begin for I: = ‘A’ to ‘Z’ do Write (I) Writeln

end.

Задания для контроля.Написать программу, которая реализует пример 4.5, с использованием оператора for.

5 ПРОСТЫЕ И СТРУКТУРИРОВАННЫЕ Типы ДАННЫХ

5.1 Перераховний и ограниченный тип

Ранее рассматривались простые стандартные типы данных — integer, boolean, char, real.Первые три типа данных является порядковыми, то есть к переменным этих типов применяются стандартные функции Succ и Pred.

Кроме этих типов в Паскале разрешено введение нового типа. Эти новые про- сти типа должны быть описаны в секции типов, которая представлена ​​на синтаксической

диаграмме (рис.5.1). Согласно стандарту языка эта секция располагается между секцией констант и секцией переменных. Введение новых типов расширяет мо жливости языка Паскаль, повышает читабельность программ.

 

Рисунок 5.1 — Секция типов

Предположим, что необходимо представить последовательность месяцев года. Ко- ристуючись передумовнимы типами данных, можно использовать прием, который ставит в соответствие число 1 — январю, 2 — феврале и т. Д. Однако такое представление неудобно, поскольку надо трактовать числовые значения. Зручни- е было бы написать Month = MAY.

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

type

Month = (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)

var M: Month;

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

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

M = APR;

Write (M)

супер APR выведено не будет. Поэтому выводить значения переменных пере- ховного типа нужно программным путем. Однако можно вывести выражение вида Write (Ord (M)).При этом будет выведено число 3, соответствующее порядковому номеру идентификатора APR в списке значений.Переменные перераховного типа мо гут быть использованы в булевых выражениях. Кроме этого к данным этого типа применимы операции сравнения, например:

if M> MAY and M <SEP then Writeln ( ‘Летний месяц’)

Пример 5.1.Пусть перечень специальностей учебной кафедры заданный следующими обозначениями: «Информационные технологии проектирования» — ITP, «Гусеничные и колесные машины» — GKM; «Электрические системы и комплексы транспортных средств» — ESKTS. Написать программу, в которой переменной пере- ховного типа, присваивается одно из значений GKM, ESKTS, ITP в зависимости от

введенного одного символа. Если введенные символы ошибочны, то выдать со- отне сообщения.

program TM;

type spes = (KGM, ETTS, AT) var S: spes;

Well: boolean; C: char;

begin

Read (C) Well = false; case С of

‘G’: begin Well = true; S = KGM; end; ‘E’: begin Well = true; S = ETTS; end; ‘I’: begin Well = true; S = AT; end; end; {Case}

Writeln (Ord (S)) Readln;

if not Well then Writeln ( ‘Ложный символ ‘); end.

Упорядоченность элементов перераховного типа определяется порядком их преемственности. Самый левый элемент имеет минимальное значение, а правее — ма- ксимальне.

Кроме перераховного типа в Паскале разрешено введение так называемого об- межень или интервального типа, форма записи которого представлена ​​на нижней ветке синтаксической диаграммы (рис. 4.1). Например: Type year = 1900..2000; let- ter = ‘A’ .. ‘Z ‘; spes = 1..3 ;.

Левая и правая константы задают диапазон значений, и их называют от- дно нижней и верхней границей ограниченного типа. Значение этих констант должны удовлетворять условию: левая константа <= права константа.

Введение ограниченного типа улучшает читабельность программ, поскольку представляет диапазон значений, которые может принимать переменная этого типа. Кон- ты в определении ограниченного типа должны относиться к тому же самому базо- вого типа (целого, символьного, порядкового). Базовый тип констант определяет допустимость соответствующих операций над данными ограниченного типа. И перерахов- ной, и ограниченный типы переменных относят к простому типа.

Простой — это такой тип, который может представлять только одно значение.

Например, переменная типа integer может хранить только одно целое число.

5.2 структурированные типы данных

Наряду с простыми типами Паскаль содержит ряд структурированных типов да-

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

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

5.2.1 Массивы

Массив — это упорядоченный набор переменных одного типа. Массивы содержат фиксированное число компонент, которое задается при определении переменных типа массив. Тип компонент массива — базовый. Тип индекса (индексов) в описании замыкается в квадратные скобки и относится к простому.

Ограничений на количество индексов нет. Индекс задает место элемента в ма- седые. Тип компоненты массива может быть любым.

Примеры описания массивов:

Mas: array [1..15] of real; (* описан массив из 15 действительных чисел *)

Spes: array [(GKM, ESKTS, ITP)] of integer; (* описан массив целых чисел, индексы элементов массива имеют перераховний тип и принимают значения названий специальностей GKM, ESKTS, ITP *)

В: array [ ‘A’ .. ‘Z ‘] of boolean; (* описан массив элементов булевого ти- па, тип индексов — ограниченный символьный *)

С: array [1..3, 1..5] of real; (* описан двумерный массив С действительных чисел, содержащий три строки и пять столбцов *)

D: array [(BLACK, WHITE)] of 11..20; (* описан массив D целых чи сел с индексами BLACK, WHITE. Каждый элемент массива может принимать зна- ний от 11 до 20 *)

К первому элементу массива Mas можно обратиться Mas [l], ко второму — Mas [2] и т.д. Пример цикла, который обнуляет элементы массива Mas, имеет вид:

for I: = 1 to 15 do Mas [I] = 0;

Переменная Mas [I] называется переменной с индексом.В качестве индекса может быть любое выражение, имеющее тот же тип, что и индекс.

Пример 5.2.Написать программу для вычисления суммы элементов массива из 100 действительных чисел.

Program Test; Const N = 100;

Type Mas = array [1 ..N] of real; var Sum: real; M: Mas;

I: integer; begin

Sum: = 0;

for I: = l to N do Sum = Sum + M [I];

Writeln ( ‘Sum =’, Sum) end.

В Паскале многомерный массив можно описать как одномерный, эле- ментами которого являются массивы. Упомянутую выше матрицу С можно описать как однови- мерный массив из трех элементов типа строка, каждый из которых является массивом из пяти элементов:

Type Mas = array [1..3] of array [1..5] of real; Var А, В: Mas;

При последовательном записи каждой строки матрицы в память дотримують- ся правила размещения двумерного массива по строкам. Ссылка на элемент матрицы, лежащей на пересечении i-й строки и j-го столбца, выглядит следующим чи ном: A [I, J]

Пример 5.3.Написать программу вычисления произведения двумерных дийс- них матриц А размерностью (N, M) и B размерностью (M, L). Результирующая мат- риця С будет размерность (N, L), причем каждый ее элемент обчислюватиметь- ся по формуле

 

 

 

program Test;

c ij

Σ a ik k 1

b kj ,

(I 1, …, N; j 1, …, L).

const N = 5, M = 2; L = 3;

var A: array [1 ..N, 1 ..M] of real ;

B: array [1 ..M, 1 ..L] of real;

C: array [1 ..N, 1 ..L] of real; i, j, k: integer;

begin {Ввод массивов A, B} for i: = 1 to N do

for j = 1 to L do begin C [i, j] = 0;

for k: = 1 to M do C [i, j] = C [i, j] + A [i, k] * B [k, j];

Writeln ( ‘C’, i, j, ‘=’, C [i, j]);

 

end.

end;

 

5.5.2 Символьные строки.Тип String в ТурбоПаскали

Строка — это массив, компоненты которого имеют тип char, а тип индекса имеет нижнюю границу, равную 1.

Строки и строчные константы можно использовать в операторах присво- ення, а также в процедурах Write, Writeln как фактические параметры.

К строк применимы все 6 операций отношений, но при этом строки по-должны иметь одинаковую длину.

В ТурбоПаскали введен тип данных String.Тип данных String иногда на- Зива стрингов.Примеры описания стрингов переменных:

var Name: string [20]; Title: string [40]; Rez: string [70];

Память, отведенная для хранения значений переменной Name, составляет 21 байт. В каждом байте хранится один символ (символ — это цифра, буква, точка или любой другой знак). Каждая буква является значением типа char.Один байт переменной Name содержит ее текущую длину. Это значение не должно пре- вышать 255. Например:

Name = «Автор»;

Title: = ‘Программирование на языке Паскаль ‘;

При присвоении значения стрингов переменной берется в кавычки (апостро- фи, но не парные кавычки). Переменная Title занимает всего 34 байта, один байт содержит ее текущую длину.В стрингов выражениях используется только одна опера-ция — конкатенация (слияние), которая обозначается знаком «+».

Пример. Rez = Name + Title;

Значение выражения Rez: «Автор Программирование на языке Паскаль».К стрингов переменных могут применяться следующие операции сравнения: =, <

>,>,> =, <, <=. При этом стринги переменные должны иметь одинаковую длину, иначе фиксируется ошибка. пример:

var Age: string [3] …

Age: = ‘тридцать’

Переменной Age будет присвоено значение «три», поскольку максимальная дов- жина переменной Age не должна превышать три.Лишние праве буквы усекаются. Для переменных типа String в ТурбоПаскали допускается применение про-

процедур Read, Readln, Write, Writeln.

5.5.3 записи

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

Пример 5.4.

type Date = record

Year: integer; Month: 1 ..12;

Day: 1..31

end;

{Тип Date включает три поля: Year, Month, Day.}

type Book = record

Title: string [40]; Author: string [50];

Entry: Date end;

var Dl: Date; b: Book;

Объявления типа запись осуществляется с помощью ключевого слова record, за которым следует список полей записи.Завершается описание этой структуры ключевым словом end.Для каждого поля должны быть указаны имя и тип. Именем поля может быть любой идентификатор.

Тип Book содержит три поля, одно из которых имеет ранее определенный тип Date.

В Паскале разрешено использовать массивы записей.

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

Dl.day = 25;

B.title = ‘computer games’; B.author = ‘Levy’;

6 ПРОЦЕДУРЫ И ФУНКЦИИ

6.1 подпрограмма в Паскале

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

Наличие всех секций (кроме секции оператора) в блоке подпрограмм нео бовьязково. В FreePascal разрешена любое количество секций типов в блоке под- программ.

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

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

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

переменных.

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

Из соображений надежности не рекомендуется использовать одинаковые идентификаторы в викликальний программе и подпрограмме. Если программа (функ- ция или процедура) является вложенной, то к ней можно обращаться только внутри программы (например, с именем К), в которой она описана. Причем обращение к ней может происходить как из самой программы К, так и из описанных в К других пидп- рограм.

6.2 функции

Функции обычно используются для описания подпрограммы, в резуль тате выполнения которой значение результата приобретает одна переменная. Эта переменная — имя функции. Поэтому в заголовке функции через двоеточие описывается тип функции. В теле функции должен быть оператор, который присваивает имени функции значение ре- тату. Обращение к функции происходит аналогично обращению к стандартным функциям типа SQR, SIN и др. Обращение к функции происходит в выражении. Для этого в выражении записывается имя функции, за которым в круглых скобках пере- рассчитываются фактические параметры, то есть параметры, которые необходимы для Исчис- ления значения функции. Для каждого формального параметра, входит в список формальных параметров (в заголовке функции) при обращении к должен быть указан фактический параметр. Порядок следования, количество, тип формальных параметров должны строго соответствовать порядку следования, коли- кости, типа фактических параметров.

Пример 6.1.Написать Паскаль-программу вычисления эффективного кру- отчетного момента двигателя внутреннего сгорания по формуле

M e

N e

(6.1)

для значений угловой скорости коленчатого вала двигателя Изменяющейся в

пределах от 50 рад / с до 300 рад / с с шагом = 10 рад / с.Реализовать с по-

мощью подпрограммы-функции вычисления значений функции

N e по формуле:

— максимальная угловая скорость коленчатого вала ДВС — равна 300

рад / с;

N eN

— максимальная эффективная мощность ДВС; коэффициент

a = 0,15.В

формуле (6.2) коэффициенты

a , b

для двухтактного дизеля в соответствии доривню-

 

ют:

a = 0,8;

b = 1,2.Программа должна печатать таблицу значений функции

M e .

Program MOMENT;

Const wN = 300 .; aw = 0.8; bw = 1.2; wmin = 50 .; dw = 10.; Var w, Me, NeN: real ;

Function Ne (w: real): real; Var v: real;

begin

 

 

end;

v = w / wN; Ne = NeN * (aw * v + sqr (v) * (bw-v))

begin w = wmin;

Write ( ‘NeN =’); Readln (NeN) Repeat

Me = Ne (w) / w;

Writeln ( ‘w =’, w, «Me = ‘, Me) w = w + dw

Until w> wN;

end.

6.3 процедуры

Иногда нельзя подпрограмму реализовать как функцию (например, работа

с массивами, сортировка в памяти и др.). Если по алгоритму требуется выдача более чем одного результата, то, как правило, используются подпрограммы процедуры.Отмены процедур от функций:

— способ вызова процедуры отличается от вызова функции, поскольку вызов производится с помощью специального оператора вызова процедуры;

— в заголовке процедуры отсутствует описание типа ее имени, поскольку имя процедуры никак не связано с результатом (одним или несколькими), что виклика- ется ней;

— для передачи результатов процедуры используются формальные параметры в заголовке процедуры, описанные с помощью ключевого слова var.

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

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

Пример 6.2.Написать процедуру вычисления эффективной мощности и эффективного крутящего момента двигателя внутреннего сгорания соответственно по формулам (6.1) и (6.2) для значений угловой скорости коленчатого вала двигателя Изменяющейся в пределах от 50 рад / с до 300 рад / с с шагом = 10 рад / с. program DVS;

Const wN = 300 .; aw = 0.8; bw = 1.2; wmin = 50 .; dw = 10.; Var w, Me, Ne, NeN: real ;

procedure EFF (w: real; Var N, M: real) Var v: real;

begin

 

 

 

end;

v = w / wN; N = NeN * (aw * v + sqr (v) * (bw-v)) M = N / w;

begin w = wmin;

Write ( ‘NeN =’); Readln (NeN) Repeat

EFF (w, Ne, Me)

Writeln ( ‘w =’, w, «Ne = ‘, Ne,» Me =’, Me) w = w + dw

Until w> wN;

end.

6.4 процедурный тип данных

Процедурный тип данных необходим в ситуациях, когда при вызове ста-

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

Формат описания данных процедурного типа имеет следующий вид для пидпо- рядкованих блок-функций

TYPE имя я _ типа = Function (список формальных параметров): тип функции;

и для подчиненных блоков процедур

TYPE имя я _ типа = Procedure (список формальных параметров)

Переменной процедурного типа можно присваивать имена только тех про- дурь или функций, для которых установлен дальний вызов {$ F +} [5,6].

Пример 6.3.Используя единый блок суммирования, вычислим с точностью E = 0,0001 следующие суммы:

Program Summing; Const E = 0.001;

Type Fun = Function (m: word): real; { объявления процедурного ти- па}

Var S1, S2, S3: real;

Function Sum (f: Fun; E: real): real; {Начало блока суммирования}

Var S: real; m: word; Begin S: = 0; m = 1;

Repeat S = S + f (m) m = m + 1

until f (m) <E; Sum = S;

End {конец старшего блока}

{$ F +} (* включение дальнего вызова *)

Function F1 (j: word): real; {Распространяется на три}

Begin F1 = 1 / (j * (j + 1)); {ниже лежащих блок-функции }

End;

Function F2 (i: word): real; Begin F2 = 1 / sqr (2 * i-1); End;

Function F3 (k: word): real;

Begin F3 = 1 / (k * (k + 1) * (k + 2)) End;

{$ F-} (* отключения дальнего вызова *) Begin {начало основной программы } S1 = Sum (F1, E)

S2 = Sum (F2, E)

S3 = Sum (F3, E)

Writeln ( ‘S1 =’, S1, «S2 = ‘, S2,» S3 =’, S3)

End.

В примере 6.3 F1, F2, F3 является блоками-параметрами.

Подчиненные блоки, используемые в качестве параметров, не могут быть вложенными. Заголовки блоков — параметров общего старшего блока (в примерах — Sum) должны быть подобные; только имена блоков и их параметров (в прик- порядке i, j, k) могут различаться, последнее совпадает.Это сходство позволяет опи- сать общий вид заголовка как процедурного типа, имеет целью контроль правильности обращений к старшему блока. Имя блока в описании типа опущена как несуществующий элемент. Например, третью строчку программы нужно читать так: «Тип Fun — это какая-то действительная функция одного аргумента типа word».

Таким образом, процедурный тип указывает:

— класс подчиненного блока;

— сколько у него параметров;

— тип и порядок записи параметров;

— для блока-функции — тип результата.

Пример 6.4.Пусть заданные допустимая погрешность E и границы a, b (a <b) зоны поиска локального максимума функции F. Составим программу, которая по по- мощью функции Xmax (описана ниже) находит максимальное значение эффективном ного крутящего момента двигателя внутреннего сгорания Memax по формуле (6.1) на интервале изменения угловой скорости коленчатого вала двигателя от 50 рад / с до 300 рад / с.

Program Maximum;

Const wN = 300 .; aw = 0.8; bw = 1.2; Var E, NeN, Memax: real;

Type fx = Function (x: real): real;

Function Xmax (F: fx; E: real; Var a, b: real): real;

{Начало блока поиска локального максимума}

Var h: real; Begin

Repeat h = (b-a) / 3;

If F (a + h) <F (b-h) Then a = a + h

Else b = b-h

Until h <E; Xmax = a + h;

End; {Конец блока поиска локального максимума}

{$ F +}

Function Me (w: real): real ; {Функция вычисления} Var Ne, v: real; {эффективного крутящего} Begin {момента ДВС}

v = w / wN;

Ne = NeN * (aw * v + sqr (v) * (bw-v)) Me = Ne / w;

end;

{$ F-}

Begin {начало основной программы}

Write ( ‘Введите точность вычисления =’); Readln (E) Write ( ‘NeN =’); Readln (NeN)

Memax = Xmax (Me, E, 50, 300)

Writeln ( ‘Максимальное значение эффективного крутящего момен и ДВС =’, Memax)

End.

В данном примере в качестве абстрактной функции F выступает конкретная фу- нкция Me.Функцию Xmax можно использовать для поиска локального максимума любой действительной функции одного действительного аргумента.

7. БИБЛИОТЕКА GRAPH

7.1 инициализация графического режима

Отметим прежде всего, что система координат в графическом режиме не соответствует системе координат текстового режима. Текстовый режим обес- слышит, как правило, выдачу символов в 25 строк и 80 столбцов. Графические же режимы обеспечивают выдачу точек, различную для разных средств:

640 х 200 для EGA;

640 х 350 для EGA;

640 х 480 для VGA.

Для вывода графических изображений на экран FreePascal предоставляет пользо- вачеви библиотеку Graph. Это означает, что программа должна содержать объявления этой библиотеки после заголовка.

Program Им ‘я _ программы;

uses Graph; {Обязательные для работы в графическом режиме}

Работа программы начинается с инициализации графического режима процедурой InitGraph и завершается процедурой CloseGraph.

Любая программа имеет вид:

Program Им ‘я _ программы; uses Graph;

var

grDriver, grMode, errCode: Integer;

{Эти переменные используются процедурой InitGraph} begin {тело программы}

grDriver = Detect; {Определение номера драйвера} InitGraph (grDriver, grMode, «Путь к драйвера ‘);

{Путь к драйверу, например, «C: \ ТР \ ВСЕ ‘} errCode = GraphResult;

if errCode = grOK then begin

{Режим открытый и Вы можете работать}

………….

CloseGraph; {Закрывает режим графики} end

else

begin {режим не удалось открыть.Почему? }

writelnC … ‘); {В этом месте Вы сообщаете причину неудачи, которую узнаете в результате анализа

переменной errorCode} end;

end.

Переменная ErrorCode сохраняет значение, полученное функцией GraphResult, которое может быть числом в диапазоне от 0 до 14.

О безошибочную работу свидетельствует значение, равное 0 (мнемоника этой константы — grOk) остальные значения указывает на причину невозможности инициализа- ции графики:

  • 1 (grNolnitGraph) — графика не инициализирована (используйте InitGraph),
  • 2 (grNotDetected) — не обнаружен графический устройство,
  • 3 (grFileNotFound) — не найден драйвер устройства,
  • 4 (grInvalidDriver) — неверный драйвер.

7.2 построение графиков функций

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

П р и ве д е н а ни же че п ро г р а ю в и в в ди т ь н а от г. и с к у x n , x k

график любой

которой заданной функции

F x для которой заданные значения абсолютного минимума

F min

и абсолютного максимума

F max

(На отрезке).  Если фактические значения

функции окажутся больше заданного рху (снизу).

F max

(менее

F min), график обрезается зве-

если значение

F min

и F max

завышены по абсолютной величине, то эк-

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

ось ординат (y) не вычеркивается, если ваты весь экран по горизонтали.

x n 0

или

x k 0, чтобы исполь-

 

Пример 7.1.Разработать график функции

y sin x

x

н а от р и ЗКУ x n , x k .

 

Program Grafic; Uses Graph;

Const n = 200; {Количество точек} Var grDriver, grMode: Integer;

{Эти переменные используются процедурой InitGraph} x, y, x0, y0, xm, ym, j: Integer;

cvet, fon: Word; {Цвет и фон графики соответственно}

xn, xk, dx, xx, Fmax, Fmin, Razmax: Real;

Function F (x: Real): Real; {Выводимая на график функция}

Begin

if x = 0 then F = 1 else F = sin (x) / x; End;

Begin {тело программы}

Writeln ( ‘Fmax, Fmin, xn, xk =’); Readln (Fmax, Fmin, xn, xk) Writeln ( ‘Цвет графика, фон =’); Readln (cvet, fon)

dx = (xk-xn) / n; Razmax = Fmax-Fmin;

if Fmax <0 then Razmax = -Fmin; if Fmin> 0 then Razmax = Fmax; grDriver = Detect; InitGraph (grDriver, grMode, »); SetColor (cvet)

SetBkColor (fon) xm = GetmaxX; ym = GetmaxY;

x0 = Round (-xn / (xk-xn) * xm) {X0 задает положение оси y, y0 за- дает положение оси x }

y0 = Round (Fmax / Razmax * ym) if Fmax <0 then y0: = 0;

Line (0, y0, xm, y0) {Вычерчивании оси x} Line (x0, 0, x0, ym) {Вычерчивании оси y} For j = 0 to n do

Begin

xx = xn + j * dx;

x = Round (j / n * xm)

y = Round (y0 — F (xx) / Razmax * ym)

{PutPixel (x, y, cvet) } {Вывод графика в виде точек} if j = 0 then MoveTo (x, y) else LineTo (x, y)

{Вывод графика в виде ломаной линии} End;

Readln; CloseGraph;

End.

8. Короткая СПРАВКА

8.1 процедуры FreePascal

Append (var имя файла: text) — открывает существующий текстовый файл для приед- ния.

АГС (координата Х центра, координата Y центра: Integer; начальный угол, кон- цевий угол: Word; радиус: Word) — рисует геометрический образ дуги.

Assign (var имя файла; внешнее имя: string) — назначает имя внешнего файла файловой переменной.

Bar (координата Х левой верхней вершины, координата Y левой верхней вершины, координата Х правой нижней вершины, координата Y правой нижней вершины: Integer) — рисует геометрический образ сплошного бруса.

Bar3D (координата Х левой верхней вершины, координата Y левой верхней вершины, координата X правой нижней вершины, координата Y правой нижней вершины: Integer, глубина: Word; вершина: Boolean) — рисует геометрический образ трехмерного бруса.Параметр вершина может принимать два значения: TRUE (мнемоника константы — торопить) — является верхняя площинка, FALSE (мнемоника константы — TopOff) — нет верхнего площинкы.

С i г cl е (координата Х центра, координата Y центра: Integer; радиус: Word) —

рисует геометрический образ круга.

Close (var имя файла) — закрывает открытый файл.

CloseGraph — завершает работу в графике.

ClrScr — очищает активное окно, заполняя его цветом, заданным в

TextBackGround.

Dec (var переменная 1, переменная 2: Longint]) — уменьшает переменную 1 на значение переменной 2,

если вторая переменная не задана, то уменьшает на 1.

Delay (длительность в миллисекундах: Word) — задерживает выполнение следующей опе рации.

Delete (var строку: string; номер символа, с которого начинается удаление: Integer; число символов, удаляются: Integer) — удаляет подстроку из строки.

DetectGraph (var драйвер, режим: Integer) — проверяет технику и определяет драйвер.

DrawPoly (число вершин: Word; var массив точек) — рисует геометрический образ контура с линий.

Ellipse (координата Х центра, координата Y центра: Integer; начальный угол,

конечный угол: Word; Xрадиус, Yрадиус: Word) — рисует геометрический образ эле- птичнои дуги.

Exec (полное имя, командная строка: string) — выполняет заданную программу.

Exit — осуществляет немедленный выход из текущего блока, если текущим блоком является программа, она завершается.

Ellipse (координата Х центра, координата Y центра: Integer; Xpaдиyc, Yрадиус: Word) — рисует геометрический образ заполненного эллипса.

Fill Ро l в (число вершин: Word; var массив точек) — рисует геометрический образ заполненного контура.

F1 оо dFill (координата Х, координата Y, цвет границы: Word) — заполняет об- ласть.

GetDate (var год, месяц, день, день недели: woгd) — возвращает набор текущей да- ты в операционной системе.

GetTime (var часы, минуты, секунды, сотые: word) — возвращает время, установлен- ный в операционной системе.

GoToXY (X, Y: Byte) — позиционирует курсор в текстовом режиме (внутри возраст- на) в точку с координатами X, Y.

GraphDefaults — восстанавливает графическую систему по параметрам по умолчанию позиционирует курсор.

На lt [(код выхода: word)] — останавливает программу.

Inc (var переменная 1 [; переменная 2: Longint]) — увеличивает переменную 1 на значение переменной

2, если вторая переменная не задана, то увеличивает на 1.

InitGraph (var номер драйвера: Integer; var режим графики Integer; путь к драйверу: string) — инициализуе графическую систему.

Insert (подстрока: string; var строка: string, позиция: Integer) вставляет подстроку в строку, начиная с заданной позиции.

Line (координата X начала линии, координата Y начала линии, координата X конца линии, координата Y конца линии: Integer) — рисует геометрический образ линии (под углом к точки).

LineRel (прирост по координате Х, прирост по координате Y: Integer) — рисует ге ометричний образ линии (показателя до точки в приростах).

Line То (координата X конечной точки, координата Y конечной точки: Integer) — ма- ет геометрический образ линии (показателя до точки в координатах).

Мо v е R э l (прирост по Х, прирост по Y: Integer) — перемещает курсор на заданный прирост.

Мо v Это (координата X, координата Y: Integer) — перемещает курсор в заданную точку.

Out Т ext ХУ (координата Х точки выдачи текста, координата Y точки выдачи текста: Integer; текстовую строку: siring) — выдает строку, начиная с заданной точки.

PieSlice (кoopдинaтa X цeнтpa, координата Y цeнтр: Integer; начальный угол,

конечный угол: Word; радиус: Word) — рисует геометрический образ заполненного сектора.

PutPixel (координата X, координата Y: Integer; код цвета: word) — уста- ет пиксель в заданную точку.

Randomize — инициализирует встроенный генератор случайных чисел.

Read ([var файл: text;] переменная 1 [, переменная 2, …, переменная n]) — читает одно или более значений в одну или более переменных.

Readln — выполняет процедуру Read, затем переходит к следующей строке фай- ла.

Rectangle (кoopдннaтa X левой верхней вершины, координата Y левой верхней вершины, координата X правой нижней вершины, координата Y правой нижней вершины: Integer) — рисует геометрический образ прямоугольника.

Reset (var имя файла [: file, размер записи: word]) — открывает существующий файл для чтения.

RestoreCrtMode — восстанавливает текстовый режим.

Rewrite (var имя файла: file [; размер записи: word]) — создает и открывает новый файл для записи.

Sector (координата Х центра, координата Y центра: Integer; начальный угол, конечный угол, Храдиус, Yрадиус: Word) — рисует геометрический образ заповне- ного эллиптического сектора.

SetBkColor (Цвет: word) — устанавливает текущий фоновый цвет.

Set Со 1 ог (цвет: Word) — устанавливает текущий цвет.

SetGraphMod е (peжим: Integer) — устанавливает систему в графический режим и очищает экран, допустим режим зависит от используемого оборудо- вания.

SetLineStyle (тип линии: word; образ: word, толщина: word) — устанавливает те- на ширину и тип линии.

Str (число [: widlh [: decimals]]; var строку: string) — преобразует числовое значениями ния в строку.

TextBackGround (цвет: byte) — выбирает фоновый цвет.

Тех t Со l ог (цвет: byte) — выбирает цвет выдаваемых символов текста в текстово- м режиме.

TextMode (peжим: Integer) — задает режим выдачи текста.

Val (Cтpoкa: string; var переменная; var код: Integer) — преобразует значение строки на его цифровое значение.

Window (координата Х левого верхнего угла, координата У левого верхнего угла, координата Х правого верхнего угла, координата У правого верхнего угла: byte) — определяет текстовое окно на экране.

Write ([var файл: text;] зминна1, зминна2 …, переменная n]) — записывает одно или би льше значений в файл, без необязательных параметров выдает на экран указанные значения.

Writeln — выполняет процедуру Write, затем выдаст маркер end-of-file (конец

_файла) в файл, без необязательных параметров выдает на экран указанные значениями ния с новой строки.

8.2 функции ТурбоПаскаля

Abs (аргумент): тот самый тип, в параметра — возвращает абсолютное значениями ния аргумента.

ArcTan (аргумент: real): real — возвращает арктангенс аргумента.

С hr (номер: Byte): Char — возвращает символ с заданным порядковым номером.Со nc а t (строка1 [строка 2, строка 3, …, строка n]: string): string — осуществляет конкате- нацию строк.

Сору (строка: string; номер_символа_початку_копиювання: Integer; чис- ло_копийованих_символив: Integer): string — возвращает подстроку заданной строки. Cos (аргумент: real): real — вычисляет косинус аргумента.

Eof (var имя_файла): Boolean — возвращает статус конца файла для объявленного в type файла.

Eoln [(var имя_файла: tехt)]: Boolean — возвращает статус конца строки текстового файла.

Ехр (аргумент: real): real — возвращает экспоненту аргумента. Fr ас (число: real): real — возвращает дробную часть числа.GetGraphMode: Integer — выдает текущий режим.

GetMaxColor: word — выдает максимальный цвет в SetColor.GetMaxMode: Integer — выдает максимальный номер режима.GetMaxX: Integer — выдает разрешение по X. GetMaxY: Integer — выдает разрешение по Y.

G е t Р i хе l (координата_Х, координата_Y: Integer): word — выдает значение кольо- ру пикселя в заданной точке.

GetX: Integer — выдает координату Х текущего показателя.

GetY: Integer — выдает координату Y текущего показателя.

GraphResult: Integer — выдаст ошибочный код для последней графической опе рации.

Int (число: real): real — возвращает целую часть числа.

KeyPressed: Boolean — возвращает значение TRUE, если на ключевой панели на- давить клавиша.

Ln (число: real): real — возвращает натуральный логарифм аргумента.

Odd (аргумент: Longint): Boolean — проверяет, является ли аргумент нечетным чис- лом.

Ord (элемент): Longint — возвращает порядковый номер элемента порядкового ти- па.

Pi: real — возвращает значение числа пи.

Pos (подстрока: string; строка: string): Byte — ищет подстроку в строке и выдает номер позиции.

 

Random (верхня_границя: word): тот самый тип, в параметра — выдает вы- случайного число в диапазоне от нуля до заданного параметра.

ReadKey: Char — считывает символ с ключевой панели.

Round (число: real): Longint — округляет действительное число до целого.

Sin (аргумент: real): real — возвращает синус аргумента.

Sqr (аргумент): тип тот же, что в аргумента — возвращает квадрат аргумента.

Sqrt (аргумент: геа1): геа1 — возвращает квадратный корень аргумента.Trunc (число: real): Longint — обрезает значение типа real до значения типа Integer.

UpCase (Символ: Char): char — преобразует символ в символ верхнего регистра.

9. ВОПРОС И ЗАДАНИЯ ДЛЯ КОНТРОЛЯ Глава 1

  1. С которых компонент состоит интегрированное инструментальное середо-

выше FreePascal?

  1. Как запустить среду FreePascal?
  2. Назовите пункты строки меню среды FreePascal.
  3. как выбрать команду с пункта меню по помощью клавиш на клавиатуре?
  4. Как создать новый документ?
  5. Как указать путь к нужной папке? Как сохранить файл в свою папку?
  6. Как отправить программу на выполнения?
  7. Как отключить окно среды FreePascal и просмотреть результат выполнения программы?Как вернуться в окно редактора?
  8. как можно задержать выполнения программы к нажатие клавиши введение?
  9. Как очистить экран? Изменить цвет фона? цвет символов?
  10. Как сохранить изменения в программе? Как сделать резервную копию программы?
  11. Как выйти из среды FreePascal?
  12. Как открыть текст программы с Вашего папки?
  13. Как в программе переместиться на одно слово влево? Вправо?

14. Как перейти к началу строки? В конец строки?

15. Как попасть на первую строчку? на последний?

16. Как переместиться на один экран вниз? Вверх?

17. Найдите и замените один идентификатор другим.

18. Как осуществить поиск нужного фрагмента по всему документа?

19. Что такое блок?

20. Покажите два способа выделения блока.Как снять-вернуть выделения?

21. Приведите два способа перемещения, копирования и удаления блока.

22. Как переключаться между открытыми окнами?

23. Как закрыть окно документа?

Глава 2, 3, 4

1. Вычислить высоту треугольника, опущенную на сторону а по известными

значениями длин его сторон a, b, c.

2. Определить координату середины отрезка (a, b), если a = 0.5, b = 2.

3. Вычислить объем цилиндра с радиусом основания r и высотой h.

4. Определить расстояние, пройденное физическим телом за время t, если тело руха- ется с постоянным ускорением а и имеет в начальный момент времени скорость V 0.

5. Определить время свободного падения физического тела с высоты H.

6. Вычислить площадь прямоугольного треугольника, а также по выбору ко- ристувача:

а) длину гипотенузы по двум его катетами;

б) длину одного из его катетов за гипотенузой и вторым катетом.

7. Дано натуральное n. По выбору пользователя определить: а) Сколько цифр в числе n?

б) Чему равна сумма его цифр? в) Найти первую цифру числа n.

8. Определить, какая из двух точек —

M 1 (X 1 , y 1 )

или

M 2 (X 2 , y 2 )

— располо-

вана ближе к началу координат. Вывести на экран дисплея координаты этой точки.

9. Определить, какая из двух фигур (круг или квадрат) имеет большую площадь. Известно, что сторона квадрата равна а, радиус круга r.Вывести на экран на- зову и значение площади большей фигуры.

10. Определить, попадает точка М (X, Y) в круг радиусом r с центром в точке (X 0, Y 0).

11. Сможет ли шар радиуса R пройти в отверстие в форме ромба со стороной P

и острым углом Q?

12. проверить, или можно с четырех данных отрезков составить паралелог-

рам.

13. вычислить множество значений функции y = x 2 + b для х, что меняется

от — 10 до 10 с шагом 2, при b = 5.

14. Вычислить k первых членов арифметической прогрессии, заданных реку- рентной формуле a n + 1 = a n + 2, где a nn-й член арифметической прогрессии.

15. вычислить произведение m членов арифметической прогрессии, если известны

значение первого члена a 1 и разность арифметической прогрессии h.

16. сформировать последовательность, элементы которой вычисляются по форму-

лой

a n

nn 1

, N = 1,2, …, 20.

17. Вычислить значение n! для n = 7.

18. Не используя стандартные функции (за исключением Abs), обчисли-

ты с точностью

Eps> 0:

y e x

1

x

1!

x

2!

x

n!

считать,

необходимой точ-

ность достигнута, если очередной слагаемое по модулю меньше Eps — все пода-

льши слагаемые можно уже не учитывать.

19. Найти первый степень числа 3, что превышает данный целое число a.

20. Найти наибольший степень числа 2, которая делит данное целое число a.

21. Проверить, содержит квадрат данного натурального числа n цифру 3

в своей записи.

22. Найти наименьшее положительное число x, что удовлетворяет условию 1 + x> 1.

глава 5

Обработать на ЭВМ массив согласно варианту задания.

вари- ант массив действия Условия и ограничения
1 2 3 4
1 X (100) Вычислить сумму и количество элементов массива Х 0 ≤ x [i] ≤1
2 A (80) Вычислить среднее арифметическое значение элемента массива А a [i]> 0
3 X (70) Переписать элементы массива Х в массив Y и пи драхуваты их количество -1 x [i] ≤ 1
4 B (50) Определить максимальный элемент массива В и его порядковый номер x [i]> 0
5 C (40) Вычислить минимальный элемент массива и ЙО- го номер x [i] <0
6 D (80) Найти максимальный и минимальный элементы массива D и поменять их местами  
7 Y (20) Вычислить среднее геометрическое элемента ма- седую Y y [i]> 0
8 Z (30) Расположить в массиве R сначала положительные, а затем отрицательные элементы массива Z.  
9 N (50) Определить сумму элементов массива N, кратных трем n [i] / 3 * 3 = n [i]
10 X (N) Вычислить сумму и количество элементов массива Х N ≤ 40

Задание Б.

вари- ант матрица действия Условия и ограничения
1 2 3 4
1 А (10,15) Вычислить и запомнить сумму и число положительным них элементов каждого столбца матрицы. Ре- зультаты отображать в виде двух строк a [i, j]> 0
2 А (N, M) Вычислить и запомнить суммы и числа негатив- них элементов каждой строки матрицы. Резуль таты отображать в виде двух столбцов N <= 20 M <= 15

3 B (N, N) вычислить сумму и число элементов матрицы, находящихся под главной диагональю и над ней N ≤12
4 C (N, N) Вычислить сумму и число положительных элементов матрицы, находящихся над главной диаго- налью c [i, j]> 0 N ≤12
5 D (K, K) Записать на место отрицательных элементов мат- Рике нули и отображать ее в загальноприйня- том виде K ≤ 10
6 D (10,10) Записать на место отрицательных элементов мат- Рике нули, а на место положительных — единицы. Ви дображуваты нижнюю треугольную матрицу в зага- льноприйнятому виде  
7 F (N, M) Найти в каждой строке матрицы максимальной ной и минимальной элементы и поместить их на место первого и последнего элемента строки из- дповидно. Матрицу вывести в загальноприйня- том виде N ≤20 M ≤10
8 F (10,8) Транспонировать матрицу и вывести на печать элементы главной диагонали и диагонали, рас- расположенными под главной  
9 N (10,10) Для целочисленной матрицы найти для каждой строки число элементов, кратных пяти, и круп- ший из полученных результатов n ij / 5 * 5 = n ij
10 P (N, N) Найти в каждой строке матрицы наибольший элемент и поменять его местами с элементом главной диагонали. Распечатать полученную ма- трицять в общепринятом виде N ≤15

глава 6

1. Описать функцию Stepen (x, n) от действительного x и натурального n, что вычисляет (по помощью умножение) величину x n, и использовать ее для Исчис-

ления b 2.7 k (a 1) 5.

2. Данные отрезки a, b, c и d.Для каждой тройки этих отрезков, из которых можно построить треугольник, напечатать площадь данного треугольника. Определить процедуру Plo (x, y, z), печатающий площадь треугольника со сторонами x, y и z, как-что такой треугольник существует.

3. описать процедуру Socr (A, b, p, q) от целых параметров (b 0), которая

приводит дробь

a к несократимой вида P.

b q

4. Пусть процедура Socr (a, b, p, q) от целых параметров (b 0) приводит

дробь

a к несократимой вида

b

P.Описать данную процедуру и использовать ее для

q

приведение дроби 1 1 1 …   1 к несократимой вида c.

3 февраля 20 d

5. Пусть процедура maxmin (x, y) присваивает параметру x больше с дийс- них чисел x и y, а параметру y — меньше.Описать данную процедуру и исполь папы ее для перераспределения значений действительных переменных a, b и c так, чтобы стало a b

c.

6. описать функцию

F (M, n)

n!m!(N m)!

, Где n и m — неотрицательные целые числа.

глава 7

1. Изобразить круг диаметром d, перемещающийся по вертикали через центр экрана.

2. Построить график функции y = x * cos (x) + sin (x), для x [-4,4] с шагом

h = 0,1.

3. Изобразить квадрат со стороной а, перемещающийся по горизонтали в 100 точек от начала координат.

4. Построить график функции y = — 6 x 2 + 3 x.

5. Изобразить прямоугольник с длиной основания L и высотой H, пере- перемещается по диагонали экрана.

СПИСОК ЛИТЕРАТУРЫ

1. Епанешников А. М. Программирование в среде Turbo Pascal 7.0.  / А. Н. Епанешников, В. А. Епанешников. — 3-е изд. стереотип. — М .: ДИАЛОГ МИФИ, 1998. — 282с.

2. Зуев Е. А. Программирование на языке Turbo Pascal 6.0,7.0./ Е. А. Зуев.

— М .: Веста: Радио и связь, 1993. — 304с.

3. Зуев Е. А. Turbo Pascal.Практическое программирование. / Е. А. Зуев.

— М .: Стрикс, 1997. — 334с.

4. Турбо Паскаль 7.0 — М .: Издательская группа BHV, 1996. — 448с. : ил.

5. Зубов В. С. Программирование на языке TURBO PASCAL (верс- ты 6.0 и 7.0). / В. С. Зубов. — Издание второе, перераб. и доп. — М .: Информацион- но-издательский дом «Филинъ», 1997. — 320с.

6. Довгаль С. И. Персональные ЭВМ: ТурбоПаскаль V 6.0, объектной проектирование, Локальные сети. / С. И. Довгаль, Б. Ю. Литвинов, А. И. Сбит- не в. — М .: «Информсистема Сервис», 1993. — 440 с.

 

[Всего голосов: 3    Средний: 5/5]

Читать  Системное программирование пособие – Принципы построения компиляторов – фазы компиляции