/
Автор: Тарануха Н.А. Гринкруг Л.С. Бурменскии А.Д. Ильина C.В.
Теги: компьютерные технологии вычислительная техника микропроцессоры программирование язык программирования паскаль
ISBN: 978-5-91359-050-3
Год: 2016
Текст
Серин '•Библиотека студента
Тарануха Н. А., Гринкруг Л. С., Бурменскии А. Д.
Ильина С. В.
Обучение программированию
Язык PASCAL
Учебное пособие
Справочные материалы, обзор. курс лекций, примеры,
алгори тмы, практические задания, кош рольные вопросы,
ответы, электронные тесты
Рекомендовано У МО пулов РФ по образованию в области
кораблестроении и океанотехники для студентов ВУЗов
и курсантов Военно-морских институтов,
обучающихся по направлению 180100
«Кораблестроение и океанотехники»
Москва
СОЛОН-ПРЕСС
2016
УДК 681.3
ББК 32.97
Т 19
Тарануха И. .4., Гршисруе Л. С., Бурменский А. Д., Ильина С. Н.
Обучение программированию: я<ык Pascal. — М.: СОЛОН-ПРЕСС, 2016. —
384 с.: ил. (Серия «Библиотека студента»).
Реценл'нты:
А. И. Хромов, д.ф.-м.н., профессор, там. директора ИММ ДВО РАН;
Г. М. Гринфелыт, К.Т.Н., доцент, проректор по учебной работе ДВОИ
ISBN 978-5-91359-050-3
В пособии подробно изложены основные принципы протраммиронання и по-
строения протрамм на языке PASCAL. Здесь же приведены справочные материалы,
готовые тексты программ, практические примеры, контро льные вопросы и элект-
ронные тесты, которые можно использовать как для лекционных, так и практиче-
ских занятий. Мши не примеры имеют специфику, связанную с кораблестроением,
флагом и водным транспортом.
Полезным и интересным является приведенный здесь уникальный обзор я ты-
ков прол раммиронания и программных комплексов.
Предназначено пособие для студентов технических специальностей вузов, в
учебных планах которых предусмотрено изучение языков программирования. Осо-
бенно полезным данное пособие может оказаться для студентов заочных и дистан-
ционных форм обучения, а также для специалистов предприятий и ортанизаний.
изучающих языки пролраммирования самостоятельно
Структура учебного пособия построена в виде учебных тем. в каждой из кото-
рых имеется и лекционный материал, и практические примеры, и контрольные во-
просы с ответами, и электронные тесты
( тесты можно счи тать по адресу: www.solon-press.ru/cd-(esl.rarT.
К11ИГА~11ОЧГОЙ
Книги изда1слылка «СОЛОН-ПРЕСС* можно закатать наложенным платежом (оплата
при получении) пи фиксированной цене. Заказ оформляется одним из трех способов:
I. Послать открытку или письмо по адресу: 123001, Москва, л/я Я2.
2. Оформить заказ можно на сайте WWW-soton-preMkni и радаелс «Книга почтой».
3. Закаигп» по тел (49$) 254-44-10, (499) 252-36-96
Бесила ню нысы.1ас1ся какими и адвгсльстав по почте Для этого присылайте конверт
с маркой по адресу, укатанному и и. I.
При оформлении лакам следует нраии.1 или» и iюлкостью указать адрес. по которому дол-
жны быть высланы киши. а также фамилии», имя и отчество получателя.
Жсла1с.1ыю указать дополнительно свой телефон н адрес электронной почты.
Через Ии1ер1кп Вы мажете и любое время получить снежий катадс»1 иXUтельстпа
•СОЛОН-ПРЕСС*, считав его с адреса www>otori-prvsvr>/luH.A»c
Интернст-мя1азин размещен на сайте www.soton-prtss-ni
По вопросам приобретения обращаться: ООО «АЛЬЯПС-КПИГА КТК»
Пм (495) 251 91 94, 2Я 91-95. www.albns-kaiga.ru
Сайт и ллитсльепм «СОЛОН-ПРЕСС*: www.Milon-prr44.ru
E-mail: nvloc^ciitoi.ni
ISBN 978-5-91359-050-3 © Тарануха Н. А. и др., 2016
© Макет и обложка «СОЛОН-ПРЕСС», 2016
Список принятых сокращений
Сокращения в обозначениях языков программирования указа-
ны в п. 1.1.1.
Сокращения в обозначениях, принятых в программных комп-
лексах, указаны в п. 1.2.1 и п. 1.2.2.
Сокращения в обозначениях расширений, характеризующих
типы файлов, указаны в п. 9.1.1.
Сокращения в обозначениях, принятых в командах встроенно-
го редактора, указаны в Приложении А.
Сокращения в обозначениях, характеризующих типы ошибок,
указаны в Приложении Б.
БД — база данных;
БЭСМ — большая электронно-счетная машина;
ОКБ — опытно-конструкторское бюро;
ООП — объектно-ориентированное программирование;
ОС — операционная система (англ. OS — Operation System);
САПР — система автоматизированного проектирования;
ЧП У — числовое программное управление;
ЭВМ — электронно-вычислительная машина;
ЯП — языки программирования;
BP — Borland Pascal;
DOS — Disk Operation System (рус. ДОС), дисковая операцион-
ная система;
GL — Generation Language, генерация (поколение) языка;
IDE — Integrated Development Environment, интегрированная
среда разработки программного обеспечения;
ОК — «окей» (разговорное от англ, «all correct»), все правильно;
3D — 3-Dimensional, имеющий 3 измерения (пространствен-
ный).
3
Путеводитель по данному учебному
пособию
1. Вопросы ио обзору развития языков программирования:
Автор языка Pascal — п. 1.1.3, 1.1.5;
Билл Гейтс — п. 1.1.5;
Версии языка Pascal — п. 1.1.5;
Время создания языка Pascal — п. 1.1.1, 1.1.5;
История языка Pascal — п. 1.1.5;
Классификация ЯП — и. 1.1.2;
Никлаус Вирт — n. 1.1.3, 1.1.5;
Пол Ален — п. 1.1.5;
Потомки языка Pascal — п. 1.1.5;
Программные комплексы в кораблестроении — п. 1.2.2;
Программные комплексы в машиностроении — п. 1.2.1;
Тенденции развития ЯП — 1.1.4;
Фирма «Borland» — и. 1.1.5;
Характеристики ЯП — п. 1.1.3;
Характеристики языка Pascal — 1.1.5;
Хронология создания ЯП — п. 1.1.1;
Эволюция развития ЯП — п. 1.1.4;
Языки Pascal—семейства — и. 1.1.5;
Basic - п. 1.1.1, 1.1.3, 1.1.4;
Borland Pascal - п. 1.1, 2.1, 2.3;
Delphi - п. 1.1.5;
Object Pascal - n. 1.1.2, 1.1.5;
Pascal — n. 1.1.1, 1.1.3, 1.1.4, 1.1.5, 2.1;
Turbo Pascal — n. 1.1.5, 2.1;
Turbo Vision — n. 1.1.5.
2. Вопросы по основным понятиям про|раммнровання:
Алфавит языка Pascal — п. 3.1;
Буквы и цифры языка — п. 3.1.1;
Вид файла — п. 9.1.2;
Выражения — п. 3.4.3;
Горячие клавиши — п. 2.3.2;
Диалоговое окно — 2.3.3;
Директивы — и. 1.3. 3.2.4, 8.2.2;
Записи — и. 9.3.1;
4
Зарезервированные (служебные) слова — п. 1.3. 3.1.2;
Идентификаторы — п. 1.3, 3.4.1;
Иерархия оперший — п. 1.1.5;
Имя программы — п. 3.2.3;
Имя файла — п. 2.3, 9.1.1;
Интегрированная среда разработки программ (IDE) — п. 1.3, 2.1;
Классификация ЯП — п. 1.1.1, 1.1.2;
Команды встроенного редактора — ПРИЛОЖЕНИЕ А;
Компиляция — п. 1.3, 2.3.7;
Константы — п. 3.3.3; 3.4.2, 8.3.2;
Массив — п. 1.3. 7.1;
Массив двумерный — п. 7.4;
Массив многомерный — п. 7.4;
Массив одномерный — п. 7.3;
Массивы с «плавающими» границами — п. 8.4.1;
Меню — п. 1.3, 2.1.1, 2.3.2;
Множества — п. 1.3, 9.2.1;
Общая структура программы — п. 3.2;
Операнды — п. 1.3, 3.4.2, 3.4.3, 4.1;
Оператор безусловного перехода — п. 5.3;
Оператор выбора варианта — п. 5.4;
Оператор составной — п. 5.2;
Оператор условный — п. 5.1;
Операторы — п. 1.3, 3.2.1;
Основной блок программы — и. 3.2.5;
Основы языка Pascal — п. 3.1;
Открытый массив — и. 8.4.1;
Отладка программы — п. 2.4.1;
Отладчик пршраммы — п. 2.4.5;
Ошибки в программе — п. 2.3.7, 2.3.8;
Переменные — п. 4.2, 8.3.2, 9.1.2;
Подпрограмма — и. 1.3;
Программные комплексы в кораблестроении — п. 1.2.2;
Программные комплексы в машиностроении — п. 1.2.1;
Причины и типы ошибок — п. 2.4.4;
Рабочая область — п. 2.1.3;
Развитие языка Pascal — п. 1.1.5;
Раздел описаний — п. 3.2.4;
Расширение файла — п. 9.1.1;
Режим компиляции — и. 2.3.7;
5
Путеводитель по данному учебному пособию
Руководство пользователя языка Pascal — п. 1.1.5;
Синтаксис языка Pascal — и 3.1, 3.2.1;
Системный подход к программированию — и. 1.1.5;
Специальные символы — п. 3.1.3;
Справочная система языка Pascal — п. 2.2.10;
Среда программирования — п. 2.1;
Стиль программирования — п. 1.1.5;
Структура меню — п. 2.2;
Структура программы — п. 3.2.2;
Структурное программирование — п. 1.1.5;
Текст программы — п. 3.2.1;
Теорема структуры — п. 3.6;
Термины программирования — п. 1.3;
Тип данных — п. 3.3.4;
Тип—массив — п. 8.4.1;
Тип—строка — п. 8.4.1;
Трассировка программы — п. 2.4.5;
Характеристики программных комплексов в кораблестрое-
нии — п. 1.2.2;
Характеристики программных комплексов в машинострое-
нии — н. 1.2.1;
Характеристики языка Pascal — и. 1.1.5;
Характеристики ЯП — п. 1.1.3;
Хронология создания ЯП — и. 1.1.1;
Эволюция и тенденции ЯП — п. 1.1.4;
Языки Pascal-семейства — п. 1.1.5.
3. Вопросы по процедурам работы на компьютере:
Активизация главного меню — п. 2.1.1;
Варианты запуска IDE — п. 2.3.1;
Варианты установки ВР 7.0 — п. 2;
Выход из среды программирования Pascal — п. 2.3.1;
Запуск программы на выполнение — п. 2.3.7;
Запуск среды программирования — п. 2.3.1;
Запуск языка Pascal — п. 2.3.1;
Просмотр результатов — п. 2.3.9;
Работа с диалоговыми окнами — п. 2.3.3;
Работа с меню — и. 2.3.2;
Работа с окнами — п. 2.3.1, 2.3.3;
Работа с текстовым редактором — п. 2.3.5;
6
Сохранение программы, файла — и. 2.3.6.
4. Вопросы ио процедурам программирования:
Выход из среды нро1раммирования — и. 2.3.1;
Запуск npoi-раммы — п. 2.3.7;
Запуск среды профам мирования — п. 2.3.1;
Компиляция программы — п. 2.3.7;
Отладка профаммы — п. 2.4;
Передача фактических параметров — п. 8.3.3;
Поиск ошибок — п. 2.3.8, 2.4.3;
Построение линейных выражений — п. 4.1;
Построение структуры программы — п. 3.2;
Предотвращение ошибок — п. 2.4.2;
Программирование безусловного перехода — и. 5.5;
Программирование ввода данных — п. 4.4;
Программирование вывода результатов — п. 4.5, 4.6;
Программирование операторов выбора варианта — п. 5.4;
Программирование операций над переменными — п. 4.2;
Профаммирование операций с массивами — п. 7;
Программирование разветвляющихся структур — п. 5;
11рограммирование составных операторов — п. 5.2;
Программирование условных операторов — п. 5.1;
Программирование циклических структур — п. 6;
Просмотр результатов выполнения программы — п. 2.3.9;
Работа с записями — п. 9.3;
Работа с множествами — п. 9.2;
Работа с подпрограммами — п. 8.1, 8.2, 8.3, 8.4;
Работа с подпрограммами «Процедуры» — п. 8.2, 8.2.1, 9.1.4;
Работа с подпрограммами «Функций» — п. 8.2, 8.2.1, 9.1.4;
Работа с файлами — п. 9.1;
Рекомендации по составлению программ на языке Pascal — п. 2.5;
Сообщения об ошибках — ПРИЛОЖЕНИЕ Б;
Сохранение профаммы, файла — п. 2.3.6;
Способы и средства отладки — п. 2.4.5;
Формулирование выражений — и. 3.4.3;
Формулирование идентификаторов — п. 3.4.1;
Формулирование имени профаммы — п. 3.2.2;
Формулирование комментариев — и. 3.5;
Формулирование констант — п. 3.3.3, 3.4.2;
Формулирование описаний — п. 3.3;
7
Путеводитель по данному учебному пособию
Формулирование переменных — п. 3.3.4. 3.3.5;
Формулирование цикла с параметром — и. 6.2;
Формулирование цикла с постусловием — и. 6.4;
Формулирование цикла с предусловием — п. 6.3.
5. Вопросы по практическим примерам программирования:
Дополнительные практические примеры — п. 4.9.1, 5.6.1, 6.6.1,
7.7.1, 8.5.1, 9.4.1;
Листинг программы вычисления выражения с квадратным кор-
нем — п. 4.1;
Листинг программы вычисления суммы двух чисел — п. 3.4.4;
Листинг программы вычисления температуры — п. 4.2.1;
Листинг использования комментариев в программе — п. 3.5;
Листинг программы определения площади поверхности шара —
п. 3.4.2;
Ответы на практические задания — и. 10.1;
Практические задания — п. 2.6.1, 3.7.1, 4.9.2, 5.6.2, 6.6.2, 7.7.2,
8 5 2. 9.4.2;
11римср записи формулы по возведению числа в степень — п. 4.3;
Пример конкретного написания программы в соответствии с
принципиальной структурой — и. 3.2.5;
Пример принципиальной структуры программы — п. 3.2.2;
Пример программирования выбора варианта — п. 5.4;
Пример фиксации блоков программы — и. 3.2.5;
Пример (листинг) использования пустого оператора — п. 4.7;
Пример (листинг) использования составного оператора — н. 5.2;
Пример (листинг) использования функции — и. 8.3.2;
Пример (листинг) программирования вложенных циклов —
н. 6.5,
Пример (листинг) программирования двумерных массивов
п. 7.4;
Пример (листинг) программирования одномерных массивов —
п. 7.3;
Пример (листинг) программирования цикла с параметром
п. 6.2;
Пример (листинг) программирования цикла с постусловием —
о. 6.4;
Пример (листинг) программирования цикла с предусловием —
и. 6 '
Примеры бинарных операций — п. 4.2.1;
8
Примеры записи выражений (формул) — и. 4.1;
Примеры описания идентификаторов — и. 3.4.1;
Примеры описания констант — и. 3.3.3, 3.4.2, 8.3.2;
Примеры описания переменных — и. 3.3.4, 3.3.5, 8.3.2;
11римсры оформления алгоритмов в виде процедуры бет парамет -
ров, процедуры с параметром и функции с параметрами — п. 8.2.3;
Примеры про1ра.ммирования безусловного перехода — п. 5.5;
Примеры (листинги) использования записей — и. 9.3.3;
Примеры (листинги) использования операторов ввода и выво-
да — п. 4.6;
Примеры (листинги) описания типов параметров — п. 8.4.1,
8.4.2;
Примеры (листинги) параметров — и. 8.3.4;
Примеры (листинги) программирования условий — п. 5.3;
Примеры (листинги) работы с множествами — п. 9.2.3;
Примеры (листинги) работы с файлами (поиск, создание и пе-
чать) — п. 9.1.5;
Примеры (листинги) эстетичного и не эстетичного оформления
программы — п. 4.8.
6. Вопросы по кораблестроению, флот) и водному транспорту:
О языке FORTRAN в кораблестроении, на флогс и водном
транспорте — п. 1.1.3;
О языках Pascal—семейства в кораблестроении, на флоте и во-
дном транспорте — п. 1.1.5;
Протраммныс комплексы, применяемые в кораблестроении -
п. 1.2.2;
Пример идентификатора протраммы для кораблестроения
п. 3.2.3;
Пример конкретного написания про(раммы для кораблестрое-
ния в соответствии с принципиальной структурой — п. 3.2.5;
Задача о сферическом резервуаре для судна—газовоза —
п. 3.4.2;
Задача о переводе температур забортной воды и окружающего
воздуха в шкалы Цельсия. Фаренгейта и Кельвина — и. 4.2.1;
Задача об определении объема (водоизмещения) сферического
плавучего объекта — и. 4.8;
Задача о вычислении времени рейса судна — и. 2.6.1;
Задача о вычислении массы топлива в цистерне судна —
п. 4.9.1;
9
Путеводитель по данному учебному пособию
Задача о суммарном весе побуженных на судно грузов —
п. 6.6.1;
Пример трактовки одномерного массива для кораблестрое-
ния — п. 7.3;
Пример трактовки двумерного массива для кораблестроения —
п. 7.4;
Пример вычисления интеграла методом гранений — н. 8.4.2;
Определение количества типов кораблей эскадры флота, за-
шифрованной некоторым числом — п. 9.2.3;
Пример объявления типов записи некоторых характеристик
судна — п. 9.3.1;
Пример структуры и формирования записи некоторых характе-
ристик судна — п. 9.3.2.
7. Вопросы по контролю знаний студентов:
Контрольные вопросы — п. 1.4, 2.7, 3.8,4.10, 5.7, 6.7, 7.8, 8.6, 9.5;
Практические задания — п. 2.6.1, 3.7.1, 4.9.2, 5.6.2, 6.6.2. 7.7.2,
8.5.2, 9.4.2;
Ответы на контрольные вопросы — и. 10.2;
Ответы на практические задания — п. 10.1;
Электронные тесты по проверке знаний — ПРИЛОЖЕНИЕ В.
10
Введение
Учебное пособие предназначено для студентов по направлени-
ям 180100 «Кораблестроение и океанотсхника» и 190700 «Органи-
зация перевозок и управление на транспорте (водные специально-
сти)», а также рекомендуется преподавателям в качестве подгото-
вительною материала к лекциям и студентам других
специальностей в качестве конспекта лекций и для самостоятель-
ного изучения программирования на языке Pascal (Паскаль).
Несмотря на огромное количество литературы по программи-
рованию и в частности по изучению языка Pascal есть несколько
обстоятельств, послуживших причиной написания данного учеб-
ного пособия.
Первое — язык Pascal был создан как язык для обучения начи-
нающих про1рам.мистов правильным принципам и алгоритмам
программирования. И в этом качестве язык Pascal так и остался нс
превзойденным. Поэтому ценность этого языка как языка учебно-
го только возрастает. Особенно это становится важным на фоне
появления огромного количества новых языков программирова-
ния и попыток их неупорядоченного применения без должной
школы в этой области.
Второе — существует необходимость изложения основных
принципов программирования на языке Pascal в краткой доступ-
ной форме. В нашей стране выпушено значительное количество
справочной и учебной литературы по освоению языка Pascal раз-
личных авторов. Как правило, стиль изложения этого материала
довольно сложен и обладает большим объемом информации.
Многие пособия предназначены скорее для специалистов в облас-
ти про1раммирования, чем для студентов, которые только начина-
ют осваивать азы программирования. Данное пособие написано
простым языком, доступным для понимания обычному студенту
и, что немаловажно, в нем изложена только самая необходимая
информация.
Третье — в качестве языка пршраммирования выбран язык
Pascal как язык программирования, приучающий студента умению
правильно логически мыслить. В силу своих особенностей язык
Pascal требует, чтобы студент умел тщательно составлять алгоритм
решения требуемой задачи, умел определять исходные параметры
задачи и т. п.
II
Введение
В данном пособии изложена необходимая информация как об
интефиронанной среде разработки языка Pascal (IDE), гак и о
сгрукзурс собственно языка Pascal. Приведены состав языка, син-
таксис основных операторов, описание основных функций языка,
приведена общая структура программы.
Каждая глава настоящего пособия содержит большое количест-
во примеров нрофам.м с комментариями, объясняющими их
текст. Есть в пособии дополни тельные практические задания и
контрольные вопросы. Есть для самопроверки и ответы на них.
Многие примеры и задания здесь адаптированы для корабле-
строения, флота и водного транспорта (см. 6-ой раздел путево-
дителя), что повышает полезность данного пособия для студен-
тов, преподавателей и специалистов именно из этих областей де-
ятельности.
При написании данного пособия авторы использовали как свои
наработки, гак и опубликованные материалы других авторов, ука-
занных в списке литературы.
Об умении считать: Человек — Метод — Компьютер —
Программа
Профаммирование для ЭВМ является одним из возможных
этапов на пути эффективного выполнения сложных исследований
и численных расчетов. При этом без глубокого взгляда на пробле-
му у Расчетчика и Профаммиста может сложиться искаженное
представление о роли тех или иных этанов выполнения расчетов.
Один из авторов данного учебного пособия ранее в своей мо-
нографии /36/ уже отмечал важность всестороннего понимания
Расчетчиком обшей проблемы, связанной с умением считать. Пер-
воисточником для обсуждения этой проблемы послужили две ин-
тересные книги: Д. Пойа «Как решать задачу» /21/ и Р В Хем-
минга «Численные методы» /45/. Главный тезис этих книг: «Цель
расчетов — понимание, а не числа» как нельзя лучше высвечивает
проблему, которая часто остается вне пределов внимания специа-
листов-расчетчиков, в том числе и программистов.
В силу важности и поучи дельности проблемы Авторы настоя-
щего учебного пособия сочли необходимым использовать в дан-
ном разделе идею «об умении считать», почерпнутую из упомяну-
тых выше книг /21, 45/.
12
Особенно важно это для начинающих инженеров, аспирантов и
студентов, чей недостаточный опыт не позволяет правильно сори-
ентироваться в системе «Человек — Метод — Компьютер — Про-
грамма».
Часто приходится сталкиваться с ошибочным представлением,
что проблема выполнения сложных расчетов — это проблема уме-
лого использования компьютера и выбора нужной программы.
К сожалению, ученые, инженеры, преподаватели вузов и студенты
часто технической стороне (формулам, процедурам, алгоритмам,
программам, языкам про|раммирования) уделяют гораздо больше
внимания, чем существу задачи и содержанию метода.
Авторам иногда приходилось наблюдать ситуации, когда слож-
ные реальные расчеты выполнялись людьми, хорошо владеющими
компьютером и программным обеспечением, но не понимающи-
ми постановку задачи и не знающими применяемого ими метода.
Особенно часто это бывает в области использования численных
методов. Эти методы настолько хорошо разработаны и адаптиро-
ваны к компьютерной технике, что расчетчику может показаться
достаточным для решения задачи только лишь наличия компьюте-
ра и программного обеспечения. Да, для реализации численной
процедуры этого будет достаточно. Но для решения задачи и пра-
вильного понимания полученного результата — нет.
И здесь мы можем вслед за Пойа и Хсммингом повторить:
«Нель расчетов — это понимание, а нс числа. Решая задачу, поду-
май, что мы собираемся делать с ответом? Будут ли вычисленные
величины отвечать на вопрос, который нам задан? Всели они нам
нужны? Может быть, нужны еще какие-нибудь величины? Может
быть, что-нибудь другое дает лучшее основание для понимания?
Что мы знаем для решения задачи?».
Все эти вопросы должны быть отнесены к элементу «Человек»
системы «Человек — Метод — Компьютер — Программа».
Вопросы эти часто усложняются тем, что нс всегда задача по-
ставлена четко и нс всегда вполне определенными являются усло-
вия, которым должен удовлетворять результат. Ясно, что только
Человек способен ответить на поставленные выше вопросы. Только
Человек может на предварительном этапе оценить и отбросить
множество альтернативных вариантов, оставив для рассмотрения
только наиболее перспективные. При этом вводятся необходимые
или устраняются излишние ограничительные предположения от-
носительно расчетной модели. Гем самым Человек многократно
13
Введение
повышает эффективность решения задачи еще до начала се реше-
ния. Именно на этом этане наиболее велика роль творчества, удач-
ной идеи, конкретных знаний, квалификации и опыта расчетчика.
Только после того, как мы ясно поймем, где мы находимся и
куда хотим попасть, можно оценить предстоящий нам путь. Те-
перь можно перейти к вопросу «Как нам этот путь преодолеть?
Какой нам нужно выбрать метод?». «Метод» — это промежуточ-
ный элемент нашей системы. С одной стороны он связан с Чело-
веком, который его выбирает, с другой стороны метод связан с
Компьютером и Программой, которые его реализуют. У Человека
мало возможностей влиять на существо выбранною Метода, но
понимать Метод расчетчик должен обязательно. Именно понима-
ние Метода, знание того, как идет процесс вычислений позволяет
дать ответы на следующие вопросы: «Что в результате получилось?
Как этот результат можно интерпретировать? Какова погрешность
результата? Какие проверки можно осуществить? Какое програм-
мное обеспечение можно применить для реализации метода?».
Без понимания существа Метода можно уподобится рыбаку,
который по типу и размерам рыб в своем улове судит о типах и
размерах рыб в морс. Рыбак нс понимает, что его улов зависит от
его сети (от Метода, который он применяет!).
Допущения, заложенные в Методе, ограничения, наложенные
на расчетную модель, погрешность исходных данных и вычисле-
ний — это то же самое, что размер ячейки сети и места лова наше-
го рыбака.
В определенном смысле можно сказать, что в качестве резуль-
тата мы получаем только то, что нам позволяет получить Метод.
При этом полученный результат может нс соответствовать истин-
ному решению проблемы. Эго очень важный вывод. Непонимание
этого обстоятельства может перечеркнуть всю вычислитольную ра-
боту и поставит ь под сомнение репутацию расчетчика.
Обратим внимание уважаемого Читателя на процедуру расчета
и се реализацию. Современные численные Методы расчета имеют
довольно 1ромоздкис и трудоемкие процедуры. Реализуются они с
помощью Компьютера на базе соответствующей Программы Рас-
четчик либо разрабатывает программное обеспечение сам, либо
пользуется готовым продуктом. В любом случае он должен пони-
мать, что компьютерная Программа — это только формальное ото-
бражение примененного Метода расчета. При этом компьютерная
Программа может накладываю дополнительные ограничения на
14
расчетную модель и тем самым еще больше отклонять получен-
ный результат от истинного решения. В этом смысле роль Про-
граммиста на пути достижения истинной цели является чрезвы-
чайно важной.
Расчетчик должен понимать, что и как делает компьютерная
Программа, чтобы правильно трактовать результат.
Как замечает Хемминг, хороший теоретик может объяснить поч-
ти любые полученные результаты, верные или неверные. И может
потерять массу времени на выяснение того, верны они или нет.
Поэтому Расчетчик должен искать источники избыточной до-
полнительной информации, которую можно использовать для
проверки вычисленного результата.
Компьютер и Программа — это всего лишь инструменты в руках
Расчетчика И нс более того. Правда, инструменты это очень важ-
ные, часто имеющие решающее значение для реализации числен-
ной процедуры. Но нс нужно придавать им значения большего,
чем они того заслуживает.
Гораздо важнее обдумывать детали вычислений. Такие как до-
стоверность исходных данных, опенка погрешностей, влияние ма-
лой разности близких величин, обусловленность матриц, варьиро-
вание параметрами, процедурные ограничения, особенности алго-
ритма и языка программирования. Полезно задумываться над
такими важными обстоятельствами, как использование промежу-
точных результатов, возврат на предыдущие этапы, изменение
первоначального плана вычислений, выявление ошибочного резу-
льтата, выяснение причин неудачи, извлечение полезного из
ошибки, трактовка неожиданного результата и др. Из этого видно,
что и Расчетчик и Программист должен достаточно глубоко разби-
раться в существе решаемой задачи.
И вот здесь уместно отметить важность Программы расчета
(компьютерной Программы). Программа расчета объединяет в себе
постановку задачи и размышления Человека, формальные особен-
ности Метода, технические возможности Компьютера и алгорит-
мические правила языков программирования.
Все это в комплексе и составляет искусство вычислений, по-
зволяющее спспиалисту-расчетчику избежать решения ложной за-
дачи. Числа, которые в итоге получает Расчетчик, должны позво-
лять дать истинные ответы на поставленные вопросы.
В связи со всем, сказанным выше, Авторы обращают внимание
уважаемого Читателя на не устаревающую и несомненную важ-
15
Введение
ность аналитических Методов как таковых. Аналитические Мето-
ды полезны тем, что они позволяют получить решение задачи, не
прибегая к элементу Компьютер. Полученное аналитическое ре-
шение сохраняет в явном виде (как бы на поверхности) логику ре-
шения и потому более удобно для правильного осмысления резу-
льтата. При этом аналитическое решение является важным, часто
единственным (если нет возможности провести эксперимент)
«эталоном», с которым можно сопоставить результат, полученный
с помощью Компьютера численным Методом на базе некоторой
Программы.
16
Тема 1
Обзор языков программирования,
программных комплексов и основных
понятий программирования
Цели темы I: Дать исторический обзор и познакомить студен-
тов с тенденциями развития языков программирования. А также по-
яснить характеристики языков программирования и основных про-
граммных комплексов, применяемых в кораблестроении и общем ма-
шиностроении.
1.1. Место языка Pascal в ряду других языков
программирования
1.1.1. Хронология создания языков программирования
При написании данною раздела авторы пособия использовали
материалы /2, 49/, полученные в Интернете. Хронология создания
основных языков программирования приведена в таблицах I.I и I .2.
Таблица 1.1
Языки широкого использования
Название языка Год Вид Автор Место созда- ния Организа- ция Стандарт
1 2 3 4 5 6 7
Машинный код 1944 м США
Ассемблер (Assembler! 1951 м США
Фортран (Fortran) 1954 А Джон Бакус США IBM ISO 1539:1997
Лисп (Lisp) 1958 F Джон Маккарти США МП —
Алгол-60 (Algol 60) 1960 А Литер Наур + Межд IAP —
Кобол (Cobol) 1962 А Грейс Хоппер + Межд. CODAYL Committee ISO 1989:1985
Симула (Simula) 1962 В Кристен Нитаард + Европа — -
17
Тема 1. Обзор языков программирования
Название языка Год Вид Автор Место созда- НИЯ Организа- ция Стандарт
1 2 3 4 5 6 7
Бейсик (Basic) 1963 А Джон Кемени США Dartmouth Cui eye ISO 10279:1991
Рефал (Retail 1964 Е В. Ц Турчин СССР ИПМАН СССР -
пл/1 (И/1) 1964 А Джордж Радин США IBM ISO 6160:1979
Ай ail-68 (Aigul 68) 1968 А АадВан Вайнгартен + Межд. IRP -
Паскаль (Pascal) 1970 С Никлаус Вирт Европа ETH ISO 7189 1990
Форт (Forth) 1970 А* Чарльз Мор США Motiasco Industries ISO 15145:1997
СИ (С) 1972 С Денис Ритчи США AT&Bel Labs ISO 9899:1999
Smalltalk 1972 В Алан Кеи США Xerox pare —
Пролог (Prolog) 1973 Е Алан Копылеро + Европа Unw. of Aix-Marseille ISO 13211:1995
Ада (Ada) 1978 Н* Джин Ишбиа т США Cll Honeywell 150 8652:1995
Си ++ 1982 Н* Бьорн Страуструп США AT&Bel Labs ISO 14882:1998
Рефал + (Ией +) 1992 (Н+Е)‘ + Россия ИПМРАН —
Джава (Jara) 1995 Н Джеймс Гислин США Sun Labs —
Динамо (Dynamo) 2000 Н + Россия Параграф -
Таблица 1.2
Экспериментальные и промышленные языки
Название языка Год Вид Автор Место созда- ния Организа- ция Стандарт
1 2 3 4 5 6 7
АПЛ (APL) 1957 1 Кеннет Айверсон США Harvard Univ. ISO 8485 1989
Снобоп (Snobol) 1962 1 Ральф Грисуолд США AT&T Bell labs —
Cent (SETL) 1969 1 Джек Шварц США IBM -
18
1.1. Место языка Pascal в ряду других языков программирования
Название языка Год Вид Автор Место созда- ния Организа- ция Стандарт
1 2 3 4 5 6 7
Параллельный Паскаль (Concurrent Pascal) 1974 G Пер Бринч Хансен США СП -
CLU 1974 D Барбара Дисков США МП —
Shene 1975 F Гай Стил + США МП —
Mesa 1976 D* Дж. Мичелл + CUIA Xerox РАПС —
Icon 1977 1 Ральф Грисуолд США AT&T Bell labs a
Модула (Modula) 1980 D Никлаус Вирт Европа ETH —
Модуяа-2 (Modula-2) 1982 D* Никлаус Вирт Европа ЫН ISO 10514.1996
Оккам (Occam) 1982 G‘ Девад Мэй + Европа Inmos —
Cedar 1983 H* Батлер Лемпссн * США Xerox РАИС
Comma Lisp 1984 1- Гай стад + США МП —
Objective C 1986 H* Бред Кокс США Productivity Product -
Эйфель (Bflel) 1986 D* Бертран Мейер Европа Ise -
Оберон lOberori) 1988 D* Никлаус вирг Европа ETH —
Модула-3 (Modula-3) 1988 H* Билл Калсов + США DEC SRC -
Оберон 2 (Oberon-2) 1991 D‘ Ханспотер Мессенбёк + Европа ETH -
limbo 1996 D* Денис Ритчи США Bell labs (Lucent) -
Компонентный Паскаль (Component Pascal) 1997 D* Куно Пфистер + Европа Ota on Microsystems -
C« 2000 H* Андерс Хадьсберг + США Microsoft —
В таблицах l.l и I.2 приняты следующая классификация, а так-
же следующие условные обозначения и сокращения:
а) классификация по парадигмам (виды ягыков программирования):
М — Машинное программирование;
А — Процедурное программирование;
I9
Тема 1. Обзор языков программирования
В — Объектно-ориентированное программирование;
С — Структурное программирование;
I) — Модульное (компонентное) программирование;
Е — Логическое (реляционное) программирование;
F — Функциональное программирование;
G — Параллельное программирование;
И — Гибрид (смесь B+C+D+G);
I — Специализированные языки.
б) условные обозначения:
* — поддержка системного программирования;
+ — несколько авторов.
в) сокращения:
MIT — Massachusetts Institute of Technology;
PARC — Palo Alto Research Center,
SRC — Systems Research Center;
ETH — Swiss Federal Institute of Technology;
ISE — Interactive Software Organization;
ISO — International Standard Organization;
CIT — California Institute of Technology:
APL — Application Programming Language;
C# — C Sharp;
C ++ — C with Classes (Си с классами);
COBOL — Common Business Oriented Language;
PL/1 — Programming Language One;
BASIC — Beginner’s All-purpose Symbolic Instruction Code (Мно-
гоцелевой Символический Обучающий Код для Начинающих);
LISP — List Information Symbol Processing;
FORTRAN — FORmulac TRANslalion (Переводчик формул);
Forth — Fourth Generation Programming Language;
Prolog — PROgramming in LOGic;
SNOBOL — StriNg Oriented symBOlic Language.
1.1.2. Классификация языков программирования
При написании данного раздела авторы пособия использовали
материалы /1,7, 18, 19/, полученные в Интернете.
Существует несколько подходов к классификации языков про-
граммирования. Все эти подходы являются до некоторой степени
условными, взаимопроникающими и взаимодополняющими друг
друга.
20
1.1. Место языка Pascal в ряду других языков программирования
Классификация по парадигмам
В предыдущем разделе после таблицы дан один из вариантов
классификации по парадигмам (основным доминирующим при-
знакам). Опытный Читатель может заметить, что четкой границы
между указанными видами языков не существует.
Классификация по уровню
Существует классификация по уровню языков. Здесь различают
языки низкого уровня и языки высокого уровня. К языкам низко-
го уровня относят первые машинно-ориентированные языки (ма-
шинные коды, первые версии Ассемблера). К языкам высокого
уровня относят практически все существующие ныне машин-
но-независимые языки, начиная с Макро-Ассемблера, Фортрана,
Бейсика, 1!аскаля и т. д. Можно предположить, что в ближайшем
будущем появя тся языки сверхвысокого уровня. Вероятно, это бу-
дут языки с высокой степенью абстракции и формой записи,
близкой к естественной человеческой записи текстов. Такие высо-
коинтеллектуальные признаки уже проявляются, в ряде современ-
ных языков программирования.
Классификация по поколению
Еще одним вариантом классификации языков программирова-
ния является их классификация по поколениям (Generation Lan-
guage, GL). Согласно /I/, к настоящему времени насчитывается
пять поколений языков программирования.
В первое поколение (IGL) входят языки, созданные в 40-50 гг.
(машинные коды, первые Ассемблеры), когда компьютеры только
появились на свет. В то время протраммы писались в машинных
кодах, то сеть каждая компьютерная команда (оператор) вместе с
ее операндами вводилась в ЭВМ в двоичном виде. Это требовало
огромных усилий по набору цифровых текстов и приводило к
множеству трудноуловимых ошибок. Ситуация качественно изме-
нилась в середине 50-х юдов. когда был написан первый Ассемб-
лер. что само по себе можно считать подвигом, учитывая довольно
сложную логику программы. Хотя этот Ассемблер был неполно-
ценным в сегодняшнем понимании, но он позволял задавать на-
звания команд в символическом виде и указывать числа нс только
в двоичном, но и в десятичном или шестнадцатеричном формате,
язю существенно облегчало работу программистов.
Языки первого поколения продолжают использовать и сегодня,
хшя в значительно меньшем объеме. Чаше всего приходизся пи-
21
Тема 1. Обзор языков программирования
сать про»раммы в машинных кодах для новых микропроцессоров,
для которых еще нс разработаны компиляторы, поддерживающие
требуемый набор команд.
Расцвел' второю поколения языков про1раммирования (2GL)
пришелся на конец 50-х — начало 60-х годов. Был создан симво-
лический Ассемблер, позволяющий писать программы без привяз-
ки к конкретным адресам памяти. В него было введено понятие
переменной, и он, по сути, стал настоящим (хоть и машинно-ори-
ентированным) языком программирования со своих» компилято-
ром. Скорость создания и эффективность про»рамм резко возрос-
ли. Ассемблеры активно применяются в настоящее время, как
правило, для создания программ, максимально использующих
возможности аппаратных средств — различных драйверов, моду-
лей состыковки с нестандартным оборудование*» и т. д.
Третье поколение языков программирования (3GL) принято
относить к 60-м годам. В это время родились языки, которые на-
зывают универсальными языками высокого уровня, с их помощью
можно решать задачи из любых областей. Это общеизвестные
Фортран, Кобол, Алгол и др. Такие качества новых языков, как
относительная простота, независимость от конкретного компьюте-
ра и возможность использования мощных синтаксических конст-
рукций позволили резко повысить производительность труда про-
граммистов.
С начала 70-х годов по настоящее время тянется период языков
четвертого поколения (4GL). После первых восторгов по поводу
безграничных способностей ЭВМ стали более ясны возможности
существующих языков программирования. Целью создания язы-
ков четвертого поколения было в первую очередь стремление к
увеличению скорости разработки проектов, снижение числа оши-
бок и повышение общей надежности работы больших програм-
мных комплексов, возможность быстрого и легкого внесения из-
менений в готовые проекты, упрощение самих языков для конеч-
ного пользователя, активное внедрение технологий визуальной
разработки и т. д.
Кроме того, парадигма функционального программирования
по-прежнему присутствует в языках 4GL во всей полноте. Эго не
позволяет перейти к более высокому уровню абстракций при раз-
работке программных систем.
Рождение языков пятого поколения (5GL) относится к настоя-
щему времени. При этом языки этого поколения следует рассмат-
22
1.1. Место языка Pascal в ряду других языков программирования
риватъ как некоторые системы, состоящие из инструкций и тек-
стов готовых про|рамм. Инструкции пишутся наиболее удобными
человеку методами в максимально наглядном виде. После этого
инструкции с помощью компьютерного интерактивного (или пол-
ностью автоматического) преобразования превращаются в готовую
программу на одном из универсальных языков программирования.
Участие программиста при гаком преобразовании инструкции в
текст создаваемой программы является минимальным, но очень
важным.
Часть компьютерных экспертов считают продукты пятого поко-
ления уже не языками (в привычном понимании), а средствами
разработки программ, т. к. прямая работа программиста с конеч-
ными текстами программ практически отсутствует.
Наиболее актуальными для систем 5GL станут достижения в
таких областях как логическое программирование (Пролог — по-
добные языки и машины вывода), объектно-ориентированное
программирование, исследовательское iipoipaMмированис (когда
проект слишком сложен и неясен, средства разработки позволяют
быстро создавать шаблон программы и включать в него работаю-
щие кусочки с постепенным приближением к конечному резуль-
тату'), использование для создания программ естественных языков,
технологии управления базами знаний, методы обработки и ана-
лиза текстовой информации (энциклопедии, Web-страницы, доку-
менты) с возможностью смысловою поиска и т. д. Типичный при-
мер — созданная в Австралии самообучающаяся нейронная сеть
«LISA» со встроенным языком описания фактов, сущностей и
взаимосвязей между ними.
Классификация по подходу к программированию
Данная классификация является достаточно обшей и наиболее
распространенной в настоящее время.
Согласно этой классификации существующие языки програм-
мирования делятся на шесть основных групп:
I. Языки машинно-ориентированного программирования.
Собственно это почти не является программированием в совре-
менном понимании этого слова. В языках этой группы алгоритми-
ческие действия и данные находятся в самих командах, которые
воздействуют непосредственно на исполнительные элементы ма-
шины. Языки этой группы основываются на идее программирова-
ния в машинных кодах (языки Assembler).
23
Тема 1. Обзор языков программирования
2. Языки процедурного программирования.
При гаком подходе программа отделяется отданных. Фактиче-
ски здесь впервые появляется программирование как самостояте-
льная процедура. Программа состоит из последовательности
команд, обрабатывающих данные. Данные, как правило. хранятся
в виде переменных. Весь процесс вычислений сводится к измене-
нию их содержимою. К числу языков процедурного программиро-
вания могут быть отнесены языки Fortran, Algol, Cobol, Basic,
PL/1, Forth.
3. Языки объектно-ориентированною программирования.
Иногда в этой группе языков различают еще и подразделы:
языки структурною программирования и языки модульною про-
граммирования.
Как бы то ни было, объектно-ориентированные языки отлича-
ются гем, что в них введено понятие объекта. И для объекта реа-
лизованы механизмы вычислений, позволяющие описывать струк-
туру объекта и действия с ним. Переменные и функции группиру-
ются в гак называемые классы. Благодаря этому достигается более
высокий уровень структуризации программы. В принципе объект-
но-ориентированный способ программирования является прямым
развитием процедурной модели программирования. К числу объ-
ектно-ориентированных языков относят такие языки как Simula,
Smalltalk, Pascal, Stimul, С, Modula-2, Oberon, Ada, Object Pal, Eif-
fel. Objective C. Objective CaML.
4. Языки функционального программирования.
При программировании на таких языках программа состоит из
совокупност и функций, которые вызывают друг друга. Переменные
могуг отсутствовать вообще. Алгоритмы, затканные в функциона-
льном виде, как правило, короче и содержат меньше ошибок, чем
аналогичные процедурные или объектно-ориентированные. Функ-
циональное программирование считается программированием
сверхвысокого уровня. Языки этой группы обладают относительно
низким быстродействием из-за сложност и реализации.
Функциональные языки применяются преимущественно для
научных исследований, а также при реализации особенно слож-
ных алгоритмов и обработке чрезвычайно запутанных структур
данных. К числу таких языков относят Lisp, Common Lisp. Sheme,
Standard ML. Miranda. Язык Objective CaML тоже является полно-
ценным языком функционального программирования, хотя его
24
1.1. Место языка Pascal в ряду других языков программирования
последние версии вероятно следовало бы отнести к числу гибрид-
ных языков.
5. Языки логического программирования.
Языки этой группы основываются на формальной логике и Бу-
левой алгебре. В некоторых языках применяются средства нечет-
кой логики, что позволяет создавать системы искусственного ин-
теллекта. Программа, написанная на логическом языке, нс содер-
жит в себе конкретных алгоритмов, т. с. дейст вий и команд типа
«сделать то», «затем сделать это». В программе задаются условия
задачи, аксиомы, требуемые логические отношения. После этого
запрограммированная логическая система сама рассчитывает воз-
можные следствия и взаимосвязи введенных данных и формул.
При логическом (декларативном) программировании прихо-
дится преодолевать две сложности, которых практически нет в
других подходах к программированию. Первая сложность — это
формализация концепций, идей аксиом, понятий и других эле-
ментов мыслительной логики. Вторая сложность — это проблема
завершения решения. Используемый в логических языках прин-
цип обхода дерева целей в глубину может привести к тому, что
возникнет бесконечная ветвь и тогда вычисление никогда не за-
вершится. Логическая программа может нс найти решения цели,
даже если оно существует при конечном количестве вычислений.
К языкам логического программирования относят REIAL, Prolog,
KLO. Shape Up. Иногда в труппе этих языков упоминают LISP.
Если в этом языке функциям присвоить смысл логических пере-
менных и запрограммировать алгоритм доказательства, то на язы-
ке LISP тоже можно осуществить решение логических задач.
6. Языки гибридного протраммирования.
Основная идея построения языков этой группы заключается в
насыщении таких языков свойствами и возможностями различных
языков протраммирования. Конечно, такой подход неизбежно
приводит к «утяжелению» гибридного языка. Но при удачном со-
четании наиболее важных свойств и возможностей получаются
вполне эффективные новые языки программирования. К такой
группе языков могут быть отнесены продвинутые версии таких
языков, как Ada. C++, REFAL+, Modula-3, Java, Dynamo. Cedar,
Objcclivc C, Objcclivc CaML. Object Pascal. Prolog++.
В завершении раздета о классификации языков программиро-
вания отметим, что существует множество специальных языков,
которые в будущем могут сформировать собственную группу —
25
Тема 1. Обзор языков программирования
ipynny языков специального программирования с четкими отли-
чительными признаками.
1.1.3. Общие характеристики основных языков
программирования
За всю историю программирования в мире было создано около
двух тысяч языков программирования, их версий и модификаций.
В данном пособии упоминается чуть больше 40 языков. Из них
к числу языков, получивших в свое время реальное широкое рас-
пространение в среде обычных программистов-практиков, можно
отнести около Ю—15 языков. Именно эти языки и буду! рассмот-
рены ниже.
При написании данного раздела авторы пособия использовали
материалы /3, 7, II, 17, 20/, полученные в Интернете.
Рассмотрение языков будет производиться в хронологическом
порядке без применения какой-либо классификации.
Assembler (1951 г.)
Язык Assembler, точнее группа языков, относящихся к языкам
низкого уровня. Свое название они получили от имени системной
программы Assembler, которая преобразует исходные программы,
написанные на таких языках, непосредственно в коды машинных
команд. Термин «Ассемблер* произошел от английского слова As-
sembler (сборщик частей в одно целое). Частями здесь служат опе-
раторы, а результатом сборки последовательность машинных
команд.
Ассемблер объединясь в себе достоинство языка машинных
команд (быстродействие и минимум оперативной памяти) и неко-
торые черты языков высокою уровня.
Ассемблер позволяет гибко и полно использовать технические
возможности компьютера. Исходная программа, написанная на
Ассемблере, состоит из нескольких исходных модулей, а каждый
модуль — из операторов.
Достоинство Ассемблера — возможность написать столь же эф-
фективно по разделу и быстродействию программу, как это можно
сделать на языке машинных кодов. У языков высокого уровня та-
ких достоинств уже нет.
Ассемблер применяется для программирования систем реаль-
ного времени: систем управления движением, стрельбой, техноло-
26
1.1. Место языка Pascal в ряду других языков программирования
гичсскими процессами, информационно-измерительными комп-
лексами.
FORTRAN (1954 г.)
Форгран (FORTRAN — FORmula TRANdatcr — переводчик
формул) является самым первым языком высокого уровня.
Фортран широко распространенный язык, особенно среди по-
льзователей, которые занимаются численным моделированием.
Это объясняется несколькими причинами:
• существованием огромных библиотек прикладных программ
на Фортране, накопленных за эти годы, а гак же наличием
огромного количества программистов, эффективно исполь-
зующих этот язык;
В кораблестроении, в задачах строительной механики корабля,
гидродинамики и теории корабля, в приложениях численных мето-
дов к задачам проектировании и оценки прочности судовых конст-
рукций язык FORTRAN имел огромную популярность. И до сих пор
многие прикладные программы, написанные когда-то на языке
FORTRAN, после адаптации успешно используются на практике.
• наличием эффективных трансляторов Фортрана на всех ти-
пах ЭВМ, причем версии для различных машин достаточно
стандартизованы и перенос программ с машины на машину
обычно нс составляет больших трудностей;
• изначальной направленностью Фортрана на физико-матема-
тические и технические приложения; в частности, это проя-
вилось в том, что в течение долгого времени он оставался
единственным языком со встроенным комплексным типом
переменных и большим набором встроенных функций для
работы с такими переменными.
Ключевой идеей отличающей Фортран от Ассемблера, была
концепция подпрограмм.
За прошедший период сформировалась новая методология и
философия программирования. С начала 70-х годов Форгран под-
вергался заслуженной критике. В I977 году был принят новый
стандарт языка Фортран-77, а позднее стандарт Фортран-90. Наи-
большее распространение на машинах нового типа получили раз-
личные версии транслятор Фортран-77. Выпущенный 1990 году
транслятор MS-Fortran 5.0 практически полностью соответствует
стандарту Фор1ран-90.
27
Тема 1. Обзор языков программирования
Большинство крупных научно-технических прикладных про-
грамм написано на Фор фане потому, что он обладает переноси-
мостью и устойчивостью, а так же благодаря наличию встроенных
математических и тригонометрических функций. Дополнитель-
ной, неотъемлемой частью любой прикладной прО1раммы на язы-
ке Фортран является расширенная графическая библиотека, по-
зволяющая использовать различные графические данные и изоб-
ражения.
LISP (1958 г.)
Язык Лисп ориентирован на разработку программ для решения
задач не численного характера. Английское название этого язы-
ка — LISP является аббревиатурой выражения LISt Processing (об-
работка списков) и хорошо подчеркивает основную область сто
применения. Понятие «список» оказалось очень емким. В виде
списков удобно представлять алгебраические выражения, графы,
элементы конечных групп, множества, правила вывода и многие
другие сложные объекты. Списки являются наиболее гибкой фор-
мой представления информацией в памяти компьютеров. Неуди-
вительно поэтому, что удобный язык, специально предназначен-
ный для обработки списков, быстро завоевал популярность.
После появления Лиспа различными авторами был предложен
целый ряд других алгоритмических языков ориентированных на
решение задач в области искусственного интеллекта, среди кото-
рых можно отметить Плэнер, Снобол, Рсфал, Пролог. Однако эго
нс помешало Лиспу остаться наиболее популярным языком для
решения задач в области искусственного интеллекта.
Большим достоинством языка Лисп является его функциональ-
ная направленность, т. е. программирование ведется с помощью
функций. При чем в качестве функций принимаются некоторые
правила, составляющие элементы одного класса с элементами
другого класса.
Язык программирования Лисп предназначен в первую очередь
для обработки символьной информации. Поэтому естественно,
что в мире Лиспа числа шрают далеко нс главную роль. Основные
типы данных в Лиспе называются «атом» и «точечная пара».
ALGOL (1960 г.)
В I960 году командой во главе с Петером Науром был создан
язык программирования Algol (ALGOrillimic Language — алгорит-
28
1.1. Место языка Pascal в ряду других языков программирования
мичсский язык). Первоначально этот язык был ориентирован для
записи алгоритмов решения задач численного анализа.
Этот язык дал начало целому семейству Алгол — подобных язы-
ков (важнейший представитель — Pascal). В 1968 году появилась
новая версия языка Аигол-68. Она не нашла столь широкого прак-
тического применения, как первая версия, но была весьма попу-
лярна в кругах теоретиков. Язык был достаточно интересен, г. к.
обладал многими уникальными на тот момент характеристиками.
Однако он достаточно быстро был вытеснен из употребления похо-
жими, но более эффективными языками Фортран и Pascal.
COBOL (1960)
Кобол (COBOL — Common Business Oriented Language — об-
щий бизнес-ориснтированный язык) — это сравнительно старый
язык, разработанный, прежде всего для исследований в экономи-
ческой сфере и подготовки коммерческих бизнес-просктов. Язык
позволяет эффективно работать с большим количеством данных,
он насыщен разнообразными возможностями поиска, сортировки
и распределения. О программах на Коболе, основанных на широ-
ком использовании английского языка, говорят, что они понятны
даже тем, кто нс владеет Коболом, поскольку тексты на этом язы-
ке программирования не нуждаются в каких-либо специальных
комментариях. Подобные программы принято называть самодоку-
мснтирующимися.
В числе других плюсов Кобола обычно относят его структури-
рованность. Мощные компиляторы этого языка разработаны и для
персональных компьютеров. Некоторые из них столь эффектив-
ны, что программу, отлаженную на персональном компьютере,
нетрудно перенести на большие ЭВМ.
Перечисляя минусы нельзя не вспомнить о том. что на Коболе
можно запршраммкровать лишь простейшие алгебраические вы-
числения.
Для инженерных расчетов этот язык нс годится. Еще одна причи-
на, которая в какой-то мерс сдерживает развитие языка. — это от-
сутствие конкурентов среди разработ чиков и пользователей языка.
BASIC (1963 г.)
Бейсик (Basic — Beginner's All-Purpose Symbolic Instruction
Code — «универсальный символический код инструкций для на-
чинающих»). Прямой потомок Фортрана и до сих пор самый по-
пулярный язык программирования для персональных компыоте-
29
Тема 1. Обзор языков программирования
ров. Появился Бейсик в I963 г. (назвать автора было бы трудно,
но основная заслуга в его появлении, несомненно, принадлежит
американцам — Джону Ксмсни и Томасу Курцу). Как и любые
преимущества, простота Бейсика оборачивалась, особенно в ран-
них версиях, трудностями структурирования. Кроме того, Бейсик
нс допускал рекурсию — интересный прием, позволяющим со-
ставлять эффективные и короткие программы.
Для Бейсика разработаны мощные компиляторы, которые
обеспечивают не только богатую лексику и высокое быстродейст-
вие, но и возможность структурного программирования. По мне-
нию некоторых программистов наиболее интересными версиями
являются CWBASIC, Turbo BASIC, Quick BASIC.
В свое время появление Quick BASIC ознаменовало рождение
второю поколения систем программирования на языке BASIC. Он
предоставлял возможность модульного и процедурного програм-
мирования, создание библиотек, компиляции готовых программ и
прочее, что вывело его на уровень таких классических языков
программирования как Си, Паскаль, Фортран и др.
Бейсик доступен для работы на персональных компьютерах даже
небольшой мощности. И сегодня, спустя более 40 лет после изобре-
тения Бейсика, он остается самым простым для освоения и самым
популярным среди любителей обшецелевого программирования.
REFAL (1964 г.)
Рефал — эго один из первых, получивших общую известность,
многоцелевых языков, разработанных в СССР (ИМП АН СССР).
РЕФАЛ — это Рекурсивных Функций Алгоритмический язык.
Развиваясь в общей ситуации информационной закрытости Ре-
фал, тем не менее, оказался значительно более эффективным, чем
его зарубежные собратья.
Первоначально так называемый базисный РЕФАЛ позициони-
ровался как язык для преобразования произвольных языковых
конструкций, своего рода метаалгоритмичсский язык. С. Флорсн-
цсв и С. Романенко написали первый интерпретатор для РЕФА1а
на БЭСМ-6, выполняющий до 300 конкретизаций (сопоставлений
с образцом и преобразования образца к требуемому результату) в
секунду, что даже по нынешним временам довольно высокий ре-
зультат. В основе интерпретатора лежала абстрактная РЕФАЛ-ма-
шина, работающая с бесконечным полем памяти. Модель данных
поддерживала двунаправленные списки, а в РЕФА1-2 добавилось
30
1.1. Место языка Pascal в ряду других языков программирования
понятие закольцованных ссылок, в результате чего появилась воз-
можность работать не только с древовидными структурами, но и с
графами и сетями. Естественно уложился в эту концепцию про-
цесс отождествления «слева-направо» и «справа-налево», сделав
РЕФАЛ симметричным языком.
Скорость работы, даже на старых машинах, впечатляла — на
IBM PC XT программа выполнялась со скоростью — 1500 конкре-
тизаций/сек. Семантика РЕФАЛа как декларированного языка по-
зволила также получить хорошие тестовые результаты при реали-
зации на параллельных компьютерах.
Однако по ряду причин судьба этого языка оказалась довольно
сложной. Автор языка В. Турчин уехал из России, и на некоторое
время РЕФАЛ был предан забвению. Однако энтузиасты компью-
терного дела продолжали совершенствовать язык, и на ссгодняш-
ний день имеются две версии — РЕФАЛ-5 и РЕФАЛ+. Синтаксис
языка сблизился с Си++ и поддерживает объектную идеологию.
Обьсктно-ориснтрованное программирование выражено в пред-
ставлении функций языка как объектов, которые можно исполь-
зовать в качестве образцов наравне со стандартными объектами
Си++. что превращает РЕФАЛ в очень мощную открытую систе-
му программирования.
Наконец, еще одна из интересных областей, где используется
РЕФАЛ — искусственный интеллект. Здесь РЕФАЛ применяется и
как конечное средство разработчика, и как инструмент для созда-
ния языков представления знаний, ориентированных на конкрет-
ные области применения в искусственном интеллекте. Одним из
фундаментальных направлений, позволяющих эффективно испо-
льзовать мощь РЕФАЛа, является анализ естественных языков.
С помощью РЕФАЛа созданы лингвистические процессоры, экс-
пертные системы и т. д.
В I992 г. в Институте прикладной математики Российской Ака-
демии Е1аук была создана новая версия языка — РЕФАЛ +.
Иногда РЕФАЛ называют Русским Прологом. Это неверно! Ре-
фал был создан на 10 лет раньше Пролога и по многим парамет-
рам превосходил его и до сих пор превосходит.
Pascal (1970 г.)
В 1970 году Никлаусом Виртом был создан язык программирова-
ния Pascal. Язык замечателен тем, что это первый широко распро-
страненный язык для структурного программирования (первым,
31
Тема 1. Обзор языков программирования
строго говоря, был Алгол, но он нс получил столь широкою распро-
странения) Впервые оператор безусловного перехода перестал иг-
рать основополагающую роль при управлении порядком выполне-
ния операторов. В этом языке также внедрена строгая проверка ти-
пов, что позволило выявить многие ошибки на этапе компиляции.
Слабой чертой языка было отсутствие в нем средств, для разби-
ения программы на модули. Вирт осознал это и разработал язык
Modula-2 (1978 г.), в котором идея модуля стала одной из ключе-
вых концепций языка. В I988 г. появилась версия Modula-З, в ко-
торую были добавлены объектно-ориентированные черты. Логиче-
ским продолжением Pascal и Modula является язык Oberon и Obe-
ron-2. Они реализовали движение в сторону объектной и
компонентной ориентированности. Язык получил название в
честь французского математика Блеза Паскаля (Blcs Pascal.
I623—1662 гг.), который занимался теорией чисел и сконструиро-
вал в 1641 году суммирующую машину.
Более подробно история создания и характеристики языка Pas-
cal будут рассмотрены ниже в специальном, посвященном этому
языку разделе.
С (1972 г.)
Язык «С* (Си) получил свое наименование как условное обо-
значение в ряду специальных инструментальных средств согласно
буквам английского алфавита: А (Эй), В (Би), С (Си). Язык Си
разрабатывался как инструментальное средство для реализации
оперативной системы Unix. Прообразом языка Си является язык
Би, разработанный Кеном Топсоном.
Си является орудием системного программиста и позволяет
глубоко влезать в самые гонкие механизмы обработки информа-
ции на ЭВМ. Хотя язык требует от программиста высокой дис-
циплины, он нс строг в формальных претензиях и допускает крат-
кие формулировки.
Си — современный язык. Он включает в себя тс управляющие
конструкции, которые рекомендованы теорией и практикой про-
граммирования. Его структура побуждает программиста использо-
вать в своей работе нисходящее проектирование, структурное про-
граммирование и пошаговую разработку модулей.
Си — мощный и гибкий язык. Большая часть операционной
системы Unix, компиляторы и интерпретаторы языков: Фортран,
Pascal, ЛИСП и Бейсик, написаны именно с его помощью.
32
1.1. Место языка Pascal в ряду других языков программирования
Си — удобный язык. Он достаточно структурирован, чтобы
поддерживать хороший стиль программирования, и вместе с тем
нс связан жесткими ограничениями.
В некотором смысле язык Си — самый универсальный, т. к.
кроме набора средств, присущих современным языкам высокого
уровня (структурность, модульность, определенные типы данных),
в него включены средства для программирования практически на
уровне Ассемблера. Большой набор операторов и средств, требуют
от программиста осторожности и хорошего знания языка со всеми
его преимуществами и недостатками.
Smalltalk (1972 г.)
Популярность объектно-ориентированному программированию
принес язык Smalltalk, созданный в I972 г. Язык предназначался
для проектирования сложных графических интерфейсов и был
первым no-настоящему объектно-ориентированным языком.
В нем классы и объекты — это единственные конструкции про-
раммирования. Большим недостатком Smalltalk являются боль-
шие требования к памяти и низкая производительность получен-
ных программ. Это связано с не очень удачной реализацией объ-
ектно-ориентированных особенностей.
После появления языка Си++ язык Smalltalk был на время за-
быт, т. к. слишком уж заманчивыми казались возможности языка
Си++.
Однако благодаря усилиям в первую очередь фирмы IBM язык
Smalltalk поддерживался и развивался незаметно для большинства
разработчиков. Эти усовершенствования, а также возросшая про-
изводительность новых компьютеров вдохнули новую жизнь в по-
лузабытый язык. Сегодня Smalltalk опять находит себе место среди
языков программирования, и в будущем он наверняка сможет ока-
зать заметную конкуренцию Си++ и его аналогам.
Язык Smalltalk выделяется двумя ключевыми особенностями,
позволяющими ему рассчитывать на роль ведущего средства раз-
работки. Во-первых, его синтаксис базируется исключительно на
понятии объекта и очень компактен. Даже само название языка в
переводе на русский язык звучит примерно как «малоразговорчи-
вый», В самом деле, в Smalltalk отсутствуют привычные отделен-
ные по смыслу друг от друга понятия оператора, данных или про-
цедуры. Абсолютно все, что входит в язык, является объектами, а
33
Тема 1. Обзор языков программирования
сами объекты общаются друг с другом исключительно с помощью
сообщений
Благодаря объектному подходу ко веем аспектам реализации
Smalltalk удалось создать не просто новый язык программирова-
ния, а полностью переносимую среду, хорошее владение которой,
приближается по ценности к профессиональному владению Си++.
Prolog (1973 г.)
Пролог — эго язык логического программирования, предназна-
ченный для представления и использования знаний о некоторой
предметной области. Программы на этом языке состоят из неко-
торого множества отношений, а ее выполнение сводится к выводу
новою отношения на основе заданных. В Прологе реализован де-
кларативный подход, при котором достаточно описать задачу с
помощью правил и утверждений относительно заданных объектов.
Если это описание является достаточно точным, то ЭВМ может
самостоятельно найти требуемое решение.
Центральной часть Пролога являются средства логическою вы-
вода, которые решают запросы, используя заданное множество
фактов и правил, к которым обращаются как к утверждениям.
Пролог также не имеет деления переменных на типы и может ди-
намически добавлять правила и факты к средствам вывода. Таким
образом, это гибкий язык и он более пригоден для объектно-ори-
ентированного расширения, чем язык со строго заданными типа-
ми, например Pascal. Пролог++ представляет собой дополнение к
стандартному Прологу.
Все свойства языка по-прежнему доступны программистам.
Следовательно. Пролог++ можно отнести к группе гибридных
языков, представителями которой, считаются Object Pascal и C++.
Расширение Пролог++ поддерживает все свойства, присущие
обычно объектно-ориентированным языкам: концепция объектов
и классов, единичное и многократное наследование, разбиение на
подклассы и передача сообщений. Поддерживаются также некото-
рые усовершенствованные свойства, существующие в таких язы-
ках как C++ и Smalltalk, включая общие и частные методы.
Пролог и его версия Пролог++ наряду с языком ЛИСП вес шире
начинает использоваться в области искусственного интеллекта.
Ada (1978 г.)
Язык Ада создан в результате грандиозного проекта, предпри-
нятою министерством обороны США с целью разработать единый
34
1.1. Место языка Pascal в ряду других языков программирования
язык программирования для так называемых встроенных систем
(т. е. систем управления автоматизированными комплексами, ра-
ботающими в реальном времени). Имелись в виду, прежде всего
бортовые системы управления военными объектами (кораблями,
самолетами, танками, ракетами, снарядами и т. д.). Поэтому ре-
шения принятые авторами Ады не стоит считать универсальными.
Их нужно воспринимать в контексте особенностей выбранной
предметной области. В настоящее время язык Ада все больше
применяется в системах управления движением, управления тех-
нологическими процессами и управления контрольно-информа-
ционными процессами.
Язык Ада возник в результате международного конкурса языко-
вых проектов проходившего в I978—1979 гг. Участники должны
были удовлетворить довольно жестким, детально разработанным
под эгидой Министерства обороны США требованиям. Интерес-
но, что все языки, дошедшие до последних туров этого конкурса,
были основаны на Pascal. В этой связи Аду можно предварительно
охарактеризовать как Pascal, развитый с учетом специальных тре-
бований. При этом авторы пошли в основном по нуги расшире-
ния Pascal новыми элементами. В результате получился сущест-
венно более сложный язык.
Ада является традиционным языком разработки больших и
сложных систем. Задумывался этот язык как объектный, но по
мерс развития стал принимать признаки гибридных языков.
Имя свое этот язык получил в честь Алы Августы Лавлейс, до-
чери английского поэта Байрона. Ала считается первой програм-
мисткой. г. к. именно она написала в 1834 году первую про!рамму
по вычислению коэффициентов Бернулли на «Аналитической ма-
шине» Чарльза Бэббиджа. Это был фактически первый програм-
мируемый компьютер, использовавший примитивные «програм-
мы» на перфокартах.
Modula (1982 г.)
Можно считать, что история языка Модула начинается в 1980
году, когда Никлаус Вирт, один из выдающихся специалистов по
теории информашги. известный большинству специалистов по
вычислительной технике в основном как создатель языка Pascal,
опубликовал описание нового языка программирования, назван-
ного им Модула. Как полноценный язык программирования Мо-
дула сформировался в 1982 г. и получил название Модула-2.
35
Тема 1. Обзор языков программирования
В отличие от Pascal, который был по замыслу языком для обу-
чения про1раммирования. Модула с самого начала представлял
собой язык для профессиональных системных программистов,
продолжая лучшие традиции своего предшественника и обогащая
их новыми идеями, соответствующих таким требованиям к языкам
программирования, как структурность, модульность к расшире-
нию. Как и множество других языков про|раммирования. Модула
подвергалась эволюции. Одновременно с развитием языка Модула
для него создавались новые компиляторы, однако, ни один из них
нс мог соперничать с лучшими реализациями языков Pascal и Си,
например, разработанных фирмой Borland. В этот переходный для
языка Модула период лучшей считались реализации выполненные
фирмой Logitech, которые по своим характеристикам проигрывап
Turbo Pascal и Turbo С. Только в 1988 году после появления на
американском рынке системы Top Speed, Модула-2 заняла досто-
йное место среди процедурных языков, предназначенных для сис-
темного программирования.
В 1988 юду была создана новая версия языка — Модула-3, ко-
торая начала иметь признаки гибридных языков.
C++ (1982 г.)
Язык C++ был создан Бьерном Страуструпом, с первоначаль-
ной целью, избавить себя и своих друзей от про)раммирования на
ассемблере, Си или других различных языках высокого уровня.
Очевидно, что больше всего C++ позаимствовал из языка Си, а
также из непосредственно его предшественника языка BCPL Эти
заимствования обеспечили С+ + мощными средствами, позволяю-
щими решать сложные задачи системного программирования. Но
что в первую очередь отличает C++ от Си — эго разная степень
внимания к типам и структурам данных. Это связано с появления-
ми понятий класса и виртуальной функции, переданных в свою
очередь из языка Симула-67. Это дает в C++ более эффективные
возможности для контроля типов и обеспечивает модульность
программы.
По мнению автора языка, различие между идеологией Си и
C+ + заключается примерно в следующем: программа на Си ото-
бражает «способ мышления» процессора, а C++ — способ мышле-
ния программиста. Отвечая требованиях» современного програм-
мирования, C++ делает акцент на разработку новых типов данных
наиболее полно соответствующих концепциям выбранной области
36
1.1. Место языка Pascal в ряду других языков программирования
знаний и задачам приложения. Класс является ключевым поняти-
ем C++.
В отличие от традиционных структур Си и Pascal, в C++ члена-
ми класса являются нс только данные, но и функции. Функции -
члены класса имеют привилегированный доступ к данным внутри
объектов этого класса и обеспечивают интерфейс между этими
объектами и остальной программой. При дальнейшей работе со-
вершенно не обязательно помнить о внутренней структуре класса
и механизме работы встроенных функций. В этом смысле класс
подобен электрическому прибору — мало кто знает о его устрой-
стве, но нее знают, как им пользоваться
Главной целью создателя языка (Бьерн Страустрапом) было
оснащение языка C++ конструкциями позволяющими увеличить
производительность труда программистов и облегчить процесс
овладения большими программными продуктами.
Абстракция, реализация, наследования и полиморфизм явля-
ются необходимыми свойствами, которыми обладает язык C++,
благодаря чему он не только универсален, как язык Си, но являет-
ся объектным языком с признаками гибридных языков.
JAVA (1995 г.)
Язык Джава зародился как часть проекта создания передового
программного обеспечения для различных бытовых приборов. Ре-
ализация проекта бала начата на языке C++, но вскоре возник ряд
проблем, наилучшим средством борьбы с которыми было измене-
ние самого инструмента — языка программирования. Стало оче-
видно, что необходим платформо-независимый язык программи-
рования. позволяющий создавать программы, которые нс прихо-
дилось бы компилировать отдельно для каждой архитектуры, и
можно было бы использовать на рахтичных процессорах под раз-
личными операционными системами.
Язык Джава потребовался для создания интерактивных продук-
тов для сети Internet. Фактически, большинство архитектурных ре-
шений, принятых при создании Джава, было продиктовано жела-
нием предоставить синтаксис, сходный с Си и C++. В Джава ис-
пользуется практически идентичные соглашения для объявления
переменных, передачи параметров, операторов и для управления
потоком выполнением кода В Джава добавлены все хорошие чер-
ты C++.
37
Тема 1. Обзор языков программирования
Три ключевых элемента объединились в технологии языка
Джава. Первый элемент — Джава предоставляет для широкою ис-
пользования свои апплеты — небольшие, надежные, динамичные,
не зависящие от платформы активные сетевые приложения, встра-
иваемые в страницы Web. Второй элемент — Джава высвобождает
мощь объектно-ориентированной разработки приложений, соче-
тая простой и знакомый синтаксис с надежной и удобной в работе
средой разработки. Это позволяет широкому кругу профаммиегов
быстро создавать новые профаммы и новые апплеты. Третий эле-
мент — Джава предоставляет программистам богатый набор клас-
сов объектов для ясного абстрагирования многих системных фун-
кции, используемых при работе с окнами, сетью и для ввода-вы-
вода. Ключевая черта этих классов заключается в том, что они
обеспечиваю!' создание независимых от используемой платформы
абстракции дня широкою спектра системных интерфейсов.
Заключение
В заключение данного краткого обзора языка программирова-
ния отмстим, что в мире наиболее широко используется нс так уж
много из рассмотренных выше языков. К наиболее популярным с
точки зрения частоты использования от носятся следующие языки:
• Фортран, т. к. на этом языке накопилось достаточно много
работающих приложений. По мнению некоторых специали-
стов — приложений на Фортране создано больше, чем на
любом другом языке профаммирования;
• Бейсик и его версии, г. к. это очень удобный язык для начи-
нающих нрофаммистов;
• Pascal и его версии, т. к. он специально создан для разработ-
ки прикладных программ;
• Си и C++ — т. к. этот язык (эти языки) изначально созда-
вался как профессиональный язык в первую очередь для раз-
работки системных программ.
Д1я написания профамм с оконным интерфейсом для Windows
в последнее время все большей популярностью пользуются языки
Visual Basic, Visual С и Delphi (визуальный Pascal).
В России вес эти языки тоже широко и профессионально испо-
льзуются. Но в России широко используется и еще один, казалось
бы, устаревший, язык — это Ассемблер. Этот язык труден для
профаммирования, но чрезвычайно эффективен с точки зрения
быстродействия и компактности профамм. Непреходящая попу-
38
1.1. Место языка Pascal в ряду других языков программирования
лярность и профессиональное владение этим языком в среде рос-
сийских профам мистов довольно сильно отличает нашу страну от
остального мира. И может быть именно это является одной из
причин высокой квалификации и высокой ценности российских
программистов.
1.1.4. Эволюция и тенденции развития языков
программирования
При написании данного раздела авторы пособия использовали
материалы /18, 20/. полученные в Интернете.
Эволюция развития языков программирования
Если провести классификация языков программирования по
хронологии и одновременно по группам языков (табл. 1.3), то
можно обнаружить некоторые особенности в эволюции развития
языков с 1944 года по 2000 год.
Таблица 1.3
Эволюция развития языков программирования
Машинные языки Проце- дурные языки Объектно- ормАкти- рованные языки Функцио- нальные языки Логи- ческие языки Гибридные языки
1944 Машинный код
1951 Assembler
1954 Fortran
1958 LISP
1960 Algol-60
Cobd
1962 Simula
1963 BASIC
1964 REFAL
pyi
1968 Algol 68
1970 Fatti Pascal
1972 С Prolog
SmallTalk
1973
39
Тема 1. Обзор языков программирования
Машинные языки Проце- дурные языки Объектно- ориенти- рованные языки Функцио- нальные языки Логи- ческие языки Гибридные языки
1974 Concurrent Pascal
1975 Scheme
1976 Mesa
1978 Ada
1980 Modula-2 Prolog++
1982 C-м-
1983 Cedar
1984 Common USP кто Object Pascal
1986 Objective С Ala
Eiffel
1988 Oberon Standard ML Modula-3
1991 Oberon-2 Objective C
1992 Miranda REFAL+
1995 Shape Up Java
1996 Limbo Objective CaML
1997 Component Pascal
2000 Dynamo
Ct
Из рассмотрения таблицы I.3 можно увидеть следующее:
а) первые три ipyniibi языков (машинные, процедурные, объек-
тно-ориентированные) появлялись последовательно одна за дру-
гой. Это отражает понятную ситуацию — каждая из этих трех
групп являлась самостоятельным качественным скачком развития
языков пршраммирования. Исключением здесь является язык Si-
mula, который несколько опередил свое время;
б) появление группы функциональных языков демонстрирует
собой отклик программистов на требование решать задачи нс чис-
ленного характера. Программирование с помощью функций удачно
отвечало этому требованию. Созданный еще во времена расцвета
процедурных языков, язык LISP настолько удачно решал эту зада-
чу, что появление новых функциональных языков произошло лег
40
1.1. Место языка Pascal в ряду других языков программирования
через двадцать после LISP. К этому времени уже многие объектные
языки начали приобретать признаки функциональных языков;
в) с 80-х гг. XX столетия развитие языков и дополнение многих
из них лучшими чертами других языков привело к появлению
группы гибридных языков. И многие новые языки, и некоторые
старые языки считают для себя полезным стать языками (руины
гибридных языков;
г) особняком следует рассматривать логические языки. Они по-
явились, как попытка переложить на компьютер некоторые мыс-
лительные функции человека. Нс случайно именно эти языки, да
еще язык LISP, начали использоваться в области разработки ис-
кусственного интеллекта.
Тенденции развития языков программирования
При подготовке данного раздела учебного пособия была испо-
льзована интересная идея построения диаграммы уровня языков,
изложенная в работе /18/. Эта идея авторами настоящего учебного
пособия была переосмыслена и частично изменена и дополнена.
Эволюция и тенденция развития языков программирования пока-
заны на рис. I.I.
Из рассмотрения этого рисунка можно сделать несколько вы-
водов:
а) Явно прослеживается тенденция в приближении языков про-
(раммирования к такому виду, когда задачу можно было бы фор-
мулировать в виде некоторых условий (или даже просто идеи), а
пути поиска решения определялись бы достаточно свободными ал-
горитмами (или даже просто логическими правилами). Образно
выражаясь, эта тенденция есть ни что иное как «стремление
компькиера стать Человеком*.
б) Из (рафика видно, что при нынешнем состоянии компьюте-
ров (процессоров) и языков про(раммирования имеющаяся тен-
денция развития не позволяет пока создать искусственный интел-
лект. равный интеллекгу человека. Компьютер по-прежнему мо-
жет делать пока только то, что ему объяснит Человек. Хотя это
объяснение утке и сейчас может выглядеть достаточно близко по-
хожим на естественную человеческую запись в виде общих правил
и условий.
в) Вполне возможно, что в будущем появятся (а может быть,
уже сейчас вызревают) новые качественно другие языки програм-
мирования, которые «сдвинут* график на рис. I.I вверх и вправо и
41
Тема 1. Обзор языков программирования
Логически верное
Логически верное
рвоюнио для реим*4Ю для
конкретных данных Логически верно© решение ладанной идеи
Верное Идейно
решение для верное
конкретных -4 ы. радение на
данных wnen,. постановка задачи конкретном
процессоре
Рис. 1.1. Эволюция и тенденция развития языков программирования
приблизят его к правой верхней точке, которую условно можно
считать точкой «Человеческого интеллекта».
В заключение отметим, что существует достаточно большое ко-
личество известных и успешно применяемых языков программи-
рования, которые могли бы занять самое различное положение на
поле рис. 1.1. Однако здесь рассматривается только общая тенден-
ция развития языков программирования.
1.1.5. История создания и развитие языка Pascal
В основу данного раздела авторами пособия положена работа /4/.
История создания языка Pascal
Формально юбилей языка Pascal пришелся на ноябрь 2000 года,
когда исполнилось 30 лет с момента первой официальной публи-
кации описания языка. Но то был недоступный широкой аудито-
42
1.1. Место языка Pascal в ряду других языков программирования
рии технический отчет Швейцарского федерального технологиче-
ского института ETH (Eidgenoessische Technische Hochschulc).
В самом начале 1971 года отчет был перепечатан в первом номере
журнала «Acta Informatica*. Так что рождение нового языка можно
отсчитывать с этого момента.
Его автор швейцарский профессор Никлаус Вирт, во многом
стал известен именно благодаря появлению языка Pascal. Но и по-
следующие его проекты убедительно доказали миру, что ключ к
тайнам компьютеров — в гармонии математики, инженерии и
программирования. И если грамотно подойти к делу, то можно
реализовать языки, операционные системы и даже создать велико-
лепные компьютеры, превосходящие промышленные образцы, си-
лами обычных студентов!
Никлаус Вирт назвал новый язык программирования в честь
великого французского математика и религиозного философа
XVII века Блеза Паскаля (Blcs Pascal). Паскаль изобрел вычисли-
тельное устройство, именно поэтому новому языку было присвое-
но его имя. Никлаус Вирт настаивал впоследствии, что название
языка должно начинаться с заглавной буквы — как фамилия. /13/.
Благодаря своей четкости, логичности и другим особенностям
Pascal надолго занял свою нишу, являясь прекрасным языком для
обучения программированию. Pascal использовался и дня разработ-
ки серьезных программ-приложений. В 1975 г. два события стали
вехами в истории программирования — Билл Гейтс и Пол Аллен
(будущие основатели фирмы Microsoft) заявили о себе, разработав
свою версию Бейсика, а Никлаус Вирт и Йенсен выпустили класси-
ческое описание языка Pascal под названием «Pascal User Manual
and Report» («Руководство пользователя языка Pascal») /13/.
Первый компилятор языка Pascal (ETH Pascal) был написан в
1970 г. Первое официальное описание Pascal с изложением син-
таксиса и семантики было опубликовано Виргом в конце 1970 г.
Новая версия языка вышла в свет в 1972 г. Тогда же Вирт и его ан-
глийский коллега Чарльз Энтони Хоар (Charles Anthony Richard
Ноаге) выпустили аксиоматическое описание языка Pascal. Итак, в
середине 1970 г. компилятор ETH Pascal был готов.
Он был интересен нс только тем, что стал одной из первых реа-
лизаций языков высокого уровня на самом себе, примерно, на два
года опередив компилятор Си. В ходе работ над ним в 1973 г. была
придумана абстрактная Pascal-машина (P-машина), исполняющая
специальный P-код. Чтобы решить проблему переноса компиля-
43
Тема 1. Обзор языков программирования
гора Pascal на разные платформы, Вирт решил воспользоваться
испытанными временем методами интерпретации.
Появившаяся в 1978 г. коммерческая реализация языка Pas-
cal — UCSD Pascal (К. Боулес) стала еше более известной, и мно-
гие забыли, где же впервые возникли P-код и P-машина. Вот что
говорит об этом Вирт: «После того как стало известно о существо-
вании Pascal, несколько человек попросили нас помочь в его реа-
лизации на различных машинах, подчеркивая, что они намерены
использовать сю для обучения и что быстродействие для них не
имеет первостепенного значения. После этою мы решили создать
версию компилятора, которая генерировала бы код для машины
нашей собственной конструкции. Позднее этот код стал известен
как P-код. Pascal-Р оказался исключительно удачным языком для
распространения среди большого чиста пользователей. И сети бы
у нас хватило мудрости предвидеть масштабы такого развития со-
бытий, то мы приложили бы больше усилий и тщательности при
разработке и докумен гировании Р-кода».
Язык Pascal явился нс просто ревизией Algol-W. Он создавался
Виртом под воздействием идей Чарльза Энтони Хоара, опублико-
ванных впоследствии в работе «Заметки по структуризации дан-
ных» (Ноагс C.A.R. Notes on Data Structuring Academic Press, 1972).
Вклад английского ученого в разработку языка был столь значите-
лен, что его смело можно назвать крестным отцом языка Pascal.
Об авторе языка Pascal
Профессор Никлаус Вирг (Niklaus К. Wirth), автор языка Pas-
cal, закончил Швейцарский федеральный технологический инсти-
тут ETH (Eidgenoessische Technische Hochschule) в родном Цюрихе
(I958). В Лавальском университете в Квебеке (Канада) он получил
степень магистра ( I960). В I963 г. в Университете Калифорнии в
Беркли (США) Bnpi под руководством профессора Гарри Хаски
реализовал расширение Алгола-60 (язык Euler) и защитил диссер-
тацию. В 1963—1967 гг. Вирг преподавай в Сгэнфордском универ-
ситете (США). В это же время он был приглашен в международ-
ную экспертную группу IFIP Working Group 2.1, занимавшуюся
проектированием языка Алгол-68.
В I967 г. Вирт вернулся на родину и стал доцентом Универси-
тета Цюриха. В I968 г. он перешел в ЕТН, где занялся разработ-
кой языка Pascal. В 1970 г. был завершен первый компилятор язы-
ка Pascal. В период I978—198I гг. Вирг возглавлял проект, в кото-
44
1.1. Место языка Pascal в ряду других языков программирования
ром был разработан язык Модула-2, ориентированный на
16-разрядный персональный компьютер Лилит (Lilith) и ОС Мс-
dos. Вес программное обеспечение, включая системное, было пол-
ностью реализовано на Модуле-2. В 1984 г. Никлаус Вирт за боль-
шой вклад в развитие языков программирования и за создание
персонального компьютера Лилит был удостоен премии Алана
Тьюринга — самой престижной и почетной в компьютерном мире,
которая по своему значению стоит в одном ряду с Нобелевской
премией.
В период 1986—1989 гт. Вирт вел проект по созданию нового
языка Oberon, расширяемой объектно-ориентированной ОС Obe-
ron и 32-разрядной рабочей станции Ceres. Многие идеи этого
проекта были положены сотрудниками Sun Labs в основу языка и
технологии Java.
С I990 г. Вирт руководил Институтом компьютерных систем
при ЕТН. В 1999 г. он ушел на заслуженный отдых и стал почет-
ным профессором родного ЕТН.
Характеристика языка Pascal
Частично характеристика языка Pascal уже была дана ранее в
разделе I I.3. Теперь мы продолжим описание и характеристику
языка Pascal более подробно.
Создатель языка программирования Pascal Н.Вирт писал:
«...Опыт использования языка Pascal убедительно продемонстри-
ровал его достоинства: легкость программирования на нем, его
пригодность с точки зрения формальных методов отладки про-
грамм. возможность его эффективной реализации и практическую
мобильность как самого транслятора с языка Pascal, так и напи-
санных на нем программ» /6/.
Н. Вирт разработал язык Pascal, во-первых, с целью внедрения
системного подхода к программированию, созданию очень «про-
зрачных» программ и применению методов автоматической про-
верки их целостности и, во-вторых, как средство обучения новой
компьютерной культуре /6/.
Одним из основных свойств языка программирования Pascal
является ярко выраженная взаимосвязь оператора и операнда, т. с.
любой оператор действует на определенный класс операндов. Под
операндами мы понимаем исходные данные, которые в той или
иной мере подвергаются обработке операторами. I !родолжением
этому являются концепция типизации данных и переменных, ис-
45
Тема 1. Обзор языков программирования
пользуемых при построении алгоритмов, и реализация их на
компьютерах. В чем же суть концепции типизации данных? Все
исходные данные, на которые воздействуют операторы, почти во
всех языках программирования разбиты на определенные классы
или. как их принято называть, типы данных. Соответственно это-
му рефлексивно вся совокупность операторов языка программи-
рования как бы «привязана» к определенному типу данных. Таким
образом, каждый класс операторов образует тесную связь с типом
обрабатываемых данных. Образно говоря, классы операторов и
операндов образуют прочные пары взаимосвязанных элементов
языка. Именно это качество языка Pascal является одним из до-
стоинств, позволяющих основательно изучать культуру програм-
мирования, взяв его за образец /6/.
Присущий языку Pascal стиль программирования полностью
определяется используемой в нем философией типов данных, их
организацией. Чтобы овладеть навыками программирования, не-
обходимо понять концепцию организации данных, принятую в
языке, как важнейший аспект программирования. Можно сказать,
что типы данных играют ключевую роль в автоматизации диагнос-
тики ошибок и улучшают удобочитаемость программы /6/.
Отметим следующие возможности языка Pascal /6/:
• Есть языки программирования, ориентированные на опреде-
ленную область применения. Практика показала, что Pascal в
широком смысле универсальный язык.
• Язык программирования должен, в частности, облегчать со-
здание больших программ, разрабатываемых, возможно, не-
сколькими программистами. Эго также обеспечивает язык
программирования Pascal.
• Pascal реализует возможность декомпозиции задач на неза-
висимые (почти независимые) подзадачи и позволяет под-
держивать надежный интерфейс между ними. Возможность
компоновки программ из отдельных компонентов значитель-
но ускоряет процесс создания больших программных комп-
лексов, повышает уровень взаимозаменяемости програм-
мных фрагментов, упрощает корректировки и повышает на-
дежность работы комплекса.
• Pascal обеспечивает возможность гибкой структуризации
данных за счет использования массивов, записей, множеств,
файлов, динамической памяти.
46
1.1. Место языка Pascal в ряду других языков программирования
• Pascal обеспечивает механизм надежной передачи парамет-
ров в подпрограммы. Полезным свойством языка может вы-
ступать рскурсивность обращения к подпрограммам.
• Поскольку Pascal — сильно типизированный язык програм-
мирования, то соблюдается строгая дисциплина использова-
ния типов.
• В языке Pascal имеется возможность создания новых типов
данных в широком диапазоне — от создания синонимов для
уже существующих типов данных до возможности определе-
ния внутреннего представления объектов нового типа дан-
ных и набора операций, допустимых над объектами, имею-
щими этот тип. Так достигается гибкость языков программи-
рования.
• В Pascal также существует иерархия исполнения операций.
От языка Pascal принято отсчитывать эпоху структурного про-
граммирования. А все началось с тою, что извест ный голландский
специалист Эдсгср Дсйкстра опубликовал статью «Структурное
программирование» (Dykstra E.W. Structured Programming Ц NATO
Science Committee. 1969). В ней он предложил офаничить логику
управления профаммы всего тремя формами: следованием (sequ-
ence), ветвлением (selection) и циклом (iteration). Из этого вытека-
ло, что в языках Алгол и ПЛ/1 оператор безусловного перехода
(goto) был уже попросту не нужен. Вирт, правда, не рискнул изъ-
ять его из Pascal. Но главное было в друтом: структурное програм-
мирование задавало нисходящий принцип разработки (пошаговая
декомпозиция), предусматривало Сфуктурирование логики и дан-
ных. за счет простоты и математической основы повышало надеж-
ность программного обеспечения. Все это органично вписывалось
в возможности лаконичного Pascal.
Вирт большое значение придавал такому свойству как надеж-
ность, залогом чему является взвешенный подход, простота и ла-
коничность языка. Вирт отмечает: «Поддержание языка максима-
льно простым и регулярным всегда было приоритетом в моей ра-
боте: описание Pascal занимало около 50 страниц, Модулы-2 -
около 40, а Оберона — и вовсе 16. И я рассматриваю эту тенден-
цию как прогрессивную. Истинная ценность языков программи-
рования зависит от качества и практичности их абстракций».
Характеризуя замысел своего языка, Вирт писал: «Главной инно-
вацией Pascal было введение вариативности структур и типов данных
подобно тому, как Алгол ввел вариативность управляющих структур.
47
Тема 1. Обзор языков программирования
Алгол предлагал только три базовых типа данных: целые и вещест-
венные числа, значения истинности, массивы. Pascal ввел дополни-
тельные базовые гины и дал возможность определять новые базовые
типы (перечисление, диапазоны), а также новые виды структуриро-
вания: запись, множество, файл (последовательность), часть кото-
рых была представлена в Коболе. Наиболее важной стала, конечно,
рекурсивность структурных описаний и вытекающая из нес возмож-
ность осуществлять комбинирование и вложение структур».
В 80-е гг. язык Pascal подвергался серьезной и обоснованной
критике. Одним из последовательных противников Pascal был
Брайан Кернитам. И он. в частности, отмечал, что к достоинствам
языка Pascal следует отнесги механизм рекурсии, тип «перечисле-
ние», тип «запись», булевы переменные. Из серьезных недостатков
он выделил отсутствие поддержки массивов с открытыми граница-
ми, неудобства работы со строками, отсутствие статических пере-
менных (по отношению к процедурам и функциям), потребность в
раздельной компиляции, ограничение средств ввода-вывода.
Авторы языка Pascal конструктивно воспринимали эту критику.
Просчеты, допущенные при создании языка, были устранены Вир-
том и его учениками в последующих языках швейцарской школы.
Противостояние Pascal и Си
Pascal нередко противопоставляют другому языку — Си. Но вот
что сказал в присутствии Вирта по этому поводу Деннис Ритчи, ав-
тор Си (1993): «Я утверждаю, что Pascal очень близок языку Си.
Одни, быть может, этому удивятся, друтие — нет... Даже интерес-
но. насколько они близки друз apyiy. Эти языки больше расходят-
ся в деталях, но в основе своей одинаковы. Если вы взглянете на
используемые гины данных, а также на операции над типами, то
обнаружите очень большую степень совпадения... И это несмотря
на то, что намерения Вирта при создании Pascal весьма отличались
от наших в языке Си. Он создавал язык для обучения, а потому
преследовал дидактические цели. И, как я заметил это по Pascal и
по его более поздним языкам, Вирт был во власти своего стремле-
ния О1раничить выразительные средства как можно сильнее...»
Да, Pascal, в отличие от Си, нс создавался как язык системного
программирования. Во имя простоты и эффективности на том
уровне понимания программирования Вирт сознательно пошел на
заведомое ограничение возможностей языка, прежде всего в отно-
шении общения с внешним миром (ввод-вывод и системно-зави-
48
1.1. Место языка Pascal в ряду других языков программирования
си мыс средства). И все же думать, что Pascal — язык исключитель-
но для преподавания, было бы неверно. Послушаем на этот счет
мнение самого Вирта (1984): «Утверждалось, что Pascal был разра-
ботан в качестве языка для обучения. Хотя это утверждение спра-
ведливо, но его использование при обучении не являлось единст-
венной целью. На самом деле я не верю в успешность применения
во время обучения таких инструментов и методик, которые нельзя
использовать при решении каких-то практических задач. По се-
годняшним меркам Pascal обладал явными недостатками при про-
граммировании больших систем, но 15 лет назад он представлял
собой разумный компромисс между тем, что было желательно, и
тем, что было эффективно».
Языки Pascal и Си во многом определили пути развития про-
граммирования в конце XX столетия. Их противостояние напом-
нило романтическую эпоху 60-х годов, когда сторонники Фортра-
на и Алгола-60 также оказались по разные стороны баррикад.
При всем уважении к таким масштабным языкам, как Кобол,
ПЛ/1 и Алгол-68, господствовавшим в 70-е годы, столь явно выра-
женную борьбу людей и идей нам удалось наблюдать лишь в 80-е
(Pascal и Си) и в самом конце 90-х голов — Си++ и Java.
Можно назват ь как минимум три десятка языков, которые сыг-
рали заметную роль в развитии программирования, но все же
именно эти три пары — Аггол-60 и Фортран, Pascal и Си. Java и
Си++ — стали самыми яркими, самыми заметными на компью-
терном небосклоне.
Это, конечно, чисто субъективные ощущения, но в определен-
ные моменты эволюции можно было наблюдать едва ли не безого-
ворочное господство того или иного языка, что туг же отражалось
на требованиях промышленности, на составлении учебных планов
в вузах и университетах. В 70-е годы на пике популярности среди
универсальных языков был Фортран, в 80-е — Pascal, в 90-е
годы — Си++. К счастью, языки программирования, в отличие от
небесных светил нс умирают, а продолжают свою жизнь, раство-
ряясь спустя годы и десят илстия в новых себе подобных звездах.
Развитие языка Pascal
В 1975 г. профессор Кеннет Боулес, работавший в Университете
Калифорнии в Сан-Диего (University of California at San Diego —
UCSD), получил из Цюриха Р-инструмснтарий, который вместе с
компилятором Р2 и был положен в основу UCSD Pascal. В Инсти-
49
Тема 1. Обзор языков программирования
туте изучения информации калифорнийского университета Боулсе
вместе со Стефеном Франклином и Альфредом Борком занялись
созданием системы программирования и операционной системы
на базе Pascal для микрокомпьютерных архитектур. Весьма значи-
тельным усовершенствованием языка в UCSD Pascal стало введе-
ние unit-блоков, необходимых для поддержки раздельной компи-
ляции. Впоследствии они были унаследованы в языке Turbo Pascal.
Интересно, что взята эта идея была из спецификаций языка
Ада, которые к тому моменту подходили к своему завершению.
В то же время сам Вирг из языка Mesa позаимствовал куда более
совершенную конструкцию, ввел ее в Модулу-2 и назвал «моду-
лем» (module). Собственно, она и дала название новому языку
Вирга Modula-2 (MODUiar LAnguagc).
Версия UCSD Pascal стала прародительницей системы Turbo
Pascal, добившейся небывалой популярности.
Что касается UCSD Pascal, то эта реализация для Pascal означа-
ла серьезный прорыв: благодаря Боулесу сфера применения языка
значительно расширилась, что, в свою очередь, дало заметный им-
пульс развитию микрокомпьютерной революции.
Разработкой UCSD Pascal, сумевшей стать законченным ком-
мерческим продуктом, заинтересовались многие компании. При-
чем их внимание привлекла и перспективная P-машина, на кото-
рую UCSD продал немало лицензий.
Огромную роль в массовом распространении Pascal сыграла
компания Borland International. На основе идей UCSD Pascal она
сумела создать знаменитую Turbo-среду разработки. 'Это был зна-
чительный шаг вперед в облегчении процесса программирования.
Удобство визуальных средств в сочетании с тесной интеграцией
инструментария стали для сотен тысяч программистов большим
подспорьем.
Правда, язык в исполнении Borland теперь уже отдаленно на-
поминает то, что когда-то носило имя Pascal. Безжалостные зако-
ны рынка раздавили оригинал и родили на свез Turbo-Borland-Ob-
ject Pascal.
Почувствовав это, авторы Pascal заблаговременно начали раз-
вивать другую ветвь Pascal. Так появились языки: Модула, Моду-
ла-2. Оберон, Оберон-2.
А что же Turbo Pascal? Язык видоизменялся едва ли не с каж-
дой версией среды разработки! В версии 3.0 появилась встроенная
рафика, в версии 4.0 — модули, в версии 5.5 — средства объект-
50
1.1. Место языка Pascal в ряду других языков программирования
но-ориснтированного профаммирования. Начиная с версии 7.0,
Turbo Pascal был переименован в Borland Pascal, а с появлением
системы визуального объектно-ориентированного нрофам.мирова-
ния Delphi — в Object Pascal.
В тени марки Borland оказалось имя автора Turbo Pascal датча-
нина Андерса Хейльсберга. В 1983 г. Borland выкупила лицензию
на компилятор Хейльсберга и приняла автора на работу. В ноябре
того же года на рынке появился компилятор Turbo Pascal I.0 для
СР/М и персональных компьютеров семейства IBM PC. В январе
1989 г. Microsoft выпустила Quick Pascal, позиционировавшийся
как конкурент Borland Pascal. Но он продержался недолго. Micro-
soft с Borland поделили рынок, разведя ветви Си и Pascal еще да-
льше друг от друга.
Что касается Хейльсберга, то он 13 лет проработал в компании
и стал руководителем проекта Delphi. В октябре 1996 г. Андерса
Хейльсберга за 3 млн. долл, приобрела корпорация Microsoft, и те-
перь он ведущий архитектор языков .NET, а также автор языка
С#. (При разработке С#, по словам Хейльсберга, рассматривались
Си++. Java, Модула-2, Smalltalk).
Его прежняя компания, вернув себе имя Borland после неско-
льких лет работы под вывеской Inprise, предпринимает теперь ак-
тивные шаги по укреплению позиций своего Pascal в бурно разви-
вающейся ОС Linux. Обеспечивая простоту' миграции программ,
созданных для Windows на Visual Basic и Object Pascal, в среду Li-
nux под единым инструментарием Kylix, Borland Software намерена
создать серьезную конкуренцию позициям Microsoft.
Языки Pascal-семейства
Pascal оказался настолько удачным языком программирования,
что породил целое семейство себе подобных языков.
Языки Pascal-семейства, особенно в своей самой развитой
фазе, тоже име.зи значительную популярность в задачах корабле-
строения, флота и водного транспорта. Многие идеи языка Pascal
естественным образом перекочевали в другие современные языки
программирования. Сохранились и многие практические приложе-
ния, написанные на языке Pascal.
Развитие языков Pascal-ссмейства осуществлялось по несколь-
ким направлениям. Эти направления и последовательность воз-
никновения языков показаны на рис. I.2.
51
Тема 1. Обзор языков программирования
200С Г.
Рис. 1.2. Дерево языков Pascal-семейства
Из всех языков Pascal-семе йства к числу наиболее важных реа-
лизаций относят три Pascal-системы указанные в таблице 1.4.
Таблица 1.4.
Наиболее важные реализации Pascal
Система Год Руководитель География Организация
ETH Pascal 1970 Никлаус Вирг Европа ЫН
UCSD Pascal 1978 Кеннег Боулес США UCSD
Turbo Pascal 1983 Андерс Хейльсберг США Borland Im
52
1.2. Обзор программных комплексов
1.2. Обзор программных комплексов
В настоящее время имеется достаточно большое количество
отечественных и зарубежных программных комплексов, которые
часто имеют такой сложный вид, что превратились фактически в
целые системы автоматизированного проектирования (САПР).
1.2.1. Программные комплексы, применяемые
в машиностроении
В данном разделе будет приведен укрупненный обзор програм-
мных комплексов, которые применяются в тех или иных областях
общего машиностроения. В основном материал, приведенный
здесь, получен из работ /12, 16, 23, 25, 26, 28-31, 33, 48. 51-53/,
опубликованных в Интернете.
Классификация программною обеспечения
Существует несколько общепринятых аббревиатур классифика-
ции программ. Поясним их.
Профаммы CAD — предназначены для создания чертежей и
трехмерных моделей технических объектов, применяемых в облас-
ти машиностроения.
Программы САМ — предназначены для автоматического или по-
луавтоматического создания и редактирования управляющих про-
фамм для станков с числовым программныхг управлением (ЧП У).
Профаммы САЕ — предназначены для инженерных (общих и
специализированных) расчетов в области машиностроения.
Профаммы PDM — предназначены для ведения документообо-
рота, создания и управления архивами чертежей, а также для ра-
боты со сканированными документами технического назначения.
Отечественные программы CAD
Компас-График
Компас-ЗЭ
Компас-3D LT
Ком пас-Автопроект
Библиотеки Компас-График
АДотпСЛП
bCAD
CADBectio
TECHCARD
SprutCAD
CariMFCH
CadMECH Desktop
CadMFCHIT
T-RexCAD3D
T-RexCAD 2D и LT
T-RexCAD 3D SE
T-Rex/ГехноПро
T-Rex/Штампы
53
Тема 1. Обзор языков программирования
LCAD
CADMnkt
Kedrvnn
RaceCAD
ROTATION
AVS
T-Flex/Раскрой
Т-Аех/Пресс -формы
TRcx/Отливка
Библиогеки для Т-Аех CAD
БАЗИС-Комсгрухгор/Базмс-
Мсбельщик
Зарубежные программы CAD
Autodesk AutoCAD SolidWorks
Autodesk Mechanical Desktop Adams
Autodesk AutoS ketch CADKEY
Autodesk Actrix technical I-Deas
Autodesk Inventor Solid-Edge
Unigraphics Pro/Engineer
Cimatron TurboCAD
CAT1A Plant-40
ArctnCAD EUCdD
Think3 CADdy
Отечественные программы САМ
ГеММа 30
AdemCAM
Техтран
СПОП-3
СПОЛ-ВиО
САПР ЧПУТиграс
СПОП ГеоКон
САПР-ЧПУ/2000
SprutCAM
NC Tuner
Т-Rex/Ч ПУ
Т-Rex NC Tracer
Зарубежные программы САМ
ArtCAM Pro
EdgeCAM
Multi-DNC
NCWorks
Sirius
SURFCAM
NCSimul
CAMWorks
Master CAM
NCnetUte
PowerMill
Lmm AlphaCAM
SdidCAM
Отечественные программы CAE
АРМ VAriMactme
КОМПАС-SHAFT Plus
T-Flex/Пружины
T-Ftex Расчеты/Зубчатые передачи
СТАРТ (ИТП Трубопровод)
Intermecfi GEAR
Т-Аех/ИСЛА
КОМПАС-SPRING
САМ ЛП -Полигон"
54
1.4. Контрольные вопросы по теме 1
Зарубежные программы САЕ
CosmcisAMcirks
Desig nWorks
MSC/Nastran для SolidWokrs
MSC/Working Model
Samcef
PartAdviser
Отечественные программы PDM
КОМПАС-Менеджер
PartY (Лоция-Софт |
T-FtexDOCs
БОСС-Референт
Евфраг
Дело
Optima Wor kFlow
Search (НЛП -Интермех»)
IM BASF
Lan Docs
Крон
OfficeMedia
Effect Office
Omega Production
Зарубежные программы PDM
Columbus
DOCS Open
IMAN (Unigraphics)
Interoffice
GroupWise Workflow Professional
Saros Document Manager
Form Flow
Серия программ Raster Arts
RxEDM (Rasteiex)
SmarTeam (Smart Solution ltd.)
Action WukFkiw
Work Expeditor
EDM Suite
Перечисление программных комплексов
К числу наиболее известных и применяемых для решения техни-
ческих задач в общем машиностроении программных комплексов
можно отнести программные продукты, указанные в таблице 1.5.
Таблица 1.5
Программные комплексы, применяемые в машиностроении
№ п/п Наименование Разработчик Год начала разработки
1 AN SYS Компания ANSYS Inc. (США) - 1963
2 AutoCAD Компания AutoDesk Inc. (США) 1962
3 Cata Компания Dassault Systerres (Франция) 1962
4 COSMOS Structural Research & Analysis Corp. (США) - 1982
5 FkwWteion Компания ТЕСИС (Россия) 1991
55
Тема 1. Обзор языков программирования
№ п/п Наименование Разработчик Год начала разработки
6 Nastran MacNeai-Schwendter Software Corporation - MSC(CUJA) г 965
7 T-FLEX Компания АО «Тол системы* (Россия) 1993
8 Unigraphics Компания Ugs Corp. IСША| 1983
9 Компас ООО «Аскон» (Россия) 1995
10 Сударина ОКБ им А, С Яковлева (Россия) 1989
Конечно, есть и другие известные и успешно применяемые
программные комплексы, но в рамках данного учебного пособия
буду! рассмотрены только эти десять. Кроме того, ниже в пункте
1.2.2 отдельно будут рассмотрены про1раммные комплексы, при-
меняемые в кораблестроении.
Характеристики перечисленных программных комплексов
AN SYS
Программный комплекс ANSYS /12. 51/ — это одна из самых
распространенных, многофункциональных систем конечно-эле-
ментных расчетов. Включает в себя модули расчетов прочности и
динамики, температурных полей, гидрогазодинамики, электроста-
тики и электромагнетизма, оптимизации, вероятностных расчетов,
нелинейных расчетов по явной схеме интегрирования и другие.
Предоставляет уникальную возможность одновременно или поо-
чередно рассчитывать несколько различных физических полей в
рамках одной задачи.
Многоцелевые функции комплекса AN SYS обеспечиваются на-
личием в нем многочисленного семейства отдельных специализи-
рованных npoipaMM, имеющих много общих функций, однако ма-
тематическое обеспечение которых рассчитано на решение отдель-
ных классов задач. Перечислим некоторые из этих программ:
ANSYS/Muhiphysics — программа для широкого круга инже-
нерных дисциплин, которая позволяет проводить расчеты в облас-
ти прочности, распространения тепла, механики жидкостей и га-
зов, электромагнетизма, а также решать связанные задачи.
ANSYS/Mechanical — программа для выполнения проектных
разработок, анализа и оптимизации: решение сложных задач
прочности конструкций, теплопередачи и акустики.
56
1.4. Контрольные вопросы по теме 1
Эта профамма позволяет определять перемещения, напряже-
ния. усилия, температуры, давления и другие параметры, важные
для оценки механического поведения материалов и прочности
конструкции. Данная программа является подмножеством AN SYS
Multiphysics.
ANSYS/Structural — выполняет сложный прочностной анализ
конструкций с учетом разнообразных нелинейностей, среди кото-
рых геометрическая и физическая нелинейности, нелинейное по-
ведение конечных элементов и потеря устойчивости. Использует-
ся для точного моделирования поведения больших и сложных рас-
четных моделей. Данная программа является подмножеством
A N SYS/ Mechanical.
ANSYS/Thermal — это отдельная программа, выделенная из па-
кета ANSYS/Mechanical, для решения тепловых стационарных и
нестационарных задач.
ANSYS/LS-DYNA — программа, предназначенная для решения
прочностных задач динамики при больших нелинейностях. Эта
программа может использоваться для численного моделирования
процессов формообразования материалов, анализа аварийных
столкновений и ударов при конечных деформациях, включая про-
бивание, нелинейное поведение материала и контактное взаимо-
действие элементов конструкции.
ANSYS/ED — представляет собой программу, обладающую воз-
можностями ANSYS/Multiphysics, но имеющую о|раничения по
размерам расчетной модели. Эта программа предназначена в
основном, для учебных целей.
AutoCAD
Пршраммный комплекс AutoCAD и ею одна из последних вер-
сий AutoCAD 2006 /25/ — это система автоматизированного про-
ектирования, предназначенная для двумерного проектирования и
черчения, подготовки проектной документации, а также дтя вы-
полнения основных задач трехмерного моделирования.
В непрерывном развитии продукт прошел уже 20 версий. По-
следняя его версия AutoCAD 2006 — это ключ к всеобъемлющему
повышению производительности проектных работ. Начать работу
с новой версией очень легко, а старые файлы переносятся без осо-
бых затруднений. Новые интуитивно понятные возможности нс
требуют дополнительного изучения. Пользователю предостаатяет-
ся среда для автоматизированного проектирования, которая
57
Тема 1. Обзор языков программирования
успешно используется компанией Autodesk и ее партнерами для
разработки САПР* и I ИС-нриложений для отраслей архитектуры
и строительства, инженерной геодезии и топографии, машино-
строения и др.
AutoCAD 2006 является инструментом для реализации идей с
максимальной скоростью и эффективностью. В версии 2004 был
значительно уменьшен размер файлов, а в версии 2005 — введено
понятие подшивок. Новшества последней версии — это возмож-
ность создания динамических блоков и извлечения данных из них,
а также концентрация интерфейса, позволяющая инженеру сосре-
доточиться на творческом процессе.
От создания отдельных рисунков до управления целыми проек-
тами, от обмена данными при помощи сети Интернет до создания
сложных, насыщенных графикой презентаций — в любой из по-
добных задач новый стандарт производительности САПР позволя-
ет достичь новых вершин.
В продукте появились следующие новые возможности:
• Динамические блоки делают имеющиеся наборы блоков бо-
лее гибкими и управляемыми, а размер библиотек блоков
значительно сокращается.
• Усовершенствование аннотаций и компоновки чертежей по-
могает в создании, размещении и редактировании текстовой
и табличной информации, а также заметно расширяет воз-
можности штрихования.
• Улучшенный пользовательский интерфейс придаст графиче-
скому указателю мощь командной строки. В процессе рабо-
ты можно вводить необходимые опции прямо под курсором,
получая немедленный эффект.
• Утилиты переноса упрощают процесс перехода к новой вер-
сии и позволяют сохранить пользовательские настройки па-
нелей и меню.
CATIA
Система САПА (Computer Aided Three-dimensional Interactive
Application) — одна из самых распространенных САПР высокого
уровня /33/. Это комплексная система автоматизированного проек-
тирования (CAD), технологической подготовки производства
(САМ) и инженерного анализа (САЕ), включающая в себя передо-
вой инструментарий трехмерного моделирования, подсистемы про-
граммной имитации сложных технологических процессов, развит ые
58
1.4. Контрольные вопросы по теме 1
средства анализа и единую базу данных текстовой и графической
информации Система позволяет эффективно решать все задачи
технической подготовки производства — от внешнего (концептуа-
льного) проектирования до выпуска чертежей, спецификаций, мон-
тажных схем и управляющих программ для станков с ЧПУ.
САПА нашла широкое применение в самолетостроении (Бо-
инг, ОКБ им. О. К. Антонова, КБ «Гражданские самолеты Сухо-
го»), автомобилестроении (Toyota), кораблестроении (США, Япо-
ния, Корея, Китаи).
COSMOS
Программный комплекс COSMOS и одна из его последних мо-
дификаций COSMOS/Works /16/ созданы для нужд аэрокосмиче-
ской промышленности и позволяют решать любые инженерные
задачи. COSMOS/Works является «золотым партнером» Solid-
Works, поэтому можно просто подключить модуль и проводить
расчет. Используя интегрированное применение SolidWorks и
COSMOS/Works, пользователи получают эффективный пуп, для
решения своих задач. Используя масштабированный подход, мож-
но выбрать только необходимые инструменты.
COSMOS/Works имеет широкий спектр специализированных
решателей, позволяющих провести анализ большинства встречаю-
щихся задач для деталей и сборок:
• Линейный статический анализ;
• Определение собственных форм и частот;
• Расчет критических сил и форм потери устойчивости;
• Тепловой анализ;
• Совместный термостатический анализ;
• Расчет сборок с использованием контактных элементов;
• Нелинейные расчеты;
• Оптимизация конструкции;
• Расчет электромагнитных задач;
• Определение долговечности конструкции;
• Расчет течения жидкостей и газов.
COSMOS/Works полностью интегрирован в SolidWorks и испо-
льзует проверенную технику генерации конечно-элементной сет-
ки, COSMOS/Works позволяет быстро и качественно проводить
анализ конструкций любой сложности, включая сборки, изделия
из листового металла и т. д.
59
Тема 1. Обзор языков программирования
FlowVision
Программный комплекс FlowVision /23, 52/ — современный
программный комплекс от российской компании ТЕСИС. FlowVi-
sion моделирует трехмерные стационарные и нестационарные те-
чения жидкости и газа. Новейший постпроцессор позволяет быст-
ро и эффективно анализировать результаты расчета. Многочис-
ленные физические модели и адаптивная расчетная сетка дают
возможность изучать такие сложные движения жидкости, как те-
чения с сильной закруткой, горением, свободными поверхностя-
ми, ударными волнами. FlowVision автоматически генерирует рас-
четную сетку и взаимодействует с широким спектром систем
САПР и конечно-элементного анализа.
Для расчета сложных движений жидкости и пт, сопровождае-
мых дополнительными физическими явлениями. такими, как.
турбулентность, горение, контактные границы раздела и так далее,
в FlowVision включаются дополнительные уравнения, описываю-
щие эти явления.
FlowVision использует конечно-объемный подход для аппрок-
симации уравнений математической модели. Уравнения На-
вье-Стокса решаются методом расщепления по физическим про-
цессам (проекционный метод МАС).
FlowVision основан на новейших технологиях вычислительной
гидродинамики и компьютерной графики.
Области применения FlowVision:
• Внешняя аэро- и гидродинамика: обтекание автомобиля,
судна, самолета, ракеты, зданий и сооружений (определение
коэффициентов сопротивления и подъемной силы, распре-
деленная нагрузка, тепло- и массоперенос);
• Внутренняя аэро- и гидродинамика: течение воздуха в сало-
не автомобиля и в подкапотном пространстве, вентиляция
внутренних отсеков, движение газов и жидкостей по магист-
ралям и трубопроводам;
• Моделирование турбомашин: течение в турбинах, компрес-
сорах, насосах, учет влияния гребных винтов на обтекание
судна;
• Моделирование процессов горения: сжигание метана в кот-
лах ТЭЦ, образование оксидов азота;
• Моделирование технологических процессов: моделирование
геплолереноса в микроэлектронных схемах, расчет рас-
60
1.4. Контрольные вопросы по теме 1
ход-напорных характеристик эжекторного насоса, водоза-
порных устройств, расчет смесителей и газовых миксеров,
совместный теплоперенос между жидкостью и твердыми те-
лами;
• Моделирование процессов изготовления деталей: литье ме-
таллов, расчет процессов затвердевания и кристаллизации;
• Экология, управление микроклиматом: распространения за-
грязнений и примесей в атмосфере и водной среде, отопле-
ние, вентиляция и кондиционирование.
NASTRAN
Программный комплекс NASTRAN и одна из его последних
версий MSC.Visual NASTRAN for Windows /28. 48/ — это целый
пакет профамм, который включает в себя профам му моделирова-
ния конструкций FEMAP и программу конечно-элементного ана-
лиза конструкций MSC/NASTRAN.
Программа FEMAP предназначена для подготовки полноцен-
ных конечно-элементных моделей и обработки результатов. В ней
существуют средства геометрического моделирования объектов, в
том числе твердотельных, и возможности их редактирования. Дтя
построения конечно-элементной модели могут использоваться ин-
струменты автоматической генерации сеток на геометрических
объектах. Средства импорта, экспорта и преобразования данных
обеспечивают взаимодействие со многими известными програм-
мами конечно-элементного анализа. Прорамма имеет обширные
возможности обработки, отображения и документирования резу-
льтатов анализа.
MSC/NASTRAN является исчерпывающей программой конеч-
но-элементного анализа общего назначения, включая возмож-
ность выполнения анализа статики и динамики конструкций, ана-
лиза теплопередачи и оптимизации, анализа чувствительности, ре-
шения задач аэроупругости. Каждый вид анализа использует
похожие входные файлы, что позволяет легко переключаться с од-
ного вида анализа на другой.
Программа FEMAP может быть объединена с программой
MSC/NASTRAN в и итерированную среду моделирования, анали-
за и проектирования конструкций MSC. Visual NASTRAN lor Win-
dows (сокращенно MSC. vN4W).
Процедура анализа конструкций методом конечных элементов
включает следующие основные этапы:
61
Тема 1. Обзор языков программирования
• разработка геометрической модели конструкции;
• задание характеристик материалов;
• задание типов конечных элементов и их свойств (толщины,
геометрических характеристик поперечного сечения и др.);
• создание сетки конечных элементов либо «ручным» спосо-
бом. либо автоматическим, например, путем разбиения гео-
метрической модели:
• проверка корректности сетки конечно-элементной модели;
• задание условий закрепления конечно-элементной модели;
• формирование условий нагружения конечно-элементной мо-
дели;
• выбор вида и параметров конечно-элементного анализа;
• выполнение конечно-элементного анализа конструкции;
• анализ возможных формальных ошибок, их устранение, по-
вторное выполнение конечно-элементного анализа;
• анализ результатов расчета, выявление ошибок моделирова-
ния, внесение изменений в модель, повторное выполнение
конечно-элементного анализа;
• обработка и 1рафическое оформление результатов расчета.
T-FLEX
Программный комплекс T-FLEX /53/ — это разработанная в
России специализированная интегрированная среда для выполне-
ния конечно-элементных расчетов.
I лавной отличительной особенностью системы является се глу-
бокая интеграция с комплексом геометрических редакторов. Мо-
дули конечно-элементного анализа интегрированы непосредст-
венно в систему 3D моделирования T-FLEX CAD 3D. Пользова-
тель T-FIEX CAD 3D создает в среде моделирования объемную
модель. Непосредственно в интерфейсе T-FLEX CAD 3D присут-
ствует специальное меню, используя команды которого, пользова-
тель может осуществить конечно-элементное моделирование по-
ведения изделия в различных постановках физических задач. Весь
процесс осуществляется непосредственно в T-FLEX CAD 3D. в
привычном дня пользователя интерфейсе.
Структурно T-FLEX Анализ организован по модульному прин-
ципу, что позволяет пользователю гибко подойти к комплектации
рабочего места расчетчика. В зависимости от решаемых задач, по-
льзователь может выбрать один или несколько из четырех расчет-
ных модулей.
62
1.4. Контрольные вопросы по теме 1
Модуль «Статический анализ» позволяет осуществлять расчет
напряженно-деформированного состояния конструкций под дей-
ствием приложенных к системе постоянных во времени сил. На
сегодняшний день это, пожалуй, наиболее востребованная в про-
ектировании задача. С помощью модуля «Статический анализ»
пользователь может оценить прочность разработанной им конст-
рукции по допускаемым напряжениям, определи)ь наиболее сла-
бые места конструкции и внести необходимые изменения (опти-
мизировать) изделие. При этом между трехмерной моделью изде-
лия и расчетной конечно-элементной моделью поддерживается
ассоциативная связь. Параметрические изменения исходной твер-
дотельной модели автоматически переносятся на сеточную конеч-
но-элементную модель.
Модуль «Частотный анализ» позволяет осуществлять расчет
собственных (резонансных) частот конструкции и соответствую-
щих форм колебаний. Осуществляя проверку наличия резонанс-
ных частот в рабочем частотном диапазоне изделия и оптимизируя
конструкцию таким образом, чтобы исключить возникновение ре-
зонансов, разработчик может повысить надежность и работоспо-
собность изделия.
Модуль «Анализ устойчивости» важен при проектировании кон-
струкций, эксплуатация которых предполагает продолжительное
воздействие различных по интенсивности нагрузок. С помощью
данного модуля пользователь может оценить запас прочности по
так называемой «критической нагрузке» — нагрузке, при которой в
конструкции могут скачкообразно возникнуть значительные неуп-
ругие деформации, зачастую приводящие к потере формы конст-
рукции. а затем к ее разрушению или серьезному повреждению.
Модуль «Тепловой анализ» обеспечивает возможность оценки
температурного поведения изделия под действием источников
тепла и излучения. Тепловой анализ может использоваться само-
стоятельно для расчета температурных или тепловых полей по
объему конструкции, а также совместно со статическим анализом
для оценки возникающих в изделии температурных деформаций.
Типичный порядок работы расчетчика с системой Т-FLEX Ана-
лиз состоит из нескольких этапов. На первом этапе необходимо по-
строение трехмерной модели изделия в T-FLEX CAD 3D. Отмстим,
что модель также может быть импортирована из сторонней систе-
мы проектирования. На втором этапе необходимо осуществить ге-
нерацию сеточной конечно-элеменiной модели изделия с помо-
63
Тема 1. Обзор языков программирования
шью модуля Препроцессора Т-FLEX Анализ. Генерация сеточной
модели предусматривает создание конечно-элементной сетки, от-
ражающей геометрию изделия и наложения граничных условий,
определяющих физическую задачу, подлежащую решению.
Unigraphics
Программный комплекс Uniqraphics NX /53/ — это лидирую-
щая CAD/CAM/CAE система, построенная на лучших технологи-
ях, предназначенных для создания изделий любой сложности.
Основная задача системы в конечном итоге состоит в сокращении
стоимости создания изделия, улучшения его качества и сокраще-
нии сроков выхода на рынок. В России Unigraphics занимает
прочные позиции, благодаря широким возможностям использова-
ния системы в различных областях промышленности (авиакосми-
ческая промышленность, двигатслсстроснис, автомобилестроение,
машиностроение и т. д.) и применению современных технологий,
обеспечивающих пользователя передовыми решениями в области
MCAD на всех этапах создания изделия. Успех системы Unigrap-
hics на российском рынке подтвержден обширной базой пользова-
телей, успехами, достигнутыми ими в результате использования
системы. Немаловажным преимуществом системы является то,
что она является единственной CAD/CAM/CAE системой верхне-
го уровня на рынке, которая имеет русский интерфейс и докумен-
тацию на русском языке.
Решения Unigraphics NX:
• промышленный дизайн;
• проектирование;
• инженерный анализ, проверка и оптимизация;
• инструменты;
• подготовка производства;
• среда управления изделием.
КОМПАС
Российский программный комплекс КОМПАС-ЗО и его по-
следняя версии Компас-ЗЭ V8 /26/ являются программными про-
дуктами для решения пространственных задач. Приставка V8
означает, что про1раммный комплекс включает в себя фафиче-
ский модуль Компас-График V8.
Система КОМПАС-ЗО предназначена для создания трехмер-
ных ассоциативных моделей отдельных деталей и сборочных еди-
64
1.4. Контрольные вопросы по теме 1
ниц. содержащих как оригинальные, гак и стандартизованные
конструктивные элементы. Параметрическая технология позволя-
ет быстро получать модели типовых изделий на основе однажды
спроектированного прототипа. Многочисленные сервисные функ-
ции облегчают решение вспомогательных задач проектирования и
обслуживания производства.
Ключевой особенностью КОМПАС-ЗГ) является использова-
ние собственного математического ядра и параметргптеских техно-
логий, разработанных специалистами АСКОН.
Основная задача, решаемая системой — моделирование изде-
лий с целью существенного сокращения периода проектирования
и скорейшего их запуска в производство. Эти цели достигаются
благодаря возможностям:
• быстрого получения конструкторской и технологической до-
кументации, необходимой для выпуска изделий (сборочных
чертежей, спецификаций, деталировок и т. д.);
• передачи геометрии изделий в расчетные пакеты;
• передачи геометрии в пакеты разработки управляющих про-
грамм для оборудования с ЧП У;
• создания дополнительных изображений изделий (например,
для составления каталогов, создания иллюстраций к техни-
ческой документации и т. д.).
Система обладает мошным функционалом для работы над про-
ектами, включающими несколько тысяч подсборок, деталей и
стандартных изделий. Она поддерживает все возможности трех-
мерного твердотельного моделирования, ставшие стандартом для
CAI IР среднего уровня:
• создание поверхностей;
• ассоциативное задание параметров элементов;
• построение вспомогательных прямых и плоскостей, эскизов,
пространственных кривых (ломаных, сплайнов, различных
спиралей);
• создание конструктивных элементов — фасок, скруглений,
отверстий, ребер жесткости, тонкостенных оболочек;
• специальные возможности, облегчающие построение литей-
ных форм — литейные уклоны, линии разъема, полости по
форме детали (в том числе с заданием усадки);
• функционал для моделирования деталей из листового мате-
риала — команды создания листового тела, сгибов, отвер-
65
Тема 1. Обзор языков программирования
стнй. жалюзи, буртиков, штамповок и вырезов в листовом
теле, замыкания углов;
• моделирование компонентов в контексте сборки, взаимное
определение деталей в составе сборки;
• наложение сопряжений на компоненты сборки (при этом
возможность автоматического наложения сопряжений суще-
ственно повышает скорость создания сборки);
• обнаружение взаимопроникновения деталей;
• возможность гибкого редактирования деталей и сборок;
• переопределение параметров любого элемента на любом эта-
пе проектирования, вызывающее перестроение всей модели.
СУДАРУШКА
Программный комплекс «Сударушка» /31/ — это одна из рос-
сийских систем автоматизированного проектирования.
САПР «Сударушка» — развитие системы ГЕМОС (геометриче-
ское моделирование обводов самолета), разработанной специали-
стами Российской авиационной промышленности в ОКБ им.
А.С.Яковлева в 19X9—1994 годах.
«Сударушка» включает в себя программы для выпуска чертежей
пространственного моделирования, задания поверхностей слож-
ной формы, систему подготовки управляющих программ для фре-
зерных станков с ЧПУ, для листовой штамповки и высечки, для
прочностных расчетов методом конечных элементов, для аэроди-
намических расчетов и другие программы.
Программный комплекс включает в себя следующие модули:
• конструкторские программы;
• фрезерная обработка;
• прочностные расчеты;
• аэродинамические расчеты;
• строительство.
В чертежно-графический редактор встроен модуль, выполняю-
щий расчеты, которые часто проводятся в процессе проектирова-
ния: устойчивость пояса двутавра, устойчивость пояса швеллера,
продольный изгиб трубы, устойчивость пластины, кручение тру-
бы. кручение бруса, болтовой стык, расчет пружины, расчет на-
пряжений в зубчатой передаче.
Можно задать размеры и нагрузки, при этом сразу вычисляют-
ся напряжения. Про|рамма позволяет быстро подобрать размеры,
66
1.4. Контрольные вопросы по теме 1
обеспечивающие прочность конструкции. Встроена профамма для
весового расчета.
В чертежно-графический редактор встроен .модуль для оформ-
ления чертежа и подготовки спецификаций. Обеспечивается вы-
черчивание форматок чертежа и бланков спецификации, вычисле-
ние и пересчет номеров позиций, соответствие позиций в чертеже
и в спецификации, заполнение штампа и редактирование техноло-
гических требований.
Профамму позволяет рассчитать плоскую или пространствен-
ную конструкцию, состоящую из стержней и пластин, методом
конечных элементов. В результате будут получены перемещения
узлов, внутренние силовые факторы (усилия и потоки касатель-
ных сил) в элементах и реакции опор. Строятся эпюры усилий в
стержнях.
1.2.2. Программные комплексы, применяемые
в кораблестроении
В кораблестроении, на флоте и водном транспорте использу-
ются различные программные комплексы, в том числе и те, что
указаны в предыдущем разделе 1.2.1. Однако есть достаточно бо-
льшая группа программных комплексов (систем автоматизиро-
ванного прзн-ктирования), которые разработаны специально для
кораблестроения и задач, связанных с флотом.
В данном разделе используются материалы, опубликованные в
работах /24, 29, 32/.
Перечисление программных комплексов
К числу наиболее известных и успешно применяемых в кораб-
лестроении программных комплексов можно отнести специализи-
рованные программные комплексы (системы автоматизированно-
го проектирования), указанные в таблице 1.6.
Таблица 1.6
Программные комплексы, применяемые в кораблестроении
№пп Наименование Разработчик
1 AutoSHIP Autoship systems corp. (Канада)
2 САТ1А Компания Dassault Systems (Франция)
3 DEFCAR Фирма DEFCAR Eng. (Испания)
67
Тема 1. Обзор языков программирования
№ пл Наименование Разработчик
4 FORAN Фирма Sener Ingeneria YSistemas S.A. (Испания)
5 КЗ-SHIP НВЦДеоС» (Россия)
6 Master load Компания VALCOM (Италия)
7 NAPA Фирма Napa Оу (Финляндия)
8 NUPAS-CADMATIC Компания Numeriek Centrum Groningen B.V. (Голландия) и компания CADMATIC ltd. (Финляндия)
9 SAPS(canc) Конструкторское бюро ООО «ТОРОЛД» (Украина)
10 Sea solution Компания Sea Tech НО. (Россия)
11 Shaft Master Inlefectual Maritime Technologies (Украина)
12 StiipWodel-2000 Частный предприниматель Ю И. Платонов (Россия)
13 TRIBON Фирма Tnboo solutions (Швеция)
14 Ритм-Суд но ФГУП ЦНИИ Технологии судостроения (Россия)
Характеристики перечисленных программных комплексов
AutoSHIP
AutoSHIP — специализированный программный комплекс для
разработки технических и рабочих проектов судов.
Комплекс состоит из нескольких программных модулей, взаим-
но использующих наработанные данные по проекту.
Программные модули выполнены в едином стиле, имеют удоб-
ную систему' помощи. Эти модули указаны ниже.
AutoSHIP — проектирование корпуса и моделирование поверх-
ности. Обеспечивает 3D моделирование поверхности корпуса суд-
на любою типа, генерацию поверхностей и возможность экспор-
тирования сглаженной поверхности, измерение 20 гидростатиче-
ских параметров.
AutoYACHT — проектирование корпуса и инструменты моде-
лирования поверхности для проектировщиков яхт. Модуль вклю-
чает в себя все возможности модуля AutoSHIP, дополняя себя не-
которыми функциональными особенностями с учетом специфики
проектирования яхт.
AutoHYDRO — гидростатические расчеты и расчеты остойчи-
вости судна. Модуль позволяет имитировать движение судна в
различных условиях и получить различные отчеты, например,
конфигурация погрузки, ситуация повреждения, сопротивление.
Также модуль может использоваться для получения характеристик
68
1.4. Контрольные вопросы по теме 1
формы корпуса и мощности. AutoHYDRO вычисляет данные об
использовании цистерн, грузовых трюмов и других мест в различ-
ных состояниях (нормальном, поврежденном, в условиях обледе-
нения и т. д.). Также здесь обрабатывается ситуация поворота на
высокой скорости и др. Вся полученная информация отображает-
ся графически или в текстовом виде.
AutoPOWER — расчеты сопротивления и предварительный
анализ силовой установки. Модуль проводит расчеты по оптими-
зации параметров корпуса и вычислению требуемой мощности
движителя, основанных на I2 независимых сопротивлениях и ме-
тодах движения при различных водоизмещениях.
AutoBUILD — проектирование внутренней структуры корпуса
судна.
AutoPLATE — определение листов наружной обшивки корпуса
судна.
AuloNC — генерация управляющих нротрамм для машин резки с
ЧПУ в различных форматах. Модуль имеет возможность автомати-
ческого раскроя. Для фрезерной обработки модуль имеет дополни-
тельные возможности, учитывающие работу с 3D поверхностями.
Вее модули имеют возможность передачи данных в различных
форматах, таких, как DXF и 1GES.
CATIA
Система САПА (Computer Aided Three-dimensional Interactive
Application) — комплексная система автоматизированною проек-
тирования, технологической подготовки производства и инженер-
ного анализа.
По всему миру насчитывается более 13000 пользователей систе-
мы в различных отраслях промышленности.
Система позволяет вести работы от начального проектирования
до выпуска чертежей, спецификаций, данных для станков с ЧПУ
и т. д.
Изначально разработчики системы предполагали ее использо-
вание в авиационной промышленности. Но эффективность ее ис-
пользования показала себя и в аэрокосмической и автомобильной
промышленности. В настоящее время разработчики уделяют мно-
го внимания по реализации системы в судостроительной промыш-
ленности.
В программных продуктах системы CATIA инженер-судострои-
тель имеет возможность полного проектирования — от концепции
69
Тема 1. Обзор языков программирования
до производственного процесса, используя как специализирован-
ные, гак и общие модули системы.
Система способна предоставизъ разработчику среду трехмерно-
го проектирования модели, исключая необходимость использова-
ния ручных проработок проекта на бумаге. Эго позволяет инжене-
ру создавать и производить отладку компонентов модели, исполь-
зуя 3D визуализацию, и получать готовый и полностью
совершенный продукт.
В системе САПА представлены три программных модуля, спе-
циализированных для проектирования судов: Ship Hull Design,
Ship Steelwork Design. Ship Steelwork Production.
Ship Hull Design предназначен для проектирования формы кор-
пуса различных типов судов. Он дополняет другие модули систе-
мы (например. Drawing Production), обеспечивая целостность сис-
темы и продуктивность проектирования.
Ship Steelwork Design предназначен для проектирования эле-
ментов конструкции корпуса судна.
Ship Steelwork Production извлекает данные о компонентах мо-
дели и создает сборочные и рабочие чертежи, деталей корпуса.
DEFCAR
Система автоматизированного проектирования DEFCAR пред-
назначена для предприятий и проектных бюро, работающих в об-
ласти судостроения.
Система состоит из 6 основных модулей.
Модуль DFFORM — проектирование формы корпуса судна.
Главными особенностями модуля являются: возможность проек-
тирования любого вида формы корпуса; создание и модификация
формы происходит в интерактивном режиме; возможность вычис-
ления основных гидростатических характеристик: водоизмещение,
центр величины и др. с целью проверки. Пользователь может со-
здавать форму корпуса судна, используя три различных подхода:
создание формы, используя существующую форму судна-прототи-
па; создание формы, задавая основные характеристики судна; со-
здание формы, определяя основные граничные линии и формируя
поверхност ь точками и кривыми.
Модуль SHIPGEN — генерация формы корпуса судна. Модуль
позволяет довольно быстро получить форму любого типа судна с
требуемыми измерениями и гидростатическими параметрами. Та-
ким образом. Shipgen производи!' генерацию целой поверхности
70
1.4. Контрольные вопросы по теме 1
судна в соответствии с требованиями, предварительно определен-
ными пользователем, используя для этого шаблоны форм.
Модуль DEHYDRO — гидростатические расчеты. С помошыо
этого модуля производится подробный расчет гидростатических
характеристик и характеристик остойчивости для неповрежденно-
го и поврежденного судна, как в спокойной воде, так и при волне-
нии. Модуль позволяет определить водонепроницаемые отсеки и
получить таблицы вместимости с центрами тяжести и моментами
инерции. Также можно определить геометрию винтов, рулей, над-
стройки и пр., оценить требуемую мощность силовой установки и
движителя. Модуль позволяет производить расчеты для различных
условий загрузки судна. Для каждого условия вычисляются стати-
ческие и динамические кривые остойчивости и соответствующие
углы крена (учитывая не поврежденность судна, или затопление
одного или нескольких отсеков).
Модуль DFSHELL предназначен для определения стыков и па-
зов, создания листов наружной обшивки и палуб любой формы,
развертки листов наружной обшивки и палуб, получения данных
для гибки листов и изготовления оснастки. Также модуль позволя-
ет определить основные поперечные и продольные переборки, па-
лубу второго дна, элементы надстройки и пр.
Модуль DFSTRUC — создание деталей конструкции корпуса
судна. Все детали, создаваемые при помощи этого модуля, поме-
щаются в единую базу данных. Пользователь может в любой мо-
мент получить необходимую информацию о деталях, произведя
поиск по базе данных по различным параметрам (блок, толщина,
вид, марка материала, масса и т. д.). Пользователь создает конст-
рукцию, как 3D модель. Также этот модуль является редактором
чертежей, позволяя формировать чертеж, пользуясь данными из
базы данных но деталям.
Модуль Lantck Expert предназначен для автоматического или
ручного раскроя и формирования программ резки для станков с
ЧПУ.
FORAN
FORAN — специализированная судостроительная система ав-
томатизированного проектирования, разработанная фирмой SE-
NER для проектирования и строительства коммерческих и воен-
но-морских судов.
71
Тема 1. Обзор языков программирования
Система FORAN — интегрированная система, непрерывно раз-
виваемая фирмой SENER, начиная с I965 года. Сегодня. FO-
RAN — мошная единая система, охватывающая все стадии проек-
тирования и технологической подготовки, позволяющая рациона-
льно, полно и едино вести работы по проекту. Она применяется
для проектирования всех типов судов.
Система FORAN — это семейство связанных модулей, исполь-
зуемых единую Базу Данных, что позволяет обеспечить полную
прозрачность топологической модели и позволяет каждому поль-
зователю работать с самой последней информацией по проекту’.
При помощи современных 3D инструментов моделирования
выполняется полное создание модели судна. Модель включает нс
только графическое представление каждого компонента, но и в за-
висимости от вида детальную информацию об изделии. Компо-
ненты модели могут быть взаимосвязаны с другими компонента-
ми. Изменение одного из связанных компонентов приведет к из-
менению другого компонента в зависимости от свойств связи. Это
позволяет более эффективно модифицировать и дорабатывать су-
ществующую модель изделия. Также легко осуществляется про-
верка на пересечение объектов модели.
Система FORAN позволяет получать различного вида графиче-
скую и текстовую информацию по проекту для дальнейшей подго-
товки конструкторской и технологической документации при по-
мощи инструментальных средств системы.
В FORAN предусмотрена возможность передачи данных для
систем управления и материально-технических баз.
Система насчитывает более 120 инсталляций в 20 странах мира.
Система поддерживается в операционных системах UNIX (Li-
nux), Open-VMS и Windows NT.
КЗ-SHIP
КЗ-SHIP — это система формирования пространственной твер-
дотельной модели корпусной конструкции судна и других его эле-
ментов. Система КЗ-SHIP используется для оснащения рабочих
мест проектировщиков и конструкторов, занимающихся проекти-
рованием внутренних конструкций и компоновкой судна.
В основу подхода к проектированию судового корпуса в среде
комплекса КЗ-SHIP заложена современная концепция, заключаю-
щаяся в отходе от традиционных методов, существовавших многие
десятилетия. Эта концепция является базовой практически для
72
1.4. Контрольные вопросы по теме 1
всех систем автоматизированного проектирования, существующих
в мире, и заключается в создании трехмерных твердотельных
компьютерных моделей проектируемых изделий, часто называе-
мых «виртуальным изделием».
Возможности K3-SHIP:
• автоматическое задание трех основных судостроительных
проекций (мидель, бок, план) с расстановкой конструктив-
ных шпаций по всей длине корпуса или по его районам;
• проектирование и редактирование формы и размеров эле-
ментов и сборочных единиц судового корпуса, как в составе
единой модели корпуса, так и в составе технологических
единиц типа секция или блок-секция;
• проверка собираемости и геометрической непротиворечиво-
сти судовых конструкций, определение зазоров между дета-
лями, определение размеров пространств в отсеках и воз-
можности доступа к уздам и элементам конструкций;
• размещение оборудования, механизмов, трубопроводов и
т. п. внутри спроектированного судна;
• вычисление масс-инсрционных характеристик, как всей
конструкции в целом, так и любой отдельно взятой его час-
ти, с учетом размещенною готового оборудования;
• автоматическое получение спецификаций, ведомостей заказа
материалов, эскизов на изготовление стандартных профилей
и прочей требуемой рабочей документации;
• выпуск рабочей конструкторской документации (сборочных
чертежей секций). Кроме того, наличие трехмерной модели
конструкции проектируемого судна позволяет выдавать
изображение сложных узлов в необходимых ракурсах и де-
лать растяжки отдельных блоков и секций с простановкой
позиций всех деталей.
Теоретические поверхности передаются в КЗ-SHIP из других
систем (в том числе Sea Solution) геометрического моделирования
в формате DXF.
Masterload
Программный комплекс предназначен для создания схем нагру-
жения судов и плавучих сооружений различных типов и их балла-
стировки. Позволяет выполнять расчет нагрузки, остойчивости,
прочности и непотопляемости в текущем состоянии загрузки. Ком-
плекс предназначен для использования на бортовых компьютерах,
73
Тема 1. Обзор языков программирования
а также в «офисном» варианте — для априорного решения эксплуа-
тационных задач, возникающих в процессе постройки или утилиза-
ции судов и требующих расчета основных элементов статики.
Пршраммный комплекс может быть полезен и для балласти-
ровки различных плавучих объектов при их сборке на плаву в про-
цессе строительства.
NAPA
NAPA — специализированная система автоматизированного
проектирования, ориентированная на судостроение. Система име-
ет мощные функциональные возможности для проектирования су-
дов различных типов и выполнения разносторонних вычислений
для анализа проекта. Система охватывает стадии проектирования,
связанные с начальными проработками по проекту, разработкой
технического проекта, моделированием корпусных конструкций и
получением различной документации.
NAPA — система для проектирования различных типов судов,
включает в себя такие возможности, как определение формы кор-
пуса, разделение на водонепроницаемые отсеки, вычисление и
анализ гидростатических характеристик судна, создание модели
конструкции судна и многое другое.
NUPAS-CADMATIC
Система автоматизированного проектирования NUPAS-CAD-
MATIC охватывает следующие направления в проектировании су-
дов: корпус, трубопроводы, оборудование, насыщение и интерьер.
NUPAS-CADMATIC позволяет инженеру при помощи удобно-
го интерфейса, инструментов 3D, единой базы данных достигать
наиболее эффективного проектирования.
Система позволяет получать не только документацию, но и тех-
нологическую информацию для производства.
В системе предусмотрено разделение информации но проекту
между различными специализациями. Самая последняя информа-
ция по проекту доступна пользователям, что позволяет вести па-
раллельные работы по проектированию судна.
В системе предусмотрена 3D визуализация модели. Это позво-
ляет контролировать различные связи компонентов модели.
SAPS (САПС)
САНС — это интегрированная система автоматизации конст-
рукторской и icxhOjIOi ической подготовки корпусных производств
74
1.4. Контрольные вопросы по теме 1
верфи. Система САНС обеспечивает рабочее проектирование кор-
пуса судна и технологическую подготовку корпусообрабатываю-
щего, сборочно-сварочного и корпусос троитсльного производств
верфи. Она позволяет получить обширную номенклатуру конст-
рукторской и технологической документации в табличной и гра-
фической форме. Система функционирует в локальной сети ЭВМ,
чю позволяет оптимально организовать технологический процесс
выполнения работ большой группой пользователей, исключить
дублирование и повысить надежность поддержки информации баз
данных по проектам судов в актуальном состоянии. Данные гео-
метрической, конструктивной и технологической моделей систе-
мы можно представить в форматах DXF и SAT. что обеспечивает
совместимость со всеми известными системами CAD/CAM.
С помощью системы САНС выполняются следующие работы:
• ввод исходных данных (главные размерения, формоопрсде-
ляющис линии);
• формирование поверхности наружных обводов;
• генерация практического корпуса;
• трассировка пазов, стыков и линий практического набора;
• получение документации по наружной обшивке;
• формирование внутренних поверхностей (палубы, платфор-
мы, переборки);
• формирование объемной конструктивной модели (установка
катанного и сварного профиля, деталей соединения, вырезов);
• оформление конструктивных соединений;
• формирование и выпуск рабочих чертежей;
• деталировка конструкций корпуса судна;
• выпуск технологической докумен тации по деталям;
• расчет сборочной оснастки с выпуском чертежей сборочной
оснастки и документации для узловой и секционной сборки;
• раскрой листового и профильного проката с выпуском управ-
ляющих программ для машин термической резки с ЧПУ.
Sea Solution
Sea Solution — это нро|раммный комплекс, в основном пред-
назначенный для создания или сглаживания судовой поверхности
и работ с листовыми конструкциями (в том числе и с наружной
обшивкой). Sea Solution — включает в себя функции геометриче-
ского моделирования, объектно-ориентированную базу данных,
расчетные и интерфейсные модули.
75
Тема 1. Обзор языков программирования
Существенные особенности системы Sea Solution заключаются
в интерактивном формировании поверхности корпуса судна,
определении палуб, надстроек, платформ и переборок, формиро-
вании конструктивных элементов штевней, трассировке трубопро-
водов, задании и развертке листов наружной обшивки на основе
единого математического аппарата В-сплайн кривых и В-сплайн
поверхностей.
Система Sea Solution имеет встроенную систем)’ параметриза-
ции и позволяет отслеживать изменения, возникающие в процессе
проектирования. Вся информация в базе данных структурирована
по иерархическому принципу, причем структура иерархии может
выбираться пользователем с учетом принятой структуры проекти-
рования и числа рабочих мест в данной организации.
Система имеет интерфейсные модули для передачи данных в
другие системы. Поддерживаются следующие форматы данных:
• DXF — формат обмена с чертежными системами и с систе-
мой K3-SHIP (в дальнейшем планируется прямой интерфейс
передачи данных):
• VDA — формат обмена данными с системами геометриче-
ского моделирования такими, как CATIA, PRO/ENGINER;
• DBG, IDF — формат обмена данными с системой INTERG-
RAPH;
• SRF — формат обмена с системой FASTSHIP;
• S IC — формат обмена данными с подсистемой СТАТИКА;
• ASF — формат текстового представления базы данных системы;
• интерфейс в систему FORAN;
• интерфейс в систему AUTOKON (TRIBON).
Существует ввод данных из системы AutoCAD (через формат
DXF), FASTSHIP.
Вся выходная документация может быть оформлена при помо-
щи любой системы автоматизированного черчения, воспринимаю-
щей формат DXF.
Система Sea Solution имеет модули:
• Модуль Поверхность с подсистемой статика;
• Модуль Обшивка.
ShaftM aster
Программный комплекс Shaft Master — современная, простая в
использовании и очень эффективная про1рамма. предназначенная
76
1.4. Контрольные вопросы по теме 1
для расчета оптимальных технологических параметров центровки
валопроводов на строящихся и ремонтируемых судах, учитываю-
щая основные ограничения на работу валопровода в эксплуатации
и во время монтажа /24, 29/.
Shafi Master позволяет:
• находить оптимальные начальные смешения опор валопро-
вода;
• рассчитывать технологические параметры центровки для
всех стадий мон тажа валопровода;
• выполнять прямой расчет валопровода при заданных смеще-
ниях опор;
• проверять качество укладки валопровода при строительстве
или ремонте судов;
• формировать отчет по результатах! расчета.
Принятая методика расчета согласуется с целями и задачами
центровки на строящихся (ремонтируемых) судах, отвечает усло-
виям осуществления технологических процессов, и обеспечивает
возможность контроля всех работ в соответствии с основными
требованиями нормативно-технической документации.
Shaft Master позволяет определять следующие технологические
параметры центровки:
• положение оси дейдвуда относительно оси вращения меха-
низма;
• смещение гребного вала относительно оси дейдвуда;
• нагрузки на подшипники;
• допускаемые отклонения нагрузок;
• смешение (ребного вала относительно оси дейдвуда;
• излом и смещение на фланце механизма (двигателя, редуктора);
• диаграмма допускаемых значений излома и смешения.
При этом, указанные параметры определяются таким образом,
чтобы во всех случаях эксплуатации судна нагрузки на подшипни-
ки, нагрузки на фланец главного механизма и нормальные напря-
жения в валах, не выходят за пределы допускаемых.
ShipModel-2000
Программный комплекс ShipModel-2000 предназначен для су-
достроения и функционирует в среде графических пакетов Auto-
CAD 2000 и Mechanical Desktop
ShipModel-2000 обеспечивает:
77
Тема 1. Обзор языков программирования
• формирование теоретической и конструктивной трехмерной
модели поверхности корпуса судна плазового качества без огра-
ничений на сложность формы судовых корпусных обводов;
• расчет теоретических и практических шпангоутов, ватерли-
ний. батоксов и произвольных сечений;
• расчет (трассировку) конструктивных линий корпуса судна
(пазов, стыков, линий притыкания палуб, платформ, перебо-
рок. выгородок, набора);
• расчет и выпуск таблиц плазовых координат;
• разбивку модели корпуса судна на сборочные единицы, опи-
сание элементов конструкции корпуса судна и расчет гео-
метрии корпусных деталей;
• прецизионную развертку неплоских корпусных деталей без
ограничения на сложность формы разворачиваемых объек-
тов с отображением на развертках следов конструктивных
линий, вырезов, приклада гибочных шаблонов и т. п.;
• расчет данных и выпуск документации для изготовления
оснастки (гибочных шаблонов, каркасов и т. п.) для гибки
корпусных деталей (листовых и профильных) и схем их уста-
новки (только для русской версии);
• расчет данных и выпуск документации для изготовления и
настройки сборочно-сварочных индивидуальных и универса-
льных (коксовых) постелей (схемы установки лекал, проек-
тирование деталей лекальных постелей, разработка данных
для установки коксов) (только для русской версии);
• расчет данных и выпуск документации для сборки секций
(расчет базовых и контрольных линий, контуровочных (раз-
меточных) эскизов, маток установки шпангоутов, ребер же-
сткости, платформ, переборок и др. элементов судовых кон-
струкций) (только для русской версии);
• выдачу различной дополнительной информации (размеров,
площадей, координат, длин и др.);
• трехмерное макетирование корпусных конструкций и насы-
щенных помещений типа машинно-котельного отделения
(МКО);
• разработку проектно-конструкторской документации.
TRIBON
Система TRIBON представляет собой специализированную су-
достроительную систему, построенную на базе прежних разрабо-
78
1.4. Контрольные вопросы по теме 1
ток фирмы: SchifTko, Autocon, Slcclbcar. Система TRI BON охваты-
вает все фазы проектирования, начиная аг эскизных проработок с
комплексом расчетов по статике и динамике судна до выдачи ра-
бочих чертежей (корпус, помещения, трубы, кабель) и технологи-
ческой оснастки на верфь.
Модули системы, охватывающие все направления проектирова-
ния от проектного проектирования до строительства. пользуются
единой Базой Данных по проекту. Эго обеспечивает одновремен-
ный доступ к данным и позволяет проводить параллельное проек-
тирование. В каждый момент времени инженеру доступна самая
последняя информация по проекту.
В системе выдержан единый стиль программирования разных
модулей (внешний вид окон, системы фиксированных и выпадаю-
щих меню, цветовые спектры, терминология и др.), что создаст
максимум комфорта при работе пользователя с различными ком-
понентами системы.
Система базируется на UNIX-рабочих станциях. Новая версия
TRIBON Ml создана уже для платформы Windows NT.
Система TRIBON Ml разделена на четыре отдельные взаимо-
связанных раздела: Design, Rule-based Automated Design, Design
Management, Production Engineering.
Раздел DESIGN — обеспечивает процесс моделирования эф-
фективными средствами с целью получения информации по про-
екту в самые краткие сроки и включает в себя следующие модули:
• Tribon Ml Initial Design — для начального моделирования
геометрии корпуса судна;
• Tribon Ml Basic Design — для начальною проектирования
корпусных конструкций и определения главных компонен-
тов оборудования, которые могут быть использованы в про-
цессе проектирования:
• Tribon Ml Hull — для проектирования и определения дан-
ных о деталях корпуса судна;
• Tribon Ml Outlining — для определения данных по трубопро-
водам, вентиляции, электрической части, оборудования и
фундаментов;
• Tribon Ml Equipment — для определения всех компонентов
оборудования;
• Tribon Ml Drafting — всесторонняя система создания и
оформления 2D и 3D чертежей, основанных на модели про-
екта;
79
Тема 1. Обзор языков программирования
• Tribon Ml Materials — обеспечивает процесс определения ис-
пользуемых в постройке материалов и проведение расчетов
по ним.
Раздел RULE-BASED AUTOMATED DESIGN - позволяет по-
льзователю описать собственные процессы в виде специальных за-
дач, чтобы управлять проектированием модели с учетом принятых
на предприятии методов проектирования и стандартов:
• Tribon Ml Vitesse — позволяет пользователю автоматизиро-
вать задачи проектирования, основанные на собственном
опыте и принятых правилах.
Раздел DESIGN MANAGEMENT — это управление процессом
проектирования:
• Tribon Ml Design Manager — для координации и наблюдения
за ходом подготовки проекта;
• Tribon Ml Production Manager — для доступа к информации
о производственной сборке.
Раздел PRODUCTION ENGINEERING — служит для получе-
ния данных для производства:
• Tribon Ml Assembly Planning — для определения стратегии
производства;
• Tribon Ml Weld Planning — улучшает точность и уменьшает
затраты по планированию сварочных работ;
• Tribon Ml Factory Automation — обеспечивает получение
точной информации, необходимой для оборудования с ЧПУ,
например станков для резки металла и сварочных роботов.
Ритм-Судно
Автоматизированная система судостроительного применения
«Ритм-Судно» обеспечивает полный цикл технической подготовки
производства от проектирования до технологической подготовки с
выдачей необходимых данных в производственные подразделения.
Для корпусостроитсльного производства система «Ритм-Судно»
обеспечивает создание трехмерной модели судовых конструкций,
развертку неплоских деталей судовой обшивки, формирование
базы данных листовых и профильных деталей корпуса, раскрой
материала, расчет УП для тепловой резки металла на станках с
ЧПУ. Формирование рабочих конструкторских и технологических
документов верфи. В системе имеются программы для проектиро-
вания и расчета данных, для изготовления всех видов универсаль-
80
1.4. Контрольные вопросы по теме 1
ной и специальной технологической оснастки, для корнусообра-
батываюшего и сборочно-сварочного производств.
Для механомон гажного производства система «Ритм-Судно»
позволяет решать задачи размещения механизмов и оборудования
в трехмерной модели корпуса судна, трассировки судовых трубо-
проводов и технологической подготовки производства по изготов-
лению и монтажу судовых трубопроводов.
Для достроечного производства система «Ритм-Судно» позво-
ляет решать задачи формирования баз данных элементов достро-
ечной номенклатуры, выбора элементов и размещение их в трех-
мерной модели корпуса, моделирования узлов и деталей обрешет-
ника и зашивки, проверки на пересечение элементов судна с
учетом зон обслуживания.
Прикладное программное обеспечение системы Ритм-Судно
базируется на трафическом редакторе AutoCAD 2000-2005 под
Windows 2000/ХР. В качестве системы управления БД использует-
ся FoxPro. При разработке прикладного обеспечения использова-
ны современные технологии объектно-ориентированного и визуа-
льного программирования.
Нро|раммные комплексы системы «Ритм-Судно» функциони-
руют на персональных компьютерах типа Pentium (RAM 256 Мб,
SVGA). Область применения системы - судостроение, судоремонт
и судовое машиностроение. Система может использоваться как на
верфи, так и в проектном бюро.
Автоматизированная система «Ритм-Судно» состоит из следую-
щих разделов:
• Ритм-Корпус (модули Спецификация, Генерация и Моди-
фикация ТЧ, Модель, Конструкция, Парамстризатор, Гене-
рация Точек, Плазовая книга, Деталь-Модель, Чертеж, Де-
таль. Профиль, Оснастка, Раскрой);
• Ритм-Мсханнзмы-Трубопроводы (модули Механизмы. Трас-
сировка, Трассы, Трубы, Технология);
• Ритм-Достройка (модуль Достройка);
• Ритм-Цена (модули Цена, Цсна-Оптим).
В системе реализованы передовые для мирового судостроения
технические решения: автоматический раскрой листового матери-
ала, автоматический оптимальный раскрой профильного материа-
ла, автоматическое назначение маршрута вырезки листового мате-
риала, автоматизированное формирование деталей корпусных
8I
Тема 1. Обзор языков программирования
конструкций на основе конструктивно-технологических данных
трехмерной модели Имеется аппарат параметрического задания
судовых элементов.
1.3. Основные исходные понятия процесса
программирования
В данном разделе рассмотрены основные общие исходные по-
нятия, позволяющие Читателю в дальнейшем лучше ориентирова-
ться в процессе программирования. При написании этого раздела
использованы работы /10, 13, 27, 44/.
АДАПТЕР — это электронная плата управления исполнитель-
ным устройством компьютера (дисплеем, принтером и др.).
АДРЕС — это порядковый номер байта в оперативной памяти
компьютера. Иногда говорят об адресе ячейки памяти. Адресом
ячейки памяти является адрес (номер) ее самого первого байта
АКТИВНОЕ ОКНО — окно (Window) на экране дисплея
компьютера обозначенное двойной рамкой. Активным всегда яв-
ляется только одно окно.
АЛГОРИТМ — подробное описание правил и последовательно-
сти действий при осуществлении решения какой-либо задачи с
помощью компьютерной программы.
АЛГОРИТМИЗАЦИЯ — процесс разработки и описания алго-
ритма решения какой-либо задачи для решения ее с помощью
компьютерной программы.
БАЙТ — восемь битов, сгруппированных в один блок информа-
ции. Один байт может использоваться для записи одного неболь-
шого целого числа (от 0 до 255) или одного символа. Каждый байт
оперативной памяти имеет свой порядковый номер, который назы-
вастся адресом (адреса начинаются с нуля).
БИТ — единица представления данных, которая выражается
одним двоичным разрядом (или «ноль» или «единица»).
ВВОД ДАННЫХ — передача исходных данных программы извне
в оперативную память компьютера для последующей обработки.
Основные устройства ввода — клавиатура, дисковод или специаль-
ный дисплей.
ВЕТВЛЕНИЕ — управляющая конструкция команд (процеду-
ра), которая в зависимости от истинности заданного условия
определяет выбор для исполнения одного из двух операторов.
82
1.3. Основные исходные понятия процесса программирования
ГЛУБИ НА ВЛОЖЕНИЯ ЦИКЛА — количество внешних цик-
лов. охватывающих данный никл
ДАННЫЕ — информация, которая подвергается обработке
компьютерной программой
ДВОИЧНАЯ СИСТЕМА — двухразрядная система счисления, в
основании которой лежат всего две цифры: 0 и 1. Эта система
очень удобна для реализации на компьютере, т. к. количественные
объекты информации 0 и I удобно ставятся в соответствие качест-
венным объектам информации «да» или «нет» («истина» или
«ложь»).
ДЕСТРУКТОР — специальная подпрограмма, реализующая
стандартизированный метод программирования, используемый
для удаления объекта из памяти. Эта подпрограмма (метод) задает-
ся специальным зарезервированным словом destructor.
ДЕСЯТИЧНАЯ СИСТЕМА — позиционная система счисления,
в основании которой лежат десять цифр: 0, 1,2, 3, 4, 5, 6, 7, 8, 9.
ДИНАМИЧЕСКАЯ ПАМЯТЬ — изменяющаяся область опера-
тивной памяти компьютера, предоставляемая программе при се ра-
боте, за вычетом сегмента данных (64 Килобайт), стека (обычно 16
Килобайт) и собственно тела программы.
ДИРЕКТИВА — указание какому-либо устройству или обслу-
живающей программе (например, транслятору).
ДРАЙВЕР — специальная программа, взаимодействующая с
адаптером.
ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА - стандартные слова, входя-
щие в состав лексем программного алфавита языка программирова-
ния. Эти слова несут в программе определенный стандартизирован-
ный смысл и при их появлении в программе вызывают выполне-
ние строго определенных действий. Зарезервированные слова
иногда еще называют служебными или ключевыми словами.
ЗАЦИКЛИВАНИЕ — потенциально бесконечное повторение
цикла, вызванное неправильной сю организацией или неверным
управлением.
ИДЕНТИФИКАТОР — имя (название) некоторых фрагментов
программы (констант, переменных, меток, типов, объектов, проце-
дур. функций, модулей, подпрограмм и др.). Идентификатор может
начинаться только с буквы или знака подчеркивания. Идентифи-
каторы бывают стандартные (например, sin) или нестандартные,
г. с. созданные программистом (например, Nicolay).
83
Тема 1. Обзор языков программирования
ИНИЦИАЛИЗАЦИЯ ДАННЫХ - присвоение данным началь-
ных значений.
ИНКАПСУЛЯЦИЯ — один из трех базовых принципов объект-
но-ориентированного программирования (ООП). Этот принцип за-
ключается в объединении в единое целое данных и алгоритмов об-
работки этих данных. Объединенные в одну совокупность данные
и алгоритм называются объектом. В рамках ООП данные называ-
ются полями объекта, а алгоритмы — объектными методами.
ИНТЕГРИРОВАННАЯ СРЕДА ПРОГРАММИРОВАНИЯ
это система (оболочка) программирования. включающая в себя тек-
стовый редактор, компилятор с компоновщиком и отладчик.
ИНТЕРПРЕТАТОР — это обслуживающая программа, которая
работает как переводчик с одного языка программирования на дру-
гой язык программирования
ИСХОДНЫЕ ДАННЫЕ — данные, значения которых известны
до начала решения задачи.
ИТЕРАЦИЯ — последовательное повторение (в форме цикла)
некоторого процесса до тех пор, пока нс удовлетворится некото-
рое условие.
КИЛОБАЙТ — это 210 байт, г. е. 1024 байт
КЛАССЫ — это совокупности объектов, объединенных по ка-
кому-то признаку (атрибуту). Данные каждого класса надежно за-
щищены, поскольку с ними можно работать тазько через подпрог-
раммы класса.
КОМАНДА — распоряжение (инструкция) программы на вы-
полнение какого-то действия.
КОМПИЛЯТОР — это обслуживающая программа, которая
чаще всего работает как полноценный транслятор. 11о иногда ком-
пилятор может нс доходить до этого этапа формирования машин-
ных кодов, а останавливаться на этапе формирования объектных
кодов Объектный код удобен для хранения его в виде библиотеки,
и при необходимости его можно обрабатывать до машинного кода
с помощью другой обслуживающей программы-компоновщика
КОМПИЛЯЦИЯ — процесс перевода команд программы до со-
стояния объектных кодов. При необходимости (по соответствую-
щему разрешению) компиляция может осуществить перевод команд
программы до состояния машинных кодов.
КОМПОНОВЩИК — обслуживающая программа (редактор
связей), которая компонует (собирает и зрансформирует) объект-
84
1.3. Основные исходные понятия процесса программирования
ныс коды в полноценные для исполнения компьютером машин-
ные коды.
КОНСТРУКТОР — специальная подпрограмма, реализующая
стандартизированный метод программирования, используемый
для выделения памяти под объект и инициа1нзацни полей объекта.
Эта подпрограмма (метод) задается специальным зарезервирован-
ным словом constructor.
КУЧА — содержимое всей свободной динамически распределяе-
мой памяти
ЛЕКСЕМЫ — неделимые последовательности символов про-
граммного алфавита (элементные конструкции), имеющие само-
стоятельный смысл. Примером лексем являются зарезервированные
слова
ЛОГИЧЕСКИЕ ОШИБКИ — это самые сложные и трудноуло-
вимые ошибки, связанные с неправильным применением тех или
иных алгоритмических конструкций. Эти ошибки иногда могут
проявляться явно. В этом случае будет выдано сообщение об
ошибке или программа зацикливается. Иногда эти ошибки прояв-
ляются явно только при определенном сочетании параметров.
Иногда эти ошибки явно не проявляются, и программа может вы-
дать правдоподобный, но неверный результат.
МАССИВ — упорядоченный набор объектов одного типа, кото-
рые называются компонентами массива. Массивы бывают одно-
мерные. двумерные, N-мерные. Все компоненты массива имеют
одно имя.
МАСШТАБНЫЙ КОД — запись в двоичной системе элементар-
ной операции с указанием се кода, адреса ячейки памяти и набора
данных.
МЕГАБАЙТ — это 210 Килобайт, т. с. 1024 Килобайт или
104X576 байт
МЕНК) — содержание текущего состояния диалоговой среды
(список, перечень альтернатив перехода из этою состояния в дру-
гое состояние).
МЕТКА — произвольный идентификатор, позволяющий отме-
чать некоторый оператор и, таким образом, ссылаться на него.
МЕТОД — это способ реализации операции.
МНОЖЕСТВО — это ограниченная неупорядоченная совокуп-
ность разлтзчных элементов одного типа. Эта совокупность рас-
сматривается как единое целое.
85
Тема 1. Обзор языков программирования
МОДУЛЬ — автономно фанслирусмая или компилируемая
программная единица.
НАСЛЕДОВАНИЕ — один из трех базовых принципов объект-
но-ориентированного программирования (ООН). Этот принцип за-
ключается в свойстве объектов создавать свои модификации (сво-
их потомков), передавая им по наследству свои свойства. При
этом у новых объектов — наследников сохраняется возможность
дополнять или изменять унаследованные свойства. Этот принцип
придаст ООП в целом исключительную гибкость.
ОБЪЕКТ — совокупность в единой оболочке данных и обраба-
тывающих их алгоритмов на основе некоторой смысловой связи.
При этом, в рамках объектно-ориентированного программирования
данные называются полями объекта, а алгоритмы — объектными
методами. Объекты — фактически новый тип данных. Объекты
объединяются в классы
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВА-
НИЕ (ООП) — Эго программирование, ориентирование на объек-
ты, организованные в классе.
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ЯЗЫК - это язык про-
граммирования. позволяющий реализовать объектно-ориентирован-
ный подход.
ОБЪЕКТНЫЙ КОД — это некоторое «полуфабрикатное» со-
стояние команд программы, полученное с помощью компилятора
после обработки программы в направлении превращения се в ма-
шинные коды. Объектный код — это состояние команды в форме
машинных кодов. Объектный код удобен для хранения его в виде
библиотеки и при необходимости его можно обрабатывать до ма-
шинного кода с помощью другой обслуживающей программы —
компоновщика.
ОПЕРАНДЫ — это те элементы профаммы, над которыми про-
изводятся операции.
ОПЕРАТОР — запись действия на языке программирования.
Оператор — эго некоторая инструкция (команда), которая задает
полное описание некоторых для действий, предназначенных для
выполнения.
ОПЕРАТИВНАЯ НАМЯТЬ — это совокупность элементарных
ячеек намяли тля хранения информации. Ячейки памяти состоят из
байт. Каждая из ячеек памяти имеет свой номер. Этот номер явля-
ется адресом ячейки памяти и позволяет напрямую обращаться к
этой ячейки намяли.
86
1.3. Основные исходные понятия процесса программирования
ОПЕРАЦИЯ — это программное действие, которое произво-
дится над элементами программы (данные, объекты и др.).
ОПЦИЯ — элемент списка меню.
ОТЛАДЧИК — обслуживающая программа, которая позволяет
выполнять программу но шагам. Отладчик удобен в процессе поис-
ка ошибок.
ОЧЕРЕДЬ — это частный случай списка. Список называется
очередью, если доступ к списку возможен и к последним элемен-
там списка. При этом данные могут быть добавлены только в ко-
ней списка, а удалены только из его начала. В очереди действует
принцип: «первым вошел — первым вышел».
ПАЛИТРА — набор цветов для линий и пикселей, существую-
щие в программном обеспечении компьютера.
ПИКСЕЛЬ — минимально рахтичаемая точка на дисплее
компьютера. От общего количества пикселей зависит качество
(зер н ист ос гь) и зображе н и я.
НОВ ГОРЕНИЕ — это управляющая конструкция команд в
форме никла, в котором группа операторов может выполняться по-
вторно, если соблюдается заданное условие.
ПОДПРОГРАММА — программная единица со своим именем и
со своими входными и выходными данными. К подпрограмме мож-
но обращаться из основной программы по мерс необходимости.
ПОЛИМОРФИЗМ — один из грех базовых принципов объект-
но-ориентированного программирования (ООП). Дгот принцип
заключается в свойстве родственных объектов решать схожие по
смыслу проблемы разными способами. В рамках ООП это дости-
гается тем, что в разных объектах под одинаковым именем MOiyi
содержаться разные методы
ПОРТ — многообразное устройство входа или выхода, предназ-
наченное для осуществления коммуникаций между устройствами
компьютера.
ПРОГРАММА — запись алгоритма решаемой задачи на языке
программирования.
ПРОЦЕДУРА — это разновидность подпрограммы, к которой
можно обратиться по имени и которая предназначена для выпол-
нения некоторой локальной задачи (напрзтмср, построение гео-
метрической фигуры или изменение цвета). Процедура похожа на
функцию, но имеет и отличие от нее (см. функцию).
ПРОЦЕДУРНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВА-
НИЕ — это программирование, основанное на идее, что upoipaM-
87
Тема 1. Обзор языков программирования
мист сначала должен решить, какие именно процедуры он будет
использовать и своей программе, а затем выбрать наилучшис алго-
ритмы для реализации этих процедур.
РЕЗУЛЬТАТЫ — данные, полученные значений которых явля-
ется целью решения задачи.
РЕКУРСИЯ — это такой способ организации вычислительною
процесса, при котором процедура или функция в ходе выполнения
своего алгоритма обращается сама к себе.
СЕМАНТИЧЕСКИЕ ОШИБКИ — эти ошибки проявляются на
этапе выполнения программы. Эти ошибки связаны с попытками
вычислить недопустимые значения параметров или выполнить не-
допустимые действия (например, деления на нуль или открытия
нс существующего файла для ввода).
СИН ТАКСИЧЕСКИЕ ОШИБКИ — это ошибки, проявляющи-
еся на этапе компиляции программы. 'Эти ошибки возникают в свя-
зи с нарушением синтаксических правил написания предложений
используемого языка программирования (например, пропущенные
точки с запятой, незакрытые скобки, ссылки на неописанные пе-
ременные и т. п.).
СИМВОЛЫ — основные неделимые знаки программного ал-
фавита, из которых составляют тексты программ
СЛЕДОВАНИЕ — это конструкция команд, которая выглядит
как последовательность операторов или групп операторов, выполня-
емых друг за другом в порядке их следования в тексте программы.
СОРТИРОВКА — упорядочение данных по определенному при-
знаку.
СПИСОК — упорядоченная последовательность элементов дан-
ных
СТЕК — это частный случай списка. Список называется стеком,
если доступ к списку возможен только в корневой точке (в начале
списка). Добавление и удаление нового элемента производится то-
лько в начале списка. В стеке действует принцип: «последним во-
шел — первым вышел».
СТРОКА — это одномерная последовательность символов. Мак-
симальное количество символов в строке — это длина строки.
Длина строки может изменяться от I до 255.
СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ - это программи-
рование, основанное на идее, что структура программы должна от-
ражать структуру решаемой задачи. При этом, алгоритм решения
задачи должен быть совершенно понятен из текста программы.
88
1.3. Основные исходные понятия процесса программирования
ТЕОРЕМА СТРУКТУРЫ — это теорема, которая утверждает,
что алгоритм любой сложности можно реализовать, используя то-
лько зри конструкции: простое следование, бинарное ветвление и
повторение
ТРАНСЛЯТОР — эго обслуживающая программа, которая пре-
образует команды языка программирования в готовые для исполне-
ния машинные коды. Трансляторы могут включать в себя другие
более специфические обслуживающие программы: компиляторы и
интерпретаторы
ТРАНСЛЯЦИЯ — процесс перевода команд программы до со-
стояния машинных кодов.
УСТРОЙСТВО — это отдельный компонент компьютера (на-
пример, монитор, процессор, клавиатура, принтер, жесткий диск,
порт и др.)
ФАЙЛ — это поименованная область ггамяти на внешнем но-
сителе, предназначенная для хранения информации. С точки зре-
ния языка Pascal, файл — это структурированный тип данных, со-
стоящий из компонентов в большинстве случаев одного типа и од-
ной длины. Любой источник и приемник информации в
компьютере (клавиатура, экран, принтер, дисковод) может рас-
сматриваться как файл. Иногда файлом называют организованную
совокупность логически связанных данных.
ФУНКЦИЯ — это подпрограмма или некоторый фрагмент про-
граммы (некоторая последовательность операторов), к которому
можно обратиться по имени и который предназначен для вычис-
ления функции (например, вычисление значения синуса). Функ-
ция отличается от процедуры тем, что передает назад в программу
единственное числовое значение, несущее имя функции.
ЦИКЛ — многократное повторение однотипных вычислений
(действий) при различных значениях входных данных. В программе
цикл — это повторяемые участки текста программы.
ШЕСТНАДЦАТЕРИЧНАЯ СИСТЕМА - позиционная система
счисления, в основанизг которой лежат шестнадцать символов: де-
сять арабских цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 и шесть латинских
букв: А, В, С, D, Е, F, которые играют роль чисел 10, II, 12, 13,
14. 15.
ЯЗЫК ПРОГРАММИРОВАНИЯ — совокупность лексических
средств и правил представления алгоритма в виде, пригодном для
выполнения компьютером.
89
Тема 1. Обзор языков программирования
ЯЧЕЙКА ПАМЯТИ — это участок оперативной памяти компью-
тера. в котором хранится одно значение обрабатываемой инфор-
мации. Ячейка памяти — это условное понятие, т. к. никаких гра-
ниц между ячейками нет. Ячейка может занимать несколько бай-
тов памяти. Адресом ячейки является адрес ее самого первого
байга.
1.4. Контрольные вопросы по теме 1
В данном разделе сформулированы контрольные вопросы для
студентов, позволяющие закрепить знание теоретического матери-
ала, изложенного в теме I. Для самопроверки студенты Moiyr по-
знакомиться в теме Ю с возможными вариантами ответов на пред-
ложенные вопросы.
Вопрос I. Назовите автора и год создания языка Pascal. Объяс-
ните, почему язык называется Pascal.
Вопрос 2. К какому уровню относится язык иро1раммирования
Pascal?
Вопрос 3. По подходу к программированию, к какому классу
относится язык Pascal?
Вопрос 4. Возможности языка Pascal?
90
Тема 2
Среда программирования Borland Pascal
Цели темы 2: Пояснить особенности среды программирования
Borland Pascal. Дать представление о структуре среды программиро-
вания, об основах практической работы в этой среде и способах от-
ладки программ. Пояснить причины и типы ошибок при программи-
ровании и дапи, рекомендации по составлению программ на языке
Pascal.
При написании данного раздела использованы некоторые мате-
риалы из работы /15/.
Как было уже сказано ранее, язык Pascal по мерс своего разви-
тия претерпевал изменения. Постепенно новые версии Pascal при-
обретали новые качества и новые названия. Версия UCSD Pascal
стала прародительницей системы Turbo Pascal, добившейся небы-
валой популярности. А. начиная с версии 7.0. Turbo Pascal был пе-
реименован в Borland Pascal. С этого момента возникли две неско-
лько различных среды программирования: среда Tuibo Pascal
(tp.exe) и среда Borland Pascal (bp.exe). Далее в данном учебном
пособии будет рассматриваться программирование на языке Pascal
в среде Borland Pascal.
При установке программного продукта «Borland Pascal» версии
7.0 на компьютере, в зависимости от потребностей пользователь
может выбрать дополнительные компоненты для установки, пред-
ложенные диалоговом окне:
• внешние компиляторы;
• дополнительные модули (Uses), которые позволяют выпол-
нять дополнительные функции;
• справочная информация;
• дополнение к Pascal — Turbo Vision, существенно расширяю-
щий возможности языка Pascal в работе с окнами.
При запуске про1раммы «Borland Pascal 7.0» на экране компью-
тера появляется среда программирования (рис. 2.1). Эта среда
программирования или интегрированная среда разработки про-
грамм (IDE — Integrated Development Environment) представляет
собой инструментальную программную оболочку, предоставляю-
щую пользователю комплекс сервисных средств, не относящихся
91
Тема 2. Среда программирования Borland Pasca
непосредственно к языку про1раммирования Borland Pascal, но
предназначенный для организации процесса создания текста про-
граммы, ее отладки и выполнения /15/.
2.1. Структура среды программирования
Borland Pascal
Среда программирования Borland Pascal 7.0 (или IDE) состоит
из следующих компонентов: строки меню (главное меню) в верх-
ней части экрана; рабочей области и строки состояния в нижней
части экрана (рис. 2.1).
2.1.1. Строка меню (главное меню)
Строка меню расположена в верхней части IDE. Структура
главного меню представлена на рис. 2.2. Активизация строки
меню происходит путем нажатия клавиши F10. При активной
строке меню подсвечивается заголовок меню.
|. File Edit Search. Run .Cowpile .Debug.. Tools Options Window Help
Puc. 2.2. Структура главного меню
92
2.1. Структура среды программирования Borland Pascal
Каждый пункт меню представлен в виде небольшого окна с
вложенными в него командами.
2.1.2. Строка состояния
Строку состояния располагается в нижней части IDE (рис. 2.3)
и представляет собой краткую справку о текущем состоянии среды
и список «горячих клавиш», при нажатии на которые немедленно
выполняются определенные действия.
Fl Help F2 Save ЕЭ Open Alt«F9 Conpile F9 Make AH-F10 Local menu
Рис. 2.3. Структура строки состояния
Строка состояния выполняет следующие 4 функции:
1. Напоминает об основных клавишах использующихся в дан-
ный момент в активном окне.
2. Сообщает, какие можно использовать кнопки мыши, вместо
выбора команд меню.
3. Сообщает, что делает программа, например, выводит сооб-
щение «Saving «имя файла*» при сохранении файла редактором.
4. Предлагает краткие пояснения по некоторым командам
меню и элементам диалоговых окон.
Строка состояния изменяется, в зависимости от тех действий,
которые вы выполняете (перемещение между окнами, перемеще-
ние между пунктами меню, операция сохранения и др.).
2.1.3. Рабочая область
Рабочая область представляет собой активное окно экрана, рас-
положенное в центральной части экрана, между строкой «меню* и
строкой «состояние» (рис. 2.4). Рабочая область предназначена для
размещения различных видов окон, используемых для создания
текста профаммы и ее отладки.
Основным видом окна, используемым в работе, является окно
редактирования, предназначенное для набора и редактирования
программы Дополнительно в рабочей области можно открыть
окно просмофа результатов OutPut и окно просмотра переменных
Watch. Активное окно, окрашенное в синий цвет, можно переме-
шать, масштабировать, открывать, закрывать. изменять его раз-
мер. IDE отмечает активное окно, обрисовывая его двойной рам-
кой. благодаря этому, его легко можно увидеть на экране.
93
Тема 2. Среда программирования Borland Pasca
NOHAME09 PBS
Рис. 2.4. Рабочая область
2.2. Структура и обзор главного меню
2.2.1. Меню - File
Этот пункт главного меню исполь-
зуется для записи новых файлов с
текстами программ, чтения уже су-
ществующих файлов с диска, работы
с каталогами диска и выхода из сре-
ды программирования (рис. 2.5).
Меню File состоит из следующих
пунктов /15/:
New — команда открытия нового
файла. Эта команда создаст новый
файл с именем Nonamc.pas (безы-
мянный файл).
Open — команда загрузки сущест-
вующего файла — эта команда задаст
чтение файла программы с диска и за-
грузку его в операт ивную област ь (ре-
дактор). Если извест но имя файла, то нужно набрать его и нажать
клавишу Enter. Если файл уже существует в текущем каталого, мож-
но просто нажать клавишу Enter и выбрать из списка нужный файл.
Open... F3
Save F2
Save as...
Save all
Change dir...
Print
Printer setup...
DOS shell
Exit Alt*X
Puc. 2.5.
Структура меню File
94
2.2. Структура и обзор главного меню
Save — команда сохранения файла в текущем каталоге. В режи-
ме редактирования ее можно выполнить нажатием клавиши F2.
Система сохраняет факт с тем же именем, с которым он был про-
читан, если его имя Noname.pas, на экране появится окно с запро-
сом о переименовании файла.
Save as — команда записи файла под новым именем.
Save all — команда сохранения всех измененных файлов. Вы-
полняет гуже операцию, что и команда Save, но сохраняет на диск
все измененные к настоящему времени файлы, даже если они на-
ходятся нс в активной среде редактирования.
Change Dir — команда смены каталога (папки). Используя эту
команду можно сменить текущий каталог или диск. На экране по-
явится окно для ввода имени нового каталога. После выполнения
этой команды любые действия с файлами будут производиться по
умолчанию в новом каталоге.
Print — команда которая позволяет распечатать файл. Распеча-
тывает текст программы находящийся в активном окне.
Printer setup — команда установки параметров принтера. Выво-
дит окно диалога, с помощью которою можно задать фильтр вы-
вода текста на печать (Filter path), тип принтера (Command line) и
возможность выделения текста различными шрифтами различных
элементов программы (Send high lighting escape codes).
DOS shell — команда, которая позволяет временно выйти из
среды Borland Pascal. Для возврата в среду необходимо ввести
команду exit.
Exit — команда выхода из среды программирования в Windows.
С клавиатуры выход из системы осуществляется нажатием сочета-
ния клавиш А1И-Х. Если в редакторе к моменту выхода остался
нссохраненный на диск файл, то система выдаст запрос на сохра-
нение этого файла.
2.2.2. Меню - Edit
Это меню предназначено для работы с текстом программы, его
структура изображена на рис. 2.6.
Меню Edit состоит из следующих функций /15/:
Endo — команда отмены предыдущего действия. С клавиатуры
осуществляется нажатием сочетаний клавиш Alt+Backspace. По-
следовательное использование опции UNDO может отменить все
сделанные Вами изменения текста.
95
Тема 2. Среда программирования Borland Pasca
Undo Rlt-BkSp
Redo
Cut Shift*Del
Copy Ctrl-Ins
Paste Shift'Ins
Clear CtrHDel
Show clipboard
Puc. 2.6. Структура меню Edit
Redo — команда восстановлен ня изменений выполненных
командой UNDO.
Cut — команда удаления фрагмента текста программы в буфер
clipboard.
Сору — команда копирования фрагмента текста программы в
буфер clipboard. Содержимое буфера остастся без изменений и мо-
жет использоваться повторно.
Paste — команда вставляет фрагмент текста протраммы из бу-
фера clipboard в текущий файл начиная с позиции курсора.
Clear — команда удаления выделенного фрагмента текста про-
граммы. без его записи в буфер. Удаленный фрагмент безвозврат-
но теряется.
Show clipboard — команда просмотра содержимого буфера обме-
на в отдельном окне.
2.2.3. Меню — Search
Это меню предназначено для поиска и замены текста програм-
мы, его структура представлена на рис. 2.7.
Меню Search состоит из следующих входящих в него пунктов
/15/:
Find — команда поиска нужною фрагмента текста в активном
окне редактора. Открывается окно диалога, с помощью которого
задаются: фрагмент для поиска и условия поиска (различать или
нс различать строчные или прописные буквы и др.), диапазон по-
иска (во всем тексте или только в выделенном фрагменте), на-
правление поиска (вперед или назад но тексту), начало поиска (с
начала текста, с конца текста или аг курсора).
96
2.2. Структура и обзор главного меню
Replace...
Search again
Go to line number...
Show last compiler error
Find error...
Find procedure...
Previous browser
Objects
Units
Globals
Symbol...
Puc. 2.7. Структура меню Search
Replace — команда замены фрагмента. Открывает окно диалога,
похожее на окно команды Find, где дополнительно задается фраг-
мент, на который следует заменить исходный фрагмент.
Search again — команда повторного поиска. После выполнения
команды Find или Replace осуществляет поиск следующего вхож-
дения искомого фрагмента текста.
Go to line number — команда позиционирования курсора в окне
редактора на нужную строку с указанным номером.
Show last compiler error — команда, которая показывает строку
текста программы, в которой была обнаружена синтаксическая
ошибка при последнем прогоне компилятора.
Find error — команда поиска ошибки в тексте программы. Как
правило, при работе в среде Borland Pascal это ошибки, которые
возникают на этапе выполнения (например, деление на ноль). Эта
команда вызывает автоматическое прекращение прогона и курсор
показывает то место, в котором возникла эта ошибка.
Find procedure — команда поиска подпрограммы. Позволяет в
режиме отладки отыскать в тексте программы нужную процедуру
или функцию, имя которой задается в диалоговом окне.
2.2.4. Меню — Run
Это меню представляет пользователю несколько способов запу-
ска программы на выполнение. Структура меню Run представлена
на рис. 2.8.
97
Тема 2. Среда программирования Borland Pasca
Рис. 2.8. Структура меню Кип
В меню Kun представлено 6 команд, каждой из которых соот-
ветствуют комбинации функциональных клавиш. Это сделано для
быстрого доступа к командам.
Меню Run состоит из следующих команд /15/:
Run — команда, которая осуществляет компиляцию, компонов-
ку и исполнение программы из файла редактора. Если программа
уже откомпилирована к этому моменту, то среда сразу начнет се
выполнение. Если в программе обнаружены ошибки, то в окне ре-
дактора курсор позиционируется на строку, содержащую ошибоч-
ный оператор, а в служебной строке редактора появляется краткая
информация об ошибке.
Step over — команда которая позволяет выполнять программу
построчно, но вызываемые в программе процедуры/функции бу-
ду! выполняться как один оператор — пропускаться.
Trace into — команда выполнения программы построчно. Та-
ким образом, с помощью этой опции можно по шагам прослежи-
вать исполнение всех нестандартных процедур (функций), они
также будут выполняться построчно.
Go to cursor — команда выполнения программы до курсора.
Программа выполняется от начала до строки, отмеченной курсо-
ром. Затем экран возвращается в режим редактирования и появля-
ется возможность переместить курсор в новую строку и вновь вы-
полнить эту операцию.
Program reset — команда рестарта программы. Опция использу-
ется если необходим рестарт программы во время се отладки. При
этом сбрасываются все задействованные отладочные средства и
отладка программы прекращается. Программа удаляется из памя-
ти, все открытые к этому' моменту' файлы закрываются.
Parameters — команда задания параметра программы.
98
2.2. Структура и обзор главного меню
2.2.5. Меню — Compile
Compile fllt*F9
Make F9
Build
Target... Real
Primary file...
Clear primary file
Information...
Puc. 2.9.
Структура меню Compile
Меню содсржиг несколько он-
ций компиляции программы.
Структура меню Compile изобра-
жен на рис. 2.9.
Меню состоит из следующих
операций /15/:
Compile — Команда компиля-
ции. Компилируется программа
или модуль, находящиеся в памя-
ти редактора. Если в этой про-
траммс (модуле) содержатся обра-
щения к нестандартным модулям
пользователя, последние уже дол-
жны быть откомпилированы и
храниться на диске в виде
TPU-файлов.
Маке — команда сбора программы. Компилируется основной
primary-файл (программа) имя. которого определено опцией Сош-
pile/Primary file или файл из памяти редактора. Если начальный
файл нс задан, компилируется файл из активною окна редактора.
При этом перекомпилируются все нестандартные модули, в кото-
рых производились изменения.
Build — команда создания программы. Компилируется основ-
ной primary-файл или файл из памяти редактора и перекомпили-
руются все связанные с ним нестандартные модули.
Target — Эта опция управляет выходом компилятора: если
справа от нее стоит кодовое слово Memory (память), выходной
файл компилятора будет сохранен в оперативной памяти и может
затем сразу же запускаться из Borland Pascal без его загрузки с ди-
ска. Если справа стоит кодовое слово Disk (диск), файл с кодом
программы будет сохранен на диске в виде файла с расширени-
ем — EXE.
Primary file — команда присвоения имени основною prima-
ry-файла.
Clear primary file — команда очистки имени основного prima-
ry-файла, заданною опцией Primary file.
Information — это операция позволяет получить полезную ин-
формацию о текущем файле и операт ивной памяти.
99
Тема 2. Среда программирования Borland Pasca
2.2.6. Меню — Debug
Это меню называется «установки отладчика». Структура меню
Debug представлена на рис. 2.10.
Call stack Ctrl+F3
Register
Watch
Output
User screen filt*F5
Evaluate/modify... Ctrl»F4
Add watch... Ctrl+F7
Add breakpoint...
Puc. 2 IO Структура меню Debup
Меню предназначено для проведения определенных действий
во в[К‘мя отладки программы, такими как:
• просмотр значения переменной;
• поиск нужной процедуры;
• переключение режимов экрана.
Меню Debug состоит из следующих операций /15/:
Breakpoints — работа с точками останова. Эта опция позволяет
просмотреть все контрольные точки и при необходимости уда-
лить. переместить любую контрольную точку или задать условия
ее работы с помощью диалогового окна.
Call stack — окно используемых подпршрамм.
Register — окно регистров.
Watch — окно отладки.
Output — окно просмотра результатов выполнения программы.
Как правило, выводится в нижней части оперативной области, не
закрывая при этом окно редактора текста программы (оператив-
ную область).
User screen — окно пользователя. Эта опция осуществляет про-
смотр результатов выполнения программы в отдельном окне, при
этом окно редактора программы (оперативная область) становится
нам недоступным.
Evaluate/modify — вычислить/модифипировать. Эта опция по-
зволяет задать переменную или выражение, для которого следует
100
2.2. Структура и обзор главного меню
вычислить значение, а также задать новое значение для перемен-
ной
Add watch — добавить наблюдаемый параметр, переменную или
выражение.
Add breakpoint — добавить точку останова. С помощью этой оп-
ции меню DEBUG Вы можете установить в текущей строке конт-
рольную точку. Текущая строка — эго строка с курсором в окне
редактора. Если для нес установлена контрольная точка, строка
выделяется цветом (яркостью). В прщрамме можно установить
произвольное количество контрольных точек. Останов в контро-
льной точке можно сделать условным. С помощью диалогового
окна можно задать условие останова. Эго может быть произволь-
ное логическое выражение с использованием любых переменных,
констант, вызовов функций. Поле Pass count указывает количество
обращений к оператору с контрольной точкой, после которого
произойдет останов. С помощью команды Ctrl-F8 контрольную
точку можно установить/снять непосредственно из режима редак-
тирования.
2.2.7. Меню — Tools
Это меню позволяет присоединить к IDE дополнительные
внешние утилиты, такие как утилита поиска Grep, протрамма про-
филирования Turbo Profiler, внешний отладчик Turbo Debugger и
др. Структура меню Tools представлена на рис. 2.11.
Go to next Alt*F8
Go to previous Alt*F7
Grep Shift*F2
Turbo Assembler Shift*F3
Turbo Debugger Shift*F4
Turbo Profiler Shift-*-FS
Рис. 2.11. Структура меню Tools
Меню Tools состоит из следующих команд /15/:
Messages — окно сообщений. Этот пункт меню открывает окно
сообщений, в которое программа помещает полученные результа-
ты, если она выводи т информацию через филыр DOS.
101
Тема 2. Среда программирования Borland Pasca
Go to next — переход к следующей строке окна сообщения.
Go to previous — переход на предыдущую строку окна сообще-
ния.
Grep — Инициирует работу' утилиты GREP. В строке «Enter
program arguments» диалогового окна опции необходимо перечис-
лить аргументы вызова утилиты GREP: имена процедур, функций,
переменных, которые необходимо отыскать в текстовых файлах, а
также имена этих файлов. По умолчанию параметром вызова ути-
литы GREP указывается *.PAS, что означает поиск по всем
PAS-файлам текущего каталога. Если к моменту вызова опции
текстовый курсор стоял на некотором имени процедуры, функции
или переменной, это имя появится в качестве аргумента вызова
перед *.PAS. После нажатия клавиши Enter утилита GREP начнет
поиск имени во всех файлах. В окне Messages появятся сообщения
утилиты GREP с указанием имени файла, номера строки и фраг-
мента текста программы, где было найдено нужное имя.
2.2.8. Меню — Options
Это меню (рис. 2.12) называется
«установка параметров системы», кото-
рое позволяет управлять характеристи-
ками среды программирования (IDE) и
компилятора, такими как:
• управление файлами конфигурации;
• создание резервных файлов;
• определение необходимого размера
памяти для компиляции и выполне-
ния программы;
• установление режимы работы компи-
лятора.
Меню Options состоит из следующих
команд /15/:
Compiler — установка опций работы
Compiler...
Memory sizes...
Linker...
Debugger...
Directories...
Browser...
Tools...
Environment
Open. ..
Save BP. TP
Save as...
Puc. 2.12. Структура
меню Options
компилятора.
Memory sizes — размеры стека и динамической памяти.
Linker — опции этого меню управляют работой компоновщика.
Debugger — отладчик. Открывает окно диалога, с помощью ко-
торого можно установить параметры, определяющие работу отлад-
чика.
102
2.2. Структура и обзор главного меню
Directories — директории. Опции этой команды задают исполь-
зуемые средой дисковые каталоги (папки^директории.
Took — открывает окно диалога, с помощью которого можно
включить в список вызываемых из среды программ новую програм-
му, отредактировать ее параметры, удалить программу из списка.
Environment — условия работы. Этот пункт содержит 5 подменю
с помощью которых задаются условия работы с среде.
Cascade
Close dll
Refresh display
Size/Move Ctrl*F5
Zoom F5
Next F6
Previous Shift*F6
Close Alt*F3
List... Alt-И
Puc. 2.13.
Структура меню Window
2.2.9. Меню — Window
Это меню предназначено для
выполнения различных операций
над окнами. Структура меню Win-
dow представлена на рис. 2.13.
Меню Window состоит из сле-
дующих операций /15/:
Tile — это команда располагает
все отрытые окна с текстами про-
грамм, наложенными друг на дру-
га так, чтобы каждое было видно
на экране и все они имели бы
приблизительно одинаковые раз-
меры.
Close АН — это команда закры-
вает все отрытые окна.
Cascade — это команда распо-
лагает все отрытые окна с текстами программ, друг за другом
сверху вниз (каскадом) таким образом, чтобы были видны рамки
каждого из них. Используется для организации более удобной ра-
боты с помощью мыши.
Refresh display — это команда обновляет содержимое экрана
т. с. удаляет следы вывода профаммы, работавшей в режиме от-
ладки с установленной опцией Options/Debuggcr/Display swap-
ping/None.
Sizc/Movc — Эта опция обеспечивает перемещение окна по эк-
рану и/или изменение его размеров. С клавиатуры выполнение
этой команды осуществляется комбинацией клавиш Ctrl < F5.
Zoom — это команда осуществляет раскрытие активного окна
на полный экран или возвращение окна к исходному размеру.
С клавиатуры выполнение этой команды осуществляется клави-
шей F5.
103
Тема 2. Среда программирования Borland Pasca
Next — это команда осуществляет переход к следующему от-
крытому окну. С клавиатуры выполнение этой команды осуществ-
ляется клавишей F6.
Previous — это команда осуществляет переход к предыдущему
открытому окну. С клавиатуры выполнение этой команды осуще-
ствляется комбинацией клавиш Shift+Гб.
Close — это команда закрывает активное окно. С клавиатуры
выполнение этой команды осуществляется комбинацией клавиш
A11+F3.
List — это команда выводит на экран список всех открытых
окон. С клавиатуры выполнение этой команды осуществляется
клавишей Alt+O.
2.2.10. Меню — Help
Help
Index Shift-Fl
Topic search Ctrl-Fl
Previous topic Alt-Fl
Using help
Files...
Compiler directives
Procedures and functions
Reserved words
Standard units
Borland Pascal Language
Error Messages
About...
Это меню предназначено для
работы со встроенной справочной
системой языка Pascal, его струк-
тура представлена на рис. 2.14.
Меню Help состоит из следую-
щих команд /15/:
Contents — Выводит на экран
содержание справочной службы.
Index — Выводит на экран ал-
фавитный список всех ссылок
справочной службы. Вызывается
из редактора командой Shift+Fl.
Topic search — Осуществляет
поиск в окрестности курсора заре- рис 2.14
зервированного слова или имени Структура меню Help
стандартной процедуры (функции)
и даст соответствующую справку. Вызывается из редактора коман-
дой Ctrl+Fl.
Previous topic — Выводит на экран предыдущее справочное со-
общение. Вызывается из редактора командой Alt+Fl.
Using help — Дает справку о том, как пользоваться справочной
службой. Отметим, что в сообщениях справочной службы все пе-
рекрестные ссылки выделяются цветом. Вы можете подвести к
любой из них указатель мыши и двойным нажатием на се левую
кнопку вызвать на экран соответствующее справочное сообщение
104
2.3. Основы практической работы в IDE BORLAND PASCAL
(или сместить к ней указатель с помощью клавиш перевода курсо-
ра и нажать Enter).
Files — С помошью этой опции Вы можете установить нужные
файлы справочной службы.
Compiler directives — Показывает справку о директивах компи-
лятора.
Reserved words — Показывает справку о зарезервированных сло-
вах.
Standard units — Показывает справку о стандартных модулях.
Borland pascal language — Показывает справку’ о языке Borland
Pascal.
Error messages — 11 о ка зы вает сира вку о сооб щс и и я х об ош ибках.
About — Выводит информацию об авторских правах и версии
Borland Pascal.
2.3. Основы практической работы
в IDE BORLAND PASCAL
2.3.1. Запуск и выход из среды программирования
Основным способом запуска среды программирования являет-
ся открытие выполняемого файла bp.exe.
Технология запуска среды BORLAND PASCAL следующая:
а) откройте папку Мой компьютер. Для этого на рабочем столе
дважды щелкните левой кнопкой мыши по значку системной пап-
ки Мой компьютер на рабочем столе. При этом откроется стандар-
тное окно папок;
б) в рабочем поле открывшейся папки стандартными средства-
ми навигации по файловой структуре Windows (двойной щелчок
левой кнопкой мыши по значку папки) откройте папку, в которой
находятся файлы пакета BORLAND PASCAL;
в) датсс откройте папку Bin. В открывшемся списке файлов
папки найдите файл bp.exe и двойным щелчком мыши по его сим-
волу запустите программу на выполнение. В результате будет от-
крыто окно IDE ВР.
Для удобства запуска среды программирования ВР следует со-
здать ярлык приложения на рабочем столе или добавить соответ-
ствующую команду в главное меню системы.
I05
Тема 2. Среда программирования Borland Pasca
При работе с ОС Windows нс рекомендуется открывать прило-
жение с помощью запуска файла с расширением *.pas. т. к. данное
расширение может быть закреплено за другим приложением.
Работать со средой программирования ВР в ОС Windows можно
в двух режимах:
• в оконном;
• в полноэкранном.
Переход между этими двумя режимами работы осуществляется
с помощью нажатия сочетания клавиш Alt+Enter.
Каждый из режимов работы обладает своими достоинствами и
недостатками, анализ которых выполнен в таблице 2.1.
Таблица 2.1
Анализ достоинств и недостатков оконного и полноэкранного
режимов
Режим Достоинства Недостатки
Оконный 1. Удобство параллельной совместной работы с другими приложениями в ОС Wndows 1. Ограниченный размер окна и уменьшенные размеры символов. 2. Как правило, отсутствие поддержки функций работы с мышью в среде программирования.
Полноэкранный 1. Удобство работы с большим размфэм окна и крупными символами. 2. Доступность функций работы С мышью. 1. Трудности совместной работы с другими приложениями в ОС Windows.
Для того чтобы выйти из среды программирования следует вос-
пользоваться командой Exit меню File или при помощи сочетания
клавиш Alt+X.
Если в программу были внесены изменения, которые ранее
вами не были сохранены, то программа выдаст информационное
окно с предупреждающим сообщением вида; «Файл name.pas был
изменен. Сохранить?» (рис. 2.15).
При этом необходимо выбрать один из трех предложенных ва-
риантов:
1. Yes — сохранить последние изменения в файле и выйти из
программы;
2. No — нс сохранять последние изменения и выйти из про-
граммы;
106
2.3. Основы практической работы в IDE BORLAND PASCAL
PRIMER_5.PAS has been modified.
Save?
Puc. 2.15. Вид информационного окна
3. Cancel — для отмены действия, по выходу из среды програм-
мирования.
После выбора первого или второго из предложенных вариантов
среда программирования Borland Pascal будет закрыта.
При работе в оконном режиме для закрытия ВР достаточно
щелкнуть по кнопке управления окном А (закрыть). В этом слу-
чае приложение будет закрыто без запроса о сохранении измене-
ний внесенных в программу. По этому следует осторожно пользо-
ваться данным способом закрытия приложения во избежание по-
тери нссохранснных фра! ментов программы.
2.3.2. Принципы работы с меню
Все управление средой программирования ВР осуществляется в
основном с помощью меню системы.
Для перехода в меню достаточно выбрать его название из ли-
нейки меню системы щелчком левой кнопки мыши, при этом,
сразу же будет открыто выбранное меню. Выбор требуемого пунк-
та (команды) меню там же можно осуществлять указанием его мы-
шью. Когда некоторое меню уже открыто, переместиться в другое
меню можно, всего лишь указав мышью его наименование.
Для выхода из меню следует воспользоваться клавишей Esc,
или щелкнуть мышью в рабочей области системы.
Общепринятыми для меню считаются следующие соглашения:
• если за названием пункта меню имеется многоточие (...), то
выполнение обозначаемой пунктом команды происходит в
диалоге с пользователем в открывающемся диалоговом окне;
• если за названием пункта меню находится треугольник (сим-
вол ► ), то выбор пункта приводит к раскрытию подменю;
• если название пункта затемнено, то выбирать его в текущем
состоянии прО1раммы нельзя потому, что соответствующая
107
Тема 2. Среда программирования Borland Pasca
команда в данном состоянии просто неприменима. Напри-
мер, нельзя сохранить отсутствующий документ — предвари-
тельно сто нужно создать или открыть. Таким образом, что-
бы запрещенную команду сделать доступной, необходимо
выполнить некоторые предварительные действия;
• если справа от названия пункта указана некоторая клавиша
или комбинация клавиш, то команда может быть выдана не
только из меню, но и непосредственно (без сто открытия),
путем нажатия этих клавиш, которые называются клавиша-
ми-акселераторами (shortcut keys, acceleration keys);
• если название пункта меню имеет выделенную цветом букву
(обычно она первая), то эта буква (в общем случае — сим-
вол) обозначает горячую клавишу (hot key) — клавишу, ис-
пользуемую дтя оперативного выбора пункта с помощью
клавиатуры при условии, что содержащее его меню открыто.
• нажатие клавиши ПО приводит к выделению наименования
первого (самого левого) меню, после чего с помощью кла-
виш 4— и -> можно выделить требуемое меню и открыть его
нажатием клавиши Enter. Если активное окно документа в
приложении распахнуто, то нажатие клавиши ПО обеспечит
выделение пиктограммы управляющего меню окна докумен-
та, поэтому придется дополнительно нажать клавишу
• непосредственное открытие требуемого меню можно выпол-
нить путем нажатия комбинации клавиш Alt+key, где key —
горячая клавиша, соответствующая заглавной букве в имени
меню;
• попасть в меню, соседствующее с уже открытым, можно пу-
тем нажатия клавиши <— или
2.3.3. Принципы работы с диалоговыми окнами
Работа в IDE HP строится так, что одни команды, выданные в
среде программирования, исполняются немедленно, без диалога с
пользователем, другие же могут быть выполнены только тогда,
когда пользователь предоставит в распоряжение системы допол-
нительную информацию и уточнит режим выполнения команды.
Команды первой разновидности считаются недшмоговыми, вто-
рой — диалоговыми.
При выполнении диалоговой команды система открывает диа-
логовое окно, по форме и обрамлению напоминающее обычное
108
2.3. Основы практической работы в IDE BORLAND PASCAL
окно, но имеющее совершенно иную начинку и функциональ-
ное ть, а также весьма ограниченную управляемость.
Диалоговые окна могут использоваться нс только для, запроса
от пользователя дополнительных сведений, необходимых для вы-
полнения команды, но и для выдачи сообщении (окна сообще-
ний). В них появляются сообщения при возникновении различ-
ных событий и обнаружении нештатных ситуаций, после чего
предлагается предпринять адекватные меры.
Сделав необходимые установки и набрав в нужных местах диа-
логового окна подходящие значения, пользователь извещает сис-
тему о том, что выполнение команды можно продолжить.
Аналогично рабочим окнам системы, диалоговое окно имеет
строку заголовка с названием окна. Перетаскивая заголовок мы-
шью, удастся изменить положение окна на экране. Это удобно в
тех случаях, когда вам необходимо воспользоваться сведениями,
перекрытыми диалоговым окном, то есть заглянуть под него. В от-
личие от обычных окон диалоговые окна масштабированию нс
поддаются. Единственным управляющим элементом на границе
диалогового окна является кнопка Ш. с помощью которой его
можно закрыть с помощью мыши (рис. 2.16).
Насыщение диалогового окна образует совокупность разнотип-
ных компонентов. Компоненты диалоговых окон могут иметь горя-
чие клавиши, которые, как и в меню, выделены цветом.
Компоненты диалогового окна могут группироваться в области
(панели) — заключаться в прямоугольные рамки и иметь общее
название.
В диалоговом боксе всегда имеется один активный компонент.
остальные компоненты в это время пассивны. Активный компо-
нент отличается от других подсветкой, при этом в строке состоя-
ния отображается интерактивная подсказка по назначению данно-
го компонента.
Для активизации компонента диалогового бокса с одновремен-
ным выполнением действий, определяемых типом компонента,
достаточно щелкнуть по нему мышью. Если компонент составной,
то щелкнуть необходимо по одному из его элементов.
Дгя смены активности компонентов и одновременного выпол-
нения с компонентами некоторых действий определяемых типом
компонентов, используются ниже перечисленные клавиши и их
комбинации:
109
Тема 2. Среда программирования Borland Pasca
l ab — активизировать следующий компонент, при этом компо-
нент выделяется цветом Поскольку компоненты нс пронумерова-
ны и расположены в диалоговом боксе произвольно, узнать о том,
какой из них является следующим, можно только опытным путем;
Shift+Tab — активизировать предыдущий компонент.
C:\BP7\BIN\-.PnS
..___________Directory Маг 29, 2008 3:39рм
б)
Рис. 2.16. Диалоговые окна системы ВР с различными
интерфейсными компонентами:
а) с ниспадающим списком и комбинированным текстовым полем;
б) с флажками и переключателями
ПО
2.3. Основы практической работы в IDE BORLAND PASCAL
Коротко рассмотрим интерфейсные компоненты диалоговых
окон и принципы работы с ними.
1) Командные кнопки
Командная кнопка в системе ВР представляет собой прямоуго-
льную область с тенью, поверх которой нанесено название коман-
ды (рис. 2.17).
Рис 2.17 Командные кнопки
Каждая командная кнопка ассоциируется с некоторым дейст-
вием — но сути, с командой Чтобы инициировать это действие,
командную кнопку нужно нажать.
В зависимости от характера действия, выполняемого при нажа-
тии командной кнопки, различают:
• Командная кнопка, обеспечивающая продолжение работы.
В ВР такая роль закреплена за кнопкой ОК. в результате на-
жатия которой осуществляется выход из режима диалога с
принятием сделанных установок в диалоговом окне.
• Командная кнопка, отменяющая сделанные пользователем
установки и обеспечивающая возврат в предыдущее состоя-
ние системы программирования (в частности, обеспечиваю-
щая прекращение выполнения команды). Для этого предназ-
начена кнопка Cancel.
• Командные кнопки, используемые для выполнения допол-
нительных действий без выхода из режима диалога. Напри-
мер, вызов справки (кнопка Help) или возврата прежних
установок системы (Revert),
Нажать любую командную кнопку можно одним из нижепри-
веденных способов:
• щелкнуть по командной кнопке мышью;
• активизировать командную кнопку с помощью клавиш Tab
или Shift+Tab и нажать клавишу Enter;
• нажать комбинацию клавиш Alt+key, где key — горячая кла-
виша. отображенная в названии кнопки.
В любое» диалоговом окне существует единственная предопре-
деленная командная кнопка. Она выделена цветом и, если ни одна
из других командных кнопок не активна, может быт ь нажата кла-
III
Тема 2. Среда программирования Borland Pasca
вишен Enter без предварительной активизации. Как правило, та-
кой предопределенной кнопкой является кнопка ОК.
2) Текстовое поле
Текстовое поле представляет собой прямоугольную область,
предназначенную для ввода пользователем запрашиваемых систе-
мой значений параметров. Данные можно вводить только в активное
текстовое поле. Признаками активности данного типа полей явля-
ются появляющийся в них курсор и выделение цветом их названия.
3) Комбинированное текстовое поле
Комбинированное текстовое поле также предназначено для
ввода различных парамезров, однако оно дополнительно допуска-
ет возможность производить выбор требуемых значений из про-
кручиваемого списка. Прокручиваемый список, в частности, по-
зволяет хранить задававшиеся ранее строки (историю задания
строк), которые и образуют ниспадающий список. В дальнейшем
выбранные значения можно редактировать в текстовом поле эле-
мента. Все это упрощает и ускоряет работу пользователя.
Комбинированное текстовое поле состоит из двух элементов.
открытия прокручиваемо-
самого текстового поля и кнопки
го списка (рис. 2.18а).
Открыть содержимое прокручиваемого списка можно либо
, или нажатием клавиши i после
щелчком мыши по кнопке
активизации комбинированного текстового поля.
В результате будет открыт прокручиваемый список в виде небо-
льшого окна (рис. 2.186), которое в зависимости от размера содер-
жимого может иметь горизонтальные и вертикальные полосы про-
крутки (скроллинг).
Просмотреть содержимое списка можно либо с помощью кла-
виш Т и I управления курсором, или перемещая бегунок скрол-
линга с помощью мыши.
Для выбора элемента списка следует с помощью клавиш Т и X,
навести на него цветной указатель и нажать Enter или указать на
эту строку мышью и двойным щелчком левой кнопки мыши вы-
брать данный элемент.
Для отмены процедуры выбора элементов списка следует за-
крыть окно прокручиваемого списка с помощью клавиши Esc или
мышью щелкнуть по кнопке .
112
2.3. Основы практической работы в IDE BORLAND PASCAL
б)
Рис. 2.IS. Комбинированное текстовое поле:
а) комбинированное поле с вложенным списком;
б) поле с вертикальным и горизонтальным скроллингом.
4) Ниспадающий список.
Ниспадающий список содержит последовательность элементов,
представляющий собой список возможных значений какого либо
параметра и предназначен для выбора конкретного его значения.
Внешне он похож на комбинированное текстовое поле (рис. 2.19).
eal node target
Рис. 2.19. Ниспадающий список
Один из элементов прокручиваемого списка всегда выделен —
роль такого списка как раз и состоит в том, чтобы можно было
просмотреть все элементы и выделить требуемый. Видимым в
ниспадающем списке оказывается только выделенный элемент.
Остальные элементы списка удается охватить взглядом лишь по-
сле его раскрытия.
Просмотр элементов ниспадающего списка и выделение одного
из них производится теми же способами, что и прокручиваемого
списка.
5) Поле выбора
При выполнении некоторых команд приходится осуществлять
навигацию по файловой структуре с целью выбора текущей папки,
в которую будет сохраняться фазы с программным модулем или из
которой он будет считываться. Для навигации по файловой струк-
туре и предназначен интерфейсный элемент — поле выбора
(рис. 2.20).
113
Тема 2. Среда программирования Borland Pasca
iles
DOCX
EXAMPLESX
PENWINX
ONITSX
..X
ШМШЯ
Puc. 2.20. Ноле выбора
В поле выбора отображается список всех папок содержащихся в
текущей на данный момент папке. При этом полный путь доступа
к текущей папке отображается внизу диалогового окна.
Навигация по файловой структуре осуществляется следующим
образом:
• для того, чтобы открыть папку надо с помощью клавиш Т и
1, навести на имя папки цветной указатель и нажать Enter
или следует открыть се двойным щелчком левой кнопки мы-
ши:
• чтобы вернуться в родительскую папку (т. е. подняться на
один уровень вверх в файловой структуре), аналогично сле-
дует выбрать пункт списка (..\).
6) Флажки
Флажки — это такие компоненты диалогового окна, которые
позволяют модифицировать и уточнить процесс выполнения
команды (рис. 2.21).
Runtime errors
I ] ange checking
IX) tack checking
IXJ /0 checking
( 1 Overflow hecking
Puc. 2.21. Флажки
Флажок может находиться в двух состояниях — уелмшоеденжш
(в квадратных скобках перед названием флажка видна галочка)
или снятом (галочка отсутствует).
Все флажки в диалоговом боксе полностью самостоятельны,
поэтому можно установить или снять любой из них вне зависимо-
сти от СОСТОЯНИЯ других.
114
2.3. Основы практической работы в IDE BORLAND PASCAL
Для изменения состояния (статус) флажка на противополож-
ное, то есть установление снятого флажка или, наоборот, снятие
установленного, достаточно щелчка .мыши но полю флажка.
При использовании клавиатуры последовательность данной
операции следующая:
• с помощью клавиши Tab или сочетания клавиш Shift ЬТаЬ
следует активизировать отдельную группу флажков, заголо-
вок группы при этом будет выделен цветом;
• с помощью клавиш Т и X требуется выбрать требуемый <|>зга-
жок из группы;
• нажатием клавиши Space следует взвести или отключить
флажок.
Кроме того, взвести или отключить флажки можно нажатием
комбинации клавиш Alt+kcy. где key — горячая клавиша, показан-
ная в наименовании флажка.
7) Переключатели
Переключатели представляет собой перечень возможных вари-
антов установок, из которых следует выбран, один или согласить-
ся с предложенным (рис. 2.22).
Sub-browsing
(•) ew browser
( ) eplace current
Puc. 2.22 Переключатели
Смысл альтернативных вариантов отражается в их названиях, и
все они объединяются общим именем, которое является названи-
ем переключателя (это название можно в равной степени рассмат-
ривать как название области, такие варианты содержащей).
Действующий вариант (или состояние переключателя) отличает-
ся от других тем, что имеет точку, помещенную в круглые скобки.
Задание требуемого положения переключателя, или его выбор
(говорят также об установке переключателя в требуемое положе-
ние), осуществляется следующими способами:
• щелчком по этому положению (альтернативному варианту)
мышью:
• активизацией переключателя при помощи клавиатуры с по-
следующим использованием клавиш Т и X. Активизировать
переключатель можно с помощью клавиш lab и Shift+Tab;
115
Тема 2. Среда программирования Borland Pasca
• нажатием комбинации клавиш Alt+key, где key — горячая
клавиша, показанная в названии варианта.
2.3.4. Конкретная работа с окнами
При запуске среды программирования ВР. в рабочей области
открывается пустое стандартное окно редактирования с именем
Noname.pab. Структура стандартного окна представлена на
рис. 2.23.
Рис. 2.23. Структура стандартного окна в ВР
В среде ВР разрешается работать сразу с несколькими окнами
Edit. Кроме гою, дополнительно в рабочей области MOiyr быть от-
крыты служебные окна Output и Watch (назначение последних бу-
дет рассмотрено отдельно).
При работе с несколькими окнами, они могут частично или
полностью накладываться друг на друга, или быть упорядочены в
пределах рабочей области.
Основные операции для работы с окнами в ВР следующие:
• Создание нового окна;
• Переход между окнами;
• Упорядочение расположения окон (размещение и изменение
расположения);
• Изменение размеров и перемещение окон;
116
2.3. Основы практической работы в IDE BORLAND PASCAL
• Закрытие окна.
Рассмотрим эти операции более подробно.
1) Создание нового окна.
Эта операция относится только к окнам редактирования Edit.
Для создания нового окна Edit следует выбрать команду New из
меню File.
Данная команда применяется, когда требуется создать окно ре*
датирования для нового программного блока.
2) Переход между окнами (активация окна).
Вся работа по редактированию про!раммных модулей происхо-
дит только в активном окне. Если открыто одно окно редактиро-
вания, то. по умолчанию, оно является активным. Если же работа
происходит с несколькими окнами одновременно, то приходится
осуществлять переход между окнами.
Для последовательной смены окон используется клавиша F6.
Нажатое на эту клавишу делает активным очередное окно (окно
со следующим порядковым номером). Причем, если это окно
было закрыто другими окнами, то оно накладывается поверх них.
Для смены активности окон можно использовать и мышь. Дтя
этого достаточно щелкнуть левой кнопкой мыши внутри неактив-
ного окна.
3) Упорядочение расположения окон.
Под упорядочением окон следует понимать возможный поря-
док расположения окон в рабочей области системы. Несколько
окон могут располагаться в нескольких вариантах (рис. 2.24):
• каскадом, перекрывая друг друга;
• равномерно, нс перекрывая друг друга;
• произвольно, в зависимости от положения и размеров окон,
заданных пользователем.
Для расположения всех этих окон в каскадном или равномер-
ном вариантах служат соответственно команды: Cascade и rile
меню Window.
Для того чтобы разместить окна в произвольном вариан те в со-
ответствии со вкусом пользователя, следует использовать допол-
нительные операции по перемещению и изменению размеров
окон.
4) Изменение размеров и перемещение окон.
Размеры и положение активного окна можно изменять как с
помощью клавиатуры, гак и с помощью мыши.
117
Тема 2. Среда программирования Borland Pasca
а)
6)
Рис. 2.24. Расположение окон а рабочей области:
а) каскадное; б) равномерное
118
2.3. Основы практической работы в IDE BORLAND PASCAL
Рис. 2.24 (продолжение). Расположение окон в рабочей области:
в) произвольное
При работе с клавиатурой для изменения этих параметров ис-
пользуется сочетание клавиш Ctrl + F5.
В результате будет осуществлен переход в режим настройки па-
раметров окна. При этом изменяются цвет и вид линии рамки ак-
тивного окна. В режиме настройки для перемещения окна исполь-
зуются клавиши управления курсором, для изменения размеров —
сочетание этих клавиш с клавишей Shift. Для выхода из режима
настройки следует нажать клавишу Enter.
При работе с мышью для изменения положения активного
окна следует зацепить его границу заголовка левой кнопкой мыши
и не отпуская ее следует переместить окно. Для изменения разме-
ров окна используется правый нижний угол рамки, который сле-
дует зацепить левой кнопкой мыши точно так же, как и при пере-
мещении окна.
Кроме того, активное окно можно распахивать на всю рабочую
область.
Для этого следует мышью нажать на кнопке ШИ активного
окна. В этом случае активное окно займет всю рабочую область.
Для возвращения исходного размера окна следует воспользоваться
кнопкой ШШ.
119
Тема 2. Среда программирования Borland Pasca
'Эти же действия выполняются и с помощью клавиатуры: нажа-
тие на кнопку F5 распахивает окно, повторное нажатие на F5 нор-
мализует его, т. е. уменьшает до исходного размера.
5) Закрытие окна.
Для того чтобы закрыть активное окно следует щелкнуть мы-
шью по кнопке ЯВ окна, или воспользоваться сочетанием кла-
виш A11+F3. Перед закрытием окна редактирования, содержащего
не сохраненные изменения в тексте программных модулей, поя-
вится запрос о сохранении внесенных изменений (см. рис. 2.15).
2.3.5. Работа с текстовым редактором
Текстовый редактор среды Borland Pascal представляет пользо-
вателю удобные средства создания и редактирования текстов про-
грамм. Признаком того, что среда находится в состоянии редакти-
рования, является наличие в окне редактора мигающего курсора.
Основные приемы работы с текстовым редактором
Для создания текста программы нужно ввести этот текст с по-
мощью клавиатуры аналогично тому, как это делается при наборе
текста в любом текстовом редакторе. После набора программного
кода в очередной строке, для перевода курсора на новую строку
следует нажать клавишу Enter.
Редактор Borland Pascal вставляет в копие каждой строки разде-
литель — невидимый символ. Этот символ вставляется клавишей
Enter, а удаляется клавишами Backspace (<-) или Delete С помо-
щью вставки или удаления разделителя можно разбивать или сое-
динять строки. Для разбивки строки, следует установить курсор в
нужную позицию и нажать клавишу Enter. При этом фрагмент
строки находящийся справа от курсора будет перенесен на одну
строку ниже. Для соединения двух соседних строк, нужно устано-
вить курсор в конец первой строки (для этого удобно использо-
вать кшвишу End* и нажать клавишу Del или установить курсор в
начало второй строки (воспользовавшись клавишей Ноше) и на-
жать кшвишу Backspace.
Если при вводе текста была допущена ошибка или требуется
отредактировать ранее набранный текст программы, то для удале-
ния отдельных символов следует установить курсор на удаляемый
символ или рядом с ним и воспользоваться клавишами Delete или
Backspace. При этом при нажатии на клавишу Del удаляется сим-
120
2.3. Основы практической работы в IDE BORLAND PASCAL
вол расположенный над курсором, а при нажатии на клавишу
Backspace — символ, расположенный слева от курсора. Для удале-
ния всей строки, в которой расположен курсор, предназначено со-
четание двух клавиш Ctri+Y.
Окно редактора имитирует длинный и достаточно широкий
лист бумаги фрагмент которого виден в окне. Размеры листа по
горизонтали и вертикали ограничиваются только общим числом
символов в документе, которых должно быть нс более 64535. Так-
же компилятор ВР воспринимает строки программы длиной не
более 126 символов. Это значит, что если длина записи выражения
превысит 126 символов, то данное выражение придется разбивать
на части и записывать в несколько строк.
При наборе текста программна можно использовать два режима
вставки символов:
• обычный режим вставки (нормальный режим работы редак-
тора), при этом каждый новый символ как бы «раздвигает»
символы в строке, смсшая ее остаток вправо;
• режим забоя, при котором новый символ замешает собой тот
символ, на который указывает курсор. Смешение символов
строки при этом нс происходит.
Для перехода между режимами набора текста предназначена
клавиша Insert. Признаком того, в каком режиме работает редак-
тор, является форма курсора: в режиме вставки курсор похож на
мигающий символ подчеркивания, а в режиме забоя он представ-
ляет собой крупный мигающий цветной прямоугольник.
Однако, следует учитывать, что вставить новую строку или раз-
бить на части можно только в режиме замены.
Работа с повторяющимися фрагментами
В процессе разработки программ можно заметить, что часть
программного кода повторяется с небольшими изменениями.
В этом случае, для ускорения набора отдельных фрагментов про-
грамм следует пользоваться командами редактора работы с тексто-
выми блоками.
Блок — это специальным образом выделенный фрагмент про-
граммного кода (фрагмент текста программы).
Редактор ВР предоставляет пользователю достаточно широкий
набор команд работы с блоками. Основные операции с блоками
следующие: удаление блока; копирование и перемешен не блока
121
Тема 2. Среда программирования Borland Pasca
как в пределах одного документа так и между разными документа-
ми расположенными в отдельных окнах.
Прежде чем выполнить любую операцию с блоком, надо его
выделить. Сушествует несколько способов выделения блоков.
Первый способ самый быстрый - выделение блока мышью.
Для этого следует установить курсор в начало блока и удержи-
вая левую кнопку мыши переместить курсор до конца блока. Вы-
деленный блок помечается отличным от основною фона цветом
(рис. 2.25).
Рис. 2.2&. Выделение блока цветом
Второй способ — использование клавиши Shift в сочетании с
клавишами управления курсором.
В этом случае требуется перевести курсор на начато блока, а
затем удерживая клавишу Shift с помощью клавиш со стрелками
(<—, —Т, -!•) выделить в качестве блока необходимый фрагмент
программы.
Для гою, чтобы снять выделение блока следует щелкнуть мы-
шью за пределами его выделения или воспользоваться сочетанием
клавиш Ctri+K Н (г. с. удерживая клавишу Ctrl последовательно
нажать клавиши К и Н).
Основные операции при работе с блоками следующие:
• копирование;
122
2.3. Основы практической работы в IDE BORLAND PASCAL
• перемещение;
• удаление.
Для выполнения этих операций можно использовать как
команды из меню Edit (см. рис. 2.6) и соответствующие им клави-
ши акселераторы, так и набор специальных команд редактора.
Способы выполнения операций с блоками
Рассмотрим более подробно различные способы выполнения
данных операций.
I) Копирование блока
При использовании команд меню следует:
• Одним из способов выделить блок;
• С помощью команды Сору (копировать) из главного меню
Edit или контекстного меню (вызывается щелчком правой
кнопки мыши но выделенному блоку) следует поместить со-
держимое блока в специальную область памяти — буфер об-
мена. Вместо команд меню можно воспользоваться соответ-
ствующей клавишей — акселератором, в данном случае
Ctrl«Ins
• Далее следует установит курсор в позицию вставки блока и
выбрать команду Paste (клавиша-акселератор Shift-bias).
В результате выделенный блок будет скопирован в указан-
ную позицию курсора.
При использовании специальных команд редактора последова-
тельность копирования блока следующая:
• Одним из способов выделяется блок.
• С помощью клавиш со стрелками курсор устанавливается в
позицию вставки. В данном случае мышью пользоваться не-
льзя, так как при указании точки вставки автоматически
снимется выделение с блока.
• С помощью нажатия сочетания клавиш Ctrl+K С происходит
копирование выделенного блока в позицию курсора.
При этом следует помнить, что копировать блоки вторым спо-
собом можно только в пределах одного окна (документа), а при
использовании команд меню появляется возможность копирова-
ния блоков между окнами (документами).
2) Перемещение блока
Общий порядок выполнения данной операции аналогичен опе-
рации копирования.
123
Тема 2. Среда программирования Borland Pasca
При использовании команд меню, выделенный блок нс копи-
руется, а перемешается в буфер обмена командой Cut (Shift + Del)
Вставка блока в требуемую позицию осуществляется также коман-
дой Paste.
При использовании специальных команд встроенного редакто-
ра для перемещения блока служит сочетание клавиш Ctrl+K V.
3) Удаление блока
Для удаления выделенного блока предназначена команда Clear
(Ctrl+Del) меню Edit или контекстного меню, а также сочетание
клавиш Ctrl+K Y из набора специальных команд редактора.
Полный набор специальных команд встроенного редактора
приведен в Приложении А.
2.3.6. Сохранение программы
При запуске программы Borland Pascal она автоматически со-
здаст новый файл с именем «NONAMEOO.PAS», как показано на
рис. 2.26, который хранится в оперативной памяти компьютера.
HorUnd 7.0__________________________________________
[ 1----------------------------------- NOHftME00.PftS
Рис. 2.26. Создание нового файла с именем ^NONAMEOO.PAS»
С этого момента можно приступать к набору текста программы.
При этом хорошим тоном работы на компьютере считается доста-
точно частое сохранение результатов своей работы. Это позволяет
избежать потери набранного программного кода в результате воз-
можного сбоя в работе компьютера или системы программирова-
ния. Ведь достаточно часто, сложные алгоритмы формируются в
голове профаммиста в процессе работы над профаммой и напря-
мую заносятся в документ без записи данного алгоритма на бумаге.
Рекомендуется начинать работу в среде профаммирования с
сохранения даже и пустого документа, а затем, регулярно следует
сохранять вносимые в профамму изменения.
Для сохранения результатов работы предназначена команда Sa-
ve (сохранить) меню File или соответствующая ей функциональная
клавиша F2.
Если программа, с которой вы работаете, уже была сохранена
ранее, ю сохранение изменений в ней при использовании коман-
124
2.3. Основы практической работы в IDE BORLAND PASCAL
ды Save происходит в фоновом режиме. Если сохранение прово-
дится в первый раз, то команда Save выполняется как команда
Save As. (Сохранить как..), при этом открывается диалоговое окно
Save File As (Сохранить файл как), в кагором требуется указать
имя файла в котором будет сохранена программа и папку в корой
этот файл будет сохранен (рис. 2.27). Эта же команда предназначе-
на для сохранения существующих программ под другим именем.
Поле
выбора
C:\BP7\BIN\-.PAS
_____________Directory Apr 1, 2908 5:37,
Рис. 2.27. Диалоговое окно Save File 21s
Прежде чем задать имя файла в строке ввода, следует в окне
выбора открыть папку, в которой будет сохраняться файл.
Для выбора требуемой папки необходимо перевести курсор в
поле выбора и используя основные принципы навигации по фай-
ловой структуре (см. п. 2.3.3) открыть нужную папку. При этом
полный путь доступа к данной папке должен высветиться в ниж-
нем информационном поле диалогового окна.
Теперь следует в строке ввода набрать имя. под которым будет
сохраняться файл с программой. При этом достаточно ввести то-
лько собственное имя без указания расширения. Система при со-
хранении файла сама добавит к его имени расширение .pas. Реко-
мендуется при задании имени придерживаться правил написания
«короткого имени», т. е. количество символов в имени не должно
превышать восьми и в имени можно использовать только буквы
латинского алфавита и цифры.
Для подтверждения сохранения файла под заданным именем
следует нажать кнопку ОК. Для отказа от сохранения — нажать
кнопку Cancel или клавишу Esc.
125
Тема 2. Среда программирования Borland Pasca
Следует отметить, что по умолчанию при сохранении в поле
выбора открывается содержимое того логического диска, на каго-
ром установлена сама система программирования. Для сохранения
программы может потребоваться перейти к папке расположенной
на другом логическом диске. Однако в поле выбора диалогового
окна Save File As осуществлять навигацию по файловой структуре
можно только в пределах текущего логического диска. Для того,
чтобы перейти на другой логический диск необходимо в строке
ввода указать имя требуемого логического диска (например D:) и
нажать кнопку ОК.
Как правило, пользователи сохраняют свои программы в отдель-
ных папках. Поэтому рекомендуется предварительно настроить ра-
бочую папку, в которую предполагается сохранять результаты рабо-
ты (подразумевается, что данная папка уже существует на жестком
диске), в качестве текущей папки. Для этого предназначена команда
Change Dir (Сменить папку) из меню File. В результате выполнения
команды будет открыто диалоговое окно Change Directory (рис. 2.28).
палки
Рис. 2.28. Диалоговое окно Change Directory
При открытии данного диалогового окна в строке ввода Direc-
tory паше (Имя папки) отображается имя текущей папки, одновре-
менно в поле выбора Directory tree (Дерево панок) показывается
ветвь дерева файловой структуры на которой располагается теку-
щая папка.
Для смены значения текущей папки следует перейти в поле вы-
бора и используя приемы навигации по файловой структуре вы-
брать папку имя которой будет использовано в качестве имени те-
кущей папки.
126
2.3. Основы практической работы в IDE BORLAND PASCAL
Навигация по файловой структуре в виде «дерева» осуществля-
ется следующим образом:
• чтобы открыть папку надо с помощью клавиш Т и X, навести
на имя папки цветной указатель, и нажать Enter (либо двой-
ным щелчком левой кнопки мыши);
• чтобы подняться по файловой структуре на один и более
уровней выше следует с помощью клавиш Т и X выбрать ро-
дительскую панку на соответствующем уровне и нажать En-
ter (рис. 2.29);
• чтобы перейти на другой логический диск, следует перевести
курсор на слово Drives, нажатием клавиши Enter открыть
список логических дисков, с помощью клавиш Т и i выбрать
требуемый и нажать Enter.
Список логических Directory tree
дисков-► Drives
Имя логического—1—-г~С; \________________Верхний уроеень
диска I—уВР7____________________1-й уровень
Родительская папка - >[BIN - 2-й уровень
Дочерняя палка IIITI'IIH- Нижний уровень
Рис. 2.29. Отображение файловой структуры в виде ветви дерева
После того, как в поле выбора была открыта папка, которая в
дальнейшем будет использоваться в качестве текущей, необходимо
нажать кнопку Chdir, а для завершения работы с диалоговым ок-
ном следует нажать кнопку ОК.
Задать имя текущей папки также можно путем набора в строке
ввода полного ее имени (например полное имя папки PROGRAM
согласно рисунка 2.29 будет C:\BP7\BIN\PROGRAM).
В результате, для сохранения программ в текущей папке, в
строке ввода диалогового окна Save File As достаточно будет на-
брать только имя файла.
2.3.7. Компиляция и запуск программы на выполнение
Компиляция как один из этапов обработки программы может
осуществляться в двух случаях:
а) при запуске программы на выполнение. В этом случае снача-
ла производится компиляция программы, а затем ее выполнение;
б) без запуска программы на выполнение. В этохс случае ком-
пиляция производится как самостоятельная операция при отладке
127
Тема 2. Среда программирования Borland Pasca
фрагментов программы или для создания библиотек объектных
кодов.
Рассмотрим сначала случай (а).
После того, как текст программы полностью набран в окне ре-
дактирования можно запустить программу на выполнение.
Для запуска программы на выполнение из среды редактирова-
ния предназначена команда Run из одноименною меню
(рис. 2.30). Также можно воспользоваться сочетанием клавиш ак-
селераторов Ctrl+F9. закрепленных за командой Run.
Рис. 2.30. Меню и команда запуска программы на выполнение
Сам процесс запуска программы на выполнения из среды ре-
дактирования проходит в несколько этапов:
Этап I. Компилятором среды Borland Pascal производится ком-
пиляция исходного кода программы — перевод программных
команд на языке Pascal в объектные, а затем и в машинные коды;
осуществление связи головной программы (если это необходимо)
с библиотекой стандартных процедур и функций, а также с внеш-
ними программными модулями пользователя;
Этап 2. Если в прО1рамме компилятор не обнаружит синтакси-
ческих ошибок, то производится зшрузка откомпилированной
про>раммы в оперативную память и происходит передача ей
управления дтя выполнения.
Перед передачей управления загруженной программе среда ав-
томатически открывает окно Output, в котором отображают си все
запросы и сообщения, генерируемые программой, а после завер-
шения работы программы управление обратно передается среде
про|раммирования и на экране восстанавливается окно редакти-
рования с исходным тссгом пршраммы.
128
2.3. Основы практической работы в IDE BORLAND PASCAL
При переводе исходного программного кода в машинный про-
изводится и процесс проверки программы на наличие синтаксиче-
ских ошибок (более подробно об ошибках будет рассказано в сле-
дующем разделе). Если на этапе компиляции будет обнаружена
ошибка, то процесс запуска нро1раммы на выполнение прекраща-
ется. При этом восстанавливается окно редактирования, в верхней
части которого помешается диагностическое сообщение о причи-
не ошибки и курсор устанавливается на той строке программы,
при компиляции которой обнаружена ошибка. Это позволяет бы-
стро устранить в программе синтаксические ошибки и добиться
корректного запуска прО1раммы на выполнение.
При написании больших по размеру программ или программ
состоящих из нескольких программных модулей рекомендуется
проводить промежуточную компиляцию, как головной програм-
мы, так и отдельных программных модулей. Это позволит уже на
стадии разработки программного кода избежать многих ошибок
или вовремя исправить их.
Теперь рассмотрим случай (б)
Для выполнения компиляции программы без ее запуска на вы-
полнение предназначена команда Compile (Компиляция) из одно-
именного меню или сочетание клавиш AI1+E9. Эта команда ини-
циализирует компиляцию и всегда обрабатывает текущий файл,
находящийся в активном окне редактирования. При успешной
прохождении компиляции на экране появляется информационное
окно Compiling о результатах компиляции (рис. 2.31). В окне ото-
бражается информация о количестве обработанных строк, объеме
доступной оперативной памяти и т. д.
Main file: PRIMER_5.PAS
Done.
Target: Real Line number: 0
Free memory: 15236K Total lines: 2
e successful: Press any ke
Puc. 2.31. Информационное окно Compiling
129
Тема 2. Среда программирования Borland Pasca
В нижней строке этого окна выдастся сообщение о завершении
процесса: «Compile successful: Press any key», что означает — «Ком-
пиляция прошла успешно: Надпиле любую клавишу».
Если же была обнаружена ошибка, то Borland Pascal останавли-
вает процесс компиляции, активизирует редактор и его курсор
устанавливается в ту строку, в которой была допущена ошибка.
В том случае если программа состоит из нескольких взаимосвя-
занных программных модулей и исходные тексты модулей доступ-
ны системе (т. е. открыты в отдельных окнах редактирования), то
для совместной компиляции следует воспользоваться командой
Build из меню Compile. При использовании данной команды про-
изводится компиляция всех доступных системе текстов, составля-
ющих программу, независимо от того, были ли они изменены по-
сле предыдущей компиляции или нет. Однако в процессе работы
над программой, было бы естественным перекомпилировать толь-
ко те модули, в которые были внесены какие либо изменения, а
прочие подключать в уже откомпилированном виде. Именно та-
кой режим компиляции задает команда избирательной компиля-
ции Make (F9) из меню Compile При ее запуске система проверяет
все файлы модулей, составляющие программу, и если эти файлы
были изменены после последней компиляции, то они перекомпи-
лируются.
Следует заметить, что для групповой компиляции следует под-
вергать компиляции головную программу'. Для этого следует сде-
лать окно редактирования, в котором находится се текст, актив-
ным и только за тс st воспользоваться командами Build или Маке.
Если же начать совместную компиляцию с помощью данных
команд из окна, в котором находится текст программного модуля
подключаемого к головной программе, то будет проведена компи-
ляция только данного блока с подключаемыми к нему блоками
(при их наличии).
Для того, чтобы можно было проводить совместную компиля-
цию головной программы и всех, подключаемых к ней програм-
мных модулей из любого окна редактирования, следует воспользо-
ваться командой Primary file меню Compile дтя назначения голов-
ного файла компиляции. Используя ее, можно указывать системе
на главный файл в многофайловой программе. При этом любая
программа компиляции будет обрабатывать именно этот файл, а
не тот, что загружен в текущий момент в редактор.
130
2.3. Основы практической работы в IDE BORLAND PASCAL
При вызове команды Primary file открывается одноименное
диалоговое окно (рис. 2.32), в котором предлагается указать имя
головного файла компиляции.
C:\BP7\BIN\-.PAS
PROGRAM Directory Apr 1, 2008 12:40pm
Рис. 2.32. Диалоговое окно Primary file
Для задания имени головного файла компиляции необходимо
его имя указать в строке ввода Primary program file и нажать кнопку
ОК. Принципы работы с диалоговым окном Primary file аналогич-
ны принципам работы в диалоговом окне Open a file.
Прежде чем закончить работу с одним нро1раммным проектом
и приступать к другому, нужно удалить старое значение имени го-
ловного файла компиляции. Для этого следует воспользоваться
командой Clear Primary file из меню Compile.
Еще одно замечательное свойство компилятора Borland Pascal
заключается в том, что во время компиляции автоматически фор-
мируется командный код, который в зависимости от настроек, мо-
жет быть сохранен на жестком диске в виде исполняемого
ЕХЕ-файла. Следует заметить, что среда Borland Pascal, произво-
дит компиляцию про1раммы в ту же папку, где сохранен файл с
текстом программы, или в папку, где находится файл bp.exe, если
еще ни разу не проводилась операция сохранения. Однако может
оказаться гак, что папка, откуда запускается Borland Pascal, может
131
Тема 2. Среда программирования Borland Pasca
быть оказаться защищенной от записи. В этом случае, процесс
компиляции будет прерван и на экран будет выведено сообщение
о невозможности формирования исполняемого кода (рис. 2.33).
Error 146: File access denied
(PRTMFR5 FXF).
Puc. 2.33. Сообщение о невозможности скомпилировать EXE файл
Настроить режим промежуточного сохранения исполняемого
кода можно с помощью диалогового окна Linker (рис. 2.34), в ко-
тором для опции Link buffer следует выбрать один из вариантов его
хранения: Memory (в оперативной памяти) или Disk (на жестком
диске).
Map file
межм
( ) egnents
( ) ublic
( ) etailed
Cancel
Puc. 2.34. Диалоговое окно Linker
Для контроля выполнения команды необходимо еще раз зайти
в меню и убедиться, что справа от команды стоит значение Disk.
Для возврата к режиму компиляции в оперативную память необ-
ходимо повторно запустить команду Linker, при этом значение
Disk изменится на Memory.
Следует отмстить, что при работе с многофайловой программой
для компиляции отдельного модуля про|раммы расположенного в
активном окне рекомендуется пользоваться командой Compile.
При обработке взаимосвязи различных программных модулей
между собой рекомендуется использовать команды групповой
компиляции Build или Маке (см. рис. 2.34).
132
2.3. Основы практической работы в IDE BORLAND PASCAL
Выполнение программы в IDE Borland Pascal происходит в спе-
циальном окне называемом User Screen Доступ к этому окну осу-
ществляется клавишами AI1+F5 или через пункт меню Debug, ко-
торый находится в строке меню (рис. 2.35). После отладки про-
граммы ее можно запустить на выполнение Ctrl+F9.
Рис. 2.3&. Доступ к окну выполнения программы
В окне User Screen отображается вся выводимая на экран ин-
формация из программы, такая как — значение переменных, по-
яснения, графическая информация и г. д.
2.3.8 Поиск ошибок
Поиск ошибок выполняется через уже известную нам команду
Compile или путем нажатия клавиши F9 /15/. После этого на экра-
не появляется окно, содержащее информацию о ходе компиляции
(см. рис. 2.31).
Если в программе обнаружена ошибка, го процесс компиляции
приостанавливается, в верхней части рабочей области появляется
сообщение об ошибке (строка, выделенная красным цветом) со-
держащее полную информацию об ошибке, и курсор устанавлива-
ется в то место программы (курсор мигает под тем символом, пе-
ред которым содержится ошибка), в котором обнаружена ошибка
(рис. 2.36).
Все сообщения об ошибках содержат номер ошибки, который
указывается перед двоеточием и описание ошибки, расположен-
ное после двоеточия. Сообщение об ошибке выглядит следующим
образом: «№ ошибки: Описание». Информация обо всех возмож-
ных ошибках приведена в приложении Б.
133
Тема 2. Среда программирования Borland Pasca
Рис. 2.36. Сообщение об ошибке в процессе компиляции
Например, в программе, в процессе компиляции, обнаружена
синтаксическая ошибка (см. рис. 2.36). На экран выведено сооб-
щение «Error 85: «;» expected» и курсор указывает на ошибку в 6
строке программы (m : real;). Эго означает что отсутствует разде-
литель операторов «;» перед началом описания переменной ш. Не-
обходимо исправить эту ошибку и вновь попытаться откомпили-
ровать программу, нажав клавишу F9 или через команду Compile
(п. 2.2.5).
Появление ошибок это признак того, что начинается процесс
отладки профаммы. Болес подробно процесс отладки про!раммы
будет рассмотрен ниже.
2.3.9. Просмотр результатов выполнения программы
Выполнение программы в среде Borland Pascal происходит в
специальном окне называемом User Screen /15/. В окне User Scre-
en отображается вся выводимая на экран информация из програм-
мы, такая как — значение переменных, пояснения, графическая
информация и т. д.
Доступ к этому окну осуществляется клавишами AH+F5 или че-
рез пункт меню Debug, который находится в строке меню
(п. 2.2.6). На экране восстанавливается то изображение, которое
было на момент завершения выполнения пршраммы.
После просмотра результатов для возврата в среду программи-
рования необходимо нажат ь клавишу Enter. На рис. 2.37 прсдсгав-
134
2.4. Отладка программы
Рис. 2.37. Окно User Screen для просмотра результатов выполнения
программы
лен результат выполнения программы для определения площади и
объема тора.
2.4. Отладка программы
При написании данного раздела использованы работы /10, 15/.
2.4.1. Понятие об отладке программы
Отладка программы представляет собой очень важную часть
процесса разработки программ. Отладка заключается в устранении
ошибок про1раммирования, ошибок перевода алгоритма на язык
про1рам.мирования. За процессом отладки следует процесс вери-
фикации.
С технической точки зрения процесс отладки — эго методичное
и последовательное выявление и исправление ошибок, которые
могут появиться как в процессе компиляции, так и в процессе ра-
боты программы.
Отладка программы обычно состоит из последовательного вы-
полнения четырех этапов:
• выявления ошибки;
• определения места ошибки в тексте пршраммы (локализа-
ция ошибки);
• установления причины ошибки;
• исправления ошибки.
Процесс поиска ошибок в программе называется тестировани-
ем. Некоторые ошибки проявляются после первого же запуска
135
Тема 2. Среда программирования Borland Pasca
программы на выполнение, и для их обнаружения не надо прибе-
гать ни к каким специальным средствам. Некоторые ошибки про-
являются в случайные моменты работы программы. С такими
ошибками справиться труднее всего — здесь нужно зафиксировать
условия возникновения ошибки, понять причину ошибки и устра-
нить ее. С целью обнаружения подобных ошибок осуществляется
тестирование — выполнение программы для специально подо-
бранных представительных контрольных примеров — тестов.
Тест — это такой набор исходных данных, для которого вручную
или другим способом просчитаны промежуточные и конечные ре-
зультаты и который может быть использован для получения ин-
формации о надежности проверяемой программы
После того как ошибка обнаружена, необходимо найти в ис-
ходном тексте программы то место, в котором она возникала, —
локализировать ошибку. Можно использовать ряд раздичных мето-
дов отладки, позволяющих обнаружить расположение ошибки.
Выбор метода существенно зависит от особенностей ситуации. Бо-
льшинство программистов начинают с неформального метода, из-
вестного иод названием проверка за столом. Используя контроль-
ный пример, который привел к ошибке в программе, программист
аналитически трассирует листинг программы в надежде локализо-
вать ошибку. Проверка за столом — это хороший метод, посколь-
ку он заставляет программиста легально понять работу програм-
мы. Если применение метода проверки за столом оказалось бес-
плодным, нужно использовать специальные методы и способы
отладки, позволяющие наблюдать за передачей управления в про-
рамме и за изменением значений наиболее важных переменных.
Полученная отладочная информация позволи т локализовать подо-
зрительные ситуации, провести анализ и выявить причину ошиб-
ки, устранить ее, а затем продолжить поиск других ошибок.
Начинающему программисту следует помнить, что все ошибки
сразу нс выявляются, они выявляются постепенно одна за другой,
по мерс того как были выявлены и исправлены предыдущие
ошибки, поэтому' в процессе отладки программисту придется про-
явить терпение и упорство.
2.4.2 Рекомендации по предотвращению ошибок
Поиск ошибок является процедурой довольно трудоемкой. По-
этому желательно еще до начата программирования предпринять
некоторые меры для уменьшения количества возможных ошибок.
136
2.4. Отладка программы
К числу таких мер относится соблюдение нескольких несложных
общих рекомендаций:
1) Обращайте усиленное внимание на «простые» элементы про-
граммирования: форму записи, использование символов, описа-
ние типов.
2) Нс делайте сложных выражений. Лучше иметь большое чис-
ло простых операторов, размещаемых в отдельных строках. Это
уменьшает вероятность ошибки, а если она возникла, го наличие
отдельных операторов позволяет проще локализовать ошибку.
3) Не делайте больших блоков, 30—40 операторов в одном бло-
ке — вполне достаточно. Не только отладка, но и усовершенство-
вание программы облегчатся, если в ней небольшие блоки.
4) Многократное вложение условных операторов затрудняет
чтение программы и может стать причиной ошибок при написа-
нии программы. Поэтому выбирайте, когда возможно, варианты с
меньшей глубиной вложения, даже если эго увеличивает время ра-
боты программы.
5) Знайте меру. Безоглядная погоня за качеством программы
нередко оправдывает поговорку «Лучшее — враг хорошего». По-
мните. что наибольшая ценность — время человека, а нс время
машины.
6) Заранее готовьтесь к поиску неизбежных ошибок. Наиболее
трудными из них будут логические ошибки. Поэтому не надейтесь
на память, сохраняйте логику программы прямо в тексте, исполь-
зуя для этого многочисленные детальные и ясные комментарии.
2.4.3. Предварительные рекомендации по поиску
ошибок
Примите во внимание несколько общих предварительных реко-
мендаций по поиску' ошибок:
1) Используйте программные методы отладки. Нс переоцени-
вайте свои возможности в области памяти и логики. При поиске
ошибок ваши главные помощники — специальные программы
«Транслятор» и «Отладчик».
2) С другой стороны нс наделяйте в своем воображении высо-
ким интеллектом транслятор. Его сообщение воспринимайте,
прежде всего, как сигнал о неблагополучии. А дальше пользуйтесь
здравым смыслом, знанием синтаксиса и семантики (толкование)
языка.
137
Тема 2. Среда программирования Borland Pasca
3) Нужно учитывать, что сообщение об ошибках вырабатывает
транслятор с «нечеловеческой» логикой. Он скрупулезно фиксиру-
ет малейшее нарушение. Но при этом он действует «механиче-
ски», тогда как человек, распознающий ошибки, исходит из неко-
его принципа правдоподобия.
4) Ошибки могут быть выявлены как на этапе компиляции, гак
и на этапе выполнения. При выявлении ошибок на этапе компи-
ляции в основном проверяется правильность создания алгоритми-
ческих структур и правильность записи отдельных предложений.
В таких ошибках курсор, как правило, оказывается вблизи места
фиксируемой ошибки.
При выявлении ошибок на этапе выполнения в дело вмешива-
ются многочисленные причинно-следственные связи. Поэтому ча-
сто место зарождения ошибки и моего се проявления и фиксации
могут находиться далеко друг от друга.
5) Помните: «Человек предполагает, а Программа - располага-
ет». Если ваша «безупречная» программа работает неверно, зна-
чит, Вы нс видите каких-то обстоятельств. Надо их увидеть. Вклю-
чайте окно Watches и наблюдайте работу программы по шагам.
2.4.4. Причины и типы ошибок
В общем случае ошибки могут возникать на любом этапе разра-
ботки программы. Причина ошибок может быть связана с недопо-
ниманием сути задачи, недостатками проектирования алгоритма,
неправильным использованием языковых средств. При выполне-
нии программы ошибки разного типа проявляют себя рахтичным
образом, и их принято подразделять на следующие группы:
• синтаксические ошибки;
• семантические ошибки;
• логические ошибки.
Синтаксические ошибки — это ошибки, проявляющиеся на эта-
пе компиляции про|раммы и возникающие в связи с нарушением
синтаксических правил написания предложений используемого
языка программирования (к таким ошибкам относятся пропущен-
ные точки с запятой, ссылки на неописанные переменные, при-
сваивание переменной значений неверного типа и г. д.). Если
компилятор встречает в тексте программы оператор или описание,
которые он нс может интерпретировать, го он позиционирует кур-
138
2.4. Отладка программы
сор на место обнаруженной ошибки и в строку статуса выводит
сообщение, содержащее номер ошибки и ее краткое описание.
Семантические ошибки — это ошибки, проявляющиеся на этапе
выполнения программы при ее попытке вычислить недопустимые
значения параметров или выполнить недопустимые действия.
Причина возникновения ошибок данного типа связана с наруше-
нием семантических правил написания программ (примером яв-
ляется ситуация, когда программа пытается открыть несуществую-
щий файл для ввода или выполнить деление на нуль). Если про-
грамма обнаруживает ошибку такого типа, то она завершает свое
выполнение и выводит сообщение.
Логические (смысловые) ошибки — самые сложные и трудноуло-
вимые, связанные с неправильным применением тех или иных ал-
горитмических конструкций. Эти ошибки при выполнении про-
граммы могут проявиться явно (выдано сообщение об ошибке, нет
результата или выдан неверный результат, программа «зациклива-
ется»), но чаще они проявляют себя только при определенных со-
четаниях параметров или вообще нс вызывают нарушения работы
программы, которая в этом случае выдает правдоподобные, но не-
верные результаты.
Ошибки первого типа легко выявляются с помощью компиля-
тора. Обычно устранение синтаксических ошибок нс вызывает
особых трудностей. Более сложно выявить ошибки второго и осо-
бенно третьего типа. Для обнаружения и устранения ошибок вто-
рого и третьего типа обычно применяют специальные способы и
средства отладки программ.
2.4.5. Способы и средства отладки
Самым распространенным и полезным приемом отладки, явля-
ются отчеты о трассировке. Трассировка программы — это регист-
рация логического пути выполнения программы — последователь-
ности выполнения ее опсраторов/блоков с контрольной выдачей
информации о результатах каждою шага — обо всех изменениях
значений рабочих переменных и параметров связи. Сам принцип
трассировки — слишком общий. На практике реализуют трасси-
ровку программы в том или ином объеме, используя различные
способы и средства отладки.
Самый простой способ отладки — это расстановка в тексте
программы отладочных печатей, позволяющих проследить логиче-
ский и арифметический следы программы, г. е. каким образом она
139
Тема 2. Среда программирования Borland Pasca
выполнялась, и что она вычисляла. Отладочные печати ставятся в
узловых/ключевых точках программы, позволяющих контролиро-
вать ошибки ввода («эхопечать» введенных данных), результаты
вычислительных операций и логику работы программы или отде-
льных ее частей.
В этом случае отладочные операторы оформляются в отдельные
строки и выделяются особым образом (например, сдвигом влево
или вправо) и в зависимости от цели контроля могут содержать
вывод значений контролируемых переменных, проверку условий
или идентифицирующие сообщения (комментарий) о прохожде-
нии заданной точки про1раммы. о начале или завершении работы
определенного участка/блока.
Процесс отладки значительно обличается, если использовать
для этого системное средство отладки — специальные програм-
мы — «Отладчики», имеющиеся в программном обеспечении ЭВМ.
Такие системные средства отладки могут существовать в двух
видах: как отладчики, встроенные в интегрированную среду про-
граммирования, и как адгономные отладчики, имеющие собствен-
ную среду и собственный оконный интерфейс. Для начинающего
программиста правильнее и удобнее пользоваться встроенным от-
ладчиком. При этом на первых порах рекомендуется применять
пошаговую (построчную) отладку программы.
2.5. Рекомендации по составлению программ
на языке Pascal
Для начинающих программистов могут оказаться полезными
следующие рекомендации:
1. Соблюдайте общепринятый стиль составления программ, он
оптимален, г. к. проверен многолетней практикой.
2. Не пренебрегайте предварительным продумыванием структу-
ры и алгоритма программы. Эго убережет Вас от неприятных ту-
пиковых ситуаций.
3. Рисуйте блок-схемы программы — наглядность улучшает по-
нимание.
4. В словах применяйте различные возможности написания
букв с тем, чтобы приблизить текст программы к привычному
грамматическому языку. Однако следует помнить, что применение
только строчных (малых) букв упрощает процесс ввода текста про-
140
2.5. Рекомендации по составлению программ на языке Pascal
раммы с клавиатуры, т. к. нс нужно переключать регистры. При
этом помните, что транслятор воспринимает строчные и пропис-
ные буквы одинаково.
5. Внимательно и творчески относитесь к выбору идентифика-
торов (имен):
• идентификатор но возможности должен пояснять смысл вы-
полняемых операций;
• имя программы должно быть уникальным в составе блока, а
лучше, если и в составе всей программы;
• заранее продумывайте некоторую систему формулировки
имен в своей программе;
• нельзя использовать имена, совпадающие по написанию с
принятыми в языке Pascal •зарезервированными словами.
Ь. Пользуйтесь текстовыми комментариями, они сохраняю! не-
обходимые пояснения прямо в тексте программы. Эго будет очень
полезно для восстановления забытой логики программы при по-
иске ошибок и модернизации программы.
7. На начальном этапе программирования рекомендуется лю-
бую конструкцию типа Begin...End сопровождать поясняющими
текстовыми комментариями.
8. Пользуйтесь по возможности более простыми операторами.
Лучше написать несколько арок простых операторов, чем одну
строку со сложным оператором. Это будет полезно при поиске
ошибок в программе.
9. Текст программы следует структурировать:
• не писать операторы программы сплошным текстом;
• избегать слишком длинных строк;
• пользоваться приемом сдвижки оператора вправо от начала
строки;
• конструкции языка (описания, операторы, блоки) классифи-
цировать ио уровню вложенности;
• конструкции языка более глубокого уровня вложенности
сдвигать больше вправо от начала строки;
• конструкции одинаковых уровней вложенности располагать
с одинаковым отступом от начала строки (друг под другом).
10. Под вложенностью понимается расположение конструкций
внутри других. При этом рекомендуется следующая классифика-
ция уровней вложенности:
141
Тема 2. Среда программирования Borland Pasca
• уровень / — наименование программы Program, начальное
Begin и завершающее End с точкой:
• уровень 2 — конструкции описаний Label. Const, Type, Var и
операторные скобки Begin и End с точкой с запятой;
• уровень 3 — конструкции внутри составного оператора;
• уровень 4 — другие конструкции по усмотрению программи-
ста, например, запись комментариев.
II. При составлении списков следует придерживаться опреде-
ленных закономерное гей. Например, числа рекомендуется распо-
лагать в порядке росла их значений, а имена — по алфавиту.
12. Рекомендуется осуществлять контрольный вывод исходных
данных в начале программы сразу же после оператора ввода этих
данных.
13. При написании сложных программ используйте идею под-
программы. т. к. в случае локальной неудачи придется переписы-
вать только одну подпрограмму, а нс всю программу целиком.
14. Если возможно, то старайтесь в максимальной степени ис-
пользовать готовые и отлаженные программы, модули, функции и
процедуры. Для этого рекомендуется пользоваться стандартными
библиотеками и накапливать свои собственные библиотеки.
15. Pascal строго типизированный язык. Поэтому рекомендует-
ся корректно соблюдать требования и возможности, вытекающие
из такого важного понятия языка как типы данных.
16. При создании фрагментов программы типа цикла рекомен-
дустся избегат ь конструкций со степенью вложенност и более 2—3.
17. Рекомендуется внимательно и по возможности реже испо-
льзовать оператор перехода goto. т. к. он часто при некорректном
его использовании приводит к зацикливанию программы. И уж во
всяком случае, стараться нс разносить оператор goto и соответст-
вующую ему метку далеко друг от друга, чтобы не потерять конт-
роль над ними.
18. Рекомендуется с осторожностью относиться к такому спо-
собу организации вычислительного процесса как рекурсия. Рекур-
сивные механизмы являются более медленными и в них высока
вероятность ошибок зацикливания. Если в задаче существует нс
рекурсивное решение, то следует избрать именно его.
19. При использовании динамических переменных нс следует
забывать об их удалении из дальнейшего участия в программе по-
сле гою, как надобность в них отпала. В противном случае они
142
2.6. Практические задания по теме 2
будуг продолжать «съедать память», захватывая вес новые и новые
области памяти.
20. При разработке программы с большим количеством под-
программ рекомендуется всегда стремиться к сокращению до ми-
нимума числа глобальных переменных и давать им осмысленные
имена.
21. Тестируй те протрамму как можно чаще на всех шагах ее со-
здания и развития. Особенно важно это делать при подключении
новых отдельных блоков и подпрограмм.
22. Иногда Вам может показаться, что Ваш компьютер «сошел с
ума» и выполняет неправильные действия в вашей «правильной»
програмхге. Такая ситуация означает всего лишь то, что Вы пока
нс видите допущенную Вами ошибку в программе. Ошибка может
быть как самой простой (нет точки с запятой), так и самой неоче-
видной (выход индекса за ipannuy массива). Будьте терпеливы и
внимательны в поиске ошибок.
2.6. Практические задания по теме 2
В данном разделе сформулированы задания для студентов, по-
зволяющие закрепить на практике теоретический материал, изло-
женный в теме 2. Для самопроверки студенты могут познакомить-
ся в теме 10 с возможными вариантами ответов на предложенные
задания.
2.6.1. Практические задания
Задание 1. Осуществите запуск среды Borland Pascal.
Задание 2. Выполните перемещения по главному меню двумя
способами: при похгощи мыши; с помощью клавиш со стрелками
на клавиатуре.
Задание 3. Создайте новый файл и сохраните его с именем Za-
daniel pas, поместив его в каталог User на диск D.
Задание 4. Введите приведенный ниже текст программы в рабо-
чую область.
{Программа определения времени рейса судна)
Program ShipTimc;
Var
s, t, v : real;
Begin
wrilelnfllpoipaMMa определения времени рейса’);
143
Тема 2. Среда программирования Borland Pasca
шп1с('Протяжснностьтранспортной линии, мили s = ');
read(s);
write('Скорость судна, узд. v —
rcad(v);
writein;
writcln('HcxoBHbie данные: ');
wri(eln('s - ', s:5:2 , 'мили','v = ', v:5:2 , 'узл.');
I := s/(24*v);
writclnCPcjyjibTdrr расчета:');
writclnl'Время судна в пути t - ’, t:5:2 , ’сут.');
End.
Задание 5. Сохраните программу (изменения в файле) Zada-
nic 1 .pas.
Задание 6. Выполните компиляцию программы и запустите ее
на выполнение
Задание 7. Осуществите просмотр результатов выполнения про-
граммы двумя способами:
I) через окно просмотра текстовых результатов выполнения
программы;
2) через окно просмотра результатов (окно пользователя).
2.7. Контрольные вопросы по теме 2
В данном разделе сформулированы контрольные вопросы для
студентов, позволяющие закрепить знание теоретического матери-
ала, изложенного в теме 2. Для самопроверки студенты могут по-
знакомиться в теме 10 с возможными вариантами ответов на пред-
ложенные вопросы.
Вопрос 1. Из каких компонентов состоит среда программиро-
вания Borland Pascal?
Вопрос 2. Где расположены строка меню и строка состояния?
Вопрос 3. Какие действия необходимо выполнить, чтобы акти-
вировать главное меню?
Вопрос 4. Как производится запуск Borland Pascal?
Вопрос 5. Как запустить программу на выполнение?
Вопрос 6. Каким образом можно просмотреть результат выпол-
нения программы?
Вопрос 7. Каким образом осуществляется поиск ошибок в про-
грамме?
144
Тема 3. Основы языка Borland Pascal
Цели темы 3: Дать основы языка Borland Pascal. Пояснить алфа-
вит языка, общую структуру программы. раздел описании, иденти-
фикаторы, константы и выражения. Сформулировать теорему
структуры.
При написании данного раздела использованы работы /14, 22,
27, 44, 46, 47/.
3.1. Алфавит языка
Основу любого языка составляет алфавит, то есть конечный,
фиксированный набор символов, используемых для составления
текстов (программ) на данном языке /14/.
Алфавит языка Pascal составляют:
• Буквы латинского алфавита;
• Арабские цифры;
• Зарезервированные слова:
• Специальные символы;
• Шестнадцатеричные числа.
Бели программист придерживается стандартов, его программы
оказываются переносимыми, то есть могут выполняться на разных
компьютерах и в разных операционных системах. Это хорошее
свойство программ, и осознать это несложно. Представьте себе че-
ловека, нарушающего принятые в обществе законы поведения.
Такому человеку сложно будет ужиться с окружающими, жизнь
его будет трудной. С другой стороны, нередки случаи, когда при
разработке конкретных реализаций языка и систем программиро-
вания допускается нарушение стандартов, обычно за счет введе-
ния дополнительных возможностей, облегчающих жизнь програм-
миста. Примером такого расширения является система програм-
мирования Turbo Pascal фирмы Borland.
Современный язык Pascal, точнее его синтаксис, описывается в
специальных документах — международных стандартах 1SO/1EC
7185:1990(1) (Pascal) и ISO/ IEC 10206:1990(B) (Extended Pascal
или «расширенный Паскаль»).
145
Тема 3. Основы языка Borland Pascal
3.1.1. Буквы и цифры языка
В языке Pascal использую гея буквы латинского грамматическо-
го алфавита в двух вариантах: строчные и прописные буквы.
Всего используется 26 строчных букв А, В, С, ... Z и 26 пропис-
ных букв а, Ь, с, ... z.
Следует отмстить следующие тонкости написания букв-
I) Большинство существующих трансляторов нс различают
буквы разных регистров (строчные или прописные). Поэтому за-
писи типа «program», «PROGRAM», «Program», «pRoGrAm» явля-
ются идентичными.
2) Некоторые буквы латиницы и кириллицы совпадают по на-
чертанию. 11апримср, буквы «А». «К», «О». Однако нельзя считать
их идентичными. Связано это с тем, что компьютеры оперируют
вну|ри себя не начертанием букв, а цифровыми кодами. И эти
коды у букв латинского и русского |раммагических алфавитов раз-
ные.
3) Некоторые версии Паскаля допускают использование в про-
грамме русских букв, но стандарт языка этого не подразумевает.
Поэтому включать эти символы в программу можно только в ка-
честве строковых констант или внутри комментария, то есть гам,
где транслятор при компиляции их игнорирует. При использова-
нии этих знаков в качестве данных, они равноправны со всеми
символами, которые может хранить в памяти и обрабатывать
компьютер.
Цифры в языке Pascal используются арабские: О, I, 2, ... 9.
С помощью цифр записываются нс только числа. Цифры в каче-
стве обыкновенных символов могут использоваться в различных
других конструкциях языка. Арабские цифры и первые шесть букв
латинского грамматического алфавита позволяют образовать
шестнадцатиричные числа, которые имеют значение от 0 до I5.
Первые Ю значений обозначаются арабскими цифрами 0...9. оста-
льные шесть — латинскими буквами А, В. С, D, Е, F или a, b, с, d,
е, f.
3.1.2. Зарезервированные слова
Зарезервированные слова языка Pascal могут применяться толь-
ко по своему прямому назначению, то есть в качестве имен опера-
торов, названий операций и т. д. Назначение зарезервированных
слов обычно определяется спецификацией или стандартом языка.
146
3.1. Алфавит языка
Зарезервированные слова иногда сшс называют «служебными сло-
вами» их нельзя изменять: любая неточность в их написании явля-
ется серьезной ошибкой. Алфавитный перечень зарезервирован-
ных слов приведен в таблице 3.1 /14/. Здесь же приведен смысло-
вой перевод этих слов на русский язык в контексте языка Pascal
Таблица 3.1.
Перечень зарезервированных слов языка Pascal
Слово Смысловой перевод Слово Смысловой перевод
absolute абсолютный mod остаток от целочисленного деления
and логическое И near создать код ближней модели
array массив ni неопределенный
assembler применить встроенный ассемблер not логическое НЕ
begin начало object обьект
break прервать of из
case выбрать вариант or логическое ИЛИ
const постоянная packed упакованный
constructor создать обьект private поля обьекта скрыты
continue продолжить procedure процедура
destructor разрушить объект program программа
div деление целочиспедеое public поля объекта доступны
do выполнить вперед record запись
dowto выполнить назад repeat ПОВЮрИ’Ь
else иначе set множество
end окончание shl сдвиг влево
external внешняя подпрограмма shr сдвиг вправо
far создать кол дальней модели string строка
fie файл tiien тогда
for ДЛЯ to де
function функция type тип
goto перейти к... unit подпрограмма, модуль
if если until де тех пор, пока не будет выполнено условие
linptefIMJIlLLKXI начать исполняемую часть uses использовать
in принадлежи г множеству var переменная
147
Тема 3. Основы языка Borland Pascal
Слово Смысловой перевод Слово Смысловой перевод
inline примени ть встроенное машинные инструкции virtual виртуальный
interlace начать интерфейсную часть wtnle пока выполняется условие
interrupt обработка прерываний wrtti вмесге с...
label метка xor исключающее ИЛИ
В большинстве случаев овладение даже небольшой частью это-
го «словаря» достаточно для начала успешной работы по програм-
мированию на языке Pascal.
Кратко поясним смысл некоторых зарезервированных слов,
наиболее часто используемых в программах на языке Pascal:
• Заголовки, то есть первые операторы программ и библиотеч-
ных модулей, — это program и unit.
• Для описания переменных, констант и составных частей
программы — подпрограмм-процедур и подпрограмм-функ-
ций — используются зарезервированные слова: var, const,
procedure и function.
• Операторы описания типов переменных, задаваемых пользо-
вателем, — это type, array, string, record ... end. file of.
• Слова, используемые для программирования составных опе-
раторов, а также начинающие и оканчивающие последовате-
льность исполняемых операторов программы, — begin и end.
• Операторами, управляющими ходом выполнения программы
(они гак и называются — управляющие операторы), являют-
ся if...then...else, for...to...do, repeat...until. case...of..end,
for...downto...do. while...do.
• В библиотечных модулях используются зарезервированные
слова implementation, interface.
• Зарезервированные слова для обозначения арифметических
и логических операций — div, mod. shl. shr, and. or, not и не-
которые другие.
• В программах, написанных с использованием методов объ-
ектно-ориентированного про|раммирования, применяются
зарезервированные слова object, constructor, destructor, public
и virtual.
Применение зарезервированных слов не по назначению счита-
ется очень плохим стилем программирования. Его следует избегать.
148
3.1. Алфавит языка
3.1.3. Специальные символы
В программах на языке Pascal используются как отдельные спе-
циальные символы, так и пары символов, которые имеют специаль-
ное назначение. Перечень таких символов приведен в таблице 3.2.
Таблица 3.2
Перечень специальных символов языка Pascal
Символ Назначение
• Конец про'раммы ши модуля. Разделитель целой и дробной частей вещественного числа |дасятичная точка). Разделение полей в переменной типа Record.
* Разделитель элементов списков.
Указание диапазона, списка.
Используется в составе оператора присваивания. Разделитель в описатиях переменных. Разделитель в формате вывода в операторе Write.
» Отделяет один раздел программы от другого Разделитель операторов в программе. Конец ппдлрэграммы (процедуры или функции).
• Ограничители константы строкового типа.
< > Логическое неравенство (неравно).
< Отношение «меньше чем».
> Отношение «больше чем».
>= Отношение «больше или равно».
<= Отношение «меньше и®т равно*
ж Используется в составе оператора присваивания. Элемент описания констант и типов. Используется как знак отношения (равно).
+ Сложение Бинарные операции (арифметические знаки).
Вычитание. Бинарные операции (арифметические знаки).
» Умножение. Вигарные операции (арифметические знаки).
/ Деление. Бинарные операции (арифметические знаки).
( » Скобки для арифметических и логических выражении.
1 1 Скобки для ссылки ти элемент массива. Для указания диапазона значений индекса
149
Тема 3. Основы языка Borland Pascal
Символ Назначение
1 I Пары скобок для комментариев.
(••) Парная скобка.
(..) Парная скобка.
* Используется для именования динамических переменных.
Символ подчеркивания заменяет пробел.
« Обозначение символа по ei о коду.
$ Обозначение директивы компилятора. Обозначение шес1наддд1еричною мела.
Пробел.
© Получение адреса.
Дадим пояснение некоторым наиболее часто употребляемым
специальным символам языка Pascal:
1) Символ пробела выглядит в виде пустого места длиной в
одну позицию для буквы.
Пробел играет роль разделителя между конструкциями языка в
программе. Пробелы отделяют зарезервированные слова от имен.
Несколько последовательных пробелов воспринимаются компи-
лятором как один. Например, выражения, записанные ниже, с
точки зрения компилятора являются идентичными: а = b + с и
а — b + с.
2) Символ подчеркивания выглядит в виде короткой черты в ниж-
ней части строки (как бы подчеркивает отсугствующую букву) «_».
Именно из букв, цифр и символа подчеркивания конструиру-
ются идентификаторы — имена типов, переменных, констант,
процедур, функций, модулей, а также меток переходов.
Символ подчеркивания часто используют при формулировании
имени. Поясним это. В языке Pascal имя может состоять из любо-
го числа принятых букв, цифр и символов. Имя не должно содер-
жать символа пробела (не должно иметь разрыва). Но иногда для
удобства восприятия имя нужно записать состоящим как бы из
двух (или более) слов. В этом случае условный разрыв слов в име-
ни имитируется символом подчеркивания. Например: lvan_lvanov.
3) Некоторые специальные символы имеют понятный обще-
принятый грамматический и математический смысл:..<, >,
=. +. *, /,(),{ },| 1
4) Ряд специальных символов носят характер общепринятых
договоренностей с некоторым условным смыслом:А. #, $,
150
3.2. Общая структура программы
5) Часть специальных символов записывается как составные
символы и воспринимаются как единый символ: О, >=. <=,
:=, (* *), (• .)•
6) Служебные символы с кодами ASCII от 0 до 31 (управляю-
щие коды).
Они могут участвовать в написании значений символьных и
строковых констант. Некоторые из них (коды 7, 10, 13, 8, 26) име-
ют специальный смысл при проведении ряда операций с ними.
Символы, замыкающие строку (коды 13 и 10) и символ табуляции
(код 9) идентичны символу пробела и поэтому также могут быть
разделителями. Тогда, например, запись
a:=b+c.
эквивалентна записи
a:— b
+
с;
7) Также Borland Pascal допускает использовать при написании
upoipaMM символы из расширенного кода ASCII с номерами от
128 до 255 (в этот набор символов входит кириллица), а также не-
которые другие символы из основного набора кода ASCII (!, %, и
др.), нс входящие в алфавит языка. Однако, эти символы могут
быть использованы в тексте программы только в виде значений
символьных и строковых переменных, а также в тексте коммента-
рия. В имена (идентификаторы) эти символы входить нс могут.
3.2. Общая структура программы
3.2.1 Понятие о компьютерной программе
Pascal — это язык, на котором пишутся программы для компь-
ютера. Изучение языка программирования представляет собой
знакомство с формальными правилами записи алгоритмов для их
последующего выполнения компьютером. Язык программирова-
ния используется для записи алгоритма и последующего перевода
этой записи на язык машинных команд.
Программа (исходный текст программы) — это обычно тексто-
вый файл, содержащий запись операторов программы на языке
программирования. Такая запись понятна человеку, но непонятна
компьютеру.
151
Тема 3. Основы языка Borland Pascal
Исходный текст программы компилируется (транслируется), то
есть переводится на язык машинных команд, понятный компью-
теру. В этом случае создается исполняемый файл (его отличитель-
ная черта — имя, оканчивающееся на .ехе). Именно исполняемый
файл иногда называют программой.
М ы будем считать, что программа представляет собой последо-
вательность операторов и других элементов языка, Эта последова-
тельность построена в соответствии с определенными правилами
и предназначена для решения определенной задачи.
Правила написания программы, то есть правила, определяю-
щие, какие последовательности символов можно использовать в
программе, называются синтаксисом языка программирования.
Нарушение этих правил приводит к синтаксическим ошибкам.
Эти ошибки выявляются на этапе трансляции программы.
Pascal состоит из команд (операторов), записанных в опреде-
ленном порядке и формате. Команды позволяют получать, сохра-
нять и обрабатывать данные различных типов (например, целые
числа, символы, строки символов, т. д.).
Однако кроме команд в записи программы участвуют еще так
называемые зарезервированные слова (см. таблицу 3.1). Их не так
много, но их значение трудно переоценить. Служебные слова
можно использовать только по своему прямому назначению. Пе-
реопределять их нс разрешается.
3.2.2. Структура программы
Самая простая и короткая программа на языке Pascal выглядит
следующим образом:
Begin
End
У этой программы есть недостаток — она нс производит ника-
ких обрабатывающих действий и вычислений, но главное ее до-
стоинство — она правильно и без ошибок выполняется.
Конечно, на самом деле программы имеют более сложную
структуру. Более длинные программы содержат различные смыс-
ловые блоки: описание меток и констант, объявление типов и пе-
ременных и т. и.
В своем полном варианте принципиальная структура програм-
мы на ВР показана на рис. 3.1.
152
3.2. Общая структура программы
PROGRAM Имя_программы;
USES
Список используемых библиотек (модулей);
LABEL
Список меток з основном блоке прогзаммы;
CONST
Определение констант программы;
TYPE
Описание типов;
VAR
Определение глобальных переменных программы;
ОПРЕДЕЛЕНИЕ ПРОЦЕДУР (заголовки и, возможно, тела
процедур);
ОПРЕДЕЛЕНИЕ ФУНКЦИЙ (заголовки и, возможно, тела
функций):
BEGIN
... Основной блок программы (тело программы)
END.
Рис. 3.1. Принципиальная структура программы /22/
Ниже дано общее описание структурных программных блоков.
Болес подробное их использование будет рассмотрено в соответст-
вующих разделах.
3.2.3. Имя программы
Имя программы в Borland Pascal носит чисто декоративное зна-
чение, как комментарии. Но все равно, рекомендуется строку Pro-
gram включать в текст программы. Это позволит более легко нахо-
дить основной программный блок при использовании модульного
принципа построения программ.
Первым в программе идет зарезервированное слово Program,
символизирующее обращение к программе (или вызов програм-
мы). За ним после одного пробела или нескольких следует иден-
тификатор — имя про1ра.ммы.
Имя (идентификатор) может содержать любое количество сим-
волов, но Borland Pascal распознает только первые 63 из них. Имя
должно начинаться с буквы латинского алфавита, затем могут идти
символы или цифры через символ подчеркивания. Имя программы
(идентификатор) выбирается программистом самостоятельно.
153
Тема 3. Основы языка Borland Pascal
Существуют правила, которым должны отвечать все идентифи-
каторы:
• идентификатор должен быть уникальным, т. е. одним и тем
же именем разные объекты нс могут быть названы;
• идентификаторы имеют ограничения по длине (зависит от
конкретной реализации языка на компьютере);
• идентификатор может состоять только из символов латин-
ского алфавита, цифр и знака подчеркивания («_»):
• идентификатор нс может начинаться с цифр.
Примеры:
Program My_first_prog;
Program lvanov_Sergey;
Program Natasha_l;
Program primer_7a;
Program Korablestroenic;
Каждое описание должно завершаться точкой с запятой « ; ».
Имя программы совершенно не связано с именем внешнего файла
содержащего текст программы. Тем нс менее, имя программы нс
должно совпадать с именами переменных или других объектов
программы.
3.2.4. Содержание раздела описаний
В соответствии с рис. 3.1 раздел описаний состоит из следую-
щих блоков:
I. Описание используемых библиотек или модулей (Uses).
2. Описание меток (Label).
3. Описание констант (Const).
4. Описание типов (Туре).
5. Описание переменных (Var).
6. Описание процедур (Procedure).
7. Описание функций (Function).
При отсутствии необходимости в каком-либо виде объектов,
соответствующий блок может быть опущен.
Директива подключения модулей
Директива USES — первый в программе действительно работа-
ющий оператор /22/. С се помощью к программе подключаются
154
3.2. Общая структура программы
библиотечные модули, из стандартного набора Borland Pascal и на-
писанные пользователем программные модули.
Описание меток
Блок описания LABEL предназначен для описания используе-
мых в программе меток переходов.
Описание констант
Если в программе используются константы, то в разделе описа-
ния обязательно должен присутствовать блок описания констант
CONST, в котором размешаются определения констант рахтичных
видов.
Описание типов
Хотя в языке Pascal содержится большое количество стандарт-
ных типов переменных, нередко программисту приходится созда-
вать свои собственные типы или конструировать сложные типы на
основе простых. Все создаваемые новые типы переменных, преж-
де чем их использовать в программе, обязательно должны быть
описаны в блоке описания типов TYPE.
Описание глобальных переменных
При написании программ подразумевается, что они будут обра-
батывать какие либо данные. Единственный способ обработки,
модификации и передачи данных — это использование перемен-
ных внутри программы. По правилам языка Pascal все используе-
мые переменные должны быть описаны в блоке описания пере-
менных VAR. Данный блок содержит список всех глобальных пе-
ременных программы и их типы.
Описание процедур и функций
Если в программе предусмотрено повторение каких-либо вы-
числений, то было бы логично выделить данную часть программы
в отдельный программный блок — подпрограмму. В стандарте
языка Pascal предусмотрено использование двух видов подпрог-
рамм: процедуры и функции. Если в программе предусмотрено
использование процедур и (или) функции, то их оггрсдслснис
(описание) должно предшествовать основному блоку программы.
3.2.5. Основной блок программы
Основной блок — это собственно программа, использующая
все, что было описано и объявлено. Он обязательно начинается
155
Тема 3. Основы языка Borland Pascal
словом BEGIN и заканчивается END с точкой. После основного
блока, вернее после завершающей его точки, любой текст игнори-
руется. Поэтому основной блок всегда замыкает программу.
Главное правило размещения программных блоков заключается
в следующем: все, что вводится в программу должно быть объяв-
лено, до того как будет использовано.
Компилятор Borland Pascal накладывает некоторые ограниче-
ния на текст программ. Гак, длина строки не может превысить 126
символов, а объем файла профаммы (текста) — 64 Килобайт (мак-
симально).
Операторы в программе могут размещаться как на отдельных
строках так и по несколько в строке (Пример А, В). Операторы
разделяются точкой с запятой.
Пример А:
Program АВ;
Begin
оператор!; онсратор2; ... onepaiopN;
End.
Пример В:
program CD;
Begin
begin
оператор!;
опсратор2;
onepaiopN;
end;
End
В первом из выше приведенных примеров между каждыми дву-
мя последовательными разделителями находится пустой оператор.
Обратите внимание на то, что допускаются дополнительные пары
begin ... end как в примере В и дополнительные точки с запятой.
Ниже приведен пример составления программы в соответствии
с принципиальной структурой профаммы. рекомендованной на
рис. 3.1.
Напишем программу для следующей простой задачи. Требуется
определить количество построенных в течение одного года кораб-
лей суммарно на трех заводах «Л», «В» и «С». Известно, что на
заводе «А» построено три корабля, на заводе «В» построено кораб-
лей в два раза больше, чем на заводе «А», а на заводе «С* построе-
но столько кораблей, сколько их построено на заводах «А» и «В»
вместе.
156
3.3. Раздел описаний
Листинг 3.1:
Program Korablestroenie;
Var
B,C,Q: integer;
Const
A=3; {количество судов построенных на первом заводе}
Begin
В:=2*А; {количество судов построенных на втором заводе}
С:=А+В; {количество судов построенных на третьем заводе}
Q:-A+ В+С; {суммарное количество судов построенных
на заводах за гой}
WritcInCCyMMapHoe количество супов построенных за год Q - ' ,Q);
End.
3.3. Раздел описаний
Раздел описаний — это вся информация находящаяся между
словом program и словом begin. Раздел описаний можно назвать
содержанием или презентацией исходных параметров программы.
В главе 3.2.4 была дана краткая характеристика по назначению
блоков раздела описания, далее более подробнее рассмотрим каж-
дый из этих блоков.
3.3.1. Описание модулей (Uses)
Описание подключаемых модулей начинается со служебного
слова Uses
Синтаксис блока Uses:
Uses
CRT, GRAPH, MYUNITI, MYUNIT2, ...;
где CRT — стандартный модуль поставляемый вместе с програм-
мой, предназначенный для работы с экраном.
GRAPH — стандартный модуль поставляемый вместе с про-
граммой. предназначенный для вывода графической информации
на экран.
MYUNITI, MYUNITI, — подключаемые модули написанные
программистом (возможно вами).
У директивы USES есть свое четкое место. Если она присутст-
вует, то должна стоять перед прочими дирекчинами и разделами.
157
Тема 3. Основы языка Borland Pascal
Кроме того, слово USES может появиться в программе только
один раз. Список подключаемых к нро1рамме библиотек и про-
граммных модулей дастся через запятую и заканчивается симво-
лом («;»).
Библиотечный модуль содержит описания и подпрограммы,
которые могут использоваться в различных программах. Подпрог-
рамму можно включить в состав модуля в том случае, когда она
реализует дейст вие, которое приходится выполнят ь достаточно ча-
сто. Такую подпро|ра.мму можно написать и отладить один раз, а
использовать многократно. Это позволяет ускорить процесс разра-
ботки программного обеспечения. Файл, содержащий модуль,
обязан иметь имя. совпадающее с именем модуля.
Пример:
Необходимо к про1рам.ме с именем My_Tnsi_prog подключить
два модуля; стандартный модуль CRT и разработанный вами мо-
дуль my mod. В тексте программы это будет выглядеть следующим
образом:
Program My first prog;
Uses
CRT, mymod;
Begin
End.
Если дополнительные библиотеки подпрограмм не подключа-
ются к основной программе, то директива USES не используются.
3.3.2. Описание меток (Label)
Каждый дом на улице имеет свой номер, все люди имеют соб-
ственные имена, даже ячейки памяти компьютера имеют каждая
свой адрес. Все это принято для того, чтобы иметь возможность
однозначно указать на определяемый объект. Точно гак же, для
указания на операторы в программах применяются метки.
Метка в языке Pascal представляет собой целое, неотрицатель-
ное число или символьную конструкцию. Одной меткой можно
пометить только один оператор. Метка от помеченного оператора
отделяется двоеточием.
Блок 1дЬс1 — содержит перечисленные через запятую метки пе-
реходов установленные в основном блоке программы. Таких опе-
158
3.3. Раздел описаний
риторов может быть сколько угодно (главное чтобы метки нс по-
вторялись) и стоять они могут перед началом основною блока.
Метки могут обозначаться целым числом в диапазоне от 0 до 9999
или символами длиной не более 63 букв и знаков. Описание меток
начинается со служебного слова Label.
Синтаксис блока Label:
Isabel
1, 2. *, Ml, mcikal;
Метки предназначены для обозначения места перехода (откуда
и куда) в нрофамме во время выполнения основной программы.
Если метки переходов в нрофамме не используются, то блоки LA-
BEL в разделе описания отсутствуют.
Пример:
Необходимо в программе с именем My_first_prog описать мет-
ку, обозначенную цифрой I и указать где и как эта метка будет ис-
пользоваться в программе. В тексте программы это будет выгля-
деть следующим образом:
Program My_first_prog;
Label
I;
Begin
goto 1;
I: оператор;
End
3.3.3. Описание констант (Const)
Константы вводятся исключительно для удобства программи-
рования. Значения констант в процессе выполнения программы
нс изменяются. Они могут участвовать в выражениях, вызовах
функций, в операторах цикла, главное — не изменять их значения.
Для констант тип их значения не указывается. Он определяется
автоматически при анализе значения константы.
Вообще говоря, в Pascal константами являются любые явно за-
данные в программе данные. В качестве констант могут выступать
целые числа (например, 17 или 2006), вещественные (десятичные)
числа (например. 3.14, где в качестве разделительного знака вместо
15»
Тема 3. Основы языка Borland Pascal
привычной запятой ставится точка), числа в экспоненциальной
форме (например, 2.I2E-06), символы (например, '*' или и стро-
ковые величины (например, апрель' или 'корабль'). Заметим, что
константы символьные или строковые заключаются в апострофы.
Если одна и та же величина используется в программе несколь-
ко раз, то удобнее было бы обозначить ее каким-нибудь именем и
использовать это имя везде, где требуется записать соответствую-
щую константу. Кроме сокращения размера исходною текста про-
раммы, это позволит избежать случайных ошибок, а также упрос-
тит отладку программы. Описание именованных констант начина-
ется служебным словом Const.
Синтаксис блока Const:
Const
имя константы! = значение!;
имя_константы2 - значение!;
При необходимости можно определять константы как выраже-
ния из чисел, некоторых функций языка и определенных ранее
прост ых констант.
Пример:
Const
с-2.717; {константе с именем е присваиваегся вещественное
значение равное 2.717}
Namel=’Aiipc.ib'; {константе с именем Namel присваивается
строковое значение Апрель}
R21=6.33187E+O3; {константе с именем R21 присваивается
вещественное значение}
S-О; {константе с именем S присваивается целочисленное
значение равное 0}
Str= нажмите клавишу ЕТ {константе с именем Str
присваиваегся строковое значение равное
«нажмите клавишу F1»}
Ок-true {константе с именем Ок присваивается логическое
значение "истинно"}
Блок объявления констант CONS ! так же. как блок LABEL мо-
жет располагаться в любом месте программы. Таких блоков может
быть несколько или может не быть вообще.
160
3.3. Раздел описаний
3.3.4. Описание типов переменных (Туре)
Прежде чем приступить к описанию переменных величин, раз-
беремся с важным предварительным вопросом — с описанием ти-
пов переменных.
В связи с тем, что разные виды данных (переменных) имеют
разную форму записи и требуют различного объема памяти для
хранения, в языке Pascal введено понятие «Тип» (Туре)
Тип переменной указывает на то, какие данные могут быть со-
хранены в этом участке памяти, и в каких действиях эта перемен-
ная может участвовать. Существуют простые и сложные типы в
языке Pascal. Простые типы иногда еще называют базовыми.
Вазовые тины:
Integer — тип целых чисел;
Longint — тип «длинных* целых чисел;
Real — тип действительных (вещественных) чисел
(то сеть — с дробной частью);
Byte — тип неотрицательных целых чисел (короткое целое);
Word — тип неотрицательных целых чисел;
Char — символьный тип;
String — строковый тип;
Boolean — логический тип.
Физически типы данных отличаются друг от друга количеством
ячеек памяти (байтов), отводимых для хранения соответствующей
переменной. Логическое же отличие проявляется в интерпретации
хранящейся информации. Например, переменные типа Byte и
типа Char занимают в памяти по одному байту. Однако в первом
случае содержимое ячейки памяти интерпретируется как целое
беззнаковое чисто, а во втором — как код (ASCII) символа.
Рассмотрим особенности применения переменных простого и
сложного типа.
Простые типы переменных
Byte — короткое целое без знака. Принимает целочисленные
значения в интервале от 0 до 255.
Shorllnt — короткое целое со знаком. Принимает значения в
интервале от —128 до + 127.
Word — длинное целое без знака. Принимает значения в интер-
вале от 0 до 65535.
Integer — целое со знаком. Принимает значения в интервале от
-32768 до + 32767.
161
Тема 3. Основы языка Borland Pascal
Real — вещественный тин. Принимает вещественное значение,
с количеством значащих знаков 11 — 12. во всем диапазоне вещест-
венных чисел.
Boolean — логический тип. Состоит из 2-х значений False (лож-
но) и True (истина). С этим типом связан ряд операций языка реа-
лизующий Булеву алгебру.
Char — символьный тип. Тип данных состоящих из одного
символа (знака, буквы, кода). Запись символьного значения — это
символ, заключенный в одиночные кавычки: 'Д', , 'w'.
String — строковый тип. Этот тип служит для обозначения мас-
сива символов ограниченного максимальной длиной нс более 255
символов (включая пробелы).
Сложные типы переменных
Под сложными типами в языке Pascal подразумеваются — Мас-
сивы. Файлы. Записи.
Массив — упорядоченная структура однотипных данных храня-
щая их последовательно.
Файлы — предназначен для организации операций ввода выво-
да данных во внешний файл.
Запись — структура данных аналогичная таблице, предназначе-
на для организации и хранения больших упорядоченных массивов
разнотипной информации.
В языке Pascal реализованы возможности создавать свои собст-
венные. определяемые программистом типы переменных или кон-
струировать сложные типы на основе базовых. Описание новых
типов или конструкции сложных реализуются в блоке описания
типов ТУРЕ.
Синтаксис блока Туре:
Гуре
имя_нового_типа! = баэовый_тип;
имя_нового_типа2 = конструкция_сложного_типа;
имя нового TimaN = имя базового типа или конструкция
типаМ;
При определении типов слева должны стоять имена (иденти-
фикаторы) новых типов, а справа - образующие тип служебные
слова и имена образующих типов. Определение каждого нового
типа обязательно завершается символом « ; ». Концом блока опи-
сания типов считается начало любого другого блока описания.
162
3.3. Раздел описаний
В блоке TYPE MOiyr быть использованы константы из блока
CONST. Если это гак. то блок TYPE может быть расположен где
угодно, но нс выше соответствующего блока CONST. Если же
описания типов ни с чем нс связаны, то они могут быть помеще-
ны в любом месте между другими блоками, но выше того места,
где будут использованы.
Пример:
Const
п = 10;
m = 20;
Туре
Razmcr = Real; (Новый тип Razmer на основе базового тина
Real)
Stroka = Srting|20|; {Тип Stroka представляет собой строковый
тип состоящий из 20 элементов)
Masi - array )О..1О] of integer; {Тип Masi сеть тип массив.
состоящий из 11 целочисленных элементов)
Mas2 = array |l..n,l..m| of real; {При конструировании типа
Mas2 были использованы константы
из расположенного выше блока Const)
Блок описания TYPE является необязательным, и если в про-
грамме используются переменные только базовых типов, то блок
TYPE в разделе описания отсутствует.
3.3.5. Описание переменных (Var)
Данные, как вы знаете, хранятся в памяти компьютера, но для
указания на конкретную информацию очень неудобно все время
записывать физические адреса ячеек. Эта проблема в языках про-
граммирования высокого уровня, в частности в языке Pascal, ре-
шена введением понятия переменной.
Переменная в языке Pascal — именованный участок памяти для
хранения данных определенного типа. Значение переменной (ин-
формация в соответствующих ячейках памяти) в ходе выполнения
программы может быть изменено. Константами же, как вы уже
знаете, называются величины, значение которых в ходе выполне-
ния программы изменено быть не может. Конкретные перемен-
ные и константы представляют собой объекты уникальные и отли-
чаются друг от друга именем.
163
Тема 3. Основы языка Borland Pascal
В качестве данных в программах на языке Pascal могут высту-
пать числа, символы, целые строки символов. Заметьте, что с эти-
ми рапичными видами информации выполняются совершенно
разные действия. Например, с числовыми величинами произво-
дятся арифметические операции, чего невозможно сделать с сим-
вольными.
Все переменные, используемые в программе, должны быть пе-
речислены в блоке описания переменных. Этот блок состоит из пред-
ложений описания переменных. Таких предложений может быть не-
сколько, размешаются они между заголовком про|раммы, под-
программы или модуля и зарезервированным словом begin,
открывающим раздел операторов программы, подпрограммы или
модуля. Предложения описания переменных могут располагаться
вместе (и это одна из составных частей хорошего стиля програм-
мирования), но могут и чередоваться с описаниями других объек-
тов: констант, процедур, функций и г. д.
В предложениях описания могут использоваться объекты, опи-
сания которых содержатся в других предложениях описания.
Переменные вводятся в программу для хранения и передачи
данных внутри нес. Любая переменная имеет имя. Имя перемен-
ной должно начинаться с буквы и может содержать как буквы (то-
лько латинские) гак и цифры. Длина имени не должна превышать
126 символов, но различаются имена для программы но первым 63
символам, далее она их нс различает, они для нее одинаковы.
Описание объявляемых в программе переменных начинается со
служебного слова Var. Каждая переменная в блоке Var, должна
быть определенного типа. Имя и тип различаются двоеточием
« : ». Однотипные переменные могут перечисляться через запятую
перед объявлением их типа.
Все переменные встречающиеся в программе подразделяются
на глобальные и локальные.
Глобальные переменные — это переменные, которые объявлены
в разделе Var вне процедур и функций. Эти переменные определя-
ются для всей программы.
Локальные переменные — переменные, которые объяатены
внутри процедур и функций. Эго местные переменные внутри ча-
сти программы.
В данном разделе рассматриваются глобальные переменные.
Синтаксис блока Var:
164
3.3. Раздел описаний
Var
ИмяПеременной! : имятипа!;
Имя11еременной2 : имя_типа2;
ИмяПеременнойЗ, ИмяПсрсмснной4, ИмяПеременнойЗ :
имятипаЗ;
Вес используемые в программе переменные должны быть опи-
саны в соответствующем разделе описания.
Список может состоять из нескольких имен (при этом они раз-
деляются запятыми), а также и из одного имени. Тип, указывае-
мый посте двоеточия, определяет, какие данные теперь могут хра-
ниться в описанных таким образом переменных.
Блоков VAR может быть несколько, но переменные в них нс
должны повторяться.
Пример:
Var
X : word; {объявляется переменная X целого типа}
Z : integer; {объявляется переменная Z целого типа со знаком)
Radius : real; (объявляется переменная Radius вещественного
типа)
U.K : integer, {объявляются три переменных I,J,K целого типа
со знаком)
В : string|20|; {объявляется переменная В строкового типа,
длиной 20 символов)
3.3.6. Замечание об описании процедур и функций
Процедуры и функции являются достаточно сложными разде-
лами программирования и поэтому подробно будут рассмотрены
ниже в специальной главе. Там же в соответствующем контексте
будет дано и упомянутое на рис. 3.1 описание (определение) про-
цедур и функций.
Исходная же идея описания процедур и функций в языке Pascal
выглядит достаточно просто и связана с использованием специа-
льных зарезервированных (служебных) слов Procedure и Function.
Пример:
Необходимо к программе с именем Program Му first_prog под-
ключить две подпрограммы, одна из которых предназначена для вы-
полнения процедуры Optim, другая для вычисления функции Trend.
В тексте программы эго будет выглядеть следующим образом:
165
Тема 3. Основы языка Borland Pascal
Program My_first_prog;
Procedure Optim (Var a,b: integer);
Function Trend (a,b: real);
Begin
End
Здесь после имен процедуры и функции и скобках дано описа-
ние переменных связанных с выполнением процедуры Optim и
функции Trend.
3.4. Идентификаторы, константы и выражения
Рассмотрим правила написания и применения грех указанных
в заголовке элементов программирования на языке Pascal.
3.4.1. Идентификаторы
Идентификаторы в языке Pascal — это имена констант, пере-
менных, меток, типов, объектов, процедур, функций, модулей,
программ и полей в записях. Идентификаторы могут иметь произ-
вольную длину, но значащими (уникальными в области определе-
ния ) являются только первые 63 символа.
Идентификатор всегда начинается буквой, за которой могут сле-
довать буквы и цифры. Напомним, что буквой считается также сим-
вол подчеркивания, поэтому идентификатор может начинаться этим
символом и даже состоять только из одного или нескольких симво-
лов подчеркивания. Пробелы и специальные символы алфавита нс
могуг входить в идентификатор. Примеры правильного и неправи-
льного оформления идентификаторов приведены в таблице 3.3.
Существуют правила, которым должны отвечать все идентифи-
каторы:
• идентификатор должен быть уникальным, то есть одним и
тем же именем разные объекты нс могут быть названы;
• идентификатор имеет ограничение по длине (зависит от кон-
кретной реализации языка на компьютере);
166
3.4. Идентификаторы, константы и выражения
• идентификатор может состоять только из символов латин-
ского алфавита, цифр и знака подчеркивания «_»;
• идентификатор нс может начинаться с цифры.
Таблица 3.3.
Примеры записи идентификаторов
Примеры правильных идентификаторов Примеры неправильных идентификаторов
Program 1 Block_ 1 My_Prog mode date_27_sepl_2006 1 Program {начинается цифрой) block#! {содержит специальный символ) Му Prog (содержит пробел) mod {зарезервированное слово) dale: 27 sept 2006 {содержи! специальный символ и пробелы)
3.4.2. Константы
В качестве констант в Pascal могут использоваться целые, ве-
щественные и шестнадцатеричные числа, логические константы,
символы, строки символов, конструкторы множеств и признак не-
определенного указателя NIL.
Целые числа записываются со знаком или без него по обычным
правилам и могут иметь значение от —2147483648 до +2147483647.
Следует учесть, что, если целочисленная константа выходит за
указанные границы, компилятор дает сообщение об ошибке. Та-
кие константы должны записываться с десятичной точкой, т. е.
определяться как вещественные числа.
Вещественные числа записыванием со знаком или без него с
использованием десятичной точки и/или экспоненциальной час-
ти. Экспоненциальная часть начинается символом е или Е, за ко-
торым могут следовать знаки «+» или «—» и десятичный порядок.
Символ с или Е означает десятичный порядок и имеет смысл «ум-
ножить на 10 в указанной степени».
Например:
• запись 3.I4E5 означает, что нужно число 3.14 умножить на
10 в степени 5;
• запись — 17е—2 означает, что нужно число минус 17 умно-
жить на 10 в степени минус 2.
167
Тема 3. Основы языка Borland Pascal
Если и записи вещественного числа присутствует десятичная
точка, перед точкой и за ней должно бы ть хотя бы по одной циф-
ре. Если используется символ экспоненциальной части с или Е, за
ним должна следовать хотя бы одна цифра десятичного порядка.
Шестнадцатеричное число состоит из шестнадцатеричных
цифр, которым предшествует знак доллара $ (код 36 в ASCII).
Диапазон шестнадцатеричных чисел — от $00000000 до
$f I FFFFFF.
Логическая константа — это либо слово FALSE (ложь), либо
слово TRUE (истина).
Символьная константа — эго любой символ, заключенный в
апострофы:
z' — символ z;
Ф’ — символ Ф.
Если необходимо записать собственно символ апострофа, он
удваивается:
'' ’ — символ ' (аттостроф).
Допускается использование записи символа путем указания его
внутреннею кола, которому предшествует символ # (код 35), на-
пример:
# 97 — символ а;
# 90 — символ Z;
# 39 — символ
# 13 — символ CR.
Строковая константа — любая последовательность символов
(кроме символа CR —возврат каретки), заключенная в апострофы.
Если в строке нужно указать сам символ апострофа, он удваивает-
ся. Например, в обычной грамматической записи английскою
слова That's имеется апостроф Тогда в программной записи это
слово будет выглядеть так: That' 's'.
Строка символов может быть пустой, т. е. не иметь никаких
символов в обрамляющих ее апострофах. Строку можно состав-
лять из кодов нужных символов с предшествующими каждому
коду символами #, например, строка #ХЗ#121#109#9Х#11#108 эк-
вивалентна строке ' Symbol'.
Наконец, в строке можно чередовать части, записанные в об-
рамляющих апострофах, с частями, записанными кодами. Таким
168
3.4. Идентификаторы, константы и выражения
способом можно вставлять в строки любые управляющие симво-
лы. в том числе и символ CR (код 13). например:
#7'Ошибка !’#13'Нажмите любую клавишу ...'#7 .
Конструктор множества — список элементов множества, об-
рамленный квадратными скобками, например:
11,2,4..7 ,12|;
|blue. red|;
II;
(true].
В языке Pascal разрешается в объявлении констант использо-
вать произвольные выражения /44/, операндами которых могут
быть ранее объявленные нстипизированныс константы, имена ти-
пов и объектов, а также следующие функции от них:
abs lo ptr swap
chr odd rpund trunc
hi ord sizeof
length pred succ
Например:
Const
MaxReal = Maxint div SizeOl(real);
NumChars = ord(’Z') - ord('a’) + I;
Ln 10 = 2.302585092994;
LnlOR = 1/LnlO;
В качестве примера ниже приведена программа для определе-
ния площади сферы (площадь поверхности шара), если известен
радиус (R). Площадь сферы определяется по следующей форму-
ле - S - 4пЛ.
Н области кораблестроения, флота или водного транспорта
зта задача может получить несколько специфических примене-
ний:
• в задаче о количестве листов металла для изготовления на
судне-газовозе сферического резервуара для перевозки сжи-
женного газа;
• в задаче об определении веса зтого резервуара;
• « задаче о теплоизоляции такого резервуара (температура
сжиженного газа равна минус 150 градусов по Цельсию).
169
Тема 3. Основы языка Borland Pascal
Листинг 3.2:
Program primer;
Const
p = 3.1415926;
Var
S,R:rcal;
Begin
лтйсСВвсдитс радиус сферы, К =');
read(R);
S:=4*p*sqr(R); (выражение для определения площади сферы|
writcC Площадь сферы S= *,S:5:2);
End
3.4.3. Выражения
Основными элементами, из которых конструируется исполняе-
мая часть программы, являются константы, переменные и обра-
щения к функциям. Каждый из этих элементов характеризуется
своим значением и принадлежит к какому-либо типу данных.
С помощью знаков операций и скобок из них можно составлять
выражения, которые фактически представляют собой правила по-
лучения новых значений.
Частным случаем выражения может быть просто одиночный
элемент, т. е. константа, переменная или обращение к функции.
Значение такого выражения имеет, естественно, тот же тип, что и
сам элемент. В общем случае выражение состоит из нескольких
элементов (операндов) и знаков операций, а тип его значения
определяется типом операндов и видом примененных к ним опе-
раций.
Примеры выражений:
Y, 21, (а + Ь) • с, sin(t), а > 2,
not Flag and (а — b), NIL. |l, 3..7] * sell.
3.4.4. Оператор присваивания
Значение переменной может быть задано или изменено с помо-
щью оператора присваивания, который имеет вид:
Имя_псрсмснной := Выражение;
Здесь «Имя переменной» — это идентификатор (наименова-
ние) переменной или функции: «:=» — это знак операции присва-
ивания; «Выражение» — запись действия, которое необходимо вы-
полнить с переменной.
170
3.4. Идентификаторы, константы и выражения
Оператор присваивания позволяет заменить текущее значение
переменной, стоящей слева от знака присваивания, новым значе-
нием, задаваемым выражением, стоящим справа. Так, например,
после описания переменных
Var hO,k,n,hl:rcal;
допустимы следующие операторы:
hO:=l;
k:=2;
n:=100;
hl:=hl+k*n;
С правой стороны от знака присваивания располагается выра-
жение. кагоров после вычисления дает некоторое значение. С ле-
вой стороны указывается имя переменной, которой это значение
присваивается. Данное обстоятельство позволяет использовать с
левой и справой стороны от знака присваивания имя одной и той
же переменной.
Например:
Var x.a:rcal:
х:=2.5;
а:=1.25;
х:=х+а;
После выполнения этих операторов переменная х будет иметь
значение 3.75, т. к. первоначально произойдет вычисление выра-
жения х+а в виде сложения двух переменных: 2.5 + 1.25 —3.75, а
затем эго значение присваивается переменной х (предыдущее зна-
чение х равное 2.5, заменяется новым — 3.75).
Ниже для примера приведена программа для вычисления сум-
мы двух чисел.
Листинг 3.3:
Program primer;
Var
А,В,С : real; (вещественный тип}
Begin
лтйс(’Введитс первое число, А =');
rcad(A);
writef Введите второе число, В =’);
read(B);
171
Тема 3. Основы языка Borland Pascal
С:=А+В; (вычисление суммы двух чисел}
writeC Результат вычисления С = ',С:5:2);
End.
3.5. Комментарии
Важной частью исходного текста программы являются коммен-
тарии. Комментарий представляет собой текст, который находит-
ся между фигурными скобками или между нарами символов, со-
стоящими из круглой скобки и звездочки. Текст комментария нс
обрабатывается компилятором и не включается в исполняемый
файл. Комментарии позволяют включить подробное описание
программы и пояснения к ней прямо в исходный текст. Грамотное
и уместное применение комментариев упрощает понимание про-
фаммы, облегчает жизнь се автору и программистам, работающим
с уже готовым текстом. У фигурных скобок есть и нестандартное
применение: во время отладки часто возникает необходимость
временно убрать из программы какие-то операторы, сохранив, тем
не менее, их запись. Простейший способ — заключить соответст-
вующий фрагмент программы в фигурные скобки, то есть превра-
тить его в комментарий.
Проиллюстрируем приведенную выше программу, для вычис-
ления объема шара, пояснениями для каждой строки профаммы.
Листинг 3.4: Использование комментария в программе.
Program Primer; (заголовок программы — имя программы}
Var R,v : real; (раздел описания переменных}
{переменные действительного типа. т. е. содержащие дробную
часть}
Begin
writef Введите значение радиуса R=’); (оператор вывода (вывод
текста заключенного в апострофы на экран)}
read(R); (оператор ввода (машина ожидает ввода значения)}
V:=4*pi*R*R*R/3; {вычисление}
writcfV—',v:8:3); (оператор вывода результата вычисления
на экран}
End. {конец программы}
172
3.6. Теорема структуры
3.6. Теорема структуры
В 1965 г. Итальянскими математиками К. Бомом и Г. Джакопи-
ни была сформулирована теорема структуры (в других переводах:
«теорема о структурности», «структурная теорема», «основная
структурная теорема») /27/. Примерно к такой же формулировке
самостоятельно пришли и специалисты по программированию, в
частности Э. Дсйкстра, поэтому эту теорему часто называют тео-
ремой Дсйкстры.
Теорема утверждает: «Алгоритм любой сложности можно реа-
лизовать, используя только три конструкции: простое следование,
бинарное ветвление и повторение».
Следование — хт последовательность операторов или групп
операторов, выполняемых друг за другом в порядке их следования
в тексте программы.
Ветвление — управляющая структура, которая в зависимости от
истинности заданного условия определяет выбор дтя исполнения
одной из двух групп операторов.
Повторение — цикл в котором группа операторов может выпол-
няться повторно если соблюдается заданное условие.
Существенной особенностью всех этих структур является то,
что каждая из них имеет только один вход и только один выход, что
и обеспечивает логически последовательную структуру програм-
мы. Все эти структуры определяются рекурсивно, т. с. допустимо
вложение структур (например, следование или ветвление внутри
тела цикла).
В качестве развития трех упомянутых базовых конструкций
(следование, ветвление, повторение) теоремы структуры и будут
ниже рассмотрены три последующие темы:
«Разработка программ линейной структуры»,
«Разработка программ разветвляюшейез! структуры»,
«Разработка программ циклической структуры».
3.7. Практические задания по теме 3
В данном разделе сформулированы задания для студентов, по-
зволяющие закрепить на практике теоретический материал, изло-
женный в теме 3, Для самопроверки студент ы могут познакомить-
173
Тема 3. Основы языка Borland Pascal
ся в теме 10 с возможными вариантами ответов на предложенные
задания.
3.7.1. Практические задания
Задание I. Приведите пример обшей структуры программы.
Задание 2. Приведите пример объявления переменной целою
типа.
Задание 3. Приведите пример подключения модуля к программе.
3.8. Контрольные вопросы по теме 3
В данном разделе сформулированы контрольные вопросы для
студентов, позволяющие закрепить знание теоретического матери-
ала, изложенного в теме 3. Для самопроверки студенты могут по-
знакомиться в теме 10 с возможными вариантами ответов на пред-
ложенные вопросы.
Вопрос 1. Из каких символов состоит Алфавит языка Pascal?
Вопрос 2. Что такое зарезервированные слова? Какие зарезервиро-
ванные слова вы знаете?
Вопрос 3. Поясните смысл следующих символов: { }, ., :.
Вопрос 4. Что представляет собой оператор присваивания? Ука-
жите, где располагается оператор присваивания в общей структуре
программы.
Вопрос 5. Как выглядит общая структура программы?
Вопрос 6. Где находится раздел операторов в обшей структуре
программы?
Вопрос 7. Где располагается раздел описаний в общей структуре
программы?
Вопрос 8. Как выглядит разделитель операторов?
Вопрос 9. Чем заканчивается каждая программа?
Вопрос 10. Что представляет собой заголовок программы?
Вопрос 11. Как оформляются пояснения в прщраммс?
Вопрос 12. Из каких блоков состоит раздел описаний программы?
Вопрос 13. Как описываются в программе константы?
Вопрос 14. Как подключить модуль CRT к программе и выпол-
нить предварительную очистку экрана?
Вопрос 15. Какие т ипы переменных вы знаете?
Вопрос 16. Как объявить переменную m целого типа без знака?
174
Тема 4
Разработка программ линейной
структуры
Цели темы 4: Показать разработку программ линейной структу-
ры. Дать понятие о построении линейных выражений, об операциях
над переменными, о вводе данных и выводе результатов. Пояснить
особенности оформления программ.
При написании данного раздела использованы работы /10. 14,
15. 44. 46. 47/.
4.1. Правила построения линейных выражений
Правила построения линейных (последовательных) выражений
напоминают математические с некоторыми уточнениями.
Правило Г. Обязательность знака операции.
Между операндами обязательно должен стоять знак операции
(запись типа 2х — не допускается, правильной считается запись
2*х). Знаки некоторых операций и названия некоторых их дейст-
вий, отличны от привычных нам из области математики.
Правило 2. Непрерывная запись в строку.
Выражение записывается в одну строку (ни какой многоэтаж-
ное™). В таблице. 4.1 приведены некоторые математические вы-
ражения (левый столбец) и их запись на языке Pascal (правый
столбец).
Таблица 4.1
Запись выражений на языке Pascal
Запись выражения (формулы) в математике Запись выражения (формулы) на языке Pascal
Зх З‘х
5*sqr(y)
4‘sqr(x3)
5 3+2a-^h 5/(3+(2’а) -(h/'4)J
2х vy + 3 2Wsqrt(y+3)
175
Тема 4. Разработка программ линейной структуры
Правило 3. Разбивка на вспомогательные выражения.
Сложные, громоздкие выражения необходимо разбивать на
вспомогательные выражения. Это делается для отслеживания по-
следовательности действий и для того, чтобы исключить ошибки в
сложных выражениях.
Пример:
Необходимо вычислить некоторое сложное выражение Y :
у = Л3 + ЗЛ2Я +ЗЛ52 + В2
А2 + 2АВ + В2
Разобьем сложное выражение в правой части на вспомогатель-
ные выражения, следующим образом:
Пусть /л1 = А1 + ЗА2 В + ЗАВ2 + В3; m2 = А2 + 2АВ + В2.
Тогда выражение для Y примет следующий вид:
Y = /»1.7п2,
а величины — от1 и m2 являются вспомогательными выражениями.
Не следует забывать, что все вспомогательные выражения явля-
ются переменными и как любые переменные обязательно должны
быть описаны вместе с основными переменными в блоке описа-
ния переменных (Var).
Для данного примера составим текст программы, приведенный
ниже /10, 47/.
Листинг 4.1: Вычислить Y.
Program primer Y;
Var
А, В,тп I ,m2:intcgcr, {целый тип}
Y:real; {вещественный тип]
Bogin
лтйеСВведитс первое число А=')1
read(A);
лтйе(’Введите второе число В=’);
read(B);
in 1 :=A*A*A+3*«jr(A)*B+3*A*sqr( В)+В’В* В;
{write Ln('Результат вычисления числителя дроби ml—'.ml:5);}
m2:-sqr(A)+2*A*B+i;qr(B);
{wrtteLnfРезультат вычисления знаменателя дроби т2—\т2:5);}
Y:=ml/m2;
лтйсСРезультат вычисления Y— ,Y:5:2);
End.
176
4.2. Операции над переменными
Здесь в фигурные скобки закомментированы операторы вывода
на экран промежуточных результатов вычисления. Их часто испо-
льзуют в программах с большим количеством промежуточных вы-
числений или вообще тогда, когда программа сильно насыщена
вычислениями. С их помощью можно отыскивать ошибки в про-
межуточных вычислениях либо иллюстрировать промежуточные
вычисления выводом результатов вычисления на экран.
4.2. Операции над переменными
Рассмотрим операции, которые можно выполнить над пере-
менными на языке Pascal. Многое зависит от типа выражения.
Рассмотрим сначала выражения арифметические, то сеть тс, резу-
льтатом которых является число.
В состав арифметического выражения на языке Pascal MOiyr
входить:
• числовые константы;
• имена переменных;
• знаки математических операций;
• математические функции и функции, возвращающие число;
• открывающиеся и закрывающиеся круглые скобки.
В языке Pascal существуют следующие основные операции с
переменными: бинарные операции, операции отношения и логи-
ческие операции.
4.2.1. Бинарные операции
К бинарным операциям относятся следующие:
« + » — сложение;
« — » вычитание;
« / * — деление;
« * » — умножение;
DIV — целочисленное деление (записывается так A DIV В; чи-
тается: результат деления А на В без дробной части); эта операция
применяется только для целых операндов;
MOD — остаток от деления (записывается так: A MOD В; чита-
ется: остаток от деления А на В); эта операция применима только
к целым числам.
177
Тема 4. Разработка программ линейной структуры
Примеры бинарных операций
Q:=A+3; T-273+N; S:=a/2; SI:=(a+b)/2;
N:=R2-R1; S:=2*pi*R; C;=2*W/B;
Покажем программу /13/ для перевода температуры по шкале
Цельсия в температуру по шкалам: Фаренгейта и Кельвина. Пере-
вод значений температур из одной шкалы в другую является хоро-
шим примером бинарных операций.
Формулы для перевода температуры по шкале Цельсия в:
а ) температуру по шкале Фаренгейта (F) Г = I.8C + 32;
б ) температуру по шкале Кельвина (К) ж = С + 273.15;
В области кораблестроения, флота или водного транспорта
зта задача является актуальной при определении температуры
забортной воды или окружающего воздуха в нужной температур-
ной шкале для оценки условий плавания судна.
Листинг 4.2; Вычислить температуру F и К.
Program Temper; {п.мя программы}
Var {раздел описания переменных}
C,F,K:real; {переменные вещественного типа}
Begin
writcLn; {пустая строка для эстетичного оформления
программы, после того как она будет запущена
на выполнение}
write Ln('Программа для перевода температуры по шкале Цельсия);
{окончание Ln у оператора write означает перевод
курсора на следующую строку после
выполнения оператора}
writeLn(*B температуру по шкалам: Фаренгейта и Кельвина*);
{вывод поясняющего текста, заключенного в апострофы,
на экран, для того чтобы пользователю был понятен
смысл той программы, которую он запустил и того,
что эта программа делает}
writeLn; {вставка пустой строки}
writcCВведите значение температуры по Цельсию С -*');
{оператор вывода (вывод текста на жран)}
read(C); {оператор ввода (машина ожидает ввода значения)}
F:=l ,8*С+32; {вычисление}
К:—С+273.15; {вычисление}
178
4.2. Операции над переменными
writcLn; {пустая строка используется для того,
чтобы отделить вычисления от вывода
результатов на экране}
writeЬп(’темпсратура по Цельсию С= ’,С:8:3);
{вывод результатов работы программы]
writcLr)(’TCMnepaTypa по Фаренгейт}' F- \F:8:3);
wri(eLn( температура по Кельвину К- ’,К:8;3);
writefНажмите клавишу <Entcr>’);
readLn; {использование пустого оператора readLn
для приостановки работы программы (программа
будет ожидать нажатия клавиши Enter)}
End. {конец программы]
Результат выполнения этой программы приведен на рис. 4.1.
Рис 4 1 Результаты выполнения программы Temper
4.2.2. Операции отношения
В Pascal существуют следующие указанные в таблице 4.2 опера-
ции отношения:
Таблица 4.2
Операции отношения
Обозначение в математике Обозначение в Pascal Наименование
> > больше чем
< < меньше чем
* О неравно
>= больше или равно
<= меньше или равно
= равно
179
Тема 4. Разработка программ линейной структуры
Операции отношения используются для записи выражений, на-
пример ()5 X < 15, 2 < X < 5, Y г m, 2>m> 0.5, К*0. n* m, т. е.
когда переменная находится в каком-то интервале, изменяется в
каком-то диапазоне или принадлежит какому-то отрезку. Такие
выражения встречаются практически во всех областях науки и тех-
ники при проектировании различных объектов, в логистике, ста-
тистике, маркетинге и т. д.
4.2.3. Логические операции
В Pascal применяются следующие логические операции:
AND — логическое «И» (коныокция);
OR — логическое «ИЛИ» (дизьюкция);
XOR — логическое «исключающее ИЛИ»;
NOT — логическое «НЕ» (отрицание).
Такие операции также часто встречаются в различных областях
знания, например, в математике, физике, статистике, логистике и др.
4.3. Стандартные арифметические функции
В качестве операндов в выражении, кроме констант и перемен-
ных, можно использовать стандартные функции. В таблице 4.3
приведены наиболее часто используемые стандартные арифмети-
ческие функции. Для вызова этих функций необходимо использо-
вать их стандартную запись на языке Pascal (второй столбец) т. с.
то имя, под которым га или иная функция заложены в языке про-
граммирования Pascal. Аргументы этих функций обязательно дол-
жны быть заключены в круглые скобки.
Таблица 4.3
Стандартные функции
Математическая функция (действие) Стандартная запись функции на языке Pascal Тип аргумента Тип результата
Абсолютная величина числа х - 1хГ absfx) Целый или вещественным Какуацумента
Sin (х). х - в рад. Sin(x) Вещественный Вещественный
180
4.3. Стандартные арифметические функции
Математическая функция (действие) Стандартная запись функции на языке Pascal Тип аргумента Тип результата
Cos (х), х - в рад. Cos(x) Вещественный Вещественный
Arctg (х) Arctan» Вещественный Вещественный
X» Sqr(x) Целый или вещественный Как у аргумента
Корен, квадратный V X (х>0) Sqrt(x) Целый или вещественный Как у аргумента
е* (е=2.71828) Exp(x) Целый или вещественный Вещественный
Натуральный логарифм числа х Ln(x) (х>0) 1л(х) Целый или вещественный Вещественный
Целая часть значения X (отбрасывание дробной части) Ttunc(x) Вещественный Целый
Целая часть значения X (отбрасывание дробной части) lnt(x) Вещественный Вещественный
Дробная часть значения X Frac(x) Вещественней Вещественный
Округпение X до ближайшего целого числа Rotmd(x) Вещественняй Целый
Случайное число от 0 до 1 Random — Вещественный
Случайное число от 0 до X Random» Целый Вещественный
Инициализация датчика спутанных чисел ftrndomize
Проверка четности Odd(x) Целое Логический (true если нечетное)
Значение числа к Pi - Вещественный
Вызов стандартной функции осуществляется путем указания ее
в нужном месте про1раммы по имени функции и аргументу. После
вычисления значения функции, ее исходный вызов заменяется
найденным численным результатом.
Использование стандартных функций можно прои.1.посгриро-
вать на примере решения часто встречающейся математической
задачи по возведению числа X в степень Y. В математ ике решение
такой задачи выполняется с помощью формулы:
х’ =е"и*ж\
181
Тема 4. Разработка программ линейной структуры
В записи на языке Pascal эта формула принимает вид:
хг = Ехр(у ♦ £л(х)).
Пример: 23*3 = £хр(Х.5 * £л(23)).
4.4. Операторы ввода данных
Если вы помните, при рассмотрении примера работы оператора
присваивания мы столкнулись с необходимостью узнать результат
выполнения программы. Мы разобрались с тем, как информацию
сохранять (в переменных), как обрабатывать (с использованием
выражений), но два фундаментальных информационных процесса
остались вне нашего внимания: получение информации извне
(ввод данных) и передача ее во внешний по отношению к компь-
ютеру мир (вывод результатов). Пока наши программы могут ис-
пользовать лишь информацию, которая находится непосредствен-
но в тексте программы. Узнать, какие значения в данный момент
имеют переменные, также нс представлялось возможным. Про-
граммирование в таких условиях теряет смысл.
Взаимодействие устройств обработки и хранения информации
с внешней средой (хотя бы с пользователем) является совершенно
необходимым. За такой интерфейс в языке Pascal отвечают опера-
торы ввода-вывода информации. Эти инструкции позволяют ввес-
ти аргументы, параметры расчетов во время выполнения програм-
мы (а не на этапе ее написания), осуществить вывод рассчитанных
данных в понятном человеку виде. Операция ввода данных осуще-
ствляется с помощью операторов Read и ReadLn.
Синтаксис оператора Read
Read(Ai, А2, ... , Ап);
где А1,А2, ... , Ап — переменные, которые последовательно полу-
чают вводимые значения (список ввода).
В таком формате эта команда позволяет вводи ть данные в пере-
менные во время выполнения программы с клавиатуры. Элемен-
тами списка ввода могут быть имена переменных, которые дол-
жны быть заполнены значениями, введенными с клавиатуры.
Выполнение оператора ввода происходит так: ход программы
приостанавливается, на экран выводится курсор, компьютер ожи-
дает от пользователя набора данных для переменных, имена кото-
рых указаны в списке ввода. Пользователь с клавиатуры вводит
182
4.5. Операторы вывода результатов
необходимые значения в том порядке, в котором они требуются
списком ввода, нажимает Enter После этого набранные данные
попадают в соответствующие им переменные, и выполнение про-
граммы продолжается.
Примечание: данные при вводе разделяются пробелами.
Пример.
Пусть переменным А, В. С необходимо присвоить следующие
значения в процессе выполнения программы А=5. В = 17, С = 6,2.
Оператор ввода в этом случае примет вид
Rcad(A, В. С);
и числовые значения следует ввести следующим образом
5 пробел 17 пробел 6.2 Enter.
В результате во время выполнения программы переменным А,
В. С будут присвоены следующие значения:
А = 5, В = 17, С = 6.2.
Дополнительно к оператору Read имеется сше один оператор
ввода Read Ln (от Read Line), осуществляющий переход на новую
строку при вводе данных.
Синтаксис оператора RcadLn
ReadLn(A), А2, ... , An):
где А1,А2, ... , Ап — переменные, которые последовательно полу-
чают вводимые значения (список ввода).
Разница между работой операторов Read и ReadLn состоит в
следующем: после выполнения Read значение следующего данного
считывается с этой же строчки, а после выполнения RcadLn — с
новой строки.
4.5. Операторы вывода результатов
Для вывода данных (результатов) на экран предназначены опе-
раторы Write и WritcLn.
Синтаксис операторов Write и WritcLn
Writc(Al, А2, ... , An);
WriteLa(AI, A2, ..., An);
где Al, A2, ..., An — являются в простом случае либо переменны-
ми либо строкой символов заключенные в апострофы (список вы-
вода).
183
Тема 4. Разработка программ линейной структуры
Например, оператор
\Угке('Значсние В —’,В);
выводит на экран строку Значение В =, а затем значение перемен-
ной В.
Оператор вывода WriteLn (от Write Line) осуществляет сначала
вывод на экран значений Al, А2, ... , Ап, а затем переход на новую
строку.
Прежде чем вывести на экран значения выражений компьютер
сначала их вычислит. Элементы списка, также как и в операторах
ввода, разделяются запятыми.
Различие между двумя операторами вывода таково: после вы-
полнения оператора WriteLn происходит переход на новую строч-
ку, а после выполнения оператора Write, переход на новую строч-
ку не происходит. Оператор вывода без параметров WriteLn осу-
ществляет переход на новую строку программы. Этот оператор
часто используется для пропуска пустых строк.
4.6. Вывод результатов с форматом
Для вывода целых и действительных чисел можно указывать
форматы в операторе Write Формат указывается через двоеточие
после переменной.
Для действительных чисел формат состоит из двух величин: пер-
вая величина обозначает общее поле выводимого значения, второе
поле — ноле дробной части. Общее поле включает в себя отрица-
тельный знак числа или пробел для положительного числа, коли-
чество цифр в целой части, точку и кол-во цифр в дробной части.
Гак вывод с форматом осуществляется следующим образом:
Writc(Y:5:2);
Эта запись означает, что на изображение всего значения Y от-
ведено 5 позиций, из них 2 отводятся на дробную часть.
Например, если в результате выполнения программы, значение
Y = 1.76. то в соответствии с рассмотренным форматом число на
экране монитора будет представлено в виде:
пробел 1.76
— всего под число отводится 5-ть позиций, из них 2 на дроб-
ную часть.
Например, пусть оператор вывода для значения 1,76 имеет вид:
184
4.6. Вывод результатов с форматом
Wrilc('Y='.Y:8:3);
тогда информация на экране будет представлена следующим образом:
Y = пробел пробел пробел 1.760
— всею под число отводится 8 позиций из них 3 на дробную
часть.
В языке Pascal допускается использование других операторов
вывода. Операторы ввода/вывода используются практически во
всех программах для организации диалога пользователя и машины.
Пример /10, 47/ использования операторов ввода и вывода раз-
личными способами. Даны три числа (X, Y и Z). Составить про-
грамму запроса у пользователя значений этих чисел и вывести на
экран эти числа (листинг 4.3).
Листинг 4.3:
Program primcr_l;
Var
X. Y, Z : real;
Begin
writcC Введите три числа X. Y и Z');
read(X, Y, Z);
wrilelnCBbiBOA значений X, Y и Z');
writclnCX — ,X:5:2, Y =’,Y:5:2, Z =',Z:5:2);
End.
Результат выполнения этой программы на экране будет выгля-
деть следующим образом (рис. 4.2):
Рис. 4.2. Пример ввода и вывода информации (вариант I)
Хотя программа на Листинге 4.3 составлена формально прави-
льно, у нес есть три эстетических недостатка:
I) Значения начинают вводиться в ту же строку, которая выдаст
сообщение на экран «Введите три числа X, Y и Z», это нс эстетич-
но и нс понятно для постороннего человека.
2) Вывод значений произведен без пробелов, скученно, что
гоже не эстетично и нс понятно.
185
Тема 4. Разработка программ линейной структуры
3) Ввод значений лучше осуществить отдельно в каждой строке
с предварительным запросом: «Введите число X», «Введите число
Y», «Введите число Z».
Устраним первый недостаток следующим образом /10, 47/. По-
сле Begin вместо оператора write необходимо использовать оператор
writein (листинг 4.4). После выполнения оператора writeln курсор бу-
дет переведен на новую строку, с которой и начнется ввод данных.
Листинг 4.4:
Program primer_2;
Var
X, Y, Z : real;
Begin
writclnCВведите три числа X, Y и Z’);
read(X,Y, Z);
writcln('Bbnuwi значении X, Y и Z');
writelnCX =’,X:5:2. Y =',Y:5:2, Y =’,Z:5:2);
End.
Результат выполнения этой программы на экране будет выгля-
деть так (рис. 4.3):
Рис. 4.3. Пример иит)и и вывода информации (вариант 2)
Следующий вариант программы (листинг 4.5) устраняет второй
недостаток, позволяя красиво организовать вывод результатов на
экран /10, 47/. Это достигается путем добавления дополнительных
пробелов в строку, где используется вывод с форматом.
Листинг 4.5:
Program primer_3;
Var
X, Y, Z : real;
Begin
writclnCВведите три числа X, Y и Z');
rcad(X,Y, Z);
writclnCВывод значений X, Y и Z');
186
4.6. Вывод результатов с форматом
writcInfX = ',Х:5:2, ’ Y = \Y:5:2,' Z = ’,Z:5:2);
End.
Результат выполнения этой профаммы на экране будет выгля-
деть так (рис. 4.4):
Рис. 4.4. Пример вводи и вывода информации (вариант 3)
И, наконец, устраним последний недостаток /10, 47/. Органи-
зуем перед вводом каждого значения запрос об его вводе (листинг
4.6). Помогут это сделать все те же операторы write и read.
Листинг 4.6:
Program primcr_4;
Var
X, Y, Z : real;
Begin
writcC Введите число X = ');
rcad(X);
writef Введите число Y = ’);
read(Y);
writef Введите число Z = '):
read(Z);
wri(eln('BbiBoa значений X, Y и Z');
writelnfX = \X:5:2. ’ Y = ’,Y:5:2,' Z = ,Z:5:2);
End.
Результат выполнения этой профаммы на экране будет следую-
щий (рис. 4.5):
Рис. 4.5. Пример ввода и вывода информации (вариант 4)
187
Тема 4. Разработка программ линейной структуры
Вот эта программа выглядит уже достаточно эстетично, но
все-таки остался еще один момент — возможность просмотра сра-
зу же результатов вычисления на экране. Вообще для просмотра
результатов выполнения существует вложенная команда User Scre-
en которая расположена в меню Debug (п. 2.3.9).
4.7. Использование пустого оператора ReadLn
Другое применение оператора ReadLn — это возможность сразу
просмотреть на экране результат выполнения программы, не обра-
щаясь к команде User Screen. Осуществить это можно следующим
образом — в конце программы перед оператором End. поставить
пустой оператор ReadLn (см. листинг 4.2, 4 7).
Листинг 4.7:
Program primer;
Var
X, Y, Z : real;
Begin
writefВведите число X = ’);
rcad(X);
wriicCВведите число Y = *);
read(Y);
writef Введите число Z = ’):
rcad(Z);
writclnf Вывод значений X, Y и Z’);
writeCX = ’,X;5:2, ’ Y = *,Y:5:2, ’ Z = ’,Z:5:2);
rcadln;
End.
4.8. Оформление программы
Несколько рекомендаций по поводу оформления записи текста
программы, так как оно важно нс только с точки зрения эстетики,
но и с точки зрения эффективности труда программиста. При на-
боре текста программы се операторы следует располагать таким
образом, чтобы была понятной логика работы программы. Для
этого используются пробелы между операторами или элементами
операторов, а также отступы. Каждый программист имеет свой
188
4.8. Оформление программы
стиль использования пробелов и отступов. Они помогают читате-
лю про|раммы определить уровень подчиненности каждой строки.
Компьютерные программы содержат большое количество инфор-
мации в конценфированном виде, и хорошее форматирование
может оказаться очень полезным.
Надо иметь в виду, что вряд ли вновь написанная программа
сразу будет работать правильно. На отладку про|раммы может
уйти больше половины времени ее разработки.
При записи программы на Pascal допускается использование пу-
стых строк для выделения логически связанных групп операторов.
Приведем ниже две одинаковых по результату, но разных по
оформлению программы /13, 15/.
Пример: Известен радиус шара R Определить его объем V.
Математически объем шара определяется по следующей фор-
муле:
К = Л’
В области кораблестроения, флота или водного транспорта
зта задача может найти себе применение, например, в следующих
случаях:
— в задаче об определении объема сферического плавучего объек-
та (батисфера, плавучая мина) для размещения в нем экипажа,
оборудования и др.;
— в задаче об определении водоизмещения такого плавучего объ-
екта при его полном погружении в воду.
На языке профаммирования Pascal текст программы для реше-
ния этой задачи имеет следующий вид:
Листинг 4.8: Не эстетичное оформление профаммы.
Program primcr_l; Var R,V : real;
Begin мггйе(’Введите значение радиуса R=‘); rcadLn(R);
V:=4*pi*R*R*R/3;
write('V-',V:8:3); End.
Листинг 4.9: Логичное, эстетичное оформление профаммы.
Program primcr_2;
Var
R.V : real;
Begin
\¥гйс('Введиге значение радиуса R—’);
189
Тема 4. Разработка программ линейной структуры
read(R);
V:=4*pi*R*R*R/3;
writc(’06bCM шара, V—,V:8:3);
End
В примере на листинге 4.8 не совсем четко прослеживается ло-
гика. С точки зрения удобочитаемости и логики такой вариант
оформления нс эстетичен.
В примере на листинге 4.9 каждый блок раздела описаний
сформирован отдельно, каждый оператор начинается с новой
строки, отдельно выделены начало и конец программы, все эго
придает программе эстетичный вид, а также четко отслеживается
логика.
Нс смотря на го, что оформлены эти программы по-разному
результат их выполнения будет совершенно одинаков.
4.9. Дополнительные примеры и практические
задания по теме 4
В данном разделе сформулированы практические примеры и
задания для студентов, позволяющие закрепить на практике тео-
ретический материал, изложенный в теме 4. Для самопроверки
студенты могут познакомиться в теме 10 с возможными варианта-
ми ответов на предложенные задания.
4.9.1. Дополнительные примеры
Пример I. Вычислить массу топлива в цистерне судна /15/.
Задача о запасах топлива (или количества жидкого груза) на
судне является классической задачей для коразыестрззения, флота
и водного транспорта.
Известны геометрические параметры цистерны: длина L шири-
на В и высота //. Известна плотность топлива pl. например р! =
0.82.
Определить массу т топлива в цистерне можно следующим об-
разом:
т = pl L В Н
Ниже приведен текст программы для данной задачи.
190
4.9. Дополнительные примеры и практические задания по теме 4
Листинг 4.10:
Program Toplivo;
Const
pl = 0.82; {плотность топлива}
Var
L. В, Н : real; {геометрические размеры цистерны в метрах}
tn : real; {масса топлина н тоннах}
Begin
Write (’Введите значение длины цистерны (и), L — ');
Read(L);
Write ( Введите значение ширины цистерны (м), В * ');
Read(B);
Write ('Введите значение высоты цистерны (м). Н = ');
Read(H);
m := pl ♦ L • В ♦ H;
WritelnCМасса топлива в цистерне т= тп:5:2,' т
End.
Пример 2. Вычисление корней квадратного уравнения /15/.
Квадратное уравнении имеет следующий вид:. Дискриминант
имеет следующий вид:. В зависимости от значения дискриминанта
квадратное уравнение может иметь два действи тельных корня:
у -h + <d у -b - \d
' 1 Та ' 1 " 2а ’
Ниже приведен текст программы для задачи с положительным
дискриминантом.
Листинг 4.11:
Program KvUr;
Var
a, b, с, d, xl, х2 : real;
Begin
Writein (’Введите коэффициенты уравнения a, b, c‘);
WritcfA—');
Read(a):
Wrile('B=');
Read(b);
Write('C-');
Read(c);
WritelnCA-', a:5:2,' B-', b:5:2,' C=’, c:5:2);
191
Тема 4. Разработка программ линейной структуры
d := b * b — 4 * а * с;
xl := (-b + sqrt(d))/(2*a);
х2 := (-b — sqrt(d))/(2*a);
WritclnC Корн и уравнения');
Writeln('X1= х1:5:2.' Х2=', х2:5:2);
End.
Пример 3. Вычисление периода колебаний маятника /15/.
Известно, что период колебания маятника / определяется сле-
дующим выражением:
,=2я V-
где я — ускорение свободного падения. я= 9.81.
Ниже приведен текст программы для данной задачи.
Листинг 4.12:
Program Period;
Const
g = 9.8l;
Var
L. i: real;
Begin
WriteCBBcaHTe длину маятника, м L = ');
Rcad(L);
t := 2*pi*sqrt(L/g);
Writein;
WritelnCIlepMoa колебаний T = 1:5:2, ’ c');
End.
4.9.2. Практические задания
Задание I. Присвоить переменной А значение равное 80, пере-
менной В значение равное 7,45.
Задание 2. Вычислить значение функции cos(0.23) и присвоить
значение згой функции переменной Ь.
Задание 3. Написать текст программы, позволяющий разделить
переменную X = 7 на переменную Y = 2 и присвоить полученный
результат переменной Z.
Задание 4. Вывести на экран результат задания 3, используя
форматный вывод.
192
4.10. Контрольные вопросы по теме 4
4.10. Контрольные вопросы по теме 4
В данном разделе сформулированы контрольные вопросы для
студентов, позволяющие закрепить знание теоретического матери-
ала, изложенного в теме 4. Для самопроверки студенты могут по-
знакомиться в теме 10 с возможны ми вариантами ответов на пред-
ложенные вопросы.
Вопрос I. Какие правила построения выражений вы знаете?
Укажите, где располагаются выражения в общей структуре про-
граммы.
Вопрос 2. Какие операции называют бинарными? Укажите, где
располагаются бинарные операции в общей структуре программы.
Вопрос 3. Какие операции отношения вы знаете? Укажите, где
располагаются операции отношения в общей структуре программы.
Вопрос 4. Что такое стандартные функции? Какие сгандаргные
функции вы знаете?
Вопрос 5. Что представляет собой оператор ввода информации?
Вопрос 6. Что представляет собой оператор вывода информа-
ции?
Вопрос 7. Как вывести на экран сообщение, например, «Доб-
рое утро»?
Вопрос 8. Как осуществляется вывод с форматом?
Вопрос 9. Назначение пустого оператора Readin?
Вопрос 10. В чем заключается назначение окончания — Ln
прибавляемого к операторам ввода и вывода информации?
193
Тема 5
Разработка программ разветвляющйся
структуры
Цели темы 5: Показать разработку программ разветвляющейся
структуры. Разъяснить понятия о логическом типе и видал условий.
Сформулировать условный оператор, составной оператор, оператор
выбора вариантов и оператор безусловного перехода.
При написании данною раздела использованы работы /15. 27,
46/.
5.1. Условный оператор
Условный оператор представляет собой сложное обусловленное
действие, реализующее одну из основных алгоритмических струк-
тур программирования — ветвление. Ветвление осуществляется в
зависимости от какого-то логического условия. Если условие вы-
полняется. то будет выполнено действие I (оператор /), если нет,
то — действие 2 (оператор 2у Графически это показано в виде схе-
мы, изображенной на рис. 5.1.
Несмотря на то, что в схеме присутствуют два действия, выпол-
нено будет только одно, так как условие либо ложно, либо истин-
но. Третьего нс дано.
Рис. 5.1. Схема полного условного оператора
194
5.1. Условный оператор
Такая схема позволяет решить задачи, в которых в зависимости
от сложившихся обстоятельств требуется совершить то или иное
действие.
Проиллюстрируем это на простом примере.
Пример: Необходимо вычислить значение выражения Y - 1/х.
Из математики известно, что при х - 0, стоящем в знаменателе
выражение Y не имеет конкретного численного значения (оно
оказывается равным бесконечности). С технической точки зрения
операция деление на ноль ставит ЭВМ в тупик. В программирова-
нии для ЭВМ такая ситуация предусматривается и решается с по-
мощью простой идеи алгоритмического обхода операции деления
на ноль.
Сформулировать подобную задачу на естественном языке мож-
но следующим образом:
I. Получить значение х.
2. Если х = 0, то сообщить, что выражение значения не имеет.
3. Если х * 0, то нужно вычислить Y = 1/х.
Таким образом, данной задаче может быть использована приве-
денная выше алгоритмическая структура ветвление. Она может
быть выражена простыми словами:
Если условие (если выполняется условие}
то действие 1 (то выполнить действие 1, т. с. оператор 1}
иначе действие 2 (иначе — выполнить действие 2, т. е. оператор 2}
Синтаксис условного оператора на языке Pascal:
If условие Then оператор 1 Else оператор 2;
Эта запись на обычном русском языке будет читаться так: Если
логическое выражение истинно, тогда выполняется оператор 1
иначе (если логическое выражение ложно) — оператор 2. В каче-
стве оператора I и оператора 2 могут быть и условные операторы.
Условный оператор состоит из следующего набора служебных
слов: если — If, то — 1'hen, иначе — Else.
Обратите внимание на то, что в командах Then и Else стои т то-
лько один оператор. Но что делать, в случаях, когда требуется ре-
шить задачу, в которой по выполнению или невыполнению усло-
вия нужно совершить не одно, а несколько действий? Здесь на по-
мощь нам может прийти так называемый составной опера тор. Его
мы поясним ниже в другом разделе.
195
Тема 5. Разработка программ разветвляющйся структуры
Рис. 5.2. Схема сокращенного условного оператора
Условный оператор может нс иметь конструкции Eke. тогда он
называется сокращенным условным оператором. В этом случае
если логическое выражение принимает значение ЛОЖЬ, то сразу
выполняется оператор, следующий за условным оператором (см.
рис. 5.2).
5.2. Составной оператор
В общем случае в схемах, приведенных в предыдущем пункте, в
качестве Оператора 1 и Оператора 2 может быть использован лю-
бой оператор языка Pascal /15/. Однако часто возникает необходи-
мость вставить в какую-нибудь ветвь нс один, а группу операто-
ров. В этом случае пользуются так называемым составным опера-
тором.
Этот оператор, строго говоря, оператором нс является. Дело в
том, что также как арифметические действия иногда бывает необ-
ходимо заключать в скобки некоторые группы команд (операто-
ров), которые тоже иногда требуют объединения. Эго позволяют
сделать так называемые операторные скобки.
Синтаксис составного оператора следующий:
Program S;
Begin
Begin
Оператор 1;
{начало операторных скобок]
196
5.2. Составной оператор
Оператор 2;
Оператор N
End; {коиед операторных скобок]
End.
где Оператор!; Оператор 2; ...Оператор N — операторы, а зарезер-
вированные слова Begin и End играют роль скобок, но только для
операторов, а нс для математических выражений. Они так и назы-
ваются — операторными скобками.
Возможно, такая структура напоминает вам основную структу-
ру программы. Действительно, отличие только в том, что после
End в конце составного оператора ставится точка с запятой, а в
конце программы — точка. Но своей сути вся обычная программа
представляет собой большой составной оператор.
Каждому Begin в программе должен соответствовать End. Об-
ратное утверждение, вообще говоря, неверно, гак как End может
заканчивать разделы, начинающиеся нс только с Begin, но и с дру-
гих зарезервированных слов, например Case и Record
Обратите внимание на то, что точка с запятой перед End (после
оператора N) может не ставиться.
Составной оператор предоставляет возможность выполнить
произвольное количество команд там, где подразумевается испо-
льзование только одного оператора.
Пример: Дано число А. сели оно положительное, то вычислить
число В по следующей формуле: В = А - 2.
Ниже приведен текст' про1раммы.
Листинг 5.1:
Program Primer5_l; {заголовок программы}
Var
А. В : real;
Begin {начало программы]
итпе(’Введите число, А= *):
rcad(A);
if А>0 then {начало оператора if]
begin {начало составного оператора]
В:=А-2;
ип1еЕп('Значсние В='.В:7:3);
end {конец составного оператора]
197
Тема 5. Разработка программ разветвляющйся структуры
else
write Еп('Вычислить функцию невозможно !’);
{конец оператора if}
writeC/Jjin окончания нажмите клавишу <Enter>’);
read Ln;
End. {конец программы}
5.3. Логический тип и виды условий
Переменные логического (булева) тина принимают значения
True (истина) или False (ложь) /15/. Эти величины упорядочены
таким образом, что False < True.
Логическим (булевым) выражением называется выражение,
имеющее значение типа Boolean, т. е. True или False. Операнды
логического выражения связаны между собой либо знаками опе-
раций отношения (сравнения) либо знаками (зарезервированными
словами) логических операций. И тс и другие позволяют сформу-
лировать рахтичныс виды условий, в зависимости от которых мо-
жет осуществляться ветвление программы.
В простых условиях могут применяться следующие знаки отно-
шения (сравнения):
— одинарные:
< (меньше), “ (равно), > (больше);
— сдвоенные:
<“ (меньше или равно), О (нс равно), >“ (больше или равно).
Примеры записи простых условий:
А-5 {Значение переменной А равно 5}
Х<1 {Значение переменной X меньше 1}
К>3 {Значение переменной К больше 3}
М<—2 {Значение переменной М меньше либо равно 2}
(C+D3)>=(DI*(4R-2)) {Значение выражения в левой части
больше либо равно значению выражения
из правой части}
SO'ABC {Значение переменной S нс равно строковой
константе ’АВС'}
ХОО {Значение переменной X не равно нулю}
Пример: Даны два числа. Выбрать наибольшее из этих чисел.
198
5.3. Логический тип и виды условий
Листинг 5.2:
Program primer;
Var
А.В.С : Real;
Begin
WritelnC Введите два числа');
Write('A=');
Read(A);
Writef B=);
Read(B);
I f A> В {проверяется условие}
then C:=A {выполняется ветвь then, если условие истинно}
else С:=В; {ветвь else выполняется тогда когда условие ложно}
{Если А>В, то результат — А, иначе результат — В}
Write('C=',C:8:3);
End.
Операции отношения (сравнения) применимы к операндам
любого скалярного типа.
Логические операции допустимы только по отношению к опе-
рандам (константам, переменным, функциям) логического типа.
В Borland Pascal введены четыре логические операции
(табл. 5.1) /22/.
Таблица 5.1.
Логические операции
Операция Название Запись Результат операции
not Логическое отрицание «НЕ» (инвертирование) notLI пример: not (х>0) Логическое значение, противоположное значению L1
and Логическое умножение «И» (конькжция) LI and L2 пример: (х>0) and (х<5) Логическое значение True, если L1 и 12 равны True, и False во всех остальных случаях
or Лиг ическое сложение «ИЛИ» (дизьюкция! LI or 12 пример: (х<0) от (х>5) Логическое значение True, если хотя бы одни из значений L1 и 12 равно True, и False, если L1 и 12 равно False
xor Логическое исключающее «ИЛИ» LI xor L2 пример: (х<0) хот (у>5) Логическое значение True, если L1 и 12 различны и False, если они равны
где L1 и L2 - логические константы, переменные или выражения равные True или False
199
Тема 5. Разработка программ разветвляющйся структуры
Логические переменные должны быть описаны в разделе опи-
сания переменных как имеющие тип Boolean (логический тип)
Например, переменные х, у, z, описанные как
Var
x,y,z: Boolean;
считаются в iipoi-рамме логическими.
В процессе вычисления значения логического выражения со-
блюдается следующий приоритет выполнения операций:
• выражения, заключенные в скобки;
• логическое отрицание (not);
• логическое умножение (and);
• логическое сложение (or), исключающее «ИЛИ» (хот);
• операции отношения (сравнение).
Логические операции и операции отношения могут встречаться
в одном логическом выражении. При этом операции отношения
имеют меньший приоритет. Поэтому в этом случае их надо заклю-
чать в скобки.
Например, если необходимо записать выражение, принимаю-
щее значение True, когда действительная переменная х принадле-
жит к одному из двух отрезков |а,Ь| или |c,d|, его, т. е. логическое
условие, можно представить в следующем достаточно сложном
виде:
(х>—a) and (x<-b) or (х>-с) and (х<—d).
Операции, имеющие одинаковый приоритет, выполняются сле-
ва направо.
5.4. Оператор выбора варианта
Рассмотренный выше условный оператор позволяет выбрать
одно из двух возможных действий в зависимости аг значения ло-
гического выражения. Рассматриваемый в данном разделе опера-
тор выбора варианта Case дает возможность выбрать и выполнить
одно из нескольких действий. Этот выбор производится в зависи-
мости or значения управляющей переменной или управляющего
выражения.
В общем случае оператор выбора варианта Case — это сложная
конс!рукция. имеющая следующий вид /22/:
200
5.4. Оператор выбора варианта
Case УправляющаяПсрсмсннаяИлиВыражснис of
НаборЗначений! : Оператор!;
НаборЗначсний2 : Опсратор2;
НаборЗначенийЗ : ОператорЗ;
НаборЗначенийК : ОпсраторК
else
АльтсрнативныйОператор
cod;
Между служебными словами Case и of должна стоять перемен-
ная или выражение (оно вычисляется при выполнении оператора
Case). Тип переменной или значения выражения может быть толь-
ко перечислимым (включая типы Char и Boolean), диапазоном или
целочисленным одного из типов Byte, Shortlnt, Integer или Word.
При использовании всех прочих типов компилятор выдаст ошибку.
Пример ошибочной записи управляющего выражения в опера-
торе Case:
Case (a+b)/2 of...
В данном примере в записи управляющего выражения присут-
ствует операция деления, что определяет тип значения выражения
как вещественный. Данный тип управляющего выражения недо-
пустим при использовании в операторе Case. Для исправления
этой ошибки необходимо перевести значение выражения в цело-
численный тип. Например, используя функцию Tmnc((a I b)/2),
тип значения которой Long!nt.
Набор значений — это конкретные значения управляющей пе-
ременной или выражения, при которых необходимо выполнить
соответствующий оператор, игнорируя остальные варианты. Если
в наборе несколько значений, то они разделяются между собой за-
пятыми. Можно указывать диапазон значений. Между набором
значений и соответствующим ему оператором обязательно должен
ставиться символ двоеточие «:».
Оператор в конкретном варианте может быть как простым, так
и составным (набор операторов заключенный между операторны-
ми скобками begin и end). Каждый вариант операторов заканчива-
ется символом точкой с запятой «;», за исключением оператора
стоящею перед служебным словом else.
В операторе Case допускается использовать необязательную
часть else. Если значение переменной (выражения) нс совпадает
201
Тема 5. Разработка программ разветвляющйся структуры
ни с одним из значений в вариантах, то будет выполнен альтерна-
тивный оператор, стоящий в части else
Обратите внимание, что в конце сложной конструкции опера-
тора выбора стоит слово end , для которого перед -эт им нет парно-
го слова begin. В этом случае слово end (с точкой с запятой) завер-
шает конструкцию, начинающуюся со слова Case.
Пример: необходимо вычислить функцию Z в зависимости от
конкретного значения управляющей переменной i.
Case i оГ
I : Z=i+10;
2 : Z=i+100;
3..5 : Z=i+1000; (Значение управляющей переменной задано
в виде диапазона}
else
Z=0
end;
Схема оператора выбора варианта для рассматриваемого приме-
ра проиллюстрировано на рис. 5.3.
Ниже приведен пример модифицированной программы
(п.4.9.1, листинг 4.11) решения квадратного уравнения. Данная
Рис. 5.3. Схема оператора выбора варианта
202
5.4. Оператор выбора варианта
про|рамма позволяет находить корни квадратного уравнения при
любом значении дискриминанта. Логически программа разбита на
три части: ввод коэффициентов уравнения; вычисление корней
уравнения в зависимости от значения дискриминанта; вывод резу-
льтатов расчета. Вывод решения организован с помощью операто-
ра Case. В качестве выражения-селектора в программе выступает
вспомогательная переменная Г. Но умолчанию начальное значение
переменной f принимается равным 0, что является признаком от-
сутствия действительных корней. Такой подход позволяет нс про-
водить проверку на отрицательное значение дискриминанта. Да-
лее, значение переменной f может быть модифицировано при
условии, что дискриминант равен или больше 0. В этом случае,
одновременно с вычислением корней уравнения, переменной f
присваиваются значения I (признак наличия одного корня) или 2
(признак наличия двух корней).
Листинг 5.3; Программа решения квадратного уравнения.
Program KvUr;
Var
a, b, с, d, xl, х2 : real;
Г: byic;
Begin
Writein ('Программа решения уравнения вида; a*x'2+b*x+c=0');
Writein (’Введите коэффициенты уравнения а, Ь, с’);
Write('A=’);
Read(a);
Write(B=’);
Rcad(b);
Write('C=’);
Read(c);
f := 0;
d :=- b * b — 4 * a * c;
if d = 0 then
begin
f:= I;
xl ;= -b/(2*a);
end; {&жец оператора if}
if d > 0 then
begin
f:= 2;
xl (—b + sqrt(d))/(2*a);
203
Тема 5. Разработка программ разветвляющйся структуры
х2 := (—b - sqrt(d))/(2*a);
end; {Конец оператора if}
Writcln;
WritelnC Решение:');
Case f of
0: Writcln('B данном уравнении действительных корней нет.’);
I: WriielnfypaBHCHMe имеет один корень Х= х 1:5:2);
2: begin
WritelnCypaBHCHHC имеет два корня:'):
Writeln(’Xl= xl:5:2);
Writeln('X2= х2:5:2);
end;
end: {Конец оператора Case}
End.
5.5. Оператор безусловного перехода
Иногда в программах с разветвлениями используется еще один
оператор goto, который называется оператором безусловного пере-
хода или просто оператором перехода /27/. Этот оператор исполь-
зуется в том случае, если после выполнения очередного оператора
надо выполнить не следующий но порядку оператор, а другой, по-
меченный для этого меткой.
Процедура перехода принципиально состоит из двух команд.
Команда первая — зарезервированное слово goto (перейти к ...) с
указанием метки, куда нужно перейти. Команда вторая — метка с
оператором, который необходимо выполнить.
При этом команда вторая может находиться в тексте программы
как выше команды первой (Пример I), так и ниже се (Пример 2).
Пример!:
Libel I; {метка должна быть обязательно описана}
Begin
1: Оператор I; {оператор, который необходимо выполнить}
goto 1; {оператор перехода}
204
5.5. Оператор безусловного перехода
End.
Пример!:
Label 1; {метка должна быть обязательно описана}
Begin
goto 1; {оператор перехода}
1: Оператор 1; {оператор, который необходимо выполнить}
End.
Первый пример иллюстрирует возможность применения опера-
тора перехода для организации процедуры похожей на цикл (воз-
врат в некоторую предыдущую начальную точку программы). Вто-
рой пример иллюстрирует возможность применения оператора пе-
рехода для организации процедуры обхода некоторого фрагмент
программы (перемещение в некоторую последующую точку про-
граммы, минуя ненужный фрагмент программы).
При использовании оператора перехода goto рекомендуется по-
мнить следующее:
• Переход возможен только в пределах блока;
• Метка, на которую передастся управление, должна быть
описана именно в том блоке, в котором она используется;
• Использование оператора перехода усложняет понимание ло-
гики программы, особенно, если команда 1 и команда 2 на-
ходятся далеко друг от друга;
• Ошибка в логических построениях программы может приве-
сти к неверному результату' или к полному «зацикливанию»
про1раммы;
• Использование этого оператора нужно производить с боль-
шой осторожностью и если есть возможность, то от него
лучше отказаться.
205
Тема 5. Разработка программ разветвляющйся структуры
5.6. Дополнительные примеры и практические
задания по теме 5
В данном разделе сформулированы практические примеры и
задания для студентов, позволяющие закрепить на практике тео-
ретический материал, изложенный в теме 5. Для самопроверки
студенты могут познакомиться в теме 10 с возможными варианта-
ми ответов на предложенные задания.
5.6.1. Дополнительные примеры
Пример I. Программа вычисления натурального логарифма.
Математическая суть задачи. Вычисление натурального лога-
рифма производится стандартной функцией языка Pascal — функ-
цией 1п(х).
Как известно из курса высшей математики, нс возможно вы-
числение логарифма из отрицательного числа и нуля. По этой
причине в программу введена проверка на допустимость аргумен-
та, которая и осуществляется с применением оператора ветвления
if: если х < 0 либо х = 0, то выполнение программы останавливает-
ся, и логарифм не вычисляется. В ином случае вычисляется нату-
ральный логарифм введенного числа и его значение вместе со зна-
чением аргумента выводится на экран.
Листинг 5.4: Вычисление натурального логарифма.
Program Logarifm;
Var
х, L : real;
Begin
writefВведите значение аргумента x — );
read(x);
if x > 0 then
begin
L := ln(x);
чтйеСЗначсние натурального логарифма Inf , x:3:l ,
’) = *, L:5:3);
end
else
writeCBBeacHo недопустимое значение аргумента x’);
End.
206
5.6. Дополнительные примеры и практические задания по теме 5
Пример 2. Программа проверки соотношения двух чисел.
Даны два числа А и В. Решение задачи о соотношении двух чи-
сел проходит в три этапа.
Этан I — делается перовое предположение о том, что первое
число больше второго. Если это утверждение верно, то па экран
выводится соответствующее сообщение (А > В).
Этап 2 — делается второе предположение о равенстве чисел А и
В. Если это утверждение верно, то на экран выводится соответст-
вующее сообщение (А = В).
Этап 3 — делается утверждение о том, что второе число больше
первого. Если это утверждение верно, то на экран выводится соот-
ветствующее сообщение (А < В).
Листинг 5.5: Проверка соотношения двух чисел.
Program Proverka;
Var
А, В : integer;
Begin
writeC Введите первое число А=*);
rcad(A);
writeC Введите второе число В=*);
read( В);
writcln;
if А > В then writeC Первое число больше второго')
else
if А = В then writeC Первое число равно второму’)
else
writeC Первое число меньше второго ’);
End.
Пример 3. Программа определения четности числа
Одним из методов проверки числа на четность является цело-
численное деление. В отличие от вещественного деления, резуль-
татом операции будуг являться два числа: частное и остаток. На-
пример, если целочисленно разделить 5 на 2, то частным будет яв-
ляться число 2, а остатком — число I (5=2*2+1). Таким образом,
если в результате целочисленного деления введенного числа мы
получаем не нулевой остаток, то введенное число является нечет-
ным. в противном случае число является четным.
Листинг 5.6: Программа определения четности числа.
Program Chetnost;
207
Тема 5. Разработка программ разветвляющйся структуры
Var
А : integer;
Begin
Writcf Введите любое целое положительное число, N= ’);
read(A);
Case A mod 2 of
0: Writcf Введенное число ',A, ' является четным');
1: Writcf Введенное число 'Л, ’ является нечетным');
end;
End.
5.6.2. Практические задания
Задание I. Запишите условия А>3и В< 10 в условном опера-
торе.
Задание 2 Из двух чисел А и В выбрать большее и вывести его
на экран.
Задание 3. Запишите правильно оператор выбора из четырех
вариантов.
5.7. Контрольные вопросы по теме 5
В данном разделе сформулированы контрольные вопросы для
студентов, позволяющие закрепить знание теоретического матери-
ала, изложенного в теме 5. Для самопроверки студенты могут по-
знакомиться в теме 10 с возможными вариантами ответов на пред-
ложенные вопросы.
Вопрос 1. Как выглядит составной оператор? Где располагается
составной оператор в обшей структуре профаммы?
Вопрос 2. Чем заканчивается составной оператор?
Вопрос 3. Что представляет собой условный оператор? Где рас-
полагается условный оператор в общей структуре программы?
Вопрос 4. Когда выполняется ветвь then в условном операторе?
Где располагается ветвь then в общей структуре программы?
Вопрос 5. Когда выполняется ветвь else в условном операторе?
Где располагается ветвь else в общей структуре программы?
Вопрос 6. Что представляет собой оператор выбора варианта?
Вопрос 7. Что такое метки?
Вопрос 8. Как описываются метки в программе?
208
5.7. Контрольные вопросы по теме 5
Вопрос 9. Где и как происходит обращение к меткам в теле
программы?
Вопрос 10. Что представляет собой оператор безусловного пе-
рехода? Где располагается оператор безусловного перехода в об-
щей структуре программы?
Вопрос 11. Правила использования меток?
209
Тема 6
Разработка программ циклической
структуры
Цели темы (к Показать разработку программ циклической
структуры. Разъяснить понятия о цикле и видах циклов. Сформули-
ровать цикл с параметром, цикл с предусловием, цикл с постуслови-
ем, вложенные циклы.
При написании данного раздела использованы работы /15, 27,
46/,
6.1. Понятие цикла и виды цикла
Циклом называется многократное повторение однотипных дей-
ствий. Телом цикла будем называть те самые действия, которые
нужно многократно повторять.
Как следует из предыдущих тем, повторять одни и те же дейст-
вия можно и при помощи оператора безусловного перехода. Если
записать эти действия в программе одно за другим, а в конце по-
ставить оператор перехода к началу этого блока.
Однако таким образом можно получить только программу, ко-
торая работает вечно (т. с. зацикливается). Этого можно избежать,
используя совместно с оператором перехода условный оператор,
поставив выполнение перехода в зависимость от выполнения не-
кого условия. Таким способом, мы получим структуру условного
перехода и возможность организации конечного цикла.
Рассмотренный только что способ организации цикла неудо-
бен, так как требует создания достаточно сложного алгоритма.
В языке Pascal существуют специальные операторы, которые по-
зволяют организовать три компактных и удобных вида циклов. Эти
три вида имеют специальные операторы и собственные названия:
«цикл с параметром (инструкция For)», «цикл с предусловием (ин-
струкция While)», «цикл с постусловием (инструкция Repeat)» /27/.
При выборе оператора цикла следует помнить:
• Большинство задач с циклами можно решить разными спосо-
бами, используя при этом любой из ipex операторов цикла;
210
6.2. Цикл с параметром
• Самым универсальным из трех операторов цикла считается
оператор While, поэтому в случае затруднений с выбором
можно отдать предпочтение ему;
• Самый простой и понятный синтаксис имеет оператор Repe-
at. поэтому с него удобно начинать изучение циклов;
• При заранее известном числе повторений никла наиболее
удобную запись обеспечивает оператор For;
• При неумелой организации циклов любого типа возможна
ситуация «зацикливания*.
Теперь рассмотрим каждый из способов организации циклов
отдельно и подробно.
6.2. Цикл с параметром
Цикл «с параметром (For)» предусматривает повторное выпол-
нение некоторого другого оператора с одновременным изменени-
ем по правилу арифметической профессии значения, присваивае-
мого управляющей переменной (параметру) этого цикла /15, 27/.
Конструкцию оператора цикла с параметром можно предста-
вить в виде двух вариантов записи:
Вариант I. For имя := выражение / То выражение! Do оператор;
или
Вариант 2. For имя := выражение! Downto выражение! Do оператор;
Читается данная структура гак: Для (for) параметра (далее сле-
дует аия, которое является счетчиком) от начального значения
(выражение/) до ((о) конечного (выражение!) выполнять (do) опе-
ратор (являющийся телом цикла).
В данном виде цикла важную роль играет параметр (счетчик),
который является переменной величиной. Шаг изменения значе-
ния параметра цикла зависит от типа переменной. Чаще всего в
качестве параметра цикла используется переменная истого типа.
В этом случае шаг переменной равен единице и поэтому цикл ав-
томатически на каждом шага изменяет величину параметра на
единицу.
Вариант 1 называется «циклом с увеличением счетчика», вари-
ант ! — «цикл с уменьшением счетчика».
Схема выполнения цикла For для варианта! изображена на
рис. 6.1. Здесь для определенности приняты следующие обозначс-
211
Тема 6. Разработка программ циклической структуры
ния: имя параметра (счетчика) — i; начальное значение (выраже-
ние I) — N1; конечное значение (выражение 2) — N2; оператор
(тело цикла) — «вычисление и печать функции f(i)».
Рис. 6.1. Схема цикла с параметром (вариант I)
Иногда «цикл с параметром (For)» называют цикл «Для». Те-
перь вновь вернемся к обсуждению параметра цикла.
В качестве параметра цикла может выступать переменная не
только целого типа, но и любого простого типа, кроме веществен-
ного типа. Шаг изменения значения параметра цикла определяет-
ся с помощью стандартной функции Succ(x) в сочетании с То или
функции Pred(x) в сочетании с Downto. Функция Suee(x) опреде-
ляет следующий, а функции Pred(x) — предыдущий элемент из
списка значений аргумента, перечисленных в определении его
типа, например: Succ(4)=5, Slice! D)-'E'. Pred(22)=21.
Pred(true)=false.
Проиллюстрируем применение оператора цикла For на простом
примере:
Пример: Вычислить и распечатать значения функции при на-
чальном значении параметра М - 0, и конечном значении пара-
метра N2 = 5.
Листинг 6.1:
Program primert>_l;
Var
NI,N2,i,F : integer
Begin
212
6.2. Цикл с параметром
write ('задайте конечное значение параметра N2 - ');
{задание конечного параметра (число повторений цикла)}
read( N 2);
Nl:=0; (начальное значение параметра. обратите внимание
на то, что начальное значение задается перед
выполнением цикла}
For i:=N 1 to N2 do {начало цикла}
begin
F:= i+3; {вычисление значения функции}
writelnC F|' , i , '| = *, F); (такая форма вывода позволяет
выводить значение функции на каждом шаге
(для каждого значения i)}
end; {конец цикла}
End.
В этом случае программа вычислит и напечатает следующие
значения функции:
F[0] = 3; F|IJ = 4; F|2| = 5; R3J = 6; F[4| = 7; F(5J = 8.
При организации циклической структуры «с параметром» необ-
ходимо знать несколько следующих правил /15/:
1) Параметр цикла, начальное и конечное значения должны
быть одного типа.
2) Запрещено изменять внутри цикла (в теле цикла) значения
следующих составляющих цикла: имя, выражение I, выражение2.
3) Запрещено передавать управление в теле цикла извне минуя
заголовок (обращение к циклу) цикла For, т. к. начальное и ко-
нечное значения вычисляются один раз при первоначальном входе
в цикл.
4) Тело цикла не выполняется, если начальное значение при
служебном слове То больше (при Downto меньше) чем конечное.
5) После выхода из цикла For значение имя нс определено и не
может быть использовано в дальнейших вычислениях.
6) После служебного слова Do может быть записан только один
оператор, поэтому в случае, когда в теле цикла содержится неско-
лько операторов, их необходимо заключать в операторные скобки
begin и end. организуя, составной оператор.
213
Тема 6. Разработка программ циклической структуры
6.3. Цикл с предусловием
Часто цикл «цикл с предусловием (While)», называют цикл
«Пока» /15, 27/.
На языке Pascal синтаксис цикла While записываетоя следую-
щим образом:
While условие повтора Do оператор:
По-русски можно прочитать это так: «Пока условие повтора ис-
тинно. выполняй оператор (т. с. тело цикла)».
Здесь оператор выполняется в цикле до тех нор, пока условие
(логическое выражение) продолжения никла истинно. Если же
условие становится ложным, то цикл прекращает функциониро-
вать и выполняется оператор, следующий за оператором While.
Если условие продолжения никла ложно с самого начала, то
оператор, следующий за служебным словом Do, не выполнится ни
разу. Условие продолжения цикла вычисляется и анализируется
перед каждым шагом выполнения цикла, отсюда и термин «преду-
словие».
Если условие изначально истинно и в теле цикла нет действий,
влияющих на истинность этого условия, то тело никла будет вы-
полняться бесконечное количество раз. Такая ситуация называет-
ся «зацикливанием». Прервать зациклившуюся протрамму может
либо сам программист (нажав Ctrl+C), либо аварийный останов
самой программы, в случае переполнения переменной, деления на
ноль и т. п., поэтому использовать структуру цикла следует с осто-
рожностью, хорошо понимая, что многократное выполнение дол-
жно когда-нибудь заканчиваться.
В структуре цикла «Пока» используются следующие служебные
слова: While (пока) и Do (делай).
Здесь, так же как в синтаксисе условного оператора, подразу-
мевается выполнение только одною оператора. Если необходимо
выполнить несколько действий, то эти действия необходимо объе-
динить в один составной оператор с помощью операторных ско-
бок begin и end.
Синтаксис цикла W'hilc следующий:
W hile условие Do
Begin
оператор I;
оператор!;
214
6.3. Цикл с предусловием
операторЗ;
End;
Схема выполнения цикла While изображена на рис. 6.2. Здесь
для определенности примем следующие обозначения: условие по-
втора — N2 > N1; оператор I (тело цикла) — «вычисление и пе-
чать функции
Рис. 6.2. Схема цикла с предусловием
Проиллюстрируем применение оператора цикла While на про-
стом примере.
Пример: Вычислить и распечатать значения функции с испо-
льзованием оператора с предусловием при изменении переменной
i от i = N1 до i = N2.
Листинг 6.2:
Program primcr6_2;
Var
Nl,N2.i,F,k: integer.
Begin
write('Задайте начало диапазона вычислений, N1 -
215
Тема 6. Разработка программ циклической структуры
read! N I);
write('Задайте конец диапазона вычислений, N2 - ');
rcad(N2);
i;=Nl; {задание начального значения параметра цикла}
While i <= N2 do {проверка условия начала циклических
вычислений}
begin
F:= i+З; {вычисление значения функции}
writelnC F[',i.'| = F:3);
i:=i+l; [изменение текущего значения параметра цикла}
end; {конец цикла}
End.
При организации циклической структуры «с предусловием» не-
обходимо знать несколько следующих правил /27/:
I) Число повторений операторов цикла While определяется в
холе работы программы и. как правило, заранее неизвестно.
2) Для успешного завершения цикла While в ею теле обязатель-
но должны быть инструкции, оказывающие влияние на условие
выполнения и завершения цикла. Другими словами, переменная,
которая участвует в условии повтора цикла, обязательно должна
изменяться в теле цикла.
3) Для управления циклом While удобно использовать функции
Succ или Prod и процедуры Inc или Dec.
4) Цикл While — это цикл с предусловием, а это проверяемое
перед циклом условие может быть ложным с самого начала.
В этом случае инструкции гсла цикла не будут выполнены ни
разу. Исходя из этого. While считается самым универсальным ви-
дом циюта.
5) Цикл While удобнее всего использовать в тех задачах, когда
возможны ситуации невыполнения условия цикла.
6) В операторе цикла While точка с запятой после зарезервиро-
ванного слова Do никогда нс ставится. Если по ошибке эта точка
с запятой будет поставлена, то компьютер посчитает, что тело
цикта представляет собой пустой оператор, и сообщение об ошиб-
ке не выдаст. Работа протрам мы при этом продолжится, но резу-
льтаты будут неверными.
7) По смыслу условия повторения цикла в операторе While по-
нятия «шаг изменения переменной» не существует.
216
6.4. Цикл с постусловием
6.4. Цикл с постусловием
Часто цикл «с постусловием (Repeat)» называют цикл «До».
Этот вид цикла отличается от предыдущего в основном тем. что
проверка условия повторения тела цикла находится нс перед ним,
а после. Поэтому никл «До» называют циклом «с постусловием»
/15. 27/.
Следует также обратить внимание на то, что в данном цикле
новая итерация (повторное выполнение тела цикла) происходит
нс тогда, когда условие справедливо, а тогда, когда оно как раз на-
оборот ложно. Поэтому цикл и получил свое название «До» из
условия того, что выполнять тело цикла нужно до выполнения со-
ответствующего логического условия.
Важно отметить, что в случае, когда условие цикла изначально
истинно, тело цикла все равно будет выполнено хотя бы один раз.
Именно это отличие «до» от «пока» привело к тому, что в про-
граммировании они не подменяют друг друга, а используются для
решения задач, к которым они более подходят. В структуре цикла
«До» используются следующие служебные слова: Repeat (повто-
ряй) и Until (до тех пор пока).
Синтаксис цикла Repeat выглядит следующим образом:
Repeat
оператор'.
Until условие выхода из цикла;
Читается так: «Выполнять оператор (тело цикла) до тех пор,
пока нс будет выполнено условие выхода из цикла».
Оператор или группа операторов, следующие после служебного
слова Repeat, выполняются при входе в оператор цикла хотя бы
один раз. И только после этого вычисляется булево выражение,
следующее за служебным словом Until. Если булево выражение
имеет значение false, оператор или группа операторов, выполняет-
ся вновь, и так до тех пор. пока булево выражение нс примет зна-
чение true.
Здесь не требуется использование составного оператора, наго-
му. что сами служебные слова Repeat и Until выступают оператор-
ными скобками.
Схема выполнения цикла Repeat изображена на рис. 6.3. Здесь
для определенности приняты следующие обозначения: оператор I
217
Тема 6. Разработка программ циклической структуры
(тело цикла) — «вычисление и печать функции /(/)»; условие вы-
хода из цикла — i > N2.
Рис. 6.3. Схема цикла с постусловием
Проиллюстрируем применение оператора цикла Repeat на про-
стом примере.
Пример: Вычислить и распечатать значения функции с исполь-
зованием оператора с предусловием при изменении переменной i
от i = N1 до i = N2.
Листинг 6.3:
Program primer6_3;
Var
Nl,N2,i,F,k : integer;
Begin
write('Задайте начало диапазона вычислений, N1 = ');
rcad(Nl);
write('Задайте конец диапазона вычислений, N2 = ');
read(N2);
i:=Nl; {задание начального значения параметра цикла]
Repeal {начало цикла]
F:= i+З; {вычисление значения функции}
writcln (’ Fl',i,'] = F:3);
i:—i+l; {изменение текущего значения параметра цикла]
Lntii i>N2; {проверка условия окончания циклических вычислений}
End.
218
6.5. Вложенные циклы
При организации циклической структуры «с постусловием» не-
обходимо знать несколько следующих правил /27/:
1) Число повторений операторов цикла Repeat определяется в
ходе работы программы и во многих случаях заранее неизвестно;
2) Для успешного завершения цикла Repeat в его теле обязате-
льно должны быть инструкции, выполнение которых влияет на
условие выполнения и завершения никла, иначе программа может
зациклиться. Другими словами, переменная, которая участвует в
условии выхода из цикла, обязательно должна изменяться в теле
цикла.
3) Для управления циклом Repeat удобно использовать функ-
ции Slice или Bred и процедуры Inc или Dec;
4) Цикл Repeat — это цикл с постусловием, т. с. инструкции
тела цикла будут выполнены хотя бы один раз. Выше мы видели,
что никлы For и While могут вообще ни разу нс выполниться. Поэ-
тому никл Repeat удобно использовать в тех случаях, когда тело
цикла гарантированно должно выполниться хотя бы один раз. На-
пример, оператор Repeat часто используется для проверки прави-
льности ввода исходных данных или пароля. Понятно, что это как
раз такие случаи, когда тело цикла гарантированно выполняется
один раз, а при наличии ошибки — более одного раза.
5) Нижняя граница операторов тела цикла четко обозначена
словом Until, поэтому нет необходимости заключать эти операто-
ры в операторные скобки Begin ... End. В то же время наличие
операторных скобок не будет являться ошибкой
6) По смыслу условия выхода из цикла в операторе Repeat по-
нятие «шаг изменения переменной» не существует.
6.5. Вложенные циклы
В геле любого оператора никла могут находиться другие опера-
торы /27/. При этом цикл, содержащий в себе другой цикл, назы-
вается внешним, а цикл, находящийся в геле первого, называется
внутренним (вложенным).
Внешние и внутренние циклы, составляющие одну сложную
программную конструкцию, могут быть циклами разного вида.
При этом правила организации любого внешнего или внутреннего
цикла закис же, как и для простого цикла.
219
Тема 6. Разработка программ циклической структуры
Следует обратить внимание на то, что при программировании
сложных (вложенных) циклов возникает следующее дополнитель-
нос условие: все операторы внутреннего цикла должны полностью
располагаться в теле соответствующего ему ближнего внешнего
цикла.
Схема принципиального алгоритма сложной циклической кон-
струкции, содержащей внутренний (вложенный) цикл изображена
на рис. 6.4. Здесь для определенности и для внешнею и для внут-
реннего циклов рассматриваются циклы вида For с увеличением
счетчика.
Во внутреннем цикле приняты следующие обозначения:
имя параметра (счетчика) — j; начальное значение (выражение
I) — Ml; конечное значение (выражение 2) — М2; оператор (тело
цикла) — «вычисление и печать функции f(i.j)».
Во внешнем цикле приня ты следующие обозначения:
имя параметра (счетчика) — i; начальное значение (выражение
1) — N1: конечное значение (выражение 2) — N2; оператор (тело
цикла) — то же самое тело, что и во внутреннем цикле — «вычис-
ление и печать функции
Из блок-схемы на рис. 6.4 наглядно видно, как выполняется
сложная циклическая конструкция:
а) сначала полностью выполняется внутренний цикл. При этом
значение внутреннего параметра j полностью «пробегает» по всем
возможным значениям от Ml до М2, а значение внешнего пара-
метра i остается фиксированным;
Ь) затем значение параметра i внешнего цикла изменяется на
единицу, и опять от начала до конца (от Ml до М2) выполняется
внутренний (вложенный) цикл. И гак до тех пор пока параметр i
внешнего цикла не «пробежит» по всем возможным значениям от
N 1 до N2;
с) сложный цикл полностью завершит свою работу тогда, когда
параметр i внешнего цикла превысит конечное значение N2 внеш-
него цикла.
Заметим, что изображенный на рис. 6.4 сложный цикл удобен
для вычисления и печати некоторого двумерного массива (табли-
цы), у которого количество строк равно i (с элементами от N1 до
N2), а количество столбцов равно j (с элементами от Ml до М2).
Проиллюстрируем применение сложного цикла (вида изобра-
женною на рис. 6.4) на простом примере.
220
6.5. Вложенные циклы
Рис. 6 4 Схема сложной циклической конструкции с вложенным
внутренним циклом (вид внутреннего и внешнего циклов — Рог с
увеличением счетчика)
Пример: Вычислить и вывести на экран значения двумерной
функции = i + j + 3 при параметрах внутреннего цикла j от
Ml - 1 до М2 = 5 и при параметрах внешнего цикла i от N1 - 1
до N2 = 3.
Листинг 6.4:
Program primer6_4;
Var
Nl, N2, Ml, М2, i, j, F: integer;
Begin
шл(с('Ввсдите Nl = ');
read(NI);
м11с('Ввсдитс N2 = У
rcad(N2);
write('Введите Ml =');
221
Тема 6. Разработка программ циклической структуры
read(MI);
writc('BBC,iHTC М2 -
read (М2);
For i:—Nl to N2 do {Начало внешнего цикла по параметру /}
begin
For j:—Ml to М2 do {Начало внутреннего цикла no параметру/}
begin
F:—i+j+3; {Вычисление функции }
write(F:3, '{Вывод результатов расчета в одну строку}
end; (Закрытие внутреннего цикла по параметру j |
writcln; {Перевод курсора на новую строку}
end; { Закрытие внешнего цикла по параметру /}
End.
Программа вычислит и выведет на экран следующий двумер-
ный (3x5) массив чисел:
5 6 7 8 9
6 7 8 9 10
7 8 9 10 II,
в чем легко убедиться простым вычислением функции в
уме.
6.6. Дополнительные примеры и практические
задания по теме 6
В данном разделе сформулированы практические примеры и
задания для студентов, позволяющие закрепить на практике тео-
ретический материал, изложенный в теме 6. Для самопроверки
студенты могут познакомиться в теме 10 с возможными варианта-
ми ответов на предложенные задания.
6.6.1. Дополнительные примеры
Пример 1. Пик.! с параметром. /15/.
Определить номер некоторой буквы в латинском алфавите.
Весь латинский алфавит (от буквы А до буквы Z) входит в состав
символов, определяющих тип Char Поэтому переменная символь-
ного типа позволяет организовать циклический вычислительный
процесс в следующем виде:
Л истин) 6.5: Определение номера буквы в латинском алфавите.
222
6.6. Дополнительные примеры и практические задания по теме 6
Program Leltrc;
Var
Bukva: char; {bukva — буква латинского алфавита}
ch : char; {ch — параметр цикла]
к: integer; { k — счетчик}
Begin
Writcf Введите любую букву латинского алфавита: *);
Read( Bukva);
k := 0;
for ch 'A' to Bukva do {начало цикла]
k:=k+l; {конец цикла]
WriteCbyKBa Bukva, ' имеет номер k , ' в латинском
алфавите');
End.
11ри.мср 2. Цикл с параметром /27/.
Иршрамма, которая суммирует числа, введенные с клавиатуры.
Эта задача встречается в кораблестроении, на флоте или на
водном транспорте довольно часто, когда необходимо определить
суммарный вес погруженных на судно или выгруженных с судна
различных грузов.
Если количество чисел известно заранее, то наилучшим реше-
нием является цикл for
Листин! 6.6: Суммирование любого количества целочисленных
значений.
Program Symma;
Var
х, n, i: integer;
sum : integer.
Begin
writef Введите количество чисел: ’);
read(n);
sum := 0;
for i:=l to n do
begin
writcf'Введите значение ’ ,i, '-го слагаемого: ’);
rcad(x); {ввод очередного значение л)
sum:= sum+x;
end;
223
Тема 6. Разработка программ циклической структуры
writc('CyMMa введенных чисел = sum);
End.
Пример 3. Цикл с постусловием.
Вычислить значение функции у(х) = <№ + 2 на интервале от
NI до N2 с заданным шагом и вывести значения на экран.
Листинг 6.7: Вычислить значение функции.
Program Cycle 1;
Var
Nl,N2,y, x,h : real;
Begin
writef Введите начальное значение интервала, Nl - ');
rcad( NI);
writef Введите начальное значение интервала, N2= ');
read(N2);
write('Введите шаг изменения аргумента функции, h= ’);
read(h);
х: N1; {задание начального значения аргумента функции}
repeat
у := sqrt(x * х + 2); {вычисление текущего значения функции}
writeln(Tlpn х =’, х:5:3, ' значение функции у(х)=', у:5:3);
х := х + h; {изменение значения аргумента на величину шага}
until х > N2 {проверка выхода значения аргумента за верхнюю
границу' диапазона — проверка окончания
циклических вычислений]
End.
Пример 4. Цикл с постусловием.
Игра «угадай число» /27/.
Условие этой игры в том, что игрок должен угадать число (на-
зовем его Comp), «задуманное» компьютером — случайное число в
диапазоне от 0 до 1000. Процесс продолжается до тех пор, пока
значение переменной Igrok. которое вводится с клавиатуры, не
совпадет со значением переменной comp.
Листинг 6.8: Hipa «угадай число».
Program Igra;
Var
Comp : integer; (число «задуманное» компьютером]
Igrok : integer; {вариант игрока]
Begin
224
6.6. Дополнительные примеры и практические задания по теме 6
Randomize; {инициализация датчика случайных чисел}
Comp := random) 1000); {компьютер «загадал» число}
repeat
\¥п1е('Введите любое число: ’);
Read (Igrok);
if Igrok > Comp then Writeln(* Слишком много ... ’)
eke if Igrok < Comp then Writelnf Слишком мало ...')
eke WritelnC Вы угадали ! ’);
until Igrok = Comp;
End.
Пример 5. Цикл с предусловием /27/.
Тест по таблице умножения.
Листинг 6.9: Тест по таблице умножения.
Program Test;
Var
si, s2, otvet, koi, prav : integer;
yn: char;
Begin
randomize;
writeCHaMHCM тест? (Y/N)');
rcad(yn);
prav := 0;
while (yn <> 'n') and (yn <>'N') do
begin
koi := koi + I;
si ;= random! 18) + 2;
s2 := random(l8) + 2;
wгite('Cкoлькo будет si , s2 , ’ =
read (otvet);
if otvet = si * s2 then
begin
write ( Правильно! ');
prav := prav + I;
end
else write (’Неверно...’);
write(’llpoдoлжим тест? (Y/N)');
read(yn);
end: {конец цикла}
if koi > 0 then {нынодим результаты, только если тест состоялся}
225
Тема 6. Разработка программ циклической структуры
begin
шп(е1п('Результаты теста: ’);
writclnf Задано вопросов: ’, koi);
лп(е1п(’Правильных ответов: prav);
readin;
end:
End.
6.6.2. Практические задания
Задание 1. Используя цикл с параметром, вывести на экран по-
следовательность цифр 5,4,3,2,1.
Задание 2. Используя оператор цикла с предусловием, вычис-
лить сумму цифр от 1 до 10.
Задание 3. Используя оператор цикла с постусловием, вывести
на экран квадраты чисел от I до 10.
6.7. Контрольные вопросы по теме 6
В данном разделе сформулированы контрольные вопросы для
студентов, позволяющие закрепить знание теоретического матери-
ала, изложенното в теме 6. Для самопроверки студенты могут по-
знакомиться в теме 10 с возможными вариантами ответов на пред-
ложенные вопросы.
Вопрос 1. Что такое цикл и тело цикла?
Вопрос 2. Какие виды цикла вы знаете?
Вопрос 3. Как выглядит общая структура цикла с параметром?
Вопрос 4. Как выглядит общая структура цикла с предусловием?
Вопрос 5. Как выглядит общая структура цикла с постусловием?
226
Тема 7. Работа с массивами
Цели темы 7: Показать разработку программ при наличии масси-
вов. Разъяснить понятия о массиве и показать описание массивов и
действия над ними. Сформулировать одномерные, двумерные и много-
мерные массивы. Дать рекомендации по работе с массивами.
При написании данного раздела использованы работы /15. 27/.
7.1. Понятие массива
До сих пор мы рассматривали переменные, которые имели то-
лько одно значение, могли содержать в себе только одну величину'
определенного типа.
В математике, экономике, информатике, проектировании объ-
ектов, транспортной логистике и других областях человеческой
деятельности часто используются упорядоченные наборы данных.
Например, последовательности чисел (время в маршрутных лис-
тах), таблицы (характеристики транспортных систем, складские
операции и др.), списки (перечень фамилий сотрудников, подряд-
чиков, потребителей и г. д.). Для обработки набора данных одного
типа вводится понятие массива.
Массив — совокупность конечного числа данных одного типа.
Массив обозначается одним именем. Гак всю совокупность дейст-
вительных чисел (например, таких как I.6. I4.9, —5.0, 8.5, 0 46)
можно считать массивом и обозначить одним именем, например,
А. Каждый элемент массива обозначается именем массива с ин-
дексом. Элементы массива упорядочены по значениям индексов.
Конечно, можно завести столько переменных, сколько данных,
можно даже занести в них значения, но только представьте, какой
величины будет текст такой программы, сколько времени потре-
буется для его составления, как много места для возможных оши-
бок? Естественно, об этом задумывались и авторы языков про-
граммирования. Поэтому во всех существующих языках имеются
типы переменных, отвечающие за хранение больших массивов
данных. В языке Pascal они так и называются: «массивы».
Массивом будем называть упорядоченную последовательность
данных одного типа, объединенных под одним именем. Кстати,
под эго определение подходи! множество объектов из реальною
227
Тема 7. Работа с массивами
мира: словарь (последовательность слов), фильм (последователь-
ность кадров) и т. д. Проще всего представить себе массив в виде
таблицы, где каждая величина находится в собственной ячейке.
Положение ячейки в таблице должно однозначно определяться
набором координат (индексов). Самой простой является линейная
таблица, в которой для точного указания на элемент данных до-
статочно знания только одного числа (индекса). Такой массив на-
зывается линейным (или одномерным).
Если массив состоит из элементов, для точною указания кото-
рых нужно знать два числа (два индекса), то такой массив называ-
ется двумерным.
Массивы могут быть трехмерными, четырехмерными и более.
Это зависит от особенностей решаемой задачи.
Удобство массива заключается в том, что элементы массива
пронумерованы, и обратиться к ним можно по номеру (или по не-
скольким номерам — например, для элемента таблицы задастся
номер строки и номер столбца) /27/. Номера элементов массива
называются индексами, а сами элементы массива — переменными с
индексами (индексированными переменными)
Каждый массив имеет гри характеристики:
а) тип — общий одинаковый тип для всех элементов массива;
б) размерность — количество индексов у массива в целом (у
каждого элемента массива);
в) диапазон изменения индекса (индексов) — количество элемен-
тов в массиве применительно к каждому индексу.
В памяти компьютера все элементы массива обязательно зани-
мают одну непрерывную область. Двумерные массивы располага-
ются в памяти по строкам: сначала все элементы первой строки,
затем — второй и т. д. /27/.
7.2. Описание массива
Элементы массива мотут иметь любой тип, кроме файлового.
Индексы имеют порядковый тип, чаше всего в виде диапазона
/27/.
Наиболее часто индекс — это целая константа, или переменная
типа Integer, реже — типа Char или Boolean. При обращении к эле-
менту массива индекс указывается в квадратных скобках после
имени массива, например, A|i| или B|iJ|.
228
7.3. Одномерные массивы
Сам массив — это тип, определяемый пользователем на основе
типа его элементов и типа индексов. Поэтому имеется два основ-
ных способа описания массива:
а) сначала описать тип массива в разделе описания типов, а за-
тем описать переменную этого тина;
б) описать массив непосредственно в разделе описания пере-
менных. В этом случае используется анонимный, т. е. безымян-
ный тип.
Самый простой и короткий способ описания массива — эго
объявить переменную в разделе переменных Var с использованием
зарезервированного слова Array (т. е. массив). Выполнение этой
процедуры будет конкретно рассмотрено в последующих пунктах.
Описание массива требуется компилятору для выделения памя-
ти под его элементы.
При использовании 16-разрядных компиляторов, существует
ограничение по размеру памяти, отводимой под переменные од-
ной программы — 64 Кбайт. При использовании 32-разрялньгх
компиляторов практически нет никаких ограничений на размеры
используемых массивов. Более того, в последних версиях Delphi
(начиная с четвертой) разрешено использовать динамически фор-
мируемые (открытые) массивы, размеры которых нс задаются при
описании, а устанавливаются по ходу программы при помощи
специальной процедуры Setlength.
7.3. Одномерные массивы
Примером одномерного (линейного) массива может являться
перечень номеров квартир в доме или список фамилий студентов
одной труппы.
Применительно Ж кораблестроению примером одномерного мас-
сива является таблица значений площадей теоретических шпанго-
утов одного судового корпуса. К этом случае номер шпангоута —
это и есть единственный индекс, необходимый для однозначной
идентификации любого элемента этого массива.
Как было указано в предыдущем пункте описать массив можно
либо в разделе Туре, либо в разделе Var.
Если описание массива производится в разделе Гуре, то син-
таксис одномерного массива выглядит гак:
229
Тема 7. Работа с массивами
Гуре
Имя типа = Array (Диапазон индексов! Of Тип массива;
В качестве индексов могут выступать переменные любых по-
рядковых типов. При указании диапазона начальный индекс не
должен превышать конечный. Тип элементов массива может быть
любым (стандартным или описанным ранее).
Если описание массива производится сразу (без предваритель-
ного описания типа) в разделе переменных Var, то синтаксис од-
номерного массива выглядит так:
Var
Имя переменной массива : Array (Диапазон индексов! Of Тип
элементов;
Примеры описания массивов:
Var
S. В В : Array (I..20| of Kcal;
N: Array |’A'..’Z'| of Integer:
R: Array |—20..20| of Word;
T: Array | L.20| of Real;
Здесь переменные S, BB и T представляют собой массивы из
двадцати вещественных чисел; массив N имеет индексы символь-
ного типа и целочисленные элементы; массив R может хранить в
себе 41 число типа Word (от минус 20 до плюс 20, включая ноль).
Единственным действием, которое возможно произвести с мас-
сивом целиком — присваивание. Для данного примера в последст-
вии допустимо присваивание массиву S нового имени ВВ, г. е. до-
пустима следующая запись: S:=BB;
Однако, осуществлять присваивание можно только с массива-
ми одинаковых типов и только если они описаны в одной записи
раздела. В данном случае массиву Т присвоить массив S нельзя,
хотя, их описания совпадают. Связано это с тем, что их описания
произведены в различных записях раздела описания.
Никаких других операций с массивами целиком произвести не-
возможно, но с элементами массивов можно работать точно так
же, как с простыми переменными соответствующего типа. Обра-
щение к отдельному элементу массива производится при помощи
указания имени всего массива и в квадратных скобках — индекса
конкретного элемента.
Например:
К| 10] — элемент массива R с индексом 10.
230
7.4. Двумерные и многомерные массивы
Функциональное отличие компонента массива от простой пе-
ременной состоит в том, что для элемента массива в квадратных
скобках может стоять нс только непосредственное значение ин-
декса, но и выражение, приводящее к значению индексного типа.
Таким образом, реализуется косвенная адресация:
ВВ| 15J — прямая адресация;
BB|KJ — косвстптая адресация через переменную К. значение ко-
торой будет использовано в качестве индекса элемента массива ВВ.
Такая организация работы с такой структурой данных, как мас-
сив. позволяет использовать никл для заполнения, обработки и
распечатки его содержимого.
В качестве иллюстрирующего примера приведем здесь програм-
му, которая осуществляет заполнение массива с клавиатуры и вы-
вод его содержимого для контроля на экран в прямом порядке.
Листинг 7.1:
Program primcr7_l;
Var
А : Array 11.. I0J of integer;
i: integer;
Begin
for i :=1 to 10 do | Организуем цикл с параметром i по всем
возможным}
begin {значениям индексов}
writeC Введите i , '-й элемент матрицы А, А[ i , ' ]- ’);
read( А[i]); {вводим элементы массива A/iJ с клавиатуры}
end:
for i:—1 to 10 do {Организуем цикл для вывода содержимого}
begin { данного массива на экран}
write('A[', * j 1 ~ '• A[i|. ''); {вывод элементов массива
в строку}
end;
End.
7.4. Двумерные и многомерные массивы
Если чисто индексов в описании массива равно двум, то мас-
сив называется двумерным, если число индексов равно N. то мас-
сив называется N-мерным (или многомерным). В языке Pascal нс
накладывается ограничений на чисто измерений массива /15/.
231
Тема 7. Работа с массивами
Многомерные массивы представляют собой чистую абстракцию
поскольку память ЭВМ одномерна и многомерные массивы хра-
нятся в ней в виде линейных последовательностей значений. При
этом сначала делается запись «в линию» по первому индексу, за-
тем по второму, третьему и т. д.
Примером двумерного (плоского) массива может являться таб-
лица, в которой указаны отдельно фамилии, отдельно имена и от-
дельно отчества студентов. Такой массив представляет собой таб-
лицу, в которой строк столько, сколько студентов в группе, а
столбцов — три: фамилия студента, имя студента, отчество студен-
та. Заметим, что здесь все переменные (фамилия, имя, отчество)
имеют, как и положено для массивов, один тип. В данном случае
это строковый тип String
Отметим также, что этот пример нс следует пугать с примером
создания экзаменационной ведомости студенческой группы. Экза-
менационная ведомость, как и в предыдущем примере, может
представлять собой таблицу, в которой строк столько же, сколько
студентов в группе. И столбцов тоже три: номер по порядку, фа-
милия студента и некоторая среднеарифметическая оценка, запи-
санная в виде дробного балла (например, 4.25). В данном случае
вес переменные имеют разный тин: номера по порядку — целый
тип Integer, фамилии студентов — строковый тип String , дробные
оценки — вещественный тип Kcal. 11оэтому такая форма представ-
ления данных называется не массивом, а записью, познакомиться с
которой можно в теме 9.
Применительно к кораблестроению примером двумерного мас-
сива будет являться таблица точении площадей теоретических
шпангоутов для нескольких судовых корпусов. В этом случае для
однозначной идентификации .нового элемента этого массива нуж-
но тать два индекса — номер судна и номер шпангоута.
Рассмотрим сначала организацию двумерного массива.
Описать такой массив можно двумя способами.
Способ первый:
Var
А : Array ]1„20] Of Array [1. 30] Of Integer;
Способ второй:
Var
А : Array |l..20,l..30| Of Integer;
232
7.4. Двумерные и многомерные массивы
В обоих случаях описан двумерный массив, соответствующий
таблице, состоящей из 20 строк и 30 столбцов Приведенные опи-
сания совершенно равноправны.
Адрес отдельного элемента двумерного массива формируется
двумя индексами.
Например, ячейка, находящаяся в 5-й строке и 6-м столбце бу-
дет называться А|5||6| или А|5,6|.
Для иллюстрации способов работы с двумерными массивами
рассмотрим на следующем примере /46/.
Пример:
Задать и вывести на экран массив 10x10, состоящий из целых
случайных чисел в интервале 11,100]. Найти сумму элементов, ле-
жащих выше главной диагонали.
При отсчете, начиная с левого верхнего угла таблицы, главной
будем считать диагональ из левого верхнего утла таблицы в пра-
вый нижний. При этом получается, что элементы, лежащие на
главной диагонали будут иметь одинаковые индексы, а для эле-
ментов выше главной диагонали номер столбца будет всегда пре-
вышать номер строки. Договоримся также сначала указывать но-
мер строки, а затем — номер столбца.
Листинг 7.2:
Program prime г7_2;
Var
А : Array] 1..10,1..10| of integer.
i, k : Byte;
S : integer;
Begin
Randomize;
S:=0;
writclnC Массив A');
for i:=l to 10 do
begin
for k:=l to 10 do
begin
A]i,k]:-Trunc( Random* 100)+1;
writef A|i,k|:6);
If k>i then S:=S+A|i,k|;
end:
wrileln;
233
Тема 7. Работа с массивами
end;
жп1е1п(’Сумма элементов выше главной диагонали равна S—,S);
End.
Если массив является N-мсрным, то формат описания такого
типа данных имеет следующий вид:
Туре
Имя типа” Array [диапазон индекса! .диапазон индекса2,.„,
диапазон индекса N] Of пт компонент;
Отдельный элемент именуется так:
Ими массива)Индекс I,Индекс 2, ...Индекс N]
7.5. Действия над массивами
Ранее уже упоминалось, что над массивом как целым допуска-
ется только одна операция — операция присваивания /27/.
Что касается элементов массива, то по отношению к ним в
языке Pascal возможны различные действия. Рассмотрим некото-
рые из них.
7.5.1. Заполнение массива данными
Массив можно заполнить несколькими способами.
Способ первый — инициализация массива начальными значе-
ниями элементов. При описании массива как типизированной
константы можно сразу указать в круглых скобках список значе-
ний элементов массива
Например:
Const
X : Array] 1..2, 1-31 Of Integer = (1,3,5),(2,4,6);
В этом случае в память компьютера будет сформирован двумер-
ный массив X, состоящий из чисел:
1 3 5
2 4 6
Способ второй — ввод значений элементов с клавиатуры.
Способ третий — присваивание элементам значений, определен-
ных в про1рамме, в том числе и выбранных случайным образом.
Способ четвертый — считывание значений элементов из внеш-
него файла.
234
7.5. Действия над массивами
Для способов второго, третьего и четвертого используется ЦИКЛ.
Наиболее удобным при этом является цикл For, причем для двух- и
многомерных массивов применяется процедура вложенных циклов.
Покажем некоторые примеры /27/.
При вводе с клавиатуры массива 3x2 фрагмент программы мо-
жет выглядеть так:
For i:=l to 3 do
For j:=l to 2 do
begin
writcf Введите элемент массива A|*, i, , j , *]=
Read (A|ij|);
end;
При заполнении одномерного массива X массив из п элементов
случайными числами в диапазоне от 0 до 99 включительно фраг-
мент программы выглядит так:
Randomize; {инициализация генератора случайных чисел)
For i:=l to n do X|i|:= Random(lOO);
Иногда приходится заполнять массив нулевыми значениями —
обнулять массив. Тогда фрагмент программы (для обнуления дву-
мерного массива А с параметрами пхщ) выглядит как следующий
вложенный цикл:
For i:=l to n do
For j:=l to m do
A|ij]=0;
7.5.2. Вывод элементов массива
Вывод значений элементов массива гак же выполняется в цик-
ле For с использованием операторов Write и Writein /27/.
Например, покажем вывод одномерного массива А из пяти эле-
ментов:
а) Вывод в форме столбца:
For i:=4 to 5 do Writcln(A|i|);
б) Вывод в форме одной строки через пробел-разделитель:
For i:=l to 5 do Writc(A|i|, '
Writein;
в) Вывод в форме одной строки с заданием формата, где под
каждый элемент отводится 4 позиции:
235
Тема 7. Работа с массивами
For i:=l to 5 do Writc(A(i|:4);
Writein;
Если требуется вывести двумерный массив А с параметрами
пхщ в стандартной форме (г. с. но строкам и столбцам), то эго вы-
полняется гак:
For i:=l to n do
begin
For j:—l to m do Writc(A[i jj:4, ’');
Writein; {ЗЙесь оператор Writein предназначен для перевода
курсора на новую строку после вывода очередной
строки массива}
end;
7.5.3. Перестановка элементов в массиве
Иногда требуется в массиве поменять местами (друг с другом)
некоторые элементы массива. При этом их значения в результате
перестановок нс изменяются, но изменяется порядок следования
элементов в массиве.
При выполнении перестановок обычно используется буферная
переменная, которая служит для временного хранения одного из
элементов /27/.
Например, переставим местами первый и второй элементы од-
номерного массива А. используя для временного хранения пере-
менную Buf:
Buf:-A[lj; А[2]; А[2]:- Buf;
При обработке двумерных массивов иногда требуется переста-
вить местами целые строки или столбцы. В этом случае вовсе нео-
бязательно использовать в качестве буфера обмена целый массив.
Одной переменной оказывается вполне достаточно, так как пере-
становка всех элементов выполняется по очереди.
Например, переставим местами первую и вторую строки масси-
ва А (т. с. переставим местами сохраняя порядок все элементы пер-
вой и второй строк). Для этого используется процедура цикла For:
For j:=l to m do
begin
But:-AllJJ;
A|IJ1:= A|2,j|;
A|2,j]:- Buf;
236
7.6. Рекомендации по работе с массивами
end;
7.6. Рекомендации по работе с массивами
При работе с массивами полезно помнить несколько рекомен-
даций /27/:
I) Границы изменении индекса должны быть константами. при
этом удобно использовать именованные константы. При описа-
нии 1рании массива нельзя использовать переменные, так как па-
мять под массив должна быть выделена до начала выполнения
программы, а переменные получают значения при выполнении
программы.
2) Нижняя граница индекса чаше всего равна I. т. с. обычно
элементы массива нумеруются, начиная с единицы. Возможны и
другие варианты нумерации индексов, но они применяются редко.
3) Верхнюю границу индексов определяют исходя из максима-
льно возможного (необходимого) количества элементов в массиве.
В большинстве реальных задач верхнюю границу можно опреде-
лить заранее. Но если количество элементов в массиве заранее
предсказать невозможно то в такой задаче лучше пользоваться не
обычным массивом, а динамическими структурами.
4) Поскольку в качестве индексов используются переменные
или выражения, то возможна ситуация выхода индекса за границы
массива. Например, если массив А описан как
А : Аггау| 1.. 100| of Integer;
то обращение к элементу Л| i | при i равном 0 или 101 означает
выход индекса за границы массива. У начинающих программистов
такая ситуация встречается довольно часто и поэтому здесь требу-
ется максимальная концентрация внимания программиста.
5) Ошибка выхода индекса за 1раницы массива выдастся только
тогда, когда включена директива компилятора ($R+J. Если эта ди-
ректива отключена (а по умолчанию она как раз отключена), го
выход за границы массива может испортить соседние с ним ячей-
ки памяти, что приведет к непредсказуемым ошибкам в програм-
ме. Поэтому' при отладке программы рекомендуется включать ди-
рективу {SR+}.
237
Тема 7. Работа с массивами
7.7. Дополнительные примеры и практические
задания по теме 7
В данном разделе сформулированы практические примеры и
задания для студентов, позволявшие закрепить на практике тео-
ретический материал, изложенный в теме 7. Для самопроверки
студенты могут познакомиться в теме II) с возможными варианта*
ми ответов на предложенные задания.
7.7.1. Дополнительные примеры
Пример 1. Вычислить произведение всех элементов, стоящих
на главной диагонали матрицы.
Листинг 7.3:
Program Elements;
Const
М-5;
N=5;
Var
A : arrayll..M, I..N] of integer;
S : integer;
Begin
for i := I to M do
begin
for j := I to N do
begin
Writcf Введите A|', i,' j. '| =
Rcad(A|ij|);
end;
end;
S := 1;
for i := I to M do
forj := I to N do
if i - j then S S * A|ij|;
\Ап(е1п('11роизведение элементов главной диагонали = S);
End.
Пример 2. Поиск минимального элемента в массиве.
Листинг 7.4:
Program MinElem;
Var
2.38
7.7. Дополнительные примеры и практические задания по теме 7
А : array) I.. 10| of integer;
min : integer;
i : integer;
Begin
writelnf Введите 10 элементов массива');
min:—A)1 j;
for i:=l to 10 do
begin
Writef A|', i, *| = ');
Kead(A|ijj);
if min>A|i| then min:=A|i|;
end;
writef 'Минимальный элемент массива - ', min );
End.
Пример 3. Программа транспонирования матрицы случайных
чисел /27/.
Транспонирование матрицы — эго такая операция, при кото-
рой матрица как бы «переворачивается», т. с. строки матрицы ста-
новятся столбцами, а столбцы становятся строками.
Листинг 7.5:
Program Trans Matrix;
Const
row=3;
col=row;
Var
a: array[l..row,l..col] of integer;
ij.buf: integer;
Begin
randomize; { инициализация датчика случайных чисел |
writelnl'Исходная матрица случайных чисел:');
For i:= 1 to row do ( формирование матрицы |
begin
For j:= I to col do
begin
a|ij]:=random(100); ( случайное значение элемента J
writc(a|ij|:4);
end;
writein;
end;
239
Тема 7. Работа с массивами
For i:=l to row do
begin ( просмотр всех строк матрицы }
For j:=i+l to col do
begin { просмотр элементов в строке, расположенных
выше главной диагонали }
buf:=a|ij|; {обмен элементов, симметричных
относительно главной диагонали }
a{i, jj :=a[j, ij;
a|j,i| :=buf;
end;
end:
writclnCРезультат транспонирования матрицы:’);
For i:= 1 to row do
begin
For j: = 1 to col do write(a|ij|:4);
writcln;
end;
End.
7.7.2. Практические задания
Задание 1. Объявите одномерный массив вещественного типа,
состоящий из 50 элементов.
Задание 2. Выведите на экран двумерный массив размерностью
NxM.
Задание 3. Используя операторы цикла, подсчитать количество
элементов удовлетворяющих какому либо условию (например,
A|ij| > 0) в двумерном массиве размерностью NxM.
7.8. Контрольные вопросы по теме 7
В данном разделе сформулированы контрольные вопросы для
студентов, позволяющие закрепить знание теоретического матери-
ала, изложенного в теме 7. Для самопроверки студенты могут по-
знакомиться в теме 10 с возможными вариантами ответов на пред-
ложенные вопросы.
Вопрос 1. Что такое массив?
Вопрос 2. Как описываются массивы в разделе описаний?
Вопрос 3. Как описывается двумерный массив?
Вопрос 4. Что такое двумерный массив?
240
Тема 8
Подпрограммы процедуры и функции
Цели темы 8: Показать разработку программ при использовании
подпрограмм, процедур и функции. Дать представление об особенно-
стях работы с подпрограммами, об особенностях описания типов в
подпрограммах. Разъяснить иерархию, описание констант и перемен-
ных и передачу параметров при использовании подпрограмм.
При написании данного раздела исследованы работы /15, 44,
47/.
8.1. Понятие подпрограммы, процедуры
и функции
Сначала обсудим понятие подпрограммы.
При решении сложных объемных задач, когда компьютерные
программы начинают насчитывать сотни и тысячи операторов, на-
писание, отладка, хранение и модернизация таких программ ста-
новятся очень неудобными. В этом случае целесообразно разби-
вать общую сложную программу на отдельные фрагменты. Важно,
чтобы, такие фрагменты были, с одной стороны, взаимоувязаны в
общий алгоритм программы, а с другой стороны, были бы доста-
точно самостоятельными.
При соответствующем оформлении такие самостоятельные
фрагменты программы называются подпрограммами Подпрофам-
ма — это отдельная профаммная единица со своим именем и сво-
ими входными и выходными данными. К подпрограмме можно
обращаться из основной программы по мерс необходимости. Под-
программу проще продумать, написать, отладить хранить и модер-
низировать.
Такая же идея выделения части профаммы в отдельные само-
стоятельные подпрофаммы возникает и тогда, когда в алгоритме
общей программы имеется несколько одинаковых фрагментов.
В этом случае возникает естественное стремление программиста
оформить повторяющийся фрагмент в виде отдельного блока
(подпрограммы), а затем обращаться к нему в основной програм-
ме столько раз, сколько позребуетея.
241
Тема 8. Подпрограммы процедуры и функции
ПодпрО1рамма, возникающая из ситуации повторяемости оди-
наковых фрагментов основной программы, разделяется на два
вида: процедуры и функции.
Процедуры и функции похожи друг на друга, но имеют отли-
чия.
Похожесть процедур и функций заключается в том, что к ним
как к обычной подпро1рамме можно обратиться по имени и в ре-
зультате будет выполнена какая-то локальная задача.
Отличие заключается в том. что именно является результатом
работы процедуры или функции. Результатом работы процедуры
является набор вычисленных (или как-то обработанных) перемен-
ных. которые могут быть возвращены из процедуры в основную
программу как некоторый набор данных. Результатом работы фун-
кции является вычисленное единственное числовое значение, ко-
торое и передастся назад в программу. При этом данное единст-
венное числовое значение несет имя функции.
Подпрограммы представляют собой инструмент, с помощью
которого любая основная программа может быть разбита на ряд в
известной степени независимых друг от друга частей. Такое разби-
ение необходимо но двум причинам.
Во-первых, это средство экономии памяти: каждая подпрог-
рамма существует в программе в единственном экземпляре, в го
время как обращаться к ней можно многократно из разных точек
программы. При вызове подпрограммы активизируется последова-
тельность образующих се операторов, а с помощью передаваемых
подпрограмме параметров нужным образом модифицируется реа-
лизуемый в ней алгоритм.
Вторая причина заключается в применении методики нисходя-
щего проектирования программ. В этом случае алгоритм представ-
ляется в виде последовательности относительно крупных подпрог-
рамм, реализующих более или менее самостоятельные смысловые
части алгоритма. Подпрофаммы в свою очередь могут разбиваться
на менее крупные подпрофаммы нижнего уровня и г. д. Последо-
вательное структурирование программы продолжается до тех пор,
пока реализуемые подпрограммами алгоритмы нс станут настоль-
ко простыми, чтобы их можно было легко запрограммировать.
С некоторыми процедурами и функциями мы уже сталкива-
лись — это стандартные процедуры чтения READ, READ LN, и за-
писи WRITE, WRITELN. функции ORD, CHR, математические
функции и др. Стандаргными они называются потому, что созда-
242
8.2. Структура подпрограмм «Процедура» и «Функция»
ны одновременно с системой языка Pascal и являются ее неотъем-
лемой частью. В Pascal имеется много стандартных процедур и
функции. Наличие богатой библиотеки таких программных заго-
товок существенно облегчает разработку прикладных программ.
Нестандартные процедуры и функции необходимо описать,
чтобы компилятор мог установить связь между оператором вызова
и теми действиями, которые предусмотрены в процедуре или фун-
кции.
8.2. Структура подпрограмм «Процедура»
и «Функция»
Структура подпрограммы на языке Pascal выглядит схожей со
структурой самой программы (см. рис. 3.1). Описание процедуры
(функции) помешается в разделе описаний и внешне выглядит как
программа, но вместо заголовка программы фигурирует заголовок
процедуры (функции).
Синтаксис описания процедуры:
Procedure <имя> [(<сп. ф. п . >:<тип>) ];
Раздел описаний
begin
Тело процедуры
end;
Синтаксис описания функции:
Function <имя> |(<сп.ф.п.>)| : <тип>;
Раздел описаний
begin
Тело функции
end;
Здесь <имя> — имя подпрограммы;
<сп.ф.п.> — список формальных параметров;
<тип> — тип возвращаемого функцией результата.
8.2.1. Вызов подпрограмм «Процедура» и «Функция»
Обращение к подпрограмме (вызов подпрограммы или заголо-
вок подпрограммы) начинается также как и в самой программе с
использования служебного слова только в данном случае это не за-
243
Тема 8. Подпрограммы процедуры и функции
резервированное слово Program, а либо слово — Procedure либо
служебное слово — Function.
Заголовок процедуры имеет вид:
PROCEDURE <имя> | (<сп. ф. п . > : <тип>) | ;
Заголовок функции:
FUNCTION <имя> | (<сп. ф. п. >)| : <тип>;
Упоминание имени подпрограммы (собственного имени про-
цедуры или функции) в тексте программы приводит к активиза-
ции процедуры или функции и называется вызовом iio.uipoipaMMbi.
Сразу после активизации процедуры или функции начинают вы-
полняться входящие в них операторы, после выполнения послед-
него из них управление возвращается обратно в основную про-
грамму и выполняются операторы, стоящие непосредственно за
оператором вызова процедуры или функции.
Для обмена информацией между основной программой и про-
цедурой используется один или несколько параметров вызова.
8.2.2. Директивы для подпрограммы
Сразу за заголовком подпрограммы может следовать одна из
стандартных директив ASSEMBLER, EXTERNAL, EAR. FOR-
WARD, INLINE, INTERRUPT, NEAR. Эти директивы уточняют
действия компилятора и распросзраняются на данную подпрог-
рамму и только на нее, т. е. если за подпрограммой следует другая
подпрограмма, стандартная директива, указанная за заголовком
первой, не распространяется на вторую.
ASSEMBLER — эта директива отменяет стандартную последо-
вательность машинных инструкций, вырабатываемых при входе в
процедуру и перед выходом из нес. Тело подпрограммы в этом
случае должно реализоваться с помощью команд встроенного ас-
семблера.
EXTERNAL — с помощью этой директивы объявляется внеш-
няя подпрограмма.
FAR — компилятор должен создавать код подпро|раммы. рас-
считанный на дальнюю модель вызова. Директива NEAR заставит
компилятор создать код, рассчитанный на ближнюю модель памя-
ти. По умолчанию все подпрограммы, объявленные в интерфей-
сной части модулей, генерируются с расчетом на дальнюю модель
вызова, а все остальные подпро|раммы — на ближнюю модель.
244
8.2. Структура подпрограмм «Процедура» и «Функция»
В соответствии с архитектурой микропроцессора ПК, в про-
граммах могут использоваться две модели памяти: ближняя и да-
льняя. Модель памяти определяет возможность вызова процедуры
из различных частей программы: если используется ближняя мо-
дель, вызов возможен только в пределах 64 Кб (в пределах одного
сегмента кода, который выделяется основной программе и каждо-
му используемому в ней модулю); при дальней модели вызов воз-
можен из любого сегмента. Ближняя модель экономит один байт и
несколько микросекунд на каждом вызове подпрограммы, поэто-
му стандартный режим компиляции предполагает эту модель па-
мяти. Однако при передаче процедурных параметров, а также в
оверлейных модулях соответствующие подпрограммы должны
компилироваться с расчетом на универсальную — дальнюю — мо-
дель памяти, одинаково пригодную при любом расположении
процедуры и вызывающей ее программы в памяти.
FORWARD — используется при опережающем описании для
сообщения компилятору, что описание подпрограммы следует
где-то дальше по тексту программы (но в пределах текущего про-
граммного модуля).
INLINE — указывает на то, что тело подпрограммы реализует-
ся с помощью встроенных машинных инструкций.
INTERRUPT — используется при создании процедур обработ-
ки прерываний.
8.2.3. Раздел описаний подпрограммы
Подпрограмма также состоит из раздела описаний, который
располагается непосредственно между обращением к подпрограм-
ме и оператором Begin, определяющим начало работы подпрог-
раммы.
Подпрограмма должна иметь параметры (значения, передавае-
мые в процедуру или функцию в качестве аргументов!. При опи-
сании указываются гак называемые формальные параметры (име-
на. под которыми будуг фигурировать передаваемые данные внут -
ри подпрограммы) и их типы. Обратите ваше внимание на то, что
описание параметров подпрограммы очень похожи на блок описа-
ния переменных (Var) в обшей структуре программы.
При вызове подпрограммы вместе с ее именем должны быть
заданы все необходимые параметры в том порядке, в котором они
находятся в описании. Значения, указываемые при вызове под-
программы, называются фактическими параметрами.
245
Тема 8. Подпрограммы процедуры и функции
Раздел описаний может иметь такие же подразделы, как и раз-
дел описаний основной программы (описание процедур и функ-
ций — в том числе). Однако вес описанные здесь объекты «види-
мы» лишь в этой процедуре. Они здесь локальные так же, как и
имена формальных параметров. Объекты, описанные ранее в раз-
деле описаний основной програхгмы и не переопределенные в
процедуре, называются глобальными для этой подпрограммы и до-
ступны для использования.
Приведем несколько примеров, демонстрирующих различные
варианты описания процедур и функций /15/. Все примеры будут
касаться рассмотрения одной и той же задачи, поясненной ниже.
Задача вычисление степени У - X ” с натуральным показате-
лем.
Теперь покажем несколько примеров (вариантов) оформления
алгоритмов для данной задачи.
Пример 1: Оформление алгоритма в виде процедуры без пара-
метров.
Procedure Step!;
Var
i : integer;
begin
у := 1:
for i := I to n do у := у * x;
end;
Как видно из примера, процедура Stcpl не имеет списка фор-
мальных параметров и работает с переменными п. х, у, которые в
этом случае обязательно должны быть описаны ранее в основной
программе, которая обращается к данной процедуре Stcpl.
Это как раз тот случай, когда переменные п, х, у. являются гло-
бальными по отношению к процедуре Stcpl. Значения глобальных
переменных доступны и могут быть использованы в любой точке
основной программы, в том числе и в процедуре Stcpl.
Пример 2: оформление алгоритма в виде процедуры с парамет-
рами.
Procedure Step2 (n : integer; x : real; Var у : real);
Var
i : integer;
begin
у := 1;
246
8.3. Особенности работы с подпрограммами
for i := I to n do у := у * x;
end;
В этом примере в заголовке процедуры Step! в круглых скобках
перечислены формальные параметры п и х, определяющие исход-
ные данные процедуры, и параметр у. обозначающий результат ее
выполнения (указывается после служебного слова Var). Здесь же
указан тип формальных переменных.
Тело процедуры состоит, во-первых, из описательной части,
где объявлена локальная переменная i, имеющая смысл и доступ-
ная только внутри данной процедуры, во-вторых, из раздела опе-
раторов, реализующих алгоритм вычисления , т. с. значения пере-
менной у.
Пример 3: Оформление алгоритма в виде функции с параметрами.
Function Step3 (n : integer, x : real); real;
Var
i : integer;
у; real;
begin
у := 1;
for i := I to n do у := у * x;
Step3 := y;
end;
В заголовке функции Step3 в круглых скобках указаны пара-
метры п и х, определяющие се аргументы, и их тип. Результатом
выполнения функции является единственное значение перемен-
ной у, которое передается (возвращается) в основную программу
не через параметры, а «через имя функции», что производится
специально для этого введенным оператором присваивания. Тип
результата (тип функции) — указан в сс заголовке.
8.3. Особенности работы с подпрограммами
Напомним, что вызов подпрограммы осуществляется простым
упоминанием имени процедуры в операторе вызова процедуры
или имени функции в выражении. Как известно, любое имя в
программе должно быть обязательно описано, перед тем как оно
появится среди исполняемых операторов. Нс делается исключения
247
Тема 8. Подпрограммы процедуры и функции
и в отношении подпрограмм: каждую свою процедуру и функцию
программисту необходимо описать в разделе описаний.
Описать подпрограмму — это значит указать сс заголовок и
тело. В заголовке объявляются имя подпрограммы и формальные
параметры, если они есть. Для функции, кроме того, указывается
тип возвращаемого сю результата. За заголовком следует тело под-
программы, которое, подобно программе, состоит из раздела опи-
саний и раздела исполняемых операторов.
Например, опишем процедуру нахождения максимального эле-
мента в массиве вещественных чисел Z|, Z>, Z3, ,,.,Zn.|,Zn /15/.
Procedure PrMaxtn : integer, Z : massiv; Var max : real; Var k : integer);
Var
i : integer;
Begin
max := Z| 1|;
k:= 1;
for i ;= 2 to n do
if max < Z|i| then
begin
max := Z|i|;
k:= i;
end;
End:
В процедуре PrMax в качестве исходных данных определены
параметры Z, представляющий собой имя массива, тип которого
massiv должен быть определен в основной программе, и его размер
п, в качестве результатов вычислений — параметры max, к, опи-
санные в разделах Var заголовка процедуры и представляющие
значение и номер максимального элемента массива.
8.3.1. Иерархия подпрограмм
В разделе описаний подпрограммы могут встретиться описания
подпрограмм низшего уровня, в тех — описания других подпрог-
рамм еще более низкого уровня и т. д.
Например, имеется следующая иерархия описаний для про-
граммы (для простоты считается, что все подпрограммы представ-
ляют собой процедуры без параметров) /44/:
Program ...;
248
8.3. Особенности работы с подпрограммами
Procedure А;
Procedure Al;
begin
end {Al};
Procedure A2;
begin
end {A2}:
begin {A)
end {A};
Procedure B;
Procedure Bl;
begin{Bl};
end {Bl};
Procedure B2;
Procedure B21;
begin) B21};
cnd{B2l};
Procedure B22;
begin) B22};
end {B22};
249
Тема 8. Подпрограммы процедуры и функции
begin (В2);
end (В2|;
begin {В}
end {В};
Наглядно проиллюстрировать приведенную выше иерархию
поможет следующий рисунок 8,2.1 /44/.
Основная программа
Подпрограмма А
Подпрограмма А1
I Подпрограмма А2
Подпрограмма В
Подпрограмма В1
Подпрограмма В2
Подпрограмма В21
Подпрограмма В22
____________________________________|
Рис. 8.1. Иллюстрация структуры основной программы
и подчиненности вложенных подпрограмм
Подпро1рамма любого уровня имеет обычно множество имен
констант, переменных, типов и вложенных в нес поднрофамм
низшего уровня.
250
8.3. Особенности работы с подпрограммами
Считается, что вес имена, описанные внутри подпрограммы,
локализуются в ней. Те. они как бы «невидимы» снаружи под-
программы. Таким образом, со стороны операторов, использую-
щих обращение к подпрограмме, она трактуется как «черный
ящик», в котором реализуется тот или иной алгоритм. Вее детали
этой реализации скрыты от глаз пользователя подпрограммы и по-
тому недоступны ему.
Например, в рассмотренном выше примере и иллюстрации 8.2
из основной программы А можно обратиться к подпрограммам А
и В. но нельзя вызвать ни одну из вложенных в них подпрограмм
Al. А2. Bl. В2. В21. В22. К этим итоженным подпрограммам мож-
но обратиться только из тех подпрограмм, в которые они входят:
• А1 и А2 можно вызвать только из подпрограммы А;
• доступ к подпрограммам В1 и В2 имеется только у подпрог-
раммы В;
• только из подпрограммы В2 можно вызвать подпрограммы
В21 и В22.
Сказанное относится не только к именам подпрограмм, но и
вообще к любым именам, объявленным в них — типам, констан-
там, переменным и меткам. Все имена в пределах подпрограммы,
в которой они объявлены, должны быть уникальными, и не мотуг
совпадать с именем самой подпрограммы.
При входе в подпрограмму' низшего уровня становятся доступ-
ными не только объявленные в ней имена, но и сохраняется до-
ступ ко всем именам верхнего уровня. Образно говоря, любая под-
программа как бы окружена полупрозрачными стенками: снаружи
подпрограммы мы не видим ее внутренности, но, попав в под-
программу, можем наблюдать все, что делается снаружи. Любая
подпрограмма может вызвать саму себя — такой способ вызова
называется рекурсией
Пусть имеем такое описание:
Program
var VI
Procedure А;
var V2 :...;
end {A};
Procedure B;
var V3
251
Тема 8. Подпрограммы процедуры и функции
Procedure 131;
var V4
Procedure ВИ;
var V5;
Из процедуры B11 доступны все пять переменных VI, V2. V3,
V4.V5, из процедуры В1 доступны переменные VI, V2, V3, V4, из
центральной программы — только VI
При взаимодействии подпрограмм одного уровня иерархии
вступает в силу основное правило языка Pascal: любая подпрог-
рамма перед ее использованием должна быть описана. Поэтому' из
подпрограммы В можно вызвать подпрограмму А, но наоборот из
А вызвать В невозможно (точнее, такая возможность появляется
только с использованием опсрежаюшего описания). Продолжая
образное сравнение, подпрограмму можно назвать ящиком с не-
прозрачными стенками и дном и полупрозрачной крышей: из под-
программы можно смотреть только «вверх* и нельзя «вниз», т. с.
подпрограмме доступны только тс объекты верхнею уровня, кото-
рые описаны до описания данной подпрограммы. Эти объекты
называются глобальными по отношению к подпрограмме.
Проиллюстрируем иерархическую структуру программирования
с использованием подпрограмм на следующем примере.
Пример. Необходимо составить программу' для определения
максимального значения функции на заданном отрезке /15/.
Используя процедуру РгМах для определения максимального
элемента в массиве Z = (Z|, Z2, Zn), найти точку, в которой
функция V имеет максимальное значение на отрезке [a,bj.
Y = е ‘ • cosx - 1;
Исходные данные:
а — верхняя граница отрезка; b — нижняя граница отрезка; h —
шаг изменения аргумента;
Результирующие данные:
maxi — максимальное значение функции; xl — точка, в которой
функция имеет максимум;
Параметры для процедуры:
п — размер массива; Z — имя массива; к — номер максимального
элемента; max — максимальный элемент.
252
8.3. Особенности работы с подпрограммами
Листинг 8.1:
Program Max Fun;
Const
Nmax НЮ;
Type
Massiv = array |l..Nmax] of real;
Var
i. kl. n : integer;
a, b, h. maxi, x, xl : real;
у : massiv;
Procedure PrMaxtn : integer; Z : massiv; Var max : real; Var к
: integer);
Var
i : integer;
Begin {PrMax} {начало процедуры}
max := Z| l|;
к := I;
for i := 2 to n do
if max < Z|i| then
begin
max := Z[iJ;
к := i;
end;
End; {PrMax} {конец процедуры}
Begin {MaxFun} {начало основной программы]
WriieC Введите a =');
Rcad(a);
Write(’BBC4HTC b = ');
Read(b);
WriieC Введите h = ’);
Read(h);
n := Trunc((b —a) / h + 0.5) + 1;
x := a;
for i:= 1 to n do
begin {Формирование массива значений функции}
y|i| := Ехр(-х) • Cos(x) - I;
x ;= x + h;
end;
PrMaxfn. y, maxi, кI); {вызов процедуры}
253
Тема 8. Подпрограммы процедуры и функции
xl :=а + (kl -1) ♦ h;
writeLnf Максимум функции у= max 1:5:3,' находится
в точке х =’, х!:5:3);
End. (Max Fun} {конец основной программы}
8.3.2. Описание констант и переменных
В языке Pascal допускается произвольная последовательность
описания констант, переменных, типов, меток и подпрограмм.
Например, блок описания переменных VAR может появляться в
пределах раздела описаний одной и той же подпрограммы мною
раз и перемежаться с объявлениями других объектов и подпрог-
рамм. Для языка Pascal совершенно безразличен порядок следова-
ния и количество блоков описания VAR, CONST, TYPE, LABEL,
но при определении области действия этих описаний следует по-
мнить, что имена, описанные ниже по тексту программы, недо-
ступны из ранее описанных подпрограмм.
11апримср:
Var VI : ...;
Procedure S;
Var V2 :...;
begin {S}
end; {S}
Var V3 : ...;
В выше приведенном примере из процедуры S можно обратить-
ся только к переменным VI и V2, но нельзя использовать V3, так
как описание V3 следует в программе за описанием процедуры S.
Имена, локализованные в подпрограмме, могут совпадать с ра-
нее объявленными глобальными именами. В этом случае считает-
ся, что локальное имя «закрывает» глобальное и делает его недо-
ступным.
Например:
Var
i : Integer;
Procedure P;
Var
i: Integer;
begin | P]
254
8.3. Особенности работы с подпрограммами
wrilcln(i)
end; (Р(
Begin {основная программа}
:= 1;
р;
End. {основная программа]
Что напечатает эта программа? Все, что угодно: значение внут-
ренней переменной i при входе в процедуру Р не определено, хотя
одноименная глобальная переменная имеет значение 1. Локальная
переменная «закроет» глобальную и на экран будет выведено про-
извольное значение, содержащееся в неинициированной внутрен-
ней переменной. Если убрать описание
Var
i : Integer;
из процедуры Р, то на экран будет выведено значение глобальной
переменной i, т. с. 1. Таким образом, одноименные глобальные и
локальные переменные — это разные переменные. Любое обраще-
ние к таким переменным в теле подпрограммы трактуется как об-
ращение к локальным переменным, т. с. глобальные переменные в
этом случае попросту недоступны.
Пример использования функции.
Найти максимальное из двух введенных чисел. Для решения
воспользуемся описанием функции, принимающей значение мак-
симального из двух чисел, которые передаются в нее в виде пара-
метров.
Листинг 8.2:
Program primer8_l;
Var А, В; Real; {Здесь А и В — г/обольные переменные )
Function Max(A,B:Real):Real; {Описываем функцию Мах
с формальными]
begin { Мах} {параметрами А и В, которая принимает }
if А>В Then Мих := А {значение максимального из них }
eke Мах := В; {Здесь А и В — локальные переменные }
end; {Мах}
Begin {primer}
Writcln!'Введите два числа’);
WriteC А - ');
Rcad(A);
WriteC В - ’);
255
Тема 8. Подпрограммы процедуры и функции
Rcad(B);
№гЙс1п(’Максимальным из всех является Мах(А,В));
End. {primer}
Обратите внимание на краткость тела основной программы и
на прозрачность действий внутри функции. Формальные парамет-
ры А и В, используемые в подпрограмме, не имеют никакого от-
ношения переменным А и В. описанным в основной программе.
8.3.3. Передача параметров в подпрограмму
Параметры, которые указываются при описании процедур и
функций называются формальными /27/. Название «формальные»
параметры получили в связи с тем. что они нужны только для за-
писи алгоритмов, а при вызове подпрограммы на их место буцуг
поставлены конкретные фактические параметры.
Соответствие между формальными и фактическими параметра-
ми обеспечивается выполнением следующих условий:
а) формальных и фактических параметров должно быть одина-
ковое количество;
б) порядок следования фактических и формальных параметров
должен быть один и тог же;
в) тип фактическою параметра должен быть совместим с типом
соответствующего ему формального параметра.
Следует обратить внимание на то, что в языке Pascal типом лю-
бого параметра в списке формальных параметров может быть то-
лько стандартный или ранее объявленный тип.
Нельзя, например, объявить процедуру с заголовком:
Procedure Proc (m, n : integer; k : 1..5);
Для передачи в процедуру параметра к необходимо предварите-
льно описать его тип в разделе описаний основной программы:
Type range = I..5;
Procedure Proc (m, n : integer; к : range);
Существует два способа передачи фактических параметров в
подпрограмму: по значению и по ссылке.
В первом способе значение переменной фактического параметра
при вызове подпрограммы присваивается локальной переменной,
являющейся формальным параметром подпрограммы. Что бы по-
том ни происходило с локальной переменной, это никак не отразит-
ся на соответствующей глобальной. Для одних задач это благо, но
256
8.3. Особенности работы с подпрограммами
иногда требуется произвести в подпрофаммс действия над самими
переменными, указанными в качестве фактических параметров.
На помощь приходи г второй способ. Происходи! следующее:
при обращении к подпрограмме не происходит формирования ло-
кальной переменной формального параметра. Просто на время
выполнения подпрограммы имя этой локальной переменной будет
указывать на ту же область памяти, что и имя соответствующей
глобальной переменной. Если в этом случае изменить локальную пе-
ременную, изменятся данные и в глобальной переменной
Передача параметров по ссылке отличается тем, что при описа-
нии подпрограммы перед именем переменной — формального па-
раметра ставится служебное слово Var. Теперь использование в
качестве фактических параметров выражений или непосредствен-
ных значений уже не допускается — они должны быть именами
переменных.
8.3.4. Параметры-значения, параметры-переменные
и параметры-константы
Имеются 1ри вида параметров, которые отличаются способом
их передачи в подпрограмму:
• параметры-значения;
• параметры-переменные;
• параметры-константы.
Рассмотрим эти параметры более подробно.
Параметры-значения /27/ используются только для передачи
исходных данных из основной программы в процедуру или функ-
цию. По умолчанию параметры подпрограммы считаются именно
। тарамстрами - значения ми.
Обратите внимание — вданном случае подпрограмме передастся
лишь значение параметра, которое помешается в переменную, спе-
циально созданную для этой цели. Таким образом, в подпрограмме
используется копия фактического параметра. В теле подпрограммы
формальные параметры могут изменяться, но это никак не отразит-
ся на фактических параметрах, т. к. меняется их копия.
Поэтому параметры-значения нельзя использовать для переда-
чи результатов из подпрограммы в основную программу. К сожа-
лению, нарушение этого требования — это типичная ошибка на-
чинающих, которая не обнаруживается компилятором, но выра-
жается в неверных результатах работы профаммы. Ошибки,
257
Тема 8. Подпрограммы процедуры и функции
которые трудно обнаружить, лучше совсем нс делать, поэтому бу-
дьте внимательны к параметрам подпрограмм.
Зато фактическим параметром-значением может быть нс толь-
ко константа или переменная с заданным значением, но и произ-
вольное выражение. Перед вызовом подпрограммы фактические
параметры вычисляются, и полученное значение передается в под-
программу — выполняется подстановка значений.
Для пояснения рассмотрим следующую программу:
Листинг 8.3:
Program Primer;
Var
a, b : real;
Procedure Square(x, у : real); { процедура вычисления и вывода,
х.у — параметры-значения}
begin {начало процедуры Square }
х := х * х;
У := У * у;
writeln(x:7:3,' ’.у:7:3);
end; {конец процедуры Square }
Begin {начало основной программы Primer}
а: = 1.0;
b := 3.0;
Square(a.b); {вызов процедуры с фактическими параметрами
а и Ь]
writeln(a:7:3,' \b:7:3);
End. {конец основной программы Primer}
При выполнении программа выведет на экран:
1.000 9.000
1.000 3.000
При вызове процедуры Square с фактическими параметрами а и
b значения этих параметров один раз копируются в соответствую-
щие формальные параметры х и у. и дальнейшие преобразования
формальных параметров х и у внутри процедуры Square уже никак
не влияют на значения переменных а и b
Параметры-переменные /27/ необходимо использовать, прежде
всего, для возврата результатов работы подпрограммы в основную
программу.
Обратите внимание — в списке формальных параметров перед
ними ставится ключевое слово Var.
258
8.3. Особенности работы с подпрограммами
Каждому формальному параметру-переменной должен соответ-
ствовать фактический параметр обязательно в виде переменной.
Выражение здесь недопустимо, т. к. результаты подпрограммы мо-
гут быть сохранены только в переменных.
В этом случае при вызове подпрограммы ей передается адрес
фактического параметра в памяти и в дальнейшем подпрограмма
работает именно с этой ячейкой памяти, а не с копией, как при
ио юл ьзова нии параметра-значсни я.
Вернемся к нашему последнему примеру, но используем теперь
параметры-переменные.
Листинг 8.4:
Program Primer;
Var
a. b : real:
Procedure Squarc(var x ,y : real); { x,y — параметры-переменные}
begin
x := x * x;
у := у * у;
writcln(x:7:3,' *,y:7:3);
end;
Begin
a := 1.0;
b := 3.0;
Square(a.b);
writeln(a:7:3,' \b:7:3);
End.
При выполнении эта программа выведет на экран:
1.000 9.000
1.000 9.000
Обратите внимание — исходные данные в подпрограмму могут
передаваться как через параметры-значения, так и через парамет-
ры-переменные. а результаты работы подпрО1раммы возвращают-
ся в программу только через параметры-переменные.
Параметры-константы /27/. Мы выяснили, что параметр можно
передавать или но значению, или по адресу в памяти. А какой ешс
способ можно изобрести?
Конечно, способов всего два, а параметры-константы переда-
ются по адресу, как параметры-переменные, но значения их запре-
щено изменят ь в подпрограмме. За этим строго следит компиля-
259
Тема 8. Подпрограммы процедуры и функции
тор. при нарушении запрета он выдает сообщение об ошибке «In-
valid variable reference» (Недопустимое обращение к переменной).
При описании подпрограммы перед параметрами-константами
добавляется служебное слово Const Например:
Procedure Proc (const р : integer);.
Параметры-константы — это очень хороший способ передачи
исходных данных в подпрограмму, т. к. он нс требует дополните-
льных затрат памяти для хранения копий (во многих случаях для
хранения адреса требуется меньше памяти, чем для хранения са-
мого значения). При этом сами исходные данные в своих ячейках
памяти остаются в неприкосновенности. Главное, нс лениться и
добавлять в заголовок процедуры служебное слово Const перед
входными параметрами.
Помимо всего, использование параметров-констант — это еще
и признак хорошего стиля программирования также средство не-
которого ускорения работы программы.
Например, рассмотрим функцию нахождения максимального
элемента в массиве вещественных чисел Zj. Zj....Zn i, Zn.
Параметры для подпрограммы Max: n — размер массива; Z -
имя массива.
{Раздел основной программы}
Const
Nmax = 100;
Гуре
massiv = array | I..Nmax| of real;
{ Функция (подпрограмма) Max для определения максимального}
{ элемента в одномерном массиве }
Function Max(n : integer; Const Z : massiv) : real;
Var
i : integer;
mx : real;
begin {Max}
mx :- Z}1J;
for i := 2 to n do
if mx < Z|i| then mx := Z|i|;
Max : mx;
end; {Afar}
... {основная программа}
260
8.4 Особенности описания типов в подпрограммах
8.4. Особенности описания типов
в подпрограммах
Может сложиться впечатление, что объявление переменных в
списке формальных параметров подпрограммы ничем не отлича-
ется от объявления их в разделе описания переменных. Действите-
льно, в обоих случаях много общего, но есть одно существенное
различие: типом любого параметра в списке формальных парамет-
ров может быть только стандартный или ранее объявленный тип.
Поэтому нельзя, например, объявить следующую процедуру:
Procedure S (а : array 11..I0] of Real);
т. к. в списке формальных параметров фактически объявляется
тип-диапазон, указывающий границы индексов массива.
8.4.1. Тип-массив и тип-строка
Если мы хотим передать какой-то элемент массива, то проб-
лем, как правило, не возникает, но если в подпрограмму передает-
ся весь массив, то следует первоначально описать его тип.
Например:
type
atype = array | !..IO|of Real;
Procedure S (a : atype);
Поскольку строка является фактически своеобразным масси-
вом. ее передача в подпрограмму осуществляется аналогичным об-
разом:
type
intype = String 115| ;
outypc = String 1301 ;
Function St (s : intype): outypc;
Требование описать любой тип-массив или тип-строку перед
объявлением подпрограммы на первый взгляд кажется несущест-
венным. Действительно, в рамках простейших вычислительных за-
дач обычно заранее известна структура всех используемых в про-
грамме данных, поэтому статическое описание массивов не вызы-
вает проблем.
261
Тема 8. Подпрограммы процедуры и функции
Однако разработка гцммраммных средств универсального на-
значения связана со значительными трудностями. Но существу,
речь идет о том, что в языке Pascal невозможно использовать в
подпрограммах массивы с «плавающими» границами изменения
индексов. Например, если разработана программа, обрабатываю-
щая матрицу 10x10 элементов, то для обработки матрицы 9x11
элементов необходимо переопределить тип, т. с. перекомпилиро-
вать всю программу (речь идет не о динамическом размещении
массивов в куче, а о статическом описании массивов и передаче
их как параметров в подпрограммы). Разработчики Pascal не риск-
нули кардинально изменить свойства базового языка, но, тем не
менее, включили в него некоторые средства, позволяющие в изве-
стной степени смягчить отмеченные недостатки. Эти недостатки
практически полностью устранены в языке Object Pascal, исполь-
зуемом в визуатьной среде программирования Delphi.
Прежде всего, в языке Pascal, можно установить режим компи-
ляции, при котором отключается контроль за совпадением длины
фактического и формального параметра-строки. Эго позволяет
легко решить вопрос о передаче подпрограмме строки произволь-
ной длины. При передаче строки меньшего размера формальный
параметр будет иметь зу же длину, что и параметр обращения; пе-
редача строки большего размера приведет к ее усечению до макси-
мального размера формального параметра. Следует сказать, что
контроль включается только при передаче строки, объявленной
как формальный параметр-переменная. Если, соответствующий
параметр объявлен параметром-значением, эта опция игнорирует-
ся, и длина не контролируется.
Значительно сложнее обстоит дело с передачей массивов про-
извольной длины. Наиболее универсальным приемом в этом слу-
чае будет, судя по всему, работа с указателями и использование
индексной арифметики. Несколько проще можно решить эту
проблему при помощи нетипизированных параметров.
Язык программирования Pascal поддерживает гак называемые
открытые массивы, легко решающие проблем)' передачи подпрог-
рамме одномерных массивов переменной длины.
Открытый массив представляет собой формальный параметр
подпрограммы, описывающий базовый тип элементов массива, но
нс определяющий его размерности и границы:
Procedure МуРгос(ОрепАггау : array of Integer);
262
8.4. Особенности описания типов в подпрограммах
Внутри подпрограммы такой параметр трактуется как одномер-
ный массив с нулевой нижней границей. Верхняя граница откры-
того массива возвращается функцией HIGH. Используя ноль как
минимальный индекс и значение, возвращаемое функцией HIGH,
как максимальный индекс, подпрограмма может обрабатывать од-
номерные массивы произвольной длины.
Иллюстрация использования открытых массивов с помощью
процедуры ArrayPrint. Ниже приведена программа, которая выво-
дит на экран содержимое двух одномерных массивов разной длины.
Листинг 8.5:
Program PrintArray;
Const
А : array |~1..2| of Integer = (0,1,2,3);
В : array [5..7] of Integer (4,5,6);
Procedure Array Prin((aArray : array of Integer);
Var
k: Integer;
begin
for k := 0 to High(aArray) do Write(aArray|k|:8);
WritcLn;
end;
Begin
ArrayPrinl(A);
ArrayPrintt B);
End.
Как видно из этого примера, фактические границы массивов А и
В, передаваемых в качестве параметров вызова процедуре ArrayP-
rint, не имеют значения. Однако размерность открытых массивов
(количество индексов) всегда равна 1 — за этим следит компилятор.
8.4.2. Процедурные типы
Процедурные типы — это нововведение фирмы Borland (в стан-
дартном языке Pascal таких типов нет). Основное назначение этих
типов — дать программисту гибкие средства передачи функций и
процедур в качестве фактических параметров обращения к другим
процедурам и функциям.
Для объявления процедурного типа используется заголовок
процедуры (функции), в котором опускается ее имя, например:
263
Тема 8. Подпрограммы процедуры и функции
type
Prod - Procedure (a, b, с: Real; var d: Real);
Proc2 = Procedure (var a, b) ;
РгосЗ = Procedure;
Fund = Function: Siring;
Func2 = Function (vars: Siring): Real;
Как видно из приведенных примеров, существует два проце-
дурных типа: тип-процедура и тип-функция.
В качестве примера рассмотрим следующую задачу для вычис-
ления значения определенного интеграла методом трапеций /15/.
Эта задача часто встречается в судостроении или на флоте
при вычислении некоторых элементов теоретического чертежа
или параметров затопленных отсеков.
Математическая постановка задачи. Вычислить значение опре-
делен ною интеграла
j г х2 • Lnx
J х + sin х
с заданной почетностью Е по формуле трапеций
J = j f(x)dx » Ул- + Y у, |.
где Л = -—у0 - f(a}\ у„ = /(/>); yt - f(a + / Л); п — число уча-
п
стков разбиения интервала интегрирования.
Формула трапеций дает приближенное значение определенного
интеграла. Точность приближения определяется значением числа
п участков разбиения. Увеличивая я. можно обеспечить требуемую
точность вычисления приближенного интеграла. Вычисление
определен ною интшрала по формуле трапеций при фиксирован-
ном значении п целесообразнее оформить в виде функции Trap с
параметрами-значениями я. а, Л и параметром-функцией f. опре-
деляющими произвольное подынтегральное выражение. Для вы-
числений значений определенного подынтегрального выражения
введем функцию /1, в которой опишем заданное правило вычис-
лений. В описании функции /1 укажем обязательную директиву
Таг для формирования полного адреса подпрограммы. В основной
про1рамме организуем цикл по увеличению (в 2 раза) числа л от-
264
8.4 Особенности описания типов в подпрограммах
резкой разбиения и вычислению очередного приближения интег-
рала до тех нор. пока не будет выполнено условие достижения за-
данной точности вычисления.
Листинг 8.6:
Program Integral; { основная программа — Integral]
Гуре { определение типа-функции }
Func — Function (х : real): real;
Const
nO = 20; { начальное значение числа интервалов разбиения }
Var
nt: integer;
a, b : real;
JI. J2 : real;
eps : real;
{// — Подынтегральная функция]
Function fl (x : real) : real; Far; { подпрограмма fl]
begin { fl }
fl := Sqr(x)*Ln(x)/(sin(x)+x)
end; [ fl }
{ 7rap — Функция вычисления интеграла no формуле трапеции]
Function Trap (n : integer; a, b : real; f: func) : real; {подпрограмма
Trap]
Var
i : integer;
h, s : real;
begin { Trap }
h := (b - a) / n;
s := (f(a) + f(b)) * 0.5;
for i := I to n - 1 do
s := s + f(a + i • h);
Trap := h • s;
end; { Trap }
Begin ( начало основной программы — Integral (
Write кпСВвсдитс пределы интегрирования функции');
WTitefBBcaitTc правую границу интегрирования а = ’);
readta);
Writcf Введите левую границу интегрирования b = ');
read(b);
Writcf Введите по1решность интегрирования eps — ’);
265
Тема 8. Подпрограммы процедуры и функции
rcad(cps);
Ji := 0;
nt := n0;
Repeat
J2 := JI;
JI TrapfnU a, b. Г1); {ныит функции вычисления интеграла —
Trap}
nt := 2 * nt;
Until Abs(Jl-J2) <= eps;
Writcln('3Ha4eiinc определенного интеграла :J 1:7:3);
End. { конец основной программы — Integral}
8.5. Дополнительные примеры и практические
задания по теме 8
В данном разделе сформулированы практические примеры и
задания для студентов, позволяющие закрепить на практике тео-
ретический материал, изложенный в теме 8. Для самопроверки
студенты могут познакомиться в теме 10 с возможными варианта-
ми ответов на предложенные задания.
8.5.1. Дополнительные примеры /15, 44/
Пример I. Определение степени с целым показателем /15/.
Д|я того, чтобы возвести любое число х в целую степень п. до-
статочно умножить это число х само на себя п раз, для чего и
предназначена процедура Step2. Возможны 3 варианта решения
этой задачи при различных значениях показателя степени п:
Вариант /. При п - 0. В этом случае вычисления нс требуются,
т. к. любое число в степени 0 есть I.
Например, необходимо возвести число 2 в степень 0. Матема-
тически это будет выглядеть так 2° = 1.
Вариант 2. При п > 0. В этом случае производятся описанные
выше действия.
Например, необходимо возвести число 2 в степень 5. Опишем
это математически: 2s = 2 2 2 2 2 = 32.
Вариант 3. При п < 0. В этом случае производятся описанные
выше действия, но не над введенным числом х, а над числом 1/х в
качестве аргумента, и модулем степени.
266
8.5. Дополнительные примеры и практические задания по теме 8
Например, необходимо вознести число 2 в степень —5. Матема-
тически эго можно записать гак: 2“5 = = 01)3125
Ниже приводится текст программы на языке Pascal, описываю-
щий решение данной задачи.
Листинг 8.7:
Program Step;
Var
n: integer;
x, у: real;
Procedure Stcp2;
Var
i: integer;
begin {Step?}
y:=l;
For i: = 1 to n do
y:= y’x;
end; {Step 2}
Begin ( Vtepl {Основная программа}
WriteCВведите число x = ');
Read(x);
\\п1с('Ввсдитс показатель степени n = ');
Read(n);
if n=0
then y:=l
else
if n>0
then Step2
else
if n<0
then
begin
n:=—n;
x:=l/x;
Step2;
end;
Writcln(x:3:l, ,A’,n, * = ’,y:5:3);
End. {57ep|
Пример 2. Вычисление факториала с использованием функции
267
Тема 8. Подпрограммы процедуры и функции
Как известно, факториал числа есть произведение всех чисел от
I до этого числа, включая само чисто. В профамме для решения
этой задачи применяется метод рекурсии, т. с. обращение функции
самой к себе. Изменению подвергается только аргумент функции,
каждый раз уменьшаемый на I. Таким образом, результатом вы-
полнения функции будет
л! = л -(я-1) (л - 2) ...-1,
где п — введенное число.
Например, необходимо вычислить факториал числа 5. Матема-
тически это можно записать следующим образом:
5! = 5 4 3 2 I = 120
Ниже приводится текст программы на языке Pascal, описываю-
щий решение данной задачи.
Листинг 8.8:
Program Factorial;
Var
n : integer;
Function Г(х : integer) : longint; {подпрограмма}
begin {f}
if x = 1 then f := I else f := x * f(x -I);
end; {f}
Begin {Factorial}
writc('введите n = ');
read(n);
wrileln(’N!=',f(n));
End. {Factorial}
Пример 3. Найти наибольшее из четырех чисел
В программу последовательно вводятся значения четыре чисел
(а, Ь, с, d). Затем наибольшее из четырех чисел определяется сле-
дующим образом:
Шаг 1. Подпрограмме передается значение двух первых чисел
(а и Ь). Подпрограмма сравнивая значения этих двух чисел (а и Ь)
возвращает в программу значение наибольшего из них maxi
(maxi “ а или maxi “ I», в зависимости от того какое из чисел бо-
льше);
Шаг 2. Следующая пара чисел, переданная подпрограмме, будет
содержать возвращенное на предыдущем шаге значение наиболь-
шего числа maxi и третье число для сравнения с, в зависимости от
268
8.5. Дополнительные примеры и практические задания по теме 8
того, какое из них больше подпрограмма вернет в протрамму зна-
чение наибольшего из них шах2 (тах2 = с или max2 = maxi);
Шаг 3. На завершающем шаге подпротраммс будет передана
следующая пара чисел для сравнения: тах2 и d В зависимости от
того, какое из них наибольшее, в программу будет возвращено
значение наибольшего из них Мах (Мах = тах2 или Мах = d).
Мах — это окончательное максимальное число из четырех рас-
смотренных чисел.
Ькщ зиагчений четырем
члелп
Основная программа
5
-
Г -оседла донник
Передача денных
1Л*Д 1
Шаг «торой
Р
О
8
а
(Я
max 2
Шаг третий
М
М
(Ьо!2)
продолжение
основной программы
(Max.Fow)
ВЫВОДИТ Н* <
ыа к сммалыют с числи из
четырех - Мах
Рис. 8.2 Схема взаимодействия основной программы (Max_Four)
и подпрограммы (boi2), и передача данных из основной программы
в подпрограмму и обратно
269
Тема 8. Подпрограммы процедуры и функции
Таким образом, при сравнении двух последних пар чисел, в
программу будет возвращено число, значение которого наиболь-
шее из всех четырех чисел. На рисунке 8.2 приведена схема взаи-
модействия основной программы (Max_Four) и подпрограммы
(Ьо12), а также передача данных из основной программы в под-
программу.
Например, даны чс1ырс числа a = 15, Л = 8, с = 12, d - 24.
На первом шаге в подпрограмму’ передадутся два числа a = 15 и
h = 8. 11ол программа произведет сравнение этих двух чисел и воз-
вратит в программу максимальное из них max I = a = 15.
На взором шаге в подпрограмму в качестве исходных данных
передадутся два числа maxi = 15 (возвращенное значение макси-
мального числа полученное на предыдущем шаге) и с = 12. Под-
программа сравнит эти числа и возвратит в программу наиболь-
шее из них max 2 = max 1 = 15.
На третьем шаге подпрограмме будет передана следующая пара
чисел max 2 = 15 (возвращенное значение с предыдущего шага) и
d - 24. Подпрограмма сравнит эти два числа и возвратит уже
окончательное максимальное число из четырех Max = d = 24.
Затем основная программа при помощи операторов вывода на
экран, выдаст максимальное значение из четырех введенных чисел
Мих = 24.
Далее приводится текст программы, на языке Pascal, описыва-
ющий данную задачу.
Листинг 8.9:
Progrm MaxJ'our; {основная программа]
Var
а, Ь, с, d. Max, maxi, max2 : real;
Procedure bo!2( aa, bb : real; var rnaxmax : real );
begin {процедура bo!2]
if aa>bb (hen maxmax := aa else maxmax :— bb;
end; {процедура hoi 2]
Begin {основная программа — Max Four]
\¥гпс1п('ввсдите четыре числа:');
write('a-); read(a);
writcCb-’); rcad(b);
writefc-); read(c);
wriicCd-'); read(d);
bo!2(a,b,maxl);
bo!2(max 1 ,c,max2);
270
8.6. Контрольные вопросы по теме 8
bol2(max2,d,Max);
writelnf Мах—.Мах);
End. {основная программа — Max Four}
8.5.2. Практические задания
Задание I. Напишите общую структуру подпрограммы на языке
Pascal (например, процедуры).
Задание 2. Объявите в программе процедуру MyProccdurc, а за-
тем вызовите ее в программе Primer.
Задание 3. Оформить в виде функции алгоритм вычисления
степени с натуральным показателем /15/.
8.6. Контрольные вопросы по теме 8
В данном разделе сформулированы контрольные вопросы для
студентов, позволяющие закрепить знание теоретического матери-
ала, изложенного в теме 8. Для самопроверки студенты могут по-
знакомиться в теме 10 с возможными вариантами ответов на пред-
ложенные вопросы.
Вопрос 1. Что такое подпрограмма?
Вопрос 2. В чем отличие процедуры от функции?
Вопрос 3. Как выглядит общая структура подпрограммы в контек-
сте программы?
Вопрос 4. Что представляет собой вызов подпрофаммы? Где рас-
полагается вызов подпрофаммы в общей структуре профаммы?
Вопрос 5. Что такое формальные и фактические параметры? Где
располагаются формальные и фактические параметры в общей
структуре профаммы?
Вопрос 6. Что такое глобальные и локальные переменные? Где
располагаются глобальные и локальные переменные в обшей
структуре профаммы?
Вопрос 7. В чем отличие подпрофаммы от профаммы? Приведите
общую структуру подпрофаммы и программы.
271
Тема 9
Дополнительные вопросы
программирования
Цели темы 9: Разъяснить дополнительные вопросы программиро-
вания. Дать понятия о видах файлов и файловых переменных, поня-
тия о множествах и записях. Показать работу с файлами, работу с
множествами и работу с записями.
При написании данного раздела использованы работы /15, 27/.
9.1. Работа с файлами
Файл — это набор данных, хранящихся во внешней памяти
компьютера (на жестком диске, дискете, компакт-диске и т. п.)
под заданным именем. Термин «файл» происходит от английского
слова file — подшивка, картотека, хранитель данных.
Любой источник или приемник информации в компьютере
(клавиатура, экран, принтер и. т. и.) может рассматриваться как
файл /27/.
9.1.1. Имя и расширение файла
Каждому файлу при создании указывается имя, по которому
обрабатывающая его программа сможет отличить один файл от
другого. Это позволяет одной программе работать одновременно с
несколькими файлами.
Имя файла состоит из двух частей: собственно имени и его рас-
ширения.
Имя может содержать несколько символов: в DOS — от I до 8
символов, в WINDOWS — от I до 255 символов.
Расширение отделяется от имени точкой и состоит из несколь-
ких символов (от I до 3). Например, Examplc.pas или Example.com.
Расширение характеризует' тип файла, т. с. показывает, какая
информация содержится в этом файле: программа, текст, рисунок,
мелодия и т. д. В принципе можно дать файлу любое расширение
или вообще не давать расширения, но рекомендуется пользоваться
набором стандартных расширений, зарегистрированных в опера-
ционной системе. Эго позволяет и программисту и операционной
272
9.1. Работа с файлами
системе правильно обрабатывать файлы, зная, какой программой
они созданы.
Для операционной системы WINDOWS наиболее употребите-
льными являются следующие расширения:
• EXE (EXEcutable) — файл-программа на машинном языке,
готовая к выполнению;
• COM (COMmand) — файл-программа на машинном языке,
готовая к выполнению (небольшая программа);
• ВАТ (BATch) — пакетный исполняемый командный файл;
• SYS — системный файл;
• BAS — файл-программа на языке Basic;
• PKG — файл-программа на языке dBASE;
• ASM — файл-программа на языке Ассемблер;
• TXT — текстовый файл;
• DOC — текстовый файл Word;
• XLS — файл электронных таблиц Excel;
• RAR — архивный файл;
• ZIP — архивный файл;
• WMF (Windows Media File) — графический файл;
• MP3 (MPEG Layer 3) — сжатый файл аудиоданных;
• ВАК — копия файла создаваемая при перезаписи оригинала;
• DLL (Dynamic Loading Library) — динамически пошружас-
мая библиотека;
• TPL (Turbo Pascal Library) — системная библиотека языка
Pascal;
• TPU (Turbo Pascal Unit) — системная библиотека модулей
языка Pascal.
9.1.2. Виды файлов
В языке Pascal имеется три тина файлов:
• Текстовый файл (определяется словом Text);
• Типизированный файл (определяется предложением File Of
Тип);
• Не типизированный файл (определяется словом File).
Текстовый файл — это последовательность символов, сгруппи-
рованных в строки произвольной длины, заканчивающиеся спе-
циальным символом (маркером) конца строки Eoln (от англий-
ской фразы End of line).
273
Тема 9. Дополнительные вопросы программирования
Объявление текстового файла в программе осуществляется за-
данием файловой переменной типа Text в виде:
Гуре ИмяТипа - Text;
Var Файловая! 1ерсменная : ИмяТипа;
или
Var ФайловаяПсрсмснная : Text;
С файлами текстового типа можно работать только путем по-
следовательного продвижения ио файлу, прочитывая или записы-
вая одну строку за другой, начиная с первой строки. В этом слу-
чае, для того, чтобы найти нужный элемент файла необходимо по-
иск начинать от самого начала файла и проверять по очереди
каждый элемент. Текстовые файлы являются файлами последова-
тельного доступа.
Типизированные файлы применяются тогда, когда необходимо
хранить однородную информацию, например, числовые данные
определенного типа. Типизированный файл состоит из последова-
тельности элементов одного типа и одной длины. Размер факта ни-
чем не ограничивается (кроме физических возможностей носителя).
Каждый элемент файла имеет свой номер. Первый элемент
считается нулевым. Так как все элементы факта имеют одинако-
вую длину, то, позиция каждого элемента легко вычисляется. 11о-
этому указатель может быть перемещен на любой элемент файла,
обеспечивая тем самым прямой доступ к нему.
Типизированные файлы являются файлами произвольного пря-
мого доступа т. к. в них указатель можно поставить в любую пози-
цию файла.
Объявление типизированного факта в программе осуществля-
ется заданием файловой переменной типа File of Тип, где Тип —
любой базовый тип компонентов, кроме файлового:
Туре ИмяТипа = File of Тип;
Var ФайловаяПсрсмснная : ИмяТипа;
или
Var ФайловаяПсрсмснная “ File of Тип;
Типизированные файлы обладают преимуществами перед тек-
стовыми фактами, т. к. нс требуют постоянных преобразований из
символьного вида в двоичный и обратно (т. к. они сразу записаны
в двоичном коде), что уменьшает ошибки округления, не требуют
отслеживания признаков конца строки, не требуют выполнять до-
274
9.1. Работа с файлами
ступ последовательно от начала. Все это ускоряет процесс обра-
ботки файлов.
Нетипизированные файлы — это файлы, структура элементов
которых неизвестна или не имеет значения. На практике это озна-
чает, что любой файл, подготовленный как текстовый или типизи-
рованный, можно открыть и начать работу’ с ним как с Нетипизи-
рованным файлом.
Нетипизированные файлы являются файлами произвольного
прямого доступа.
Объявление нстипизированного файла в программе осуществ-
ляется заданием файловой переменной типа File:
Туре ИмяТипа = File;
Var ФайловаяПерсмснная : ИмяТипа;
или
Var ФайловаяПерсмснная - File;
Нетипизированные файлы совместимы с любыми другими
файлами и позволяют организовывать высокоскоростной обмен
данными между диском и памятью/15/.
9.1.3. Файловые переменные
Для работы с файлами в программе необходимо определить
файловую переменную (ее файловый тип) в разделе описаний
программы /27/.
Например:
Var Fl:Tcxt; F2:File;
Файловые переменные, описанные в программе, называются ло-
гическими файлами. Все основные процедуры и функции, обеспе-
чивающие ввод/вывод данных, работают только с логическими
файлами.
Поэтому перед тем. как использовать физический файл его не-
обходимо связать с логическим файлом (файловой переменной).
Для задания типа-файла следует использовать зарезервированные
слова File и Of, после чего указать тип компонент файла.
Пример.
Гуре
N - File Of Integer; {Тип-фант целых чисел}
С — File Of Char; {Тип-файл символов}
275
Тема 9. Дополнительные вопросы программирования
Есть заранее определенный и Pascal тип файла с именем Text.
Файлы этого типа называют текстовыми файлами Введи файловый
тип, можно определить и переменные файлового типа:
Var
Fl : N;
F2 : С;
F3 : Text ;
Тип-файл можно описать и нспосрсдсгвенно при введении
файловых переменных, в блоке описания переменных Var
Var
Z : File Of Word;
Файловые переменные имеют специфическое применение. Над
ними нельзя выполнять никаких операций (присваивать значение,
сравнивать и т. д.). Их можно использовать лишь для выполнения
операций с файлами (чтение, запись и т. д.).
9.1.4. Процедуры и функции для работы с файлами
Перед тем, как осуществлять ввод-вывод, файловая переменная
должна быть связана с конкретным внешним файлом при помощи
процедуры Assign
Синтаксис процедуры Assign:
Assign) Имя файловой переменной. Имя файла);
Имя файла задается либо строковой константой, либо через пе-
ременную типа Sting.
Имя файла должно соответствовать правилам работающей в
данный момент операционной системы. Если строка имени пус-
тая, то связь файловой переменной осуществляется со стандарт-
ным устройством ввода-вывода (как правило — с консолью).
После этого файл должен бы ть открыт одной из процедур:
Reset)Имя файловой переменной);
Открывается существующий файл для чтения, указатель теку-
щей компоненты файла насзраиваегся на начало файла. Если фи-
зического файла, соответствующею файловой переменной нс су-
ществует, то возникает ситуация ошибки ввода-вывода.
Rewrite)Имя файловой переменной);
Открывается новый пустой файл для записи, ему присваивается
имя, заданное процедурой Assign. Если файл с таким именем уже
существует, го он уничтожается.
276
9.1. Работа с файлами
После работы с файлом он, как правило, должен быть закрыт
процедурой Close,
Синтаксис процедуры Close:
С1озс(Имя файловой переменной);
Это требование обязательно должно соблюдаться для файла, в
который производилась запись.
Теперь рассмотрим непосредственную организацию чтения и
записи.
Для ввода информации из файла, открытого для чтения, испо-
льзуется уже знакомый вам оператор Read Правда, его синтаксис
претерпел некоторые изменения:
Read(HMH файловой переменной. Список ввода);
Происходит считывание данных из файла в переменные, имена
которых указаны в списке ввода. Переменные должны быть того
же типа, что и компоненты файла.
Вывод информации производит, как можно догадаться опера-
тор Write:
Write) Имя файловой переменной, Список вывода);
Данные из списка вывода заносятся в файл, открытый для записи.
Для текстовых файлов используются также операторы Readln и
Writein с соответствующими дополнениями, относящимися к фай-
ловому вводу-выводу. Любопытно, что вывод данных на монитор
и ввод с клавиатуры в языке Pascal тоже являются действиями с
файлами.
Они даже имеют свои предопределенные файловые перемен-
ные текстового типа: Output и Input соответственно.
Переменная Output всегда открыта для записи. Input — д.тя чте-
ния. Если нс указывать файловые переменные в операторах вво-
да-вывода (придем к формату, рассмотренному в теме «Операторы
ввода-вывода»), то в случае записи по умолчанию выбирается
файл Output, в случае чтения — Input.
Как вы знаете. любой файл конечен и продолжать чтение из
него информации можно лишь до определенного предела. Как
этот предел установить?
Проверить, окончен ли файл, можно вызовом стандартной ло-
гической функции:
ЕоГ(Имя файловой переменной)
277
Тема 9. Дополнительные вопросы программирования
Она вырабатывает значение True, если файл окончен, и False
в противном случае.
9.1.5. Примеры работы с файлами
Покажем два примера организации программы, работающей с
файлами.
Пример 9.1: Поиск в текстовом файле /27/.
Из названия примера видно, что речь здесь идет о работе с
файлом типа Text. Ниже для рассматриваемого примера приведен
листинг профаммы, в которой производится поиск в некотором
существующем файле всех строк, содержащих набор символов,
вводимых с клавиатуры. Результат поиска выводился на экран и
одновременно записывается в файл с именем Analysis.txt.
Листинг 9.1: Поиск в текстовом файле
Program Primcr9 1; (поиск в текстовом файле)
Const
Sum : Word=0; (счетчик: сколько раз нашли)
Var
I'l,f2 : text;
name, str, search : string) 801;
Begin
write('Введите имя файла:'); read(name);
*гйс('Ввсдитс строку файла:'); read(scareh);
assign* П. name);
assign*(2, 'Analysis.txt');
reset(fl);
rewrite(f2); {открываем файл fl и создаем файл f2}
writelnt'llpoTOKOj поиска: ');
writeln(f2, 'Протокол поиска: ');
while not соДП) do {пока не конец файла fl, выполняем цикл}
begin
readln(fl ,str); {считываем строку sir из файла fl}
if pos( search, str)>0 then
begin {ищем search в строке str}
inc(sum); мгйс1п('Найдсно (раз): ', sum);
writeln(str); {вывод на экран}
wrileln(f2,str); {вывод в файл]
end;
end;
278
9.1. Работа с файлами
closc(fl): closc(f2); {закрываем файлы fl и /2}
End
Справедливости ради следует отметить, что в приведенной про-
фаммс есть некоторые недостатки. Однако в качестве иллюстрации
оформления программы для работы с файлом она вполне годится.
Пример 9.2: Создание и печать некоторого файла /15/.
Здесь будет рассмотрена профамма, работающая с файлами ти-
пизированного типа File of Тип.
Листинг 9.2: Пример работы с типизированными файлами
Program Рптпег9_2; {создание и печать файла}
Uses primer,
Var
а : real; {промежуточная переменная}
f: file of real; (создаем файл}
i: integer; {счетчик элементов}
n : integer; {число элементов базы)
Begin {начало программы primer9 2}
{создание файла}
Assign(f, 'li.lab'); {присвоить имя И.lab }
Rewrite(f); {создать файл на диске}
WriteCВведите длину файла п = ');
Read(n); {считывание количества элементов файла}
For i;=l to n do
begin
Write('BucjMic', i:3, '-Й элемент файла:');
Read(a); {ввести элемент}
Writcff. а); {записать элемент в файл}
end;
Close(f); {закрыть файл}
(чтение и печать созданного файла]
WriteLn (1st, 'созданный файл');
Reset(f); {установить указатель в начало файла}
For i:=l to n do
begin
Read(f, a);
WritcLndst, i:3, '-Й элемент - a);
end;
Close(f);
End. {конец программы Primer9 2}
279
Тема 9. Дополнительные вопросы программирования
9.2. Работа с множествами
Множества являются важными структурами в математике и
прО1раммировании и часто используются при проектировании ал-
горитмов и программ с целью повышения их эффективности /15/.
9.2.1. Понятие множества
Множество — эго набор элементов одинакового типа, которые
рассматриваются как единое целое /27/.
Множества определяются только своими элементами, элементы
множества неупорядочены.
Множества используются в тех задачах, где порядок следования
элементов нс имеет значения (например, множество регистраци-
онных номеров однотипных изделий на складе предприятия или
множество наименований однотипных кораблей в эскадре флага).
При задании значений элементов множества используются
квадратные скобки. Например: [1,2,3], |3,1.2|, |'а','в','с'|.
Тин элементов множества называется базовым типом множества.
При написании множеств используются следующие обозначе-
ния /15/:
• I I — пустое множество (множество, нс имеющее ни одного
элемента);
• 11,3,81 — множество из трех элементов целого типа;
• |'a',T,'s'| — множество из трех элементов символьного типа:
• ]rcd,yellow.green] — множество из трех элементов перечисля-
емого типа.
Если список элементов множества упорядочен, то можно не
перечислять все элементы, а указать диапазон значений:
• 11..100| — множество из 100 элементов целого типа.
Порядок перечисления элементов в множестве нс имеет значе-
ния. поэтому:
• [false, true] эквивалентно ]true, false];
• |1,3,7| эквивалентно |7.1,3].
Для использования в Pascal-программах таких структур данных,
как множества, в язык введено понятие множественного типа.
Значением множественного типа является множество/15/.
В общем виде описание множественного типа реализуется сле-
дующей конструкцией словосочетанием Set of:
280
9.2. Работа с множествами
Гуре ИмяТипа = Set of ТипЭлсмснтовМножсства;
Var ИмяПсрсменной : ИмяТипа;
Например:
Type Ten = Set оГ Char;
Var С : Теп;
Можно описать переменную множественного типа и без пред-
варительного описания типа:
Var ИмяПсрсменной : Set of Тип;
Например:
Var letter: Set of char;
Следует помнить два обстоятельства:
• в множествах нс может быть одинаковых элементов (по
определению самого этого понятия);
• все операции над множествами выполняются значительно
эффективней, чем над другими структурами данных /27/.
9.2.2. Операции над множествами
В языке Pascal при работе с множествами допускается исполь-
зование следующих операций /15, 27/.
• операции отношения (=, о, >=, <=);
• операция объединения (сумма) множеств (+);
• операция пересечения (произведение) множеств (*);
• операция дополнения (разность) множеств (-);
• операция проверки принадлежности элемента множеству (in).
Рассмотрим каждую из этих операций.
Операция «равенство» (=). Два множества А и В считаются рав-
ными, если они состоят из одних и тех же элементов. Например:
|1,4.5J=|4,1.5|.
Операция «нс равно» (о). Два множества А и В считаются не-
равными, если они отличаются по количеству элементов или по
значению хот бы одного элемента. Например: |1.2,3,4| о [1,2,3]
или 11,2,3,4] о 11.2,3,4,5].
Операция «больше или равно» (>=). Множество А по отноше-
нию к множеству В считается большим или равным, если все эле-
менты множества В содержатся в составе множества А Например:
] 1,2,3,4] >= 11,2,3] или 11,2,3,4] >= |4, 1,3].
281
Тема 9. Дополнительные вопросы программирования
Операция «меньше или равно» (<“). Множество А по отноше-
нию к множеству В считается меньшим или равным, если все эле-
менты множества А содержатся в составе множества В. Например:
|1.2,3| < 11,2,3,4| или [2,1,3] <-= |4, 2, 3, 1|.
Операция «объединение (сумма) множеств» ( + ). Объединением
(суммой) двух множеств А и В является некоторое третье множе-
ство С, содержащее все элементы множеств А и В (без повторов).
Например: [1,2,3] + |4,5.6| - (1,2,3,4,5,б] или [1,2,3] + [2.4.0.7] -
|1,2,3.4,0.7|.
Операция «пересечение (произведение) множеств» (*). Пересе-
чением (произведением) двух множеств А и В является некоторое
третье множество С, содержашсе вес общие элементы множеств А
и В. Например: [1,2,3] * [3,6,1] - [1,3].
Пересечение множеств может оказаться пустым: |1,2,3| *
[4,5,6] = | [.
Операция «дополнение (разность) множеств» (—). Разностью (до-
полнением) между множеством А и множеством В является некото-
рое третье С, содержащее такие элементы множества А. которые нс
входят в множество В. Например: А - В - 11.2.3] -[3,6.1 [ - [2].
При определении разности множеств последовательность мно-
жеств существенна. Так, если бы определялась разность между
множеством В и множеством А, то в этом случае получающееся
как результат третье множество было бы не множеством С, а неко-
торым множеством D. Например, для тех же множеств А и В будет
другой результат: В - А - [3,6,1] - [1,2,3] - [6J.
Операция «проверка принадлежности элемента множеству»
(операция in). Например, требуется проверить принадлежность
элемента 2 двум множествам: множеству А:=|3,6,0,2,71 или множе-
ству В:-“[1,3,5). Результат выполнения операции in будет иметь
значение True по отношению к множеству А и будет иметь значе-
ние False по отношению к множеству В.
9.2.3. Примеры работы с множествами
Покажем два примера организации профаммы, работающей с
множествами.
Пример 9.3: Операции над множествами /27/.
В данном примере показана программа, демонстрирующая ис-
пользование операций над множествами. Здесь множества запол-
нены следующим образом: множество DI — четными числами 2, 4,
282
9.2. Работа с множествами
6, 8; множество D2 — числами 0, 1,2, 3, 5; множество D3 — нечет-
ными числами I, 3, 5, 7, 9. В программе над указанными множест-
вами выполнены операции объединения, разности, пересечения.
Листинг 9.3: Операции над множествами
Program Рптг»ег9 3; {операции над множествами}
Туре
digits-Set of 0..9;
Var
D1,D2,D3,D : digits;
Begin
D1:-12,4,6,«J;
D2:=[0..3,5|;
D3:-[1,3,5,7,9J;
D
D
D
D
End.
{заполнение множеств}
D1 + D2;
= D + D3;
D - D2;
= D* DI;
{объединение множеств D1 и D2}
{объединение множеств D и D3}
[разность множеств D и D2}
{пересечение множеств D и D1]
Пример 9.4: Определение количества разных цифр в заданном
числе N.
В данном примере /15/ требуется определить из какого количе-
ства разных цифр состоит некоторое исходное число N.
Применительно к корабельной тематике эту задачу можно
трактовать следующим образом: определить из какого количест-
ва тишм кораблей состоит эскадра флота, зашифрованная неко-
торым числом N.
Листинг 9.4: Определение количества разных цифр в заданном
числе N.
Program Primcr9_4; {использование множеств переменных}
Туре
Digit : 0..9;
Var
Ost.N,k : integer;
M : set of Digit; {множество цифр}
Begin
writc('N-');
read(N);
k:—0; {число разных цифр}
283
Тема 9. Дополнительные вопросы программирования
M:=|J; {множество разных цифр}
repeat
Ost := N mod 10;
if not (Ost in M)
then
begin
k:=k+l;
M:=M+|Ost|
end;
N:-N div 10
Until N-0;
writeln('Число разных цифр b'.N, 'равно',к):
End.
I la экран выводятся исходное анализируемое число и количест-
во разных цифр, содержащихся в нем. Например: Исходное ана-
лизируемое число 21121. Количество в нем разных цифр равно 2.
Для случая корабельной ситуации это решение можно тракто-
вать следующим образом: в составе эскадры флота, состоящей из
пяти кораблей, и зашифрованной кодовым числом 21121 есть 2
типа кораблей.
В рассмотренной программе первоначально создастся пустое
множество М. а затем на каждом шаге в цикле с помощью опера-
ции mod определяется очередная младшая цифра числа. Если оче-
редная цифра не принадлежит множеству М, го она включается в
это множество с помощью объединения множеств и одновремен-
но подсчитывается количество таких включений. Затем с помо-
щью операции div в числе отбрасывается его младшая цифра.
9.3. Работа с записями
При выполнении задач, связанных с обработкой большого ко-
личества данных часто используются массивы, рассмотренные
нами ранее в теме 7. Однако у такого подхода есть одно ограниче-
ние, заложенное в само понятие «массив*. А именно, в массиве
все элементы должны быть одного типа. Эго ограничение превра-
щается в существенный недостаток в тех случаях, когда возникает
необходимость хранить и обрабатывать комбинации данных раз-
личных типов.
284
9.3. Работа с записями
В Pascal существует возможность рассматривать комбинацию
данных различных типов как особый комбинированный тип дан-
ных, который имеет наименование «запись».
9.3.1. Описание записи
Запись — это комбинированный тип данных, состоящий из
фиксированного числа компонентов одного или нескольких типов
/27/. Эти компоненты называются «полями записи». В отличие от
массива, компоненты (поля) записи могут быть разного типа. Для
того чтобы можно было ссылаться (находить) на тот или иной
компонент записи, каждое ее поле имеет свое имя. Напомним, что
каждый компонент (элемент) массива имел не имя, а номер, кото-
рый выражался индексами.
Записи можно объявить в профамме следующим образом. Сна-
чала объявляется комбинированный тип записи с помощью
команды Record, и одновременно объявляются типы компонентов
(полей)записи:
Туре
Имя Типа = Record
ИмяИоля! :ТипПоля1;
Имя11оля2 : ТиттПоля2;
MmhEIohaN : ТипПоляЬ'
end;
Затем объявляются конкретные переменные соответствующего
комбинированного типа.
Var
Имя Переменной : ИмяТипа;
Покажем пример одьнв.зения типа записи и типов компонен-
тов записи некоторых характеристик судна.
Туре
Sudno = Record
Nomcr: Integer;
Tip : String[20];
Naimcnovanie : String|40|;
Cena: Real;
285
Тема 9. Дополнительные вопросы программирования
Port : Stnng|30|
end;
Var
Tanker, Sukhogruz : Sudno;
9.3.2. Работа с записями
При выделении памяти для записи под каждое поле отводится
столько байт, сколько требуется для переменной соответствующе-
го типа. Все поля записи располагаются в памяти рядом одно за
другим. Таким образом, суммарный размер ячейки памяти для за-
писи в целом равен сумме размеров ячеек для ее полей /27/.
Рассмотрим пример структуры и формирования записи для не-
которых характеристик судна.
Если вернуться к примеру для судна из предыдущего пункта, то
структура записи для одного судна будет иметь следующий вид
(рис. 9.1):
Рис. 9.1. Структура записи Sudno
Если необходимо иметь, хранить и обрабатывать информацию
(запись) не для одного судна, а для десяти судов, то можно орга-
низовать массив SDN, который будет представлять собой «массив
записей»:
Var
SDN : Arrayll,.10| of Sudno;
В языке Pascal имеется возможность оперировать значениями
отдельных компонентов (полей) записи. Для этого необходимо
воспользоваться приемом, который называется «селектором запи-
си». Селектор записи — это некоторое составное имя, содержащее
имя переменной и имя поля, разделенные точкой. Например. Sud-
no. lip или I'anker.Port.
Такая конструкция позволяет получить прямой доступ к полям
записи Sudno.
286
9.3. Работа с записями
Составное имя можно использовать везде, где допустимо при-
менение тина его ноля
Имена компонентов (полей) внутри записи не должны повто-
ряться. В языке Pascal практически нет операций, которые вос-
принимали бы запись как нечто целое.
Например, нельзя использовать в инструкциях ввода/вывода
запись целиком. Поэтому команда типа Writcln(Sudno) — это
ошибочная конструкция.
Однако составные имена можно использовать в инструкциях
ввода/вывода:
Writc(Sudno.Tip:3, Tanker. Port:5);
Есть два исключения по отношению к работе с записями в це-
лом.
Первое исключение — это работа с типизированными файлами,
в которые можно ввести запись или массив целиком (или прочи-
тать сразу всю запись или массив).
Второе исключение (оно часто используется) — это операция
присваивания. Эта операция может применяться к записям в це-
лом, если они имеют один и тот же тип. Например:
ranker := Sukhogruz;
Использование в программе селекторов записи (составных
имен) приводит к некоторым неудобствам — удлинению и громоз-
дкости программы.
Для устранения этого недостатка существует сшс один прием,
связанный с использованием «оператора присоединения With».
Смысл этого приема заключается в том, что если под оператором
With указать имена переменных (имена нолей) типа «запись», то
после этого можно работать с именами полей, как с обычными
переменными.
Например:
With Tanker do
Begin
Nomcr := 072614;
lip := 'Речной';
Naimenovanie := 'Амур-17';
Cena := 36825.6;
Port := 'Komsomolsk-na-Amure';
End;
287
Тема 9. Дополнительные вопросы программирования
9.3.3. Пример использования записей
Рассмотрим пример составления ведомости (записи), в которой
должны быть указаны фамилии студентов, их оценки (в числовых
баллах), полученные на экзаменах по пяти дисциплинам, и сред-
ний балл для каждого студента /15/.
Сформулируем конкретные параметры для данной задачи:
• количество студентов в ipynuc — 25;
• количество символов хранения фамилии одною студен та — 15;
• для хранения всех фамилий необходим двумерный массив —
15x25;
• количество экзаменов (опенок) для каждого студента — 5;
• для хранения всех оценок необходим двумерный массив —
25 х 5;
• переменная Stud имеет смысл информации (записи) об од-
ном студенте;
• переменная Fam содержит в себе фамилии студентов;
• переменные Ы, Ь2, ЬЗ, Ь4, Ь5 обозначают целочисленные
баллы (оценки) по соответствующим дисциплинам;
• каждая оценка интерпретируется как отрезок целочисленно-
го типа (2..5);
• переменная Sb имеет смысл среднего балла;
• каждый средний балл имеет вещественное значение;
• переменные Fam, bl, Ь2, ЬЗ, Ь4, Ь5, Sb являются полями за-
писи;
• переменная ТЫ представляет собой массив записей для всех
студентов группы;
• программа по определению среднею балла имеет имя Ball.
Ниже показан листинг программы, реализующей данную задачу.
Листинг 9.5:
Program Ball;
Type
Stud = Record
Fam : string! 15];
bl. Ь2, ЬЗ. Ь4. Ь5 : 2..5;
Sb : real
end;
Var
ТЫ : array! 1..25] of Stud;
i : integer;
288
9.4. Дополнительные примеры и практические задания по теме 9
Begin
writcln)'введите массив данных из 25 строк');
for i := 1 to 25 do
readln(Tbl|i].bl, Tbl|i|.b2, Tbl|i|.b3, Tbl|i|.b4, Tbl|i|.b5);
for i := I to 25 do
begin
Tbl|i|.Sb := (Tbl|i|.bl + Tbl|i|.b2+ Tbl|i|.b3+ Tbl|i|.b4+
Tbl[iJ.b5)/5;
Writcln(Tbl|i|.Sb);
end;
End.
9.4. Дополнительные примеры и практические
задания по теме 9
В данном разделе сформулированы практические примеры и
задания для студентов, позволяющие закрепить на практике тео-
ретический материал, изложенный в теме 9. Для самопроверки
студенты могут познакомиться в теме 10 с возможными варианта-
ми ответов на предложенные задания.
9.4.1. Дополнительные примеры
Пример I. Формирование типизированного файла.
Программа формирует на жестком диске файл целых чисел.
Ввод чисел осуществляется с клавиатуры. В результате работы
программы на диске D в каталоге User будет сформирован файл с
именем mas.cel, в который записано заданное число чисел (п) /6/.
Листинг 9.6:
Program Formfile;
Var
Ct : file of integer; {Описание
i, n, m : integer;
Begin
assign (Ct,’D:\User\mas.ccr); {программный фай! Ct связывается с
физическим внешним файлом mas. cel на жестком диске О
в каталоге User}
rewrile(Ct); {Файл Ct открывается для записи}
{Ьлок, который реализует условие формирования числового массива}
289
Тема 9. Дополнительные вопросы программирования
write)'Сколько чисел будет записано в файл? п=’);
read(n); {Вводится с клавиатуры указанное число}
write(Ct,n); (Создается первая запись файла, содержащая число
записываемых чисел}
writcln;
writelnfB файл будет записываться ', п, 'чисел'); {На экран
выводится напоминание о количестве чисел}
{Далее следует цикл последовательной записи чисел}
for i:=l ю n do
Begin
writc('BBCjHTe ',i, ’ -e число m=’);
rcad(m); {Число вводится с клавиатуры}
write(Ct,m); {Вводимое число записывается в файл С7}
End;
writelnfnpn формировании файла было введено', п. 'чисел');
repeat until keypressed; {Ожидается нажатие любой клавиши}
close(Ct); {'Закрытие файла записи Ct]
End.
Пример 2. Работа с текстовым файлом.
Про|рамма подсчета символов и строк в уже созданном тексто-
вом файле /6/.
Листинг 9.7;
Program Account;
Var
Datfile : text; {Описание текстового файла}
Cchar, Cline ; integer; {Описание счетчиков символов и строк]
N F : string | Описание имени файла}
Strok ; string; {Hate памяти для считывания]
Begin
write) "У кажите имя файла;'); {На клавиатуре набираются имя
файла и полный путь, заключенные в апострофы.
Например, ’c:\dir\file.txt'/
read(NF);
assign)Datfile. NF);
reset) Datfile);
Cchar := 0; {Установка начальных значений]
Cline 0; {счетчиков символов и строк]
while not Eof (Datfile) do
Begin
290
9.4. Дополнительные примеры и практические задания по теме 9
rcadln(Datfilc, Strok);
Cchar := Cchar + lcngth(Strok);
{Подсчет длины строки и накопление суммы длин]
Cline := Cline + I; {Подсчет числа строк}
End;
{Блок отображения на экране результатов подсчета}
\угйс1п('Файл содержит Cchar:6, 'символов');
\¥гпс1п('Файл содержит СНпе:5, 'строк ’);
Close( Datfile);
End.
Пример 3. Создание множества случайных нсповторяющихся
чисел /27/.
Необходимо сформировать множество случайных п чисел, для
чего в начале программы активизируется вегроенный генератор
случайных чисел командой Randomize, очищается множество А.
счетчику чисел к присваивается значение 1. Далее ожидается ввод
количества чисел. В цикле While производится генерация очеред-
ного случайного числа х. и если оно отсутствует в множестве А. то
его значение добавляется в это множество, счетчик количества чи-
сел к увеличивается на единицу. Цикл выполняется до тех пор,
пока значение к нс станет равным значению п. что будет означать,
что сгснсрированно необходимое количество чисел.
Листинг 9.8:
Program Mnozhestvo;
Var
a: set of byte;
k, x, n : byte;
Begin
Randomize;
A := II;
k := 1;
writef Введите количество чисел n- ');
read(n);
W hile k <— n do
begin
x := random(n) + 1;
If not (x in a) then
begin
write(x,'');
291
Тема 9. Дополнительные вопросы программирования
а := а + |х|;
к:= к + I;
end;
end;
End.
Пример 4. Записи с вариантами.
Составить программу /6/, позволяющую пополнять электрон-
ную картотеку публикаций, а именно — после запроса о виде пуб-
ликации производить ввод параметров указанной публикации.
Пусть в картотеке хранятся сведения о публикациях грех видов:
книги, журналы и рефераты.
Рассмотрим структуру каждого вида публикаций.
Книга (book).
• Автор (author).
• Название (title).
• Год (year).
• Издательство (publishinghousc).
• Страницы (pages).
Статья (article).
• Автор (author).
• Название (title).
• Год (year).
• Журнал (journal).
• Номер журнала (numberof journal).
• Начальная страница (begpagej).
• Конечная страница (endpagej).
Реферат (paper).
• Автор (author).
• Название (title).
• Год (year).
• Номер реферативного журнала (numbcrofpaper).
• Начальная страница (bcgpagcrj).
• Конечная страница (endpagerj).
В предложенной структуре три параметра — Автор, Заголовок и
Год — повторяются для каждого вида публикаций, поэтому их
можно вынести в фиксированную часть записи, остальные же — в
вариантную часть.
Листинг 9.9: Пример использования записей с вариантами /6/.
Program Kartoteca;
292
9.4. Дополнительные примеры и практические задания по теме 9
• уре
kind = (book, article, paper);
Publication-record
{ фиксированная часть записи }
aulor, title : string;
year : word;
kindp : kind;
{ вариантная часть записи }
case kind of
book : (publishinghouse : string;
pages: word);
article : (journal : string;
numberoljoumal : byte;
begpagej, endpagej : word);
paper : (niimberofpapcr : byte;
bcgpagcij, endpagerj : word);
end;
Var
Pub : Publication;
J : word;
Begin
repeat
writcf Вид публикации (0 .. 2)
read(j);
if j in |0..2] then
with pub do begin
kindp;- kind(j);
writcf Автор :');
rcad(autor);
writcf Название:');
read( title);
writeffoj ;’);
read(year);
case kindp of
book :
begin
writcf Издательство
rcad(publishinghouse);
writcfOGbeM, стр. :*);
read(pagcs);
293
Тема 9. Дополнительные вопросы программирования
end;
article :
begin
мтйс(’Названис журнала
rcad(joumal);
writefHoMCp
read(numberofjoumal);
writcfCrpaHHUu
read(begpagcj. endpagej);
end;
paper:
begin
writcfHoMcp рсф. журнала
read(numbcrofpapcr);
writcCCTpaHHiiw
rcad(bcgpagcij, cndpageij);
end;
end; ( case .. of}
end; { with pub .. )
until not (j in |0..2|); {повторять до недопустимого вида
публикации )
writclni‘Выход — недопустимый вид публикации*);
End.
9.4.2. Практические задания
Задание 1. Записать процедуру удаления каталога (папки) /27/.
Удаляемый каталог должен быть пустым и нс текущим.
Задание 2. Написать программу, которая печатает фразу «При-
вет» на принтере /15/.
Задание 3. Написать текст программы, создающей текстовый
файл и записывающий в нее зри строки данных.
Задание 4. Объявить множество из трех элементов перечисляе-
мого типа.
Задание 5. Объявить множество из 100 элементов целого типа.
Задание 6 Объявить множество А|1..20| и проверить введенное
число В на принадлежность этому множеству.
Задание 7. Объявить запись, содержащую номер, марку, цену
автомобиля /27/.
Задание 8. Создать и ввести четыре записи характеристик сту-
дентов, состоящих из их номеров, фамилий, имен, групп.
294
9.5. Контрольные вопросы по теме 9
9.5. Контрольные вопросы по теме 9
В данном разделе сформулированы контрольные вопросы для
студентов, позволяющие закрепить знание теоретического матери-
ала, изложенного в теме 9. Для самопроверки студенты могут по-
знакомиться в теме 10 с возможными вариантами ответов на пред-
ложенные вопросы.
Вопрос I. Перечислите типы файлов, которые используются в
языке Pascal?
Вопрос 2. С помощью каких процедур происходит открытие и за-
крытие файла?
Вопрос 3. С помощью какой процедуры происходит присвоение
имени новому файлу?
Вопрос 4. С помощью какого оператора происходит чтение файла?
Вопрос 5. Поясните понятия имя файла и расширение файла.
Вопрос 6. Какие способы объявления файловых переменных вы
знаете?
Вопрос 7. Какие способы объявления множественного типа вам
знакомы?
Вопрос 8. Какие операции можно производить над множествами ?
Вопрос 9. Каким образом в нротраммс происходит объявление за-
писей?
Вопрос 10. Дайте определение файлу, множеству, записи.
295
Тема 10
Ответы на практические задания
и контрольные вопросы
Цели темы 10: Помочь студентам произвести самопроверку пра-
вильности выполнении в предыдущих темах практических заданий и
контрольных вопросов. Дать ответы на практические задания и кон-
трольные вопросы, предложенные студентам в предыдущих темах.
При написании данною раздела использованы работы /6, 8-10,
13-15, 27, 44, 46. 47/.
10.1. Ответы на практические задания
Здесь изложены возможные варианты ответов на практические
задания, предложенные студентам для выполнения в темах 2-9.
Для удобства работы задания здесь повторены вновь.
10.1.1. Ответы на задания по теме 2
Задание 1. Осуществите запуск среды Borland Pascal.
Ответ на задание I.
Запуск среды можно выполнить двумя способами:
1) через кнопку ПУСК, расположенную на рабочем столе, на
панели задач Windows;
2) через последовательноеть операций:
• заходим в папку «Мой компьютер»;
• затем выбираем диск С: ;
• на диске С: ищем папку — Borland Pascal или ВР;
• затем выбираем папку с именем — BIN;
• в этой папке запускаем файл с именем — bp.exe.
Задание 2. Выполните перемещения по главному меню двумя
способами: при помощи мыши; с помощью клавиш со стрелками
на клавиатуре.
Ответ на задание 2.
Потренируйтесь в выполнении данного задания самостоятель-
но. Если Вы испытываете затруднения, то обратитесь за помощью
к преподавателю.
296
10.1. Ответы на практические задания
Задание 3. Создайте новый файл и сохраните его с именем Za-
danie_l.pas поместив его в каталог User на диск D
Ответ на задание 3.
Зайдите в меню File и выберите команду New.
Выберете команду Save As .... появляется диалоговое окно, в
строку ввода введите полный путь для сохранения факта D:\Uscr\
Zadanie_l.pas. Нажмите клавишу Enter на клавиатуре или ОК на
диалоговом окне.
Задание 4. Введите приведенный в разделе 2.6.1 текст програм-
мы в рабочую область.
Ответ на задание 4.
Потренируйтесь в выполнении данною задания самостоятель-
но. Если Вы испытываете затруднения, то обратитесь за помощью
к преподавателю.
Задание 5. Сохраните программу (изменения в файле) Zada-
nicl.pas.
Ответ на задание 5.
Зайдите в меню File и выберите команду Save. Или это можно
сделать при помощи функциональной клавиши F2.
Задание 6. Выполните компиляцию программы и запустите се
на выполнение
Ответ на задание 6.
Для выполнения компиляции программы без се запуска на вы-
полнение предназначена команда Compile из одноименного меню
или сочетание клавиш AII-F9.
Для запуска программы на выполнение из среды редактирова-
ния предназначена команда Run из одноименного меню или соче-
тание клавиш Ctrl-F9.
Задание 7. Осуществите просмотр результатов выполнения про-
граммы двумя способами:
I) через окно просмотра текстовых результатов выполнения
программы;
2) через окно просмотра результатов (окно пользователя).
Ответ на задание 7.
I). Для просмотра результатов выполнения программы можно
воспользоваться командой Output из меню Debug. Output — это
окно просмотра текстовых результатов выполнения программы,
297
Тема 10. Ответы на практические задания и контрольные вопросы
которое выводится в нижней части рабочей области, не закрывая
при этом окно редактора текста программы.
2) Вообще для выполнения программы в среде Borland Pascal
предназначено специальное окно «User Screen*. User screen — это
окно пользователя. Эта опция осуществляет просмотр результатов
выполнения программы в отдельном полноэкранном окне. При
этом окно редактора программы (оперативная область) становится
недоступным. В этом окне можно просмотреть и графику и текст.
Доступ к этому окну осуществляется клавишами A11+F5 или через
пункт меню Debug.
10.1.2. Ответы на задания по теме 3
Задание 1. Приведите пример обшей структуры программы.
Ответ на задание 1.
PROGRAM Имя программы;
USES
Список используемых библиотек (модулей);
LABEL
Список меток в основном блоке программы;
CONST
Определение констант программы;
TYPE
Описание типов;
VAR
Определение глобальных переменных программы;
ОПРЕДЕЛЕНИЕ ПРОЦЕДУР (заголовки и. возможно тела
процедур);
ОПРЕДЕЛЕНИЕ ФУНКЦИЙ (заголовки и. возможно тела
функций);
BEGIN
Основной блок программы (Тело программы)
END.
Задание 2. Приведите пример объявления переменной целого
типа.
Ответ на задание 2.
Var a: integer;
Задание 3. Приведите пример подключения модуля к программе.
Ответ на задание 3.
Uses CRT;
298
10.1. Ответы на практические задания
10.1.3. Ответы на задания по теме 4
Задание I. Присвоить переменной А значение равное 80, пере-
менной В значение равное 7,45.
Ответ на задание 1.
А := 80;
В := 7.45;
Задание 2. Вычислить значение функции cost 0.23) и присвоить
значение этой функции переменной Ь.
Ответ на задание 2.
b := со$(0.23);
Задание 3. Написать текст npoi-раммы, позволяющий разделить
переменную X = 7 на переменную Y = 2 и присвоить полученный
результат переменной Z.
Ответ на задание 3.
X := 7;
Y := 2;
Z: = X / Y;
Задание 4. Вывести на экран результат задания 3 используя
форматный вывод.
Огвст на задание 4.
Writclnf Результат деления X на Y — ,Z:5:2);
10.1.4. Ответы на задания по теме 5
Задание I. Запишите условия А > 3 и В< 10в условном опера-
торе.
Ответ на задание 1.
1Г (а>3> and (b< 10) then ...
Задание 2. Из двух чисел А и В выбрать большее и вывести его
на экран.
Ответ на задание 2.
WritcfВведите число А= '); read(A);
Writcf Введите число В= '); read(B);
1Г (А > В) then
WritclnfMHGTo А—,А.’большс числа В^’,В);
else
Writclnf Ч исло В-',В,'больше числа А—,А);
299
Тема 10. Ответы на практические задания и контрольные вопросы
Задание 3. Запишите правильно оператор выбора из четырех
вариантов.
Ответ на задание 3.
Case Pcrcm Of
VariantI: Оператор!;
Varianl2: Оператор2;
Variant3: ОператорЗ;
Variants Oneparop4;
End;
10.1.5. Ответы на задания по теме 6
Задание I. Используя цикл с параметром, вывести на экран по-
следовательность цифр 5.4.3.2.I.
Ответ на задание I.
Гог i:=5 dowto 1 do
writc(i:2);
Задание 2. Используя оператор цикла с предусловием, вычис-
лить сумму цифр от 1 до 10.
Ответ на задание 2.
i:=l;
Summa:=0;
while i <= 10 do
begin
Summa:= Summa + i;
i:=i+l
end;
Задание 3. Используя оператор цикла с постусловием, вывести
на экран квадраты чисел от 1 до 10.
Ответ на задание 3.
i:=l;
repeat
300
10.1. Ответы на практические задания
kvadrat:=sqr(i);
writeln('Kmmp;n числа i, ’ равен kvadrat:6);
i:=i+l;
until i > IO;
10.1.6. Ответы на задания по теме 7
Задание I. Объявите одномерный массив вещественною типа,
состоящий из 50 элементов.
Ответ на задание I.
Var
А := array!I..50] °ГгсаН
Задание 2. Выведите на экран двумерный массив размерностью
NxM.
Ответ на задание 2.
For i:= I to N do
begin
For j:= I to M do
begin
write(a|i j|:3,'');
end;
writcln;
end;
Задание 3. Используя операторы цикла, подсчитать количество
элементов удовлетворяющих какому либо условию (например,
A|ij| > 0) в двумерном массиве размерностью NxM.
Ответ на задание 3.
к:=0
For i:= I to N do begin
For j:= I to M do begin
ifAliJI > 0 then k := k + 1;
end;
end;
301
Тема 10. Ответы на практические задания и контрольные вопросы
10.1.7. Ответы на задания по теме 8
Задание I. Напишите общую структуру подпрограммы на языке
Pascal (например, процедуры).
Ответ на задание I.
Procedure <имя подпрограммы> |(<список формальных
переменных >:
<тип возвращаемого результата^ ];
Раздел описаний
Begin
Тело процедуры
End;
Задание 2. Объявите в программе процедуру MyProcedure, а за-
тем вызовите ее в программе Primer.
Ответ на задание 2.
Program Primer; {заголовок основной программы}
Procedure MyProcedure; {объявляется процедура (заголовок)}
Begin {начало процедуры} {тело процедуры}
End; {конец процедуры}
Begin {начало основной программы}
MyProcedure; {вызов процедуры основной программы}
End. {конец основной программы}
Задание 3. Оформить в виде функции алгоритм вычисления
степени У - Xя с натуральным показателем /15/.
Ответ на задание 3.
Function Step3(n:integer; xrreal) : real;
Var
i : integer;
у: real;
Begin
У := I;
For i:—1 to n do y;—y*x;
Step3:=y;
End;
302
10.1. Ответы на практические задания
10.1.8. Ответы на задания по теме 9
Задание I. Записать процедуру удаления каталога (папки) /Т1/
Удаляемый каталог должен быть пустым и не текущим.
Ответ на задание 1.
RmdirCn.MH удаляемою каталога');
Задание 2. Написать программу, которая печатает фразу «При-
вет» на принтере /15/.
Ответ на задание 2.
Program Print;
Uses
printer;
Begin
writcln) Lst,'Привет');
End.
Задание 3. Написать текст программы создающей текстовый
файл и записывающий в нес три строки данных.
Ответ на задание 3.
Program Text;
Var
Т : file of text; [Описание файла]
a, b, с : string|50|;
Begin {Tex/}
assign (T,'D:\My\Data.txt'); {создается файл Г связывается
с файлом Data.Ixt на диске D в каталоге Му]
rewrite) Г); {Файл Г открывается для записи]
writc('Bc4HTC первую строку: '); rcad)a);
write('Bc4HTe вторую строку; '); read)b);
wrilcCBejinc третью строку: '); rcad(c);
writcln) I .а); {В текстовый файл записывается первая строка]
writcln)Т.Ь); {В текстовый файл записывается вторая строка]
writcln(T,c); {В текстовый файл записывается третья строка]
close(T); {Закрытие файла записи Cl]
End. {Тел/}
Задание 4. Объявить множество из грех элементов перечисляе-
мого типа.
Ответ на задание 4.
зоз
Тема 10. Ответы на практические задания и контрольные вопросы
Var
Color : Sei of (red, yellow, green];
Задание 5. Объявить множество из 100 элементов целого типа.
Ответ на задание 5.
Var
Digit : Set of I..100;
Задание 6. Объявить множество A|l..20| и проверить введенное
число В на принадлежность этому множеству.
Ответ на задание 6.
Var
А : set of 0..20;
Begin
Writef Введите число, В= ');
read! В);
if not (В in А)
then writclnCMncjio нс принадлежит множеству')
else writcln('4ncno принадлежит множеству');
End.
Задание 7. Объявить запись содержащую номер, марку, цену
автомобиля /27/.
Ответ на задание 7.
Гуре
Avto-record
Number: integer,
Maria : string] 201;
Price : real;
End;
Var
Mashina : Avto;
Задание 8. Создать и ввести четыре записи характеристик сту-
дентов, состоящих из их номеров, фамилий, имен, групп.
Ответ на задание 8.
Гуре
People record
Number : integer;
Family : string]20|;
304
10.2. Ответы на контрольные вопросы
Name : string! 10|;
Group : string) 5];
End;
Var
Student: People;
I : integer;
Begin
for I:™ I to 4 do
begin
writcfBucanTC номер студента; rcad(Studcnt|i|. Number);
write('Bue4HTC фамилию студента; rcad(Student|i|. Family);
writcfВведите имя студента: ’); read(Student|i|. Name);
writcf Введите группу студента;'); read(Student(i|. Group);
end:
10.2. Ответы на контрольные вопросы
Здесь изложены возможные варианты ответов на контрольные
вопросы, предложенные студентам для самопроверки в темах 1-9.
Для удобства работы вопросы здесь повторены вновь.
10.2.1. Ответы на контрольные вопросы по теме 1
Вопрос I. Назовите автора и год создания языка Pascal. Объяс-
ните, почему язык называется Pascal.
Ответ на вопрос 1.
Год создания языка Pascal — 1970 г.
Его автор — швейцарский профессор Никлаус Вирт.
Никлаус Вирт назвал новый язык программирования в честь
великого французского математика и религиозного философа
XVII века Блеза Паскаля, который изобрел первое вычислиicjib-
ное устройство.
Вопрос 2. К какому уровню относится язык программирования
Pascal?
Ответ на вопрос 2. Язык программирования Pascal относится к
языкам высокого уровня.
Вопрос 3. По подходу к программированию, к какому’ классу
относится язык Pascal?
305
Тема 10. Ответы на практические задания и контрольные вопросы
Ответ на вопрос 3. Pascal относится к языкам объектно-ориен-
тированного программирования. В них введено понятие объекта.
И для объекта реализованы механизмы вычислений, позволяющие
описывать структуру объекта и действия с ним.
Вопрос 4. Возможности языка Pascal?
Ответ на вопрос 4. Возможности языка Pascal:
• создание больших программ, разрабатываемых, возможно,
н ес кол ьк и м и 11 ро i ра м м и ста м и;
• Pascal реализует возможность декомпозиции задач на неза-
висимые (почти независимые) подзадачи и позволяет под-
держивать надежный интерфейс между ними:
• возможность компоновки программ из отдельных компонен-
тов значительно ускоряет процесс создания больших про-
|раммных комплексов;
• возможность гибкой структуризации данных за счет исполь-
зования массивов, записей, множеств, файлов, динамиче-
ской памяти;
• Pascal обеспечивает механизм надежной передачи парамет-
ров в подпрограммы;
• Pascal — строгий типизированный язык программирования, в
нем соблюдается строгая дисциплина использования типов;
• в языке программирования Pascal имеется возможность со-
здания новых типов данных в широком диапазоне;
• в Pascal также существует иерархия исполнения операций.
10.2.2. Ответы на контрольные вопросы по теме 2
Вопрос I. Из каких компонентов состоит среда программиро-
вания Borland Pascal?
Ответ на вопрос I. Среда программирования Pascal состоит из
трех компонентов: главного меню, строки состояния и оператив-
ной области.
Вопрос 2. Где расположены строка меню и строка состояния?
Ответ на вопрос 2. Строка меню (главное меню) расположена в
верхней части экрана, строка состояния — в нижней.
Вопрос 3. Какие действия необходимо выполнить, чтобы акти-
вировать главное меню?
Ответ на вопрос 3. Для активации (входа в меню) главного
меню необходимо нажать клавишу ПО.
306
10.2. Ответы на контрольные вопросы
Вопрос 4. Как производится запуск Borland Pascal?
Ответ на вопрос 4. Запуск Borland Pascal производится через
главное меню Windows или путем непосредственного запуска фай-
ла bp.exe.
Вопрос 5. Как запустить программу на выполнение?
Ответ на вопрос 5. Для запуска программы на выполнение не-
обходимо вызвать команду Run пункта меню Run или с клавиату-
ры с помощью комбинации клавиш Ctrl+F9.
Вопрос 6. Каким образом можно просмотреть результат выпол-
нения программы?
Ответ на вопрос 6. Выполнение программы происходит в спе-
циальном окне, называемом «User Screen». Доступ к этому окну
осуществляется клавишами Alt+F5 или через пункт меню Debug.
Вопрос 7. Каким образом осуществляется поиск ошибок в про-
грамме?
Ответ на вопрос 7. Поиск ошибок в программе осуществляется
через команду Compile или путем нажатия клавиши F9. После этого
на экране появляется информационное окно, с ходом компиляции.
10.2.3. Ответы на контрольные вопросы по теме 3
Вопрос I. Из каких составляющих состоит Алфавит языка про-
раммирования Pascal?
Ответ на вопрос I. Алфавит языка программирования Pascal со-
стоит из следующих составляющих:
• букв латинского алфавита;
• арабских цифр;
• зарезервированных слов;
• специальных символов;
• шестнадцатеричных цифр.
Вопрос 2. Что такое зарезервированные слова? Какие зарезер-
вированные слова вы знаете?
Ответ на вопрос 2. Зарезервированные слова языка Pascal могут
применяться только по своему прямому назначению, то есть в ка-
честве имен операторов, названий операций и т. д. Назначение за-
резервированных слов обычно определяется спецификацией или
стандартом языка. Зарезервированные слова иногда еще называют
«служебными словами» их нельзя изменять: любая неточность в их
написании является серьезной ошибкой.
307
Тема 10. Ответы на практические задания и контрольные вопросы
В языке Pascal существует около 80 зарезервированных слов к
которым относятся, например следующие: program, begin, var, if,
and, end и др.
Вопрос 3. Поясните смысл следующих символов:{ },
Ответ на вопрос 3. Все эти перечисленные символы
относятся к специальным символам языка программирования Pas-
cal и носят специальный характер.
Поясним их смысл:
« ; » — разделитель операторов в программе;
«{ }» — пары скобок для комментариев;
« . » — конец программы или модуля;
« : » — разделитель в описаниях переменных.
Вопрос 4. Что представляет собой оператор присваивания?
Укажите, где располагается оператор присваивания в обшей
структуре программы.
Ответ на вопрос 4. Оператор присваивания позволяет присваи-
вать переменной какое-то значение. Оператор представляет собой
составной символ «:=»
Например:
AI:=2*Co*D.
Место оператора присваивания в обшей структуре программы:
Program name;
Begin
... /ввод переменных/
{ Тело программы }
Al:=2*Co*D;
... /вывод результата/
End.
Вопрос 5. Как выглядит общая структура программы?
Ответ на вопрос 5. Общая структура программы имеет следую-
щий вид:
Program name; { заголовок программы_ имя программы }
Раздел опис ании
Begin / начало программы |
Тело программы (основной мок программы)
End. ( конец программы )
308
10.2. Ответы на контрольные вопросы
Вопрос 6. Где находи гея раздел операторов в общей структуре
программы?
Ответ на вопрос 6. Раздел операторов или основной блок про-
граммы — это часть программы, которая выполняет какие-либо
действия и располагается между зарезервированными словами be-
gin и end.
Место основною блока программы в общей структуре программы:
Program name;
Begin
Тело программы (основной блок программы или раздел операторов)
End.
Вопрос 7. Где располагается раздел описаний в общей структу-
ре программы?
Ответ на вопрос 7. Раздел описаний — это раздел, в котором
идут описания переменных, констант, меток и других объектов,
используемых в программе. Расположен этот раздел между заго-
ловком программы «Program name;» и началом программы, кото-
рое начинается с зарезервированного слова Begin.
Место раздела описаний программы в обшей структуре про-
граммы:
Program name;
Раздел описании
Begin
End.
Вопрос 8. Как выглядит разделитель операторов?
Ответ на вопрос 8. Разделитель операторов представляет собой
точку с запятой (;). Каждое описание и каждый оператор в про-
грамме должны завершаться точкой с запятой.
Например;
Program name ;
Var
X : real;
Вопрос 9. Чем заканчивается каждая программа?
Ответ на вопрос 9. Каждая программа завершается зарезерви-
рованным словом «end» с точкой в конце. Точка (.) — признак
конца программы.
Место конца программы в обшей структуре программы:
309
Тема 10. Ответы на практические задания и контрольные вопросы
Program name;
Begin
End. ( конец программы }
Вопрос Ю. Что представляет собой заголовок программы?
Ответ на вопрос 10. Заголовок программы представляет собой
запись вида «Program name;*. Зарезервированное слово Program,
символизирует обращение к программе (или вызов программы).
Место заголовка программы в обшей структуре программы:
Program name; { заголовок программыимя программы }
Begin
End.
Вопрос II. Как оформляются пояснения в программе?
Ответ на вопрос 11. Комментарии представляет собой текст,
который находится между фигурными скобками «{...}» или между
парами символов, состоящими из круглой скобки и звездочки
«(*...*)». Текст комментария не обрабатывается компилятором и не
включается в исполняемый файл.
Например:
Var (* раздел описания переменных *)
М : string; { объявляется переменная с именем М строкового типа
string }
Вопрос 12. Из каких блоков состоит раздел описаний программы?
Ответ на вопрос 12. Раздел описаний программы состоит из
следующих блоков: описание подключаемых модулей Uses, описа-
ние констант Const, описание переменных Var, описание меток
Label, процедуры и функции.
Место раздела описаний в обшей структуре программы:
Program name;
Uses name; { список подключаемых модулей к программе |
Const пате=значенис; [ описание констант }
Var патеггнп; Label пате: Procedure пате; { описание переменных ) | описание меток } ( процедуры }
310
10.2. Ответы на контрольные вопросы
Function name; { функции }
Begin
End.
Вопрос I3. Как описываются в программе константы?
Ответ на вопрос 13. Описание констант в программе происхо-
дит в блоке описания констант начинающегося с зарезервирован-
ного слова «Const*. Затем указывается имя константы и через знак
«=» указывается ее значение.
Например, Const pi = 3.I4; .
Место описания констант в общей структуре программы:
Program name;
Const pi—3.14; { объявляется константа с именем pi , которой
присваивается значение 3,14}
Begin
End.
Вопрос 14. Как подключить модуль CRT к программе и выпол-
нить предварительную очистку экрана?
Ответ на вопрос 14. Модуль CRT — модуль для работы с экра-
ном, является стандартным модулем и поставляется вместе с про-
граммным продуктом Borland Pascal 7.0. Для того чтобы подклю-
чить его, необходимо после заголовка программы поместить за-
пись вила «Uses CRT;». Зарезервированное слово «Uses* указывает
на то, что это блок описания модулей используемых в программе.
Затем в геле программы после оператора Begin расположить
команду — CIrScr.
Место подключения модуля в общей структуре профаммы:
Program name;
Uses CRT; -| объявляется модуль CRT предназначенный
для работы с экраном }
Begin
CIrScr; { стандартная команда CIrScr принадлежащая модулю
CRT, предназначенная для предварительной очистки
экрана }
End.
Вопрос 15. Какие типы переменных вы знаете?
311
Тема 10. Ответы на практические задания и контрольные вопросы
Ответ на вопрос I5. Различают простые и сложные типы пере-
менных в языке Pascal К простым типам, например, относят:
String — строковый тип; Integer — целое со знаком; Word — целое
без знака; Real — вещественный тип, и др. К сложным типам отно-
сят: файлы, массивы и записи.
Вопрос I6. Как объявить переменную ш целого типа без знака?
Ответ на вопрос 16. Объявляются (описываются) переменные в
блоке описания переменных, который начинается с зарезервиро-
ванного слова «Var». Затем указывается имя переменной и через
специальный символ двоеточие (:) указывается тип этой перемен-
ной. Объявим переменную с именем (т) целою тина без знака
(Word) следующим образом: Var m : Word ; .
Место описания переменных в общей структуре профаммы:
Program name;
Var
R:Word; | объявляется переменная с именем R целого
типа без знака }
Begin
End.
10.2.4. Ответы на контрольные вопросы по теме 4
Вопрос I. Какие правила построения выражений вы знаете?
Укажите, где располагаются выражения в обшей структуре про-
раммы.
Ответ на вопрос I. Выражения на языке Pascal составляются
следующим образом: выражения записываются в одну строку,
сложные громоздкие формулы необходимо разбивать на вспомога-
тельные, между операндами обязательно должен ставиться знак
операции и, если это необходимо, стандартная функция на языке
Pascal.
Например,
V:=4*pi*sqr(r)/3;.
Местонахождение выражений в обшей структуре программы:
Program name;
Begin
... /ввод переменных/ { Тело программы )
312
10.2. Ответы на контрольные вопросы
V:=4*pi*sqr(r)/3; {запись выражения на языке Pascal}
... /вывод результата/
End.
Вопрос 2. Какие операции называют бинарными? Укажите, где
располагаются бинарные операции в общей структуре программы.
Ответ на вопрос 2. К бинарным операциям относятся следую-
щие операции: сложение, вычитание, деление, умножение.
Например,
A2:-Cl*U; A:-AI/A2;
K:=i -I; AI:=K+l; L:=NdivP.
Место бинарных операций в общей структуре программы:
Program name;
Begin
/ввод переменных/ { Тело программы }
А1:=К+1; (бинарная операция умножения (+)}
A2:=C1*U; {бинарная операция умножения (*)}
А:=А1/А2; {бинарная операция деления (/)}
/вывод результата/
End.
Вопрос 3. Какие операции отношения вы знаете? Укажите, где
располагаются операции отношения в общей структуре ззрозраммы.
Ответ на вопрос 3. К операциям отношения относятся:
> (больше чем), >= (больше или равно), О (неравно),
< (меньше), <= (меньше или равно), = (равно).
Например,
Г(л) =
х- 2,
х + 2,
х>5
х < 5
Место операций отношения в общей структуре программы:
Program name;
Begin
/ввод переменных/ { Тело программы }
if х >= 5 {операция >= (больше или равно)}
{проверка условия в условном операторе}
(hen Y :- х —2 else Y :- х + 2;
/вывод результата/
End.
313
Тема 10. Ответы на практические задания и контрольные вопросы
Вопрос 4. Что такое стандартные функции? Какие стандартные
функции вы знаете?
Ответ на вопрос 4. В выражении в качестве операндов, кроме
констант и переменных, могут использоваться стандартные функ-
ции. Для вызова этих функций необходимо использовать их стан-
дартную запись на языке Pascal. Аргументы этих функций обязате-
льно должны быть заключены в круглые скобки.
Например, среди стандартных функций наиболее часто исполь-
зуются следующие:
Sqr(x) — стандартная функция возведения числа X в квадрат;
Sqrt(x) — стандартная функция вычисления квадратного корня
из числа X;
Random(x) — стандартная функция применения случайного
числа в интервале от 0 до X;
Тпшс(х) — стандартная функция вычисления целой часть зна-
чения X (операция отбрасывания дробной части).
Вопрос 5. Что представляет собой оператор ввода информации?
Ответ на вопрос 5. Ввод информации осуществляется с помо-
щью оператора Read Ход программы приостанавливается, на эк-
ран выводится курсор, компьютер ожидает от пользователя ввода
данных для переменных, имена которых указаны в списке ввода.
Пользователь с клавиатуры вводит необходимые значения в том
порядке, в котором они требуются списком ввода, нажимает Enter.
Например.
Read(A, В, С):
где А. В. С — переменные, которые последовательно подучают
вводимые с клавиатуры значения (список ввода).
Место ввода информации в обшей структуре программы:
Program name;
Var a: Word :
Begin
/ввод переменных/ { Тело программы }
Read(a); {ввод значения переменной с именем а
(компьютер ожидает ввода данных)}
End.
Вопрос 6. Что представляет собой оператор вывода информа-
ции?
314
10.2. Ответы на контрольные вопросы
Ответ на вопрос 6. Вывод информации осуществляется с помо-
щью оператора Write. Где в скобках в апострофы заключается та
информация, которую необходимо вывести на экран.
Пример I:
WriteC Введите число ’);
Пример 2:
WritcInCpeayjibTaT вычисления X - ’,Х:5:2);
В примере I оператор Write выводит на экран сообщение «Вве-
дите число» заключенный в апострофы.
Оператор Write, в примере 2, выводит на экран строку «резуль-
тат вычисления X -», а затем значение переменной X.
Место вывода информации в обшей структуре программы:
Program name;
Var a,s : Word ;
Begin
Writef Введите сторону квадрата a= ’);
( вывод сообщения заключенного в апострофы на экран }
Read(a);
S:=sqr(a);
Writef Результат вычисления площади квадрата S= S:5);
{ вывод результата вычисления на экран }
End.
Вопрос 7. Как вывести на экран сообщение, например. «Доб-
рое утро»?
Ответ на вопрос 7. Текст прО1раммы вывода на экран сообще-
ния «Доброе утро» выглядит следующим образом:
Program My_primer;
Begin
Writef Доброе утро');
End.
Вопрос 8. Как осуществляется вывод с форматом?
Ответ на вопрос 8. Вывод с форматом осуществляется в опера-
торе Write. Вывод с форматом можно использовать как для целых,
так и для действительных чисел. Формат указывается через двое-
точие после переменной. Для действительных чисел формат состо-
ит из двух величин: первая величина обозначает общее поле выво-
димого значения, вторая величина — поле дробной части. Для це-
315
Тема 10. Ответы на практические задания и контрольные вопросы
лых чисел указывается только первая величина — обшес поле
выводимого значения.
Пример 1;
Write('S=',S:5:2);
Эта запись означает, что выводится действительное число (S).
Для изображения этого числа отводится: 5 позиций — для вывода
всего числа; из которых 2 позиции — отводятся на изображение
дробной части.
11римср 2:
Write('S=',S:5);
Эта запись означает, что выводится целое число (S) на изобра-
жение которою отведено 5 позиций.
Место вывода с форматом в общей структуре программы:
Program name;
Var a, b, Р : real ;
Begin
Writef Введите стороны прямоугольника а, b ');
Wrilcfa—); Rcad(a);
Writefb—>; Read(b);
P:=a+ b;
WritelnC Периметр прямоугольника P P: 6: 2);
{ вывод с форматом результата вычисления на экран }
End.
Вопрос 9. Назначение пустого оператора Readln?
Ответ на вопрос 9. Пустой оператор Readln перед концом про-
граммы (End.) используется для просмотра результатов вычисле-
ния прО1раммы сразу же после того как она будет запущена на вы-
полнение т. с. заменяет функцию команды «User Screen».
Место пустого оператора Readln в обшей структуре программы:
Program name;
Var
a, b, S : real;
Begin
Wrilefa—); Read (a);
WritcCb-); Rcad(b);
S:=a+ b;
WritelnC Площадь прямоугольника S = S:7:3);
316
10.2. Ответы на контрольные вопросы
Wrilclnf Для завершения нро!раммы нажмите <ENTER>');
Readin {пустой оператор readin необходим для приостановки ра-
боты программы с целью просмотра результатов вычисления сразу
же на экране}
End.
Вопрос I0. В чем заключается назначение окончания — Ln,
прибавляемого к операторам ввода и вывода информации?
Ответ на вопрос 10. Окончание Ln. прибавляемое к операторам
ввода (Read) и вывода (Write) информации, означает переход на
следующую строку.
После выполнения Read значение следующего данного считы-
вается с этой же строчки, а после выполнения Rcadln - с новой
строки.
Оператор вывода WriteLn осуществляет сначала вывод на экран
значений или текста помешенного в апострофы, а затем переход
на новую строку.
10.2.5. Ответы на контрольные вопросы по теме 5
Вопрос I. Как выглядит составной оператор? Где располагается
составной оператор в общей структуре программы?
Ответ на вопрос I. Составной оператор представляет собой нс
что иное, как скобки, в которые заключаются операторы. Состав-
ной оператор еще называют операторными скобками, которые на-
чинаются с зарезервированного слова «begin» и заканчиваются за-
резервированным словом «end». Таких скобок может быть неско-
лько. I лавное правило — каждому «begin» соответствует свое «end*.
Место составного оператора в общей структуре программы:
Program name;
Begin
... { Тело программы }
Begin (операторные скобки}
Оператор I;
End: {операторные скобки)
End.
Вопрос 2. Чем заканчивается составной оператор?
3I7
Тема 10. Ответы на практические задания и контрольные вопросы
Ответ на вопрос 2. Признак окончания составного оператора —
специальный символ — точка с запятой «;». 'Этот знак также игра-
ет роль разделителя операторов.
Вопрос 3. Что представляет собой условный оператор? Где рас-
полагается условный оператор в обшей структуре программы?
Ответ на вопрос 3. Условный оператор представляет собой реа-
лизацию алгоритмической структуры ветвления. Такая схема по-
зволяет решать задачи, в которых в зависимости от сложившихся
обстоятельств требуется совершить то или иное действие. Если
условие выполняется, то будет выполнено действие I, если нет,
то — действие 2. Несмотря на то, что в схеме присутствуют два
действия, выполнено будет только одно, так как условие либо
ложно, либо истинно. Третьего не дано.
Условный оператор имеет вид:
If условие Then оператор I Else оператор 2;
Место условного оператора в общей структуре программы:
Program name;
Begin
If условие Then оператор I Else оператор 2;
End.
Эта запись на обычном русском языке будет читаться так:
если логическое выражение истинно,
тогда выполняется оператор / ,
иначе (если логическое выражение ложно) — оператор 2.
Вопрос 4. Когда выполняется ветвь then в условном операторе?
Где располагается ветвь fhen в общей структуре про|раммы?
Ответ на вопрос 4. Ветвь then выполняется в условном операто-
ре тогда, когда логическое условие истинно.
Место ветви then в общей структуре программы:
Program name;
Begin
if X< =0 {проверяется условие}
then writeLnCВычислить функцию невозможно Г)
318
10.2. Ответы на контрольные вопросы
{ если условие истинно то выполняется действие — вывод
сообщения «Вычислить функцию невозможно!» на экран }
else Y:=sqrt(X); {ветвь else}
End.
Вопрос 5. Когда выполняется ветвь else в условном операторе?
Где располагается ветвь else в общей структуре программы?
Ответ на вопрос 5. Ветвь else в условном операторе выполняет-
ся тогда, когда логическое условие ложно.
Место ветви else в общей структуре программы:
Program name;
Begin
if А>В {проверяется условие}
then С:=А {ветвь then}
else С:=В; {ветвь else выполняется тогда когда условие ложно}
{Если А>В. то результат — А, иначе результат — В}
End.
Вопрос 6. Что представляет собой оператор выбора варианта?
Ответ на вопрос 6. Оператор выбора варианта дает возможность
выбрать и выполнить одно из нескольких действий. Этот выбор
производится в зависимости от значения управляющей перемен-
ной или выражения. Значение управляющей переменной (выраже-
ния) сравнивается с соответствующим набором значений, запи-
санных в форме меток. Набор значений — это конкретные значе-
ния управляющей переменной или выражения, при которых
необходимо выполнить соответствующий оператор, игнорируя
остальные варианты. Если в наборе несколько значений, то они
разделяются между собой запятыми. Можно указывать диапазон
значений.
Оператор выбора варианта имеет вид:
Case УнравляющаяНсременнаяИлиВыражсние оГ
НаборЗначений! : Оператор!:
НаборЗначений! : Оператор!:
НаборЗначенийЗ : ОпсраторЗ:
НаборЗначенийК : ОператорК
else
3I9
Тема 10. Ответы на практические задания и контрольные вопросы
АльтернативныйОпсратор;
end; {Конец оператора выбора}
Место оператора выбора варианта в общей структуре профаммы:
Program name;
Begin
writc('Введите номер месяца. п=Э;
rcad( number);
Case number of
1: goroscop:” 'Kozerog';
2: goroscop:= 'Vodolei';
End.
Вопрос 7. Что такое метки?
Ответ на вопрос 7. Метка в языке Pascal представляет собой це-
лое неотрицательное число в диапазоне от 0 до 9999 или символь-
ные конструкции длиной не более 63 букв и знаков. Метки пред-
назначены для обозначения места перехода вычислений во время
выполнения основной программы.
Вопрос 8. Как описываются метки в программе?
Ответ на вопрос 8. Описание меток начинается со служебного
слова Label. Блок описания меток располагается между заголовком
программы и оператором begin.
Место блока Label в общей структуре профаммы:
Program name; {заголовок программы имя программы]
Label имя метки ; {раздел описания меток программы}
Begin
{ Тело программы }
End .
Вопрос 9. Где и как происходит обращение к меткам в теле
профаммы?
Ответ на вопрос 9. Внутри основной программы (тела програм-
мы) обращение к меткам происходит следующим образом. Имя
Mei ки располагается непосредственно перед помечаемым операто-
ром и отделяется от него двоеточием «:».
Место обращения к метке в общей структуре программы:
320
10.2. Ответы на контрольные вопросы
Program name ;
Label имя метки ;
Begin
{ Тем программы }
имя метки : Writc('O6bCM куба V=’,V:5:2); {обращение к метке}
End .
Вопрос Ю. Что представляет собой оператор безусловного пе-
рехода? Где располагается оператор безусловного перехода в об-
шей структуре программы?
Ответ на вопрос Ю. Оператор безусловного перехода goto по-
зволяет переходить на нужное место программы, игнорируя даль-
нейшее. последующее выполнение строк основной профаммы, а
выполняя действие с меткой. Действие, нарушающее прямолиней-
ное выполнение программы и передающее управление в произво-
льную се точку называется безусловным переходом, а оператор,
выполняющий это действие, называется оператором безусловного
перехода.
Место оператора goto в общей структуре профаммы:
Program name ;
Label имя метки ;
Begin
{ Tero программы }
Goto имя метки ; { оператор безусловного перехода }
имя метки : End.
Вопрос 11. Правила использования меток?
Ответ на вопрос II. Перед тем как появиться в теле програм-
мы, метка должна быть описана в блоке описаний меток. К метке
в теле программы обязательно должен быть осуществлен переход с
помощью оператора безусловного перехода goto. Метка, на кото-
рую ссылается оператор goto, обязательно должна встретиться
где-нибудь в теле программы, т. с. к ней должно быть осуществле-
но обращение в теле программы.
10.2.6. Ответы на контрольные вопросы по теме 6
Вопрос I. Что такое цикл и тело никла?
321
Тема 10. Ответы на практические задания и контрольные вопросы
Ответ на вопрос I. Цикл — это многократное повторение одно-
типных действий. Тело цикла — это те самые действия, которые
нужно многократно повторять.
Вопрос 2. Какие виды цикла вы знаете?
Ответ на вопрос 2. Существует три вида цикла, имеющих соб-
ственные операторы на языке Pascal. Эти виды имеют собствен-
ные условные названия: «Цикл с параметром, т. е. цикл For»,
«Цикл с предусловием (пока), т. е. цикл While», «Цикл с постусло-
вием (до), т. с. цикл Repeat». Каждый используется для своего
класса задач.
Для реализации циклического процесса с известным числом
повторений используют цикл «с параметром*. Когда число повто-
рений в цикле неизвестно, а задано только некоторое условие его
продолжения или окончания используют цикл «с предусловием»
или цикл «с постусловием».
Вопрос 3. Как выглядит общая структура цикла с параметром?
Ответ на вопрос 3. Общая структура цикла «с параметром»
(цикл For) выглядит следующим образом:
For имя := выражение 1 То выражение 2 Do оператор',
или
For имя := выражение I Downlo выражение 2 Do оператор'.
Читается данная структура так: Для параметра (далее следует
его имя) от начального значения (выражение Г) до конечного (вы-
ражение 2) выполнять оператор (являющийся телом цикла).
При использовании служебного слова То значение параметра
цикла увеличивается, при использовании Downlo — уменьшается.
Место этого цикла в общей структуре программы:
Program name;
Begin
For имя := выражение 1 То выражение 2 Do
Begin
оператор I;
End;
End.
322
10.2. Ответы на контрольные вопросы
Вопрос 4. Как выглядит общая структура цикла с предусловием?
Ответ на вопрос 4. Цикл «с предусловием» или цикл While вы-
гляди) следующим образом:
While условие Do оператор};
По-русски эту запись .можно прочитать это гак: «Пока условие
истинно, будет выполняться оператор!».
Место этого цикла в общей структуре программы:
Program name;
Begin
W hile условие Do
Begin
оператор I;
End;
End.
Вопрос 5. Как выглядит общая структура пикта с постусловием?
Ответ на вопрос 5. Цикл «с постусловием» или цикл Repeat вы-
глядит следующим образом:
Repeat оператор I l_ ntil условие;
Читается гак: «Выполнять оператор I до тех пор, пока не будет
выполниться условие».
Program name;
Begin
Repeat оператор I;
Until условие;
End.
10.2.7. Ответы на контрольные вопросы по теме 7
Вопрос 1. Что такое массив?
Ответ на вопрос 1. Массив — совокупность конечного числа
данных одного типа. Массив обозначается одним именем.
Вопрос 2. Как описываются массивы в разделе описаний?
323
Тема 10. Ответы на практические задания и контрольные вопросы
Ответ на вопрос 2. Описать массив можно в блоке описания
типов, который начинается со служебною слова Туре:
Гуре
Имя типа = Array [Диапазон индексов] Of Тип элементов;
В качестве индексов могут выступать переменные любых по-
рядковых типов. При указании диапазона начальный индекс не
должен превышать конечный.
Также массив описать можно и сразу (без предварительного
описания типа) в блоке описания переменных, который начинает-
ся со служебного слова Var:
Var
Имя переменной массива : Array [Диапазон индексов) Of Тип
элементов;
Вопрос 3. Как описывается двумерный массив?
Ответ на вопрос 3. Описать двумерный массив можно двумя
способами в блоке описания переменных, который начинается со
служебного слова Var:
Способ первый:
Var
А : Array [I..20] Of Array [I..30] Of Integer;
Способ второй:
Var
A : Array |1..20,1..30] Of Integer:
Вопрос 4. Что такое двумерный массив?
Ответ на вопрос 4. Двумерный массив представляет собой таб-
лицу элементов одного типа размерностью М х N (М-число строк,
N-число столбцов).
10.2.8. Ответы на контрольные вопросы по теме 8
Вопрос 1. Что такое подпрограмма?
Ответ на вопрос I. Подпр01рамма представляет собой инстру-
мент, с номошью которого сложную объемную задачу целесооб-
разно разбивать на ряд более простых в известной степени незави-
симых друг от друга частей. В языке Pascal существует два вида
подпрограмм: процедуры и функции.
Вопрос 2. В чем отличие процедуры от функции?
Ответ на вопрос 2. Отличие заключается в том, что именно яв-
ляется результатом работы процедуры или функции. Результатом
324
10.2. Ответы на контрольные вопросы
работы процедуры является набор вычисленных (обработанных)
переменных, которые могут быть возвращены из процедуры в
основную программу как некоторый набор данных. Результатом
работы функции является вычисленное единственное числовое
значение, которое и передается назад в программу.
Вопрос 3. Как выглядит общая структура подпрограммы в кон-
тексте программы?
Ответ на вопрос 3. Легко заметить схожесть структуры подпрог-
раммы с программой. Действительно, ведь и подпрограмма и
основная программа реализуют некий алгоритм, просто подпрог-
рамма нс даст решения всей задачи.
Месторасположение подпрограммы в обшей структуре про-
граммы:
PROGRAM Namc_l; {заголовок основной программы}
{раздел описаний основной программы}
Var {переменные основной программы}
имя глобальной переменной : тип переменной;
Procedure name; {заголовок подпрограммы}
{раздел описаний подпрограммы}
Var {переменные подпрограммы}
имя локальной переменной : тип переменной;
Begin {начало подпрограммы пате }
... {/иело подпрограммы}
End; {конец подпрограммы пате }
BEGIN {начало основной программы Name_!}
{тело основной программы}
{пате}; {вызов подпрограммы}
END. {конец основной программы Name_!}
Вопрос 4. Что представляет собой вызов подпрограммы? Где
располагается вызов подпрограммы в общей структуре программы?
Ответ на вопрос 4. Упоминание имени подпрограммы (собст-
венного имени процедуры гиги функции) в тексте программы при-
водит к активизации процедуры и называется вызовом подпрог-
раммы.
Месторасположение упоминания имени подпрограммы в об-
шей структуре программы:
PROGRAM Name_l;
325
Тема 10. Ответы на практические задания и контрольные вопросы
Procedure name;
Begin
End;
BEGIN
{name};
END.
{начало основной программы Name_l}
{вызов подпрограммы}
{тело основной программы}
{коней основной программы Name_!}
Вопрос 5. Что такое формальные и фактические параметры?
Где располагаются формальные и фактические параметры в обшей
структуре профаммы?
Ответ на вопрос 5. Подпрограмма должна иметь параметры
(значения, передаваемые в процедуру или функцию в качестве ар-
гументов). В разделе описаний подпрограммы указываются так
называемые формальные параметры (имена, под которыми будут
фигурировать передаваемые данные внутри подпрофаммы) и их
типы. При вызове подпрофаммы вместе с ее именем указываются
фактические параметры, в том порядке, в котором они находятся в
разделе описаний подпрофаммы.
Месторасположение формальных и фактических параметров
подпрофаммы в общей структуре про1раммы:
PROGRAM Namc_l;
Procedure name: {заголовок подпрограммы}
{раздел описаний подпрограммы / формальные параметры }
Begin
End;
BEGIN
{пате}',
END.
{конец подпрограммы пате }
{вызов подпрограммы / фактические параметры}
Вопрос 6. Что такое глобальные и локальные переменные? Где
располагаются глобальные и локальные переменные в общей
структуре профаммы?
326
10.2. Ответы на контрольные вопросы
Ответ на вопрос 6. Вес описанные в разделе описаний подпрог-
раммы объекты (например, переменные и др.) «видимы» лишь в
этой подпрограмме, поэтому такие переменные называются лока-
льными. Объекты, описанные ранее, в разделе описаний основной
программы и нс переопределенные в теле подпрограммы, называ-
ются глобальными для этой подпрограммы и доступны для испо-
льзования.
Месторасположение глобальных и переменных общей структу-
ре программы:
Program Name 1; {заголовок основной программы}
{раздел описаний программы}
Var { глобальные переменные программы}
имя глобальной переменной : тип глобальной переменной'.
Procedure name; {заголовок подпрограммы}
{раздел описаний подпрограммы}
Var { локальные переменные подпрограммы}
имя локальной переменной : тип локальной переменной'.
Begin
End; {конец подпрограммы пате |
(иалм?};
BEGIN
END. {конец основной программы Name_l}
Вопрос 7. В чем отличие подпрограммы от программы? Приве-
дите общую структуру подпрограммы и программы.
Ответ на вопрос 7. Если внимательно посмотреть на структуру
программы (структура 1), процедуры (структура 2) и функции
(структура 3) то легко можно увидеть, в чем их сходство и в чем их
отличие.
Структура 1:
Program <имя> ;
Раздел описаний программы
Begin
Тело программы
End.
327
Тема 10. Ответы на практические задания и контрольные вопросы
Структура 2:
Procedure <имя> |(<сп. ф. п . >:<тип>) Г,
Раздел описаний процедуры
Begin
Тело процедуры
End;
Структура 3:
Function <имя> |(<сп.ф.п.>)| : <тип>;
Раздел описаний функции
Begin
Тело функции
End;
Сходство этих структур в том, что у всех есть заголовок, раздел
описаний и раздел, в котором выполняются операторы и который
начинается с зарезервированного слова Begin и заканчивается за-
резервированным словом End.
Отличие этих структур в самом заголовке и в знаке после слу-
жебного слова End. Программа заканчивается обязательно специа-
льным символом — точкой «.», а подпрограмма заканчивается
специальным символом — точка с запятой «;». Этот признак ука-
зывает на то, что подпрограмма это часть программы. Подпрог-
рамма это самостоятельный фрагмент программы.
10.2.9. Ответы на контрольные вопросы по теме 9
Вопрос 1. Перечислите типы файлов, которые используются в
языке Pascal?
Ответ на вопрос 1. В языке Pascal имеется три типа файлов:
• текстовый файл (определяется словом Text);
• типизированный файл (определяется предложением File Of
Тип):
• не типизированный файл (определяется словом File).
Вопрос 2. С помощью каких процедур происходит открытие и
закрытие файла?
Ответ на вопрос 2. Открытие файла выполняется процедурой
Reset или Rewrite:
Reset!Имя файловой переменной);
Rewrite(HMB файловой переменной);
Закрытие файла происходит при помощи процедуры Close:
С1о$е(Имя файловой переменной);
328
10.2. Ответы на контрольные вопросы
Вопрос 3. С помощью какой процедуры происходи! присвое-
ние имени новому файлу?
Ответ на вопрос 3. Присвоение имени новому открытому файлу
происходит при помощи процедуры Assign:
Assign* Имя файловой переменной. Имя файла);
Вопрос 4. С помощью какого оператора происходит чтение
файла?
Ответ на вопрос 4. Для чтения файла используется оператор
Bead:
Read!Имя файловой переменной. Список ввода);
Вопрос 5. Поясните понятия имя файла и расширение файла.
Ответ на вопрос 5. Каждому файлу при создании присваивается
имя. Имя файла состоит из двух частей: собственно имени и его
расширения. Имя может содержать несколько символов: в DOS
от I до 8 символов, в WINDOWS — от I до 255 символов.
Расширение отделяется от имени точкой и состоит из несколь-
ких символов (от I до 3). Например, Example.pas или Example.com.
Расширение характеризует тип файла, т. е. показывает, какая ин-
формация содержится в этом файле: программа, текст, рисунок,
мелодия и т. д.
Вопрос 6. Какие способы объявления файловых переменных
вы знаете?
Ответ на вопрос 6. В языке Pascal файловые переменные можно
объявить в программе двумя способами.
Способ I: Сначала указывается тип-файла в разделе описания
Туре, затем в блоке Var можно определить переменные файлового
типа:
Туре
Р = File Of Integer; | Тип-файл целых чисел]
Var
Fl : Р;
Способ 2: Тип-файл можно описагь непосредственно при вве-
дении файловых переменных, в блоке описания переменных Var;
Var
Fl : File Of Integer, {создается файл целых чисел]
Вопрос 7. Какие способы объявления множественного типа вам
знакомы?
329
Тема 10. Ответы на практические задания и контрольные вопросы
Ответ на вопрос 7. Есть два способа объявления множеств в
программе.
Способ 1: С предварительным описанием типа в разделе описа-
ния Туре, затем в блоке Var можно определить переменные фай-
лового типа:
Туре
Days = Set of 1 „31;
Var
Data : Days;
Способ 2: Можно описать переменную .множественного типа и
без предварительного описания типа, в блоке описания перемен-
ных Var:
Var
Data : Set of 1 „31; {создается множество}
Вопрос 8. Какие операции можно производить над множества-
ми?
Ответ на вопрос 8. В языке Pascal при работе с множествами
допускается использование следующих операций:
• операции отношения (=, о, >=, <—);
• операция объединения (сумма) множеств (+);
• операция пересечения (произведение) множеств (*);
• операция дополнения (разность) множеств (—);
• операция проверки принадлежности элемента множеству
(in).
Вопрос 9. Каким образом в программе происходит объявление
записей?
Ответ на вопрос 9. Существует два способа объявления запи-
сей.
Способ 1. Объявление записей с предварительным описанием
типа в блоке описания Туре:
Туре
Address: Record
NubcrHomc : Integer;
Street Name : String;
CityNamc : String;
ApartNum : Integer
End;
Var
Student I, Sludent2, Studcnt3 ; Address;
330
10.2. Ответы на контрольные вопросы
Способ 2. Объявление записей непосредственно в блоке описа-
ния переменных Var
Var
Address : Record
NuberHoinc : Integer;
StneetName : String;
City Name : String;
ApartNum : Integer
End;
Вопрос IO. Дайте определение файлу, множеству, записи.
Ответ на вопрос I0. Файл — это набор данных, хранящихся во
внешней памяти компьютера (на жестком диске, дискете, ком-
пакт-диске и т. п.) под заданным именем.
Множество — это набор элементов одинакового тина, которые
рассматриваются как единое целое. Множества определяются то-
лько своими элементами, элементы множества неупорядочены.
Множества используются в тех задачах, где порядок следования
элементов не имеет значения.
Запись — эго комбинированный тип данных, состоящий из
фиксированного числа компонентов одного или нескольких ти-
пов.
331
Заключение
Учебное пособие завершено. Однако у уважаемою Читателя,
возможно, осталось ощущение незавершенности темы. И это дей-
ствительно так. Данная работа нс претендует на исчерпывающее
изложение практических особенностей языка Pascal. Здесь были
рассмотрены только необходимые, но при этом вполне достаточ-
ные разделы программирования на языке Pascal. Изложенный
здесь материал позволяет Читателю, особенно такому, который
только начинает свой путь в программировании, освоить основ-
ные приемы программирования (кстати сказать, достаточно уни-
версальные), схватить главную идею языка Pascal, научиться пра-
вильной логике программирования, прийти к умению видеть
компьютерную программу «и в целом и в деталях». А это значит,
что начинающий Программист придет к пониманию того, что
умелое и правильное программирование начинается со способно-
сти хорошо продумывать программу наперед.
Ценность языка Pascal, созданного как языка для обучения
программированию, в том и заключается, что он не гонится за
компактностью и универсальностью. Он остается достаточно ло-
гичным, последовательным и потому понятным. И в этом качест-
ве, в качестве языка для обучения программированию, язык Pascal
гак и остался не превзойденным.
Полезной особенностью данного учебного пособизг для студен-
тов, преподавателей и специалистов является наличие здесь мно-
гочисленных примеров, заданий и контрольных вопросов. При
этом здесь же для самопроверки даны и ответы на эти задания и
контрольные вопросы.
Вероятно, полезным для любознательного Читателя окажется и
содержание «Темы 1», где дан обзор гго современным языкам про-
граммирования, их характеристикам и тенденциям их развития.
Авторы надеются, что изложенный в данном учебном пособии
материал повысит интерес студентов, преподавателей и специали-
стов к проблемам программирования для ЭВМ.
Авторы с благодарностью примут рекомендации и замечания
по содержанию данного учебного пособия, которые можно пере-
слать на электронный адрес: taranukha@knastu.ni или kks@knas-
tu.ru.
332
Биографическая справка об авторах
Тарануха Николай Алексеевич
Заслуженный работник высшей
школы РФ, доктор технических
наук, профессор, заведующий ка-
федрой кораблестроения Ко.мсо-
мольского-на-Амуре государствен-
ного технического университета,
академик Международной инже-
нерной академии, действительный
член Международного Совета по
i ра н и ч но-элс мс нтн ы м тех нол огн-
ям (Англия). Автор более 160 на-
учных и методических трудов, в
том числе изданных в США, Анг-
лии, Германии, Бельгии. Болга-
рии. Польше, Корее. Китае. Име-
ет серию научных работ в области численных методов и програм-
мирования на ЭВМ. Окончил Комсомольский-на-Амурс
политехнический институт по специальности «Кораблестроение»
и Открытый университет Великобритании по направлению «Ме-
неджмент и экономика» Читает курсы лекций по численным ме-
тодам, прочности, менеджменту, организации перевозок для сту-
дентов направлений «Кораблестроение и оксанотехника» и «Орга-
низация перевозок и управление на транспорте». Область научных
исследований — численные методы, механика деформируемого
твердого тела, гидроупругость, эффективность транспортных пере-
возок. Является одним из авторов метода модуль-элементов, про-
граммного комплекса «Элемент», нескольких специальных про-
граммных продуктов. Вел научную работу и преподавал в универ-
ситетах России. Германии и Республики Корея.
Гринкруг Лев Соломонович
Почетный работник высшего профессионального образования
РФ, кандидат технических наук, ректор Дальневосточной государ-
ственной социально-гуманитарной академии (ДВГСГА), доцент
кафедры информационных сисгем и прикладной информатики
333
Биографическая справка об авторах
ДВГСГА, член-корреспондент
академии естествознания. Автор
более 90 научных и методических
трудов (в том числе изданных в
Китае и Корее) и II изобретений.
Окончил Комсомольский-на-Аму-
ре политехнический институт ио
специальности «Судовые энерге-
тические установки», аспирантуру
Ленинградского политехнического
института по специальности «Тур-
бомашины», Хабаровскую акаде-
мию экономики и права по специ-
альности «Финансы и кредит». Читает курсы лекций и ведет прак-
тические занятия по дисциплинам: механики жидкости и газа
(«Гидрогазодинамика», «Гидравлика», «Методы подобия и размер-
ности в механике жидкостей* для студентов специальностей: «Фи-
зика», специализация «Информационные технологии в образова-
нии и научной деятельности»; «Математика», специализация «Ма-
тематическое моделирование»); «Экономика* для студентов
направления «Экономика»; «Основы квалиметрии» для студентов
направления «Информатика и вычислительная техника». Область
научных исследований — газодинамика турбомашин; физическое
и математическое моделирование течений жидкости в решетках и
ступенях турбомашин; оптимизация управления качеством функ-
ционирования и развития вуза. Имеет научные работы и учеб-
но-методические разработки в области применения средств вы-
числительной техники для решения задач: механики жидкости и
газа; менеджмента качества деятельности вуза.
Бурменский Андрей Дмитриевич
Старший преподаватель кафедры кораблестроения Комсомоль-
ского-на-Амуре государственного технического университета. Ав-
тор более 50 научных и методических трудов. Специализируется в
области преподавания информационных дисциплин и дисциплин,
связанных с проектированием обьсктов оксанотсхники. Имеет ряд
научных работ и учебно-методических разработок в области ин-
формационных технологий, численных методов и профаммирова-
ния на ЭВМ. Окончил Комсомолъский-на-Амуре политехнззче-
ский институт по специальности «Кораблестроение» и аспирантуру
334
по специальности «Проектирова-
ние и конструкция судов». Читает
курсы лекций и ведет практиче-
ские и лабораторные занятия по
дисциплинам «Информатика»,
«Специальные компьютерные тех-
нологии», «Информационные тех-
нологии на транспорте», «Компь-
ютерные технологии в науке, тех-
нике и образовании* для студентов
и магистров направлений «Кораб-
лестроение и океанотсхника» и
«Организация перевозок и управ-
ление на транспорте». Область на-
учных исследований — теория проектирования судов, расчетное
проектирование корпусных конструкций судов, численные методы
и математическое моделирование в области океанотехники.
Ильина Снежана Владимировна
Старший преподаватель кафед-
ры кораблестроения Комсомоль-
ского-на-Амурс государственного
технического университета. Спе-
циализируется в области препода-
вания дисциплин, связанных с
। |рограммированием. компьютер-
ными технологиями и устройст-
вом кораблей. Имеет несколько
научных работ и учебно-методиче-
ских разработок в области про-
раммирования на ЭВМ. Окончи-
ла Комсомольский-на-Амурс госу-
дарственный технический
университет по направлению «Ко-
раблестроение и океанотсхника», имеет степень магистра техники
и технологии по направлению «Кораблестроение и оксанотехни-
ка». Читает курсы лекций и ведет практические и лабораторные
занятия по дисциплинам «Компьютерные технологии», «Приклад-
ные компьютерные технологии», «Теория и устройство корабля»
для студентов направлений «Кораблестроение и океанотсхника» и
335
Биографическая справка об авторах
«Организация перевозок и управление на транспорте». Область
научных исследований — прочность судов, математическое моде-
лирование, внешние воздействия на объекты оксанотсхники.
336
Список литературы
Список использованной литературы
I. Бобровский С. Пятое поколение: языки программирования
или прикладные системы?. PC Wcek/RE. Интернет:
http://www.mssianenierprisesolutions.com/techno/l5gl.htnil. 1997.
2. Бобровский С. Русский Пролог. PC Wcek/RE. Интернет:
http://www.russiancnterprisesolutions.coni/tcchno/rcfal.html. 1996.
3. Бобровский С. Язык Ада. PC Wcek/RE. Интернет:
http://www.russiancnterprisesolutions.com/techno/ada.htnil. 1996.
4. Богатырев Р. Летопись языков Паскаль. Интернет: http://pa.s-
cal.sources.ru/articlcs/058.htm. 2001.
5. Буч Г. Объсктно-оринтированный анализ и проектирование.
Приложение: Объектно-ориентированные языки программирова-
ния. Интернет: http://www.kti.ru/data/195/supplcment.hlm. 2006.
6. Васильев П. П. Турбо Паскаль в примерах и задачах: Освой
самостоятельно: Учебное пособие. — М.: Финансы и статистика.
2003.
7. Ворф Б Л. Классификация и развитие языков программиро-
вания. Интернет: http://spacer.narod.ru/zadachi/razvit.htnil. 2005.
8. Вирт Н. Алгоритмы и структуры данных: Пер. с англ. — 2-ое
изд. — СПб: Невский Диалект, 2005. — 352 с.
9. Долинский М. С. Алгоритмизация и программирование на
Turbo Pascal: От простых до олимпиадных задач: Учебное пособие.
СПб.: Питер, 2005.
10. Зубов В. С. Программирование на языке TURBO Pascal
(версии 60 и 7.0). — М • Информационно-издательский дом «Фи-
линь». 1997. — 320 с.
II. История Развития ПК — Российский образовательный пор-
тал. Шкала № 31, 1. Волгодонск. Интернет: htlp://www.rcfpor-
tal.ru/coniputers/rcf55188.html. 2006.
12. Каплун А. Б.. Морозов Е. М., Олферьева М. A. ANSYS в ру-
ках инженера: Практическое руководство. — М.: Едиториал
УРСС. 2003. - 272с .
13. Немнюгин С. А. Турбо Паскаль: Практикум. — СПб.: Пи-
тер, 2000.
337
Список литературы
14. Hcmhkmhh С. A. Turbo Pascal. Про)раммированис на языке
высокою уровня: Учебник для вузов. 2-е изд. — СПб.: Питер,
2004.
15. Новичков В. С., Парфилова Н. И., Пылькин А. Н. Алгорит-
мизация и программирование на Турбо Паскале: Учебное посо-
бие. — М.: Горячая линия — Телеком, 2005.
16. Описание программы COSMOSWorks. Интернет:
http://cae.tgngu.tyumen.ru/Programs/CosmosWorks/cosmos_abo-
ut.htm. 2005.
17. Организация ЭВМ и систем. Конспект лекций. Раздел: Об-
щие характеристики основных языков программирования. Кафед-
ра «САПР в строительстве» МГСУ. Интернет:
http://sapr.mgsu.ru/biblio/ibrn/contcnts/ja7.iki.htm. 2005.
IX. Орехов А. И. Языки программирования — эволюция? Ин-
тернет: http://www.python.ru/2002-05/67.html. 2005.
19. Плискин М. Функциональные языки программирования.
Интернет: http://bookashka.com/bookl 173060.html. 2004.
20. Плискин М. Эволюция языков программирования. Интер-
нет: http://bookashka.com/bookl 173O7O.html . 2006.
21. Пойа Д. Как решать задачи.— М.: Учпедгиз, 1959.
22. Поляков Д. Б., Круглов И. Ю. Программирование в среде
Турбо Паскаль (версия 5.5): Справ.-мстод. пособие. — М.: Изд-во
МАИ, 1992. - 576 с.
23. Программный комплекс FlowVision. Интернет:
http://www.dclcamural.ru/index.php/article/archivc/813.
24. Программный комплекс ShaftMastcr для Windows. Интер-
нет: http://zx95jl.infobox.ru/ru/ru/indcx.htm , http://www.shaftsoftwa-
re.com/. 2005.
25. Про1раммные продукты Autodesk: AutoCAD. Интернет:
http://www.emt.ru/products.php7product-l3. 2004.
26. Проектирование и конструирование в машиностроении.
Система грехмерного твердотельного моделирования КОМ-
ПАС-ЗО V8. Интернет: http://www.kompas.ascon.ru/products/in-
dcx.php?id-7&view-item. 2005.
27. Рапаков Г. Г., Ржсуцкая С. Ю. Про1раммирование на языке
Pascal. - СПб.: БХ13 - Петербург, 2004. - 480 с.
28. Рычков С. П. MSC.visual NASTRAN для Windows.- М.:НТ
Пресс. 2004. - 552 с.
29. САПР в судостроении. Интернет: shipcad.newmail.ru. 2004.
338
Список использованной литературы
30. САПР в машиностроении. Интернет: http://www.sapr.km.ru.
2004
31. Система автоматизированного проектирования «Сударуш-
ка». Интернет: http://www.sdr.ru/. 2006.
32. Система Ритм-Судно. Интернет: http://private.petcr-
1 i n k. ru/poleshc hu k/cad/system. htm. 2004.
33. Системы автоматизированного проектирования: CATIA.
Интернет: http://www.catia.ru/. 2005.
34. Гарануха И. А., «Программный комплекс «Амур» для расче-
та прочности корпуса судна методом модуль-элементов». Груды
ЛКИ «Строительная механика и прочность судовых конструкций».
Л : ЛКИ, 1981, с. 113-119.
35. Тарануха Н. А.. Каменских И. В. Профаммы для ЭВМ: Рас-
чет пластин на устойчивость. КнАГТУ. Свидетельство об официа-
льной регистрации № 2004610808 от 31 марта 2004 г.
36. Гарануха Н. А., Лсйзсрович Г. С. Динамика «неправильных»
оболочек.— Владивосток: Дальнаука, 2005. — 423 с.
37. Тарануха Н. А., Младова Т. А.. Чижиумов С. Д. Про1рам.ма
для ЭВМ: Расчет волновых нагрузок. КнАГТУ. Свидетельство об
официальной регистрации № 2004610572 от 26 февраля 2004 г.
38. Тарануха Н. А.. Петрова А. И., Младова Т. А. Программа
для ЭВМ: Расчет провисания тросов. КнАГТУ. Свидетельство об
официальной регистрации № 2004610574 оз 26 февраля 2004 г.
39. Тарануха Н. А., Федоров О. В. «Обзор некоторых програм-
мных комплексов, предназначенных для автоматизированного
расчета сложных конструкции на прочность». Материалы XII Да-
льневосточной НГК «Повреждения и эксплуатационная надеж-
ность судовых конструкций», Владивосток, ДВГТУ. 1994.
с 112-115.
40. Тарануха Н. А., Чижиумов С. Д., Журбин О. В. Использова-
ние численного моделирования в автоматизированном проектиро-
вании корпуса судна. // Проблемы надежности обработки, созда-
ние новых материалов и технологий для предприятий Дальнего
Востока. Сборник научных трудов / Комсомольск-на-Амуре:
КнАГТУ. 1996.
41. Тарануха Н. А., Чижиумов С. Д., Журбин О. В. Програм-
мное обеспечение расчетов прочности тонкостенных конструкций
методом модуль-элементов. Материалы международной конфе-
ренции «Механика строительных конструкций из новых материа-
339
Список литературы
лов и проблемы практического внедрения в производство», Ком-
сомольск-на-Амурс КнАГТУ 1995, С 129-131
42. Тарануха Н. А., Чижиумов С. ДЖурбин О. В. Програм-
мное обеспечение расчетов статической и динамической прочнос-
ти судов методом модуль-элсмснтов. Материалы XII Дальнево-
сточной НТК «Повреждения и эксплуатационная надежность су-
довых конструкций», Владивосток. ДВГГУ, 1994. с 119-123.
43. Тарануха II. А., Шевелев В. II. Программный комплекс
«Элемент» для расчета на ЭВМ судовых конструкций метолом мо-
дул ь-элсментов. Отчет по НИР. гос. per. № 01.90.0004940. КнА-
ПИ. 1989, с 44.
44. Фаронов В В. Турбо Паскаль 7.0. Начальный курс.: Учеб-
ное пособие. — М.: «Нолидж», 1997.
45. Хсмминг Р. В. Численные методы для научных работников
и инженеров. — М.: Наука. 1972. — 400 с.
46. Чистяков В. Л. Краткий курс лскний «Основы программи-
рования на языке Паскаль». Интернет: http://umnik.rikt.ru/infor-
mat/Library/kurs_pas.htm. 2003.
47. Шаныин В. Ф, Поддубная Л. М. Программирование на
языке Паскаль: Учебное пособие для профтехучилищ. 2-е изд., пе-
рераб. и доп. М.: изд-во «Высшая школа». 1991.
48. Ши.мкович Д. Г. Расчет конструкций в MSC / NASTRAN for
Windows. — М.: ДМ К Пресс. 2001. — 448 с.
49. Языки программирования. Хронограф. Интернет:
http://schools keklysh ni/sc11444/M USLTIM/LANR/hrono.htm.
50. Borland Pascal. Справочник по руководству пользователя па-
кета разработчика ресурсов. Интернет: http://borlpasc.na-
rod.ru/schcdulc.htm . 1993.
51. ЕМ Г — Программные продукты ANSYS: ANSYS. Интернет:
http://www.eml.ru/producls.php?pruduct=6. 2004
52. FlowVision — программный комплекс для расчета аэро- и
гидродинамических характеристик. Интернет: http://www.flowvisi-
on.ru/. 2005
53. Т-FLEX Анализ — интегрированная среда конечно-элемен-
тных расчетов. Интернет: http://www.topsystems.ru/producLs/tfana-
liz.htrn.2005
340
Список литературы, рекомендуемой для дополнительного изучения
Список литературы, рекомендуемой для
дополнительного изучения
1. Васильев П. П. Турбо Паскаль в примерах и задачах: Освой
самостоятельно: Учебное пособие. — М.: Финансы и статистика,
2003.
2. Новичков В. С., Парфилова Н. И.. Пылькин А Н. Алгорит-
мизация и иртраммирование на Турбо Паскале: Учебное посо-
бие. — М.: Горячая линия — Телеком, 2005.
3. Рапаков Г. Г., Ржсупкая С. Ю. Программирование на языке
Pascal. — СПб.: ЬХВ — Петербург, 2004. — 480 с.
4. Чистяков В. Л. Краткий курс лекций «Основы программиро-
вания на языке Паскаль». Интернет: http://umnik.rikt.ru/infor-
mat/Library/kurs_pas.htm. 2003.
341
Приложение А
Команды встроенного редактора /15/
Основные команды перемещения курсора:
Влево на один символ Ctrl+S или Стрелка впенэ
Вправе на один символ Ctrl—0 или Ci редка вправо
Влево на слово Ctrl + А или Ctrl+Стрелка влево
Вправо на слово Ctri+F или Ctrl > Стрелка вправо
Вверх на одну строку Ctrl+E или Стрелка вверх
Вниз на одну строку Ctri+X или Стрелка вниз
Экран на одну строку вверх Ctrt+W
Эк ран на одну строку вниз Ctrt+Z
Вверх на одну страницу Ctrl 4R или PgUp
Вниз на одну страницу Cltl+C или PgDn
Расширенный набор команд перемещения курсора:
В начало строки Ctrl+O S или Ногле
В конец строки Ctrl+0 D или End
В начало окна Ctrl+Q Е или Ctrl + После
Вниз окна Ctrl+O X или Ctrl -г End
В начало файла Ctrl t Q R или Ctri+PgUp
В конец файла Ctrl+O С или Ctri+PgDn
В начало блока Ctrl+O В
В конец блока Ctrt+OK
В предыдущее положение курсора Ctrl+O P
Команды вставки и удаления:
Включение (выключение) вставки Ctrt+V или Ins
Вставить строку Ctrl+N
Удалить строку Ctrt+Y
Удалить до конца строки Ctrt+QY
Удалить символ слева от курсора Ctrl+H или Backspace
Удалить символ над курсором Ctri+G или Del
Удалить слово справа от курсора Ctrl+T
342
Команды работы с блоками:
Пометить начало блока Поме1И1ь конец блика Пометить одиночное слово Сделать невидимым (видимым) блок Скопировать блок Переместить блок Удалить блок Напечатать блок Считать блок с диска Записать блок на диск Сдвинуть весь блок вправо Сдвинуть весь блок влево Ctrt+K В Ctrl’К К Ctrt+K Т Ctrt+K Н Ctrt+K С Ctrt+K V Ctrt+KY Ctrt+K P Ctrl+К R Ctrl+К W Ctrt+K 1 Ctrt+K U
Команды поиска и замены:
Найти Ctrt+OF
Найти и заменить Ctrl+OA
Повторить последний поиск Ctri+L
Найти парную скобку Ctrl+O | или Ctrl+0 [
(пары могут состоять из символов:
М.[И1, (и),”;,*, (.и.), ('и*))
Прочие команды:
Табуляция Ctri+I ияи Tab
Включение (.выключение) режима автоматического отступа (Indent) Ctrl Ю 1 иги Ctrt+Q 1
Включение (выключение) режима замены пробелов знаками табуляции (Fill) Ctrl+O F
Включение (выключение) режима удаления пробелов клавишей Backspace (Unindent) Ctrl+O U
Управление режимом табуляции (Tab) Ctrl+O Тити Ctrl +QT
Установить маркер позиции п Ctrl-t-K п
Перейти на позицию маркера п Ctrl ’0 n
Показан, последнюю ошибку Ctrl rOW
Восстановить строку Ctrl-0 L
Ввод в текст управляющего символа Clri+P
Прервать выполнение команды cw+u
Вызвать основное меню F10
Записать файл на диск Ctrl+К S или F2
Прочитать файл с диска F3
Выйти из редактора, не сохраняя файл аг1+КОилиС1г1+КО
343
Приложение Б
Сообщения об ошибках /15, 50/
I. Сообщения об ошибках периода компиляции
1 Out of memory (недостаточно памяти).
Эта ошибка появляется, когда компилятору недостаточно па-
мяти. Есть несколько решений этой проблемы:
• если опция Compilc/Destination (Компиляция/Назначснис)
имеет значение Memory (Память), то измените се значение
на Disk (Диск) в интегрированной среде.
• если опция Oplions/Linker/Link buffer (Парамстры/Компо-
новшик/ Буфер компоновки) в интегрированной среде имеет
значение Memory (Память), то измените ее значение на Disk
(Диск). В компиляторе командной строки для редактирова-
ния на диск нужно использовать опцию /L.
• если используются любые утилиты, находящиеся в памяти, на-
пример SidcKick и SupcrKcy, то их нужно удалить из памяти.
• если используется Turbo.EXE. то постарайтесь вместо Tur-
bo. ЕХЕ использовать ТРС.ЕХЕ, эта программа использует
меньше намято.
Если ни один вариант нс помогает, то эта программа или мо-
дуль. возможно, просто слишком большие для компиляции в до-
ступном обьеме памяти. В этом случае нужно разбить модуль на
два или большее количество меньших модулей.
2 Identifier expected (Не указан идентификатор).
Идентификатор должен находиться в этом месте. Попытка ис-
пользовать зарезервированное слово повторно.
3 Unknown identifier (Неизвестный идентификатор).
Этот идентификатор не был описан.
4 Duplicate identifier (Повторный идентификатор).
Идентификатор уже представляет имя программы/модуля, кон-
станты, переменной, типа, процедуры или функции, описанное в
текущем блоке, т. с. идентификатор уже был использован в теку-
щем блоке.
5 Syntax error (Синтаксическая ошибка).
В исходном тексте найден неверный символ. Строковая кон-
станта нс заключена в апострофы.
344
I. Сообщения об ошибках периода компиляции
6 Error in real constant (Ошибка в вещественной константе).
7 Error in integer constant (Ошибка в целой константе).
За целыми числами вещественного типа, лежащими за предела-
ми максимального целого диапазона, должна следовать десяти-
чная точка и ноль, например 12345678912.0
8 String constant exceeds line (Строковая константа превышает
размеры строки).
В конце строковой константы пропущен апостроф «'».
9 Too many nested files (Слишком много вложенных файлов).
Компилятор допускает не более 15 вложенных исходных фай-
лов. Наиболее вероятно, что в программе более 14 вложенных
файлов.
10 Unexpected end of file (He найден конец файла).
Это сообщение об ошибке могло быть получено по одной из
следующих причин:
• Исходный файл закончился перед последних» end основного
раздела операторов.
• В программе неодинаковое количество операторов begin и
end.
• Включаемый файл заканчивается в середине раздела опера-
торов. Каждый раздел операторов должен цсликохт помеща-
ться в одном файле.
• Не закончен комментарий.
11 Line too long (Строка слишком длинная).
Максимальная длина строки недолжна превышат ь 126 символов.
12 Гуре identifier expected (Ожидается тип идентификатора).
Нс указан тип идентификатора, как это должно быть.
13 Too many open files (Слишком много открытых файлов).
Если появляется эта ошибка, то это обозначает, что файл
CONFIG.SYS не включает параметр FILES - хх или что этот па-
раметр указывает слишком мало файлов. Увеличить число файлов
до какого-либо подходящею значения, например 20.
14 Invalid file name (Неверное имя файла).
Неправильное имя файла или задастся несуществующий путь
доступа.
15 File not (Файл нс найден).
Файл не может быть найден ни в текущем каталоге, ни в ка-
ком-либо другом исслсдусмохт каталоге, предназначенном для это-
го тина файлов.
345
Приложение Б. Сообщения об ошибках /15, 50/
16 Disk full (Диск заполнен).
Удалите некоторые файлы или используйте новый диск.
17 Invalid compiler directive (Неправильная директива компиля-
тора).
Неверная буква в директиве компилятора, одна из директив
компилятора неверная, или вы пользуетесь директивой компиля-
тора, когда компиляция тела программы уже началась.
18 Too many files (Слишком много файлов).
В компиляции программы или программного модуля участвует
слишком много файлов. Попытайтесь не использовать так много
файлов, например, объединяя включаемые файлы или делая коро-
че имена файлов.
19 Undefined type in pointer definition (Неопределенный тип в
определении ссылки).
Была осуществлена ссылка на неописанный тип в описании
ссылочного типа (указателя), приведенном ранее.
20 Variable identifier expected (Ожидается идентификатор пере-
менной).
Идентификатор нс обозначает переменную, как это должно
быть.
21 Error in type (Ошибка в определении типа).
Определение типа не может начинаться с этого символа.
22 Structure too large (Слишком большая структура).
Максимально допустимый размер структурированного типа —
65 535 байт.
23 Set base type of range (Базовый тип множества выходит за
ран ины).
Базовый тин множества должен представляться типом с грани-
цами в пределах от 0 до 255 или перечислимым типом с не более
чем 256 значениями.
24 File components may not be files or objects (Компоненты файла
не могут быть файлами или объектами).
Тип компонента файлового типа нс может иметь объектный
тип или файловый тип и нс может быть структурированным ти-
пом с компонентами файлового или объектного типа: конструк-
ции file of file или file of object нс допускаются.
25 Invalid string (Неверная длина строки).
Максимальная описываемая длина строки должна находиться в
диапазоне от 1 до 255.
26 Гуре mismatch (Несоответствие типов).
346
I. Сообщения об ошибках периода компиляции
Это может произойти последующим причинам:
• несовместимые типы переменной и выражения в операторе
присваивания;
• несовместимые типы фактическою и формального парамет-
ров в обращении к процедуре или функции;
• тип выражения, несовместимый с типом индекса при индек-
сировании массива;
• несовместимые типы операндов.
27 Invalid subrange base Суре (Неправильный базовый тип отрез-
ка типа).
Вее порядковые типы являются допустимыми базовыми типами.
28 Lower bound greater than upper bound (Нижняя граница боль-
ше верхней).
Описание отрезка типа (поддиапазона) указывает нижнюю гра-
ницу большей, чем верхняя.
29 Ordinal type expected (Ожидается порядковый тип).
Отсутствует порядковый тип Ordinal (типы действительные,
строковые, структурированные т ипы и ссылочные в данном случае
не допускаются).
30 Integer constant expected (Ожидается константа типа Integer).
Огсутствуст константа целого тина.
31 Constant expected (Ожидается константа).
Огсутствуст константа.
32 Integer or real constant expected (Ожидается целая или веще-
ственная константа).
Отсутствует константа типа Integer или real.
33 Pointer type identifier expected (Ожидается идентификатор
типа указателя).
Данный идентификатор не обозначает тип Pointer, как это тре-
буется.
34 Invalid (unction result type (Неправильный тип результата фун-
кции).
Правильными типами результата функции являются все про-
стые типы, строковые типы и ссылочные типы.
35 Label identifier expected (Ожидается идентификатор метки).
Метка не обозначена с помощью идентификатора, как это тре-
буется.
36 BEGIN expected (Ожидается BEGIN).
Отсутствует начало программы begin.
.347
Приложение Б. Сообщения об ошибках /15, 50/
37 END expected (Ожидается END).
Отсутствует окончание программы end
38 Integer expression expected (Ожидается выражение целого
типа).
Отсутствует выражение типа Integer.
39 Ordinal expression expected (Ожидается выражение порядко-
вого типа).
Отсутствует выражение типа Ordinal.
40 Boolean expression expected (Ожидается выражение Булсвого
типа).
Предыдущее выражение должно быть типа Boolean.
41 Operand types do not match operator (Типы операндов не соот-
ветствуют оператору).
Данный оператор не может быть применен к операндам этого
типа, например 'A' div '2* (А разделить на 2).
42 Error in expression (Ошибка в выражении).
Данный идентификатор не может участвовать в выражении
указанным образом. Возможно, вы забыли указать оператор div
между двумя операндами.
43 Illegal assignment (Неверное присваивание).
• Файлы и нетипизированные переменные не могут быть при-
сваиваемыми значениями.
• Идентификатору функции можно присваивать значения то-
лько внутри раздела операторов данной функции.
44 Field identifier expected (Ожидается идентификатор поля).
Данный идентификатор не обозначает ноле предыдущей пере-
менной типа запись.
45 Object file too large (Объектный файл слишком большой).
Borland Pascal нс может компоновать файлы .OBJ. превышаю-
щие размером 64 Кбайт.
46 Undefined external (Нс определена внешняя процедура).
Внешняя процедура или функция не имеет соответствующего
определения PUBLIC в объектном файле. Убедитесь, что вы ука-
зали все объектные файлы в директивах (SL имя файла), и прове-
рьте написание идентификаторов процедуры или функции в фай-
ле .ASM.
47 Invalid object file record (Неправильная запись объектного
файла).
348
I. Сообщения об ошибках периода компиляции
Файл .OBJ содержит неверную объектную запись. Убедитесь,
что данный файл является действительно файлом OBJ.
48 Code segment too large (Сегмент кода слишком большой).
Максимальный размер кода программы или программного мо-
дуля равняется 65 520 байтам. Если вы компилируете слишком бо-
льшой про)раммный модуль, разбейте его на два или более про-
граммных модуля.
49 Data segment too large (Сегмент данных слишком велик).
Максимальный размер сегмента данных программы равен
65 520 байтам, включая данные, описываемые используемыми
программными модулями. Если вам нужно большее количество
глобальных данных, опишите большие структуры с помощью ука-
зателей и выделяйте для них память динамически с помощью про-
цедуры New.
Вы можете также получить это сообщение при компиляции
программы Windows с директивой {G-J. В этом случае, если вы
собираетесь запускать программу в защищенном режиме или по-
местить в ней строковые константы в строковый файл ресурса,
попробуйте скомпилировать ес с директивой {G+}.
50 DO expected (Ожидается оператор DO).
Отсутствует ключевое слово do
51 Invalid PUBLIC definition (Неверное определение PUBLIC).
• Идентификатор был сделан общедоступным с помощью ди-
рективы PUBLIC в языке Ассемблер, но он нс соответствует
external объявлению в программе или в модуле на Pascal.
• Две или более директивы PUBLIC на языке ассемблера
определяют один и тот же идентификатор.
• Объектный файл .OBJ определяет идентификаторы PUBLIC,
которые нс находятся в сегменте CODE.
52 Invalid EXTRN definition (неправильное определение
EXTRN).
• На идентификатор имеется ссылка в директиве EXTRN в
языке ассемблера, но он не описан в программе или модуле
на Pascal или в интерфейсной части какого-либо из исполь-
зуемых модулей.
• Идентификатор обозначает абсолютную переменную.
• Идентификатор обозначает процедуру или функцию типа in-
line.
349
Приложение Б. Сообщения об ошибках /15, 50/
53 Too many EXTRN definition (Слишком мною определений
EXTRN).
Borland Pascal не может обрабатывать файлы .OBJ, содержащие
чем 256 определений EXTRN.
54 OF expected (Ожидается OF).
Отсутствует ключевое слово of.
55 INTERFACE expected (Ожидается интерфейсная секция).
Отсутствует ключевое слово interface.
56 Invalid relocatable reference (Недопустимая перемещаемая
ссылка).
• Факт .OBJ содержит данные и перемещаемые ссылки в сег-
ментах, отличных от CODE. Например, вы пытаетесь опи-
сать инициализированные переменные в сегменте DATA.
• Файл .СОМ содержит ссылки с размерами в байтах на пере-
мещаемые идентификаторы. Такая ошибка происходит в
случае, если вы используете операторы HIGH и LOW с пере-
мещаемыми идентификаторами или если вы ссылаетесь в
директивах DB на перемещаемые идентификаторы
• Операнд ссылается на перемещаемый идентификатор, который
нс был определен в сегменте CODE или в сегменте DATA.
• Операнд ссылается на процедуру EXTRN или на функцию
EXTRN’ со смещением, например CALL SortProc + 8.
57 THEN expected (Ожидается THEN).
Отсутствует ключевое слово then.
58 ТО or DOWN ГО (Ожидается ТО или DOWN ГО).
Огсутствуст ключевое слово to или downto.
59 Invalid FORWARD definition (He определено опережающее
описание).
• Были описаны процедура или функция в интерфейсной сек-
ции протраммного модуля, но их определение отсутствует в
секции реализации.
• Процедуры или функции были описаны с помощью описа-
ния fo ward, но их определение нс найдено.
60 Too many procedure (слишком много процедур)
Borland Pascal нс допускает более 512 процедур или функций в
модуле. Если компилируется программа, то нужно переместить
несколько процедур или функций в модуль. Если компилируется
модуль, то его нужно разбить на два или более модулей.
61 Invalid typecast (Неверное преобразование тина).
350
I. Сообщения об ошибках периода компиляции
• Размеры ссылки на переменную и тип результата отличаются
друг от друга при изменении тина переменной.
• Вы пытаетесь осуществить приведение типа выражения, ког-
да разрешается только ссылка на переменную, процедуру
или функцию.
62 Division by zero (Деление на нуль).
Попытка деления на ноль.
63 Invalid file type (Неверный файловый тип).
Данный файловый тип нс обслуживается процедурой обработ-
ки файлов. Например, процедура RcadLn используется для нсти-
пизированного файла, а процедура Seek — для текстового файла.
64 Cannot Read or Write variables of this type (Нельзя считать или
записать переменные данного типа).
• Процедуры Read и RcadLn могут считывать переменные типа
Char (символьный тип), Integer (целый тип). Real (вещест-
венный тип), и String (строковый тип).
• Процедуры Write и Write Ln могут выводить переменные типа
Char, Integer. Real, String и Boolean.
65 Pointer variable expected (Ожидается переменная типа указа-
тель).
Предыдущая переменная должна иметь тип Pointer.
66 String variable expected (Ожидается переменная строкового
типа).
Предыдущая переменная должна быть типа String.
67 String expression expected (Ожидается выражение строкового
типа).
Предыдущее выражение должно быть типа String.
68 Circular unit reference (Циклическая ссылка на модуль).
В секции interface два модуля нс могут ссылаться друг на друга,
но могут эго делать в секции implementation. Переупорядочите опе-
раторы uses таким образом, чтобы циклические ссылки имели
место только в секции implementation.
Нс допускается, чтобы два модуля использовали друг друга:
unit LU; unit U2;
uses U2; uses Ul;
69 Unit name mismatch (Несоответствие имен программных мо-
дулей).
351
Приложение Б. Сообщения об ошибках /15, 50/
Имя программного модуля, найденное в файлах .TPU, .TPW
или ТРР, не соответствует имени, указанному в операторе uses.
70 Unit version mismatch (Несоответствие версий про|раммных
модулей).
Один или несколько программных модулей, используемых дан-
ной программой, были изменены после их компиляции. Восполь-
зуйтесь командой Compilc/Make (Компиляция/Формирование)
или Compilc/Build (Компиляция/Построснис) в интегрированной
интерактивной среде прО1раммирования с параметрами /М или /В
в компиляторе, работающем в режиме командной строки, что по-
зволит автоматически скомпилировать программные модули, нуж-
дающиеся в перекомпиляции.
71 Internal stack overflow (Переполнение внутреннего стека).
Внутренний стек компилятора исчерпан из-за слишком боль-
шого уровня вложенности операторов. Переорганизуйте исходный
код и уменьшите уровень вложенности. Например, переместите
внутренние уровни вложенных операторов в отдельную процедуру.
72 Unit file format error (Ошибка формата файла программного
модуля).
Файлы TPU, .TPW или .ТРР (в зависимости от платформы) яв-
ляются недействительными. Возможно, они созданы с помощью
старых версий языка Pascal. В этом случае нужно перекомпилиро-
вать исходный код модуля и создать новый модуль.
73 Implementation expected (Ожидается секция реализации).
Отсутствует ключевое слово implementation.
74 Constant and case types don't match (Типы констант и тип вы-
ражения оператора case не соответствуют лрут другу).
Тип константы оператора case несовместим с выражением пе-
реключателя в предложении case
75 Record variable expected (Ожидается переменная типа записи).
Предыдущая переменная должна иметь тип record.
76 Constant out of range (Константа нарушает границы).
• Вы пытаетесь указать массив с константами, нарушающими
границы.
• Вы пытаетесь присвоить константу вне диапазона перемен-
ной.
• Вы пытаетесь передат ь константу ине диапазона в качестве
параметра процедуре или функции.
77 File variable expected (Ожидается файловая переменная).
352
I. Сообщения об ошибках периода компиляции
Предыдущая переменная должна иметь тип file.
78 Pointer expression expected (Ожидается выражение типа указа-
теля).
Предыдущее выражение должно быть порядкового типа Pointer.
79 Integer or real expression expected (Ожидается выражение ве-
щественною или целого типа).
Предыдущее выражение должно быть типа Integer или real.
80 Label not within current block (Метка не находится внутри те-
кущего блока).
Оператор goto нс может ссылаться на метку, находящуюся вне
текущего блока.
81 Label already defined (Метка уже определена).
Данная метка уже помечает оператор.
82 Undefined label in processing statemenift pari (Неопределенная
метка в предшествующем разделе операторов).
Данная метка была описана, и на нее осуществлялась ссылка в
предшествующем разделе операторов, но она нс определена в дан-
ном разделе.
83 Invalid @ argument (Недействительный аргумент оператора @).
Действительными аргументами являются ссылки на перемен-
ные и идентификаторы процедур или функций.
84 Unit expected (Ожидается ключевое слово UNIT).
Отсутствует ключевое слово UNIT.
85 «;» expected (Ожидается «;»).
Отсутствует точка с запятой.
86 «:» expected (Ожидается «:»).
Отсутствует двоеточие.
87 «,» expected (Ожидается «.»).
Отсутствует запятая.
88 «(» expected (Ожидается «(»)
Отсутствует«(».
89 «)» expected (Ожидается «)»).
Огсутствуст символ «)».
90 «=» expected (Ожидается «=•).
Отсутствует символ равно.
91 expected (Ожидается «:“»).
Отсутствует оператор присваивания.
92 «[» or «(.» expected (Ожидается или «(.*).
Отсутствует символ «|» или «(.».
93 «]» or «.)* expected (Ожидается «|» или «.)»).
353
Приложение Б. Сообщения об ошибках /15, 50/
Отсутствует СИМВОЛ «I» или «.)».
94 «.» expected (Ожидается «.»).
Требуется указать гонку.
Убедитесь, что тип не используется как переменная или что
имя программы не переопределяет важного идентификатора дру-
гою модуля.
95 «..» expected (Нужно указать «..*).
Там, где это нужно, нс указан поддиапазон.
96 Too many variables (Слишком много переменных).
• Обший размер глобальных переменных, описанных в про-
грамме или в программном модуле, нс может превышать
64 Кбайт.
• Размер локальных переменных, описанных в программе или
в функции, нс может превышать 64 Кбайт.
97 Invalid FOR control variable (Недопустимая управляющая пе-
ременная оператора FOR).
Управляющая переменная оператора for должна быть перемен-
ной перечислимого типа, определенной в разделе описаний теку-
щей подпрограммы.
98 Integer variable expected (Ожидается переменная целого типа).
Отсутствует переменная типа Integer.
99 Files are not allowed (Здесь нс допускаются файлы).
Типизированная константа нс может имегь файловый тип.
100 String length mismatch (Несоответствие длины).
Длина строковой константы не соответствует количеству эле-
ментов символьного массива.
101 Invalid ordering of fields (Неверный порядок полей).
Поля в константе типа записи должны записываться в порядке
их описания.
102 String constant expected (Ожидается константа строкового
типа).
Отсутствует константа типа String.
103 Integer or real variable (Ожидается переменная типа Integer
или Real).
Отсутствует переменная типа Integer или real.
104 Ordinal variable expected (Ожидается переменная порядково-
го типа).
Отсутствует переменная типа Ordinal
105 INLINE error (Ошибка в операторе INLINE).
354
I. Сообщения об ошибках периода компиляции
Оператор INLINE нс допускается в сочетании с перемещаемы-
ми ссылками на переменные. Такие ссылки всегда имеют размер в
слово.
106 Character expression expected (Ожидается выражение симво-
льного типа).
Отсутствует выражение типа Char.
107 Too many relocation items (Слишком много перемещаемых
элементов).
(Только реальный режим.)
Размер раздела таблицы перемещения файла .EXE превышает
64 Кбайт, что является верхним пределом в Borland Pascal. Если
вы обнаружили эту ошибку, то это значит, что программа просто
слишком велика для обработки компоновщиком Borland Pascal.
Возможно также, что она слишком велика для выполнения в DOS.
• Преобразуйте некоторые модули программы в оверлейные.
Это уменьшит число перемещаемых элементов в файле .EXE
и объем памяти, требуемый для выполнения приложения.
• Измените программу на приложение защищенного режима
DOS.
108 Overflow in arithmetic operations (Переполнение в арифмети-
ческой операции).
Результат предшествующей операции не находится в диапазоне
Longint (—2 147 483 648 ...+2 147 483 647). Исправьте операцию или
используйте вместо целочисленных значения вещественного типа.
109 No enclosing For, While or Repeat statement (Her включающих
операторов For, While или Repeal).
Стандартные процедуры Break и Continue нс могут использова-
ться вне операторов For, While или Repeat.
ПО Cannot run a unit (Модуль выполнить нельзя).
Вы нс можете выполнить программный модуль. Чтобы прове-
рить его, напишите программу, использующую этот программный
модуль.
Ill Compilation aborted (Компиляция прервана).
Компиляция была прервана с помощью клавиш акселераторов
Ctrl + Break.
112 CASE constant out of rang ( Константа оператора case вне
диапазона).
Для целочисленных операторов Case константы должны лежать
в диапазоне -32 768 .. +32 767.
355
Приложение Б. Сообщения об ошибках /15, 50/
ИЗ Error in statement (Ошибка в операторе).
С этого символа не может начинаться оператор.
114 Cannot call an interrupt procedure (Нет возможности вызвать
процедуру прерывания).
115 Must have an 8087 to coinpile this (Для компиляции необхо-
димо наличие сопроцессора 8087).
116 Must be in 8087 mode to compile this (Для компиляции необ-
ходимо использовать режим 8087).
Данная конструкция может компилироваться только в режиме
{SN+}. В состоянии (SN-) операции с действительными типами,
одиночной и двойной точности. расширенными и совместимыми
нс допускаются.
117 Target address not found (.Адрес назначения нс найден).
Команда Scarch/Find Error (Компиляция/Поиск ошибки) в ин-
тегрированной интерактивной среде или параметр /F в командной
строке компилятора нс позволяют обнаружить оператор, соответ-
ствующий указанному адресу.
Каждый радас ! операторов должен целиком размешаться в од-
ном файле.
119 No inherited methods arc allowed here (Наследуемые методы
здесь недоступны).
Вы используете ключевое слово inherited вне метода или в мето-
де или объектном гипс, который не имеет предшественника.
120 Nill expected (Ожидается Nill).
121 Invalid qualifier ( Неверный квалификатор).
• Вы пытаетесь индексировать переменную, которая не явля-
ется массивом.
• Вы пытаетесь указать поля в переменной, которая не являет-
ся записью.
• Вы пытаетесь переименовать переменную, которая нс явля-
ется указателем
122 Invalid variable reference (Недопустимая ссылка на перемен-
ную).
Предыдущая конструкция удовлетворяет синтаксису ссылки на
переменную, но она не указывает адреса памяти. Наиболее веро-
ятно, что вы модифицируете параметр const или вызываете функ-
цию-указатель. но забываете переименовать результат.
123 Too many symbols (Слишком мною идентификаторов).
356
I. Сообщения об ошибках периода компиляции
Прсярамма или программный модуль описывает более
64 Кбайт идентификаторов Если вы компилируете программу с
помощью директивы (SD+), то попробуйте отключить эту дирек-
тиву. Учтите, однако, что это не гарантирует отсутствие ошибок
этапа выполнения в таком модуле. В противном случае вы можете
попытаться поместить некоторое описание в отдельный модуль.
124 Statement part loo large (Слишком большой раздел операто-
ров).
Borland Pascal ограничивает размер раздела операторов до вели-
чины примерно 24 Кбайт. Если вы обнаружили эту ошибку, поме-
стите части разделов оператора в одну или в несколько процедур.
125 Module has no debug information (Нет отладочной информа-
ции в модуле).
126 Files must be var parameters (Файлы должны иметь парамет-
ры VAR).
Попытка объявить значение параметра файлового типа. Пара-
метры файлового типа должны быть переменными параметрами.
127 Too many conditional symbols (Слишком много условных
идентификаторов).
Отсутствует место для определения условных идентификаторов.
Попытайтесь удалить некоторые идентификаторы или сократить
некоторые из символьных имен.
128 Misplaced conditional directive (Пропущена условная дирек-
тива).
Компилятор обнаружил директиву {SELSE} или {SENDIF} без
соответствующих директив {$IFDEF}, (SIFNDEF) или {$1FOPT}.
129 ENDIF directive missing (Пропущена директива ENDIF).
Исходный файл закончился внутри конструкции условной ком-
пиляции. В исходном файле должно быть равное количество ди-
ректив {SIFxxx} и {SEND1F}.
130 Error in initial conditional defines «Ошибка в начальных услов-
ных определениях).
Условные исходные идентификаторы, указанные в меню IDE
Options/ Compilcr/Conditional Defines (Параметры/Компиля-
тор/Условные определения) или в параметре /D компилятора
командной строки, являются недопустимыми. Borland Pascal тре-
бует одного или более идентификаторов, разделенных пробелами,
запятыми или точками с запятыми.
131 Header does not match previous definition (Заголовок не соот-
ветсгвуег предыдущему определению).
357
Приложение Б. Сообщения об ошибках /15, 50/
Заголовок процедуры или функции, указанный в интерфейсной
секции или описании forward, не соответствует самому заголовку
процедуры или функции.
132 Critical disk error (Критическая ошибка диска).
Возможно, дисковод находится в состоянии «не готов».
133 Cannot evaluate this expression (Нельзя вычислить данное вы-
ражение).
В выражснин-константе или в отладочном выражении вы пы-
таетесь использовать неподдерживаемые средства, например в
описании константы пытаетесь использовать функцию Sin или
вызвать в отладочном выражении определенную пользователем
функцию.
134 Expression incorrectly terminated (Некорректное завершение
выражения).
[Только для встроенного отладчика]
Borland Pascal ожидает в данном месте конец выражения или
операцию, но нс находит ни того, ни другого.
135 Invalid format specifier (Неверный спецификатор формата).
(Только для встроенного отладчика]
Используется неверный спецификатор формата или числовой
аргумент спецификатора формата выходит за допустимые границы.
136 Invalid indirect reference (Недопустимая косвенная ссылка).
Оператор пытается осуществить недопустимую косвенную
ссылку.
Например, вы используете абсолютную переменную (absolute),
базовая переменная которой в текущем модуле неизвестна, или
используете подпро1рамму типа inline, в которой делается ссылка
на переменную, не определенную в текущем модуле.
137 Structured variable are not allowed here (Здесь нс допускается
использование структурированной переменной).
Делается попытка выполнить над структурированной перемен-
ной неподдерживаемую операцию. Например, вы пытаетесь пере-
множить две записи.
138 Cannot evaluate without System unit (Нельзя вычислить без
модуля System).
(Только для встроенного отладчика]
Чтобы отладчик смог вычислить выражение, в файле .TPL дол-
жен содержаться модуль System.
139 Cannot access this symbol (Доступ к данному идентификатору
отсутствует).
358
I. Сообщения об ошибках периода компиляции
| Только для встроенного отладчика]
Как только вы скомпилируете профамму, псе множество сс
идентификаторов становится доступным. Однако к отдельным
идентификаторам (например, к переменным) нельзя получить до-
ступ. пока вы нс запустите программу.
140 Invalid floating-point operation (Недопустимая операция с
плавающей точкой).
При операции с двумя действительными значениями было по-
лучено переполнение или деление на нуль.
141 Cannot compile overlay to memory (Нельзя выполнить компи-
ляцию оверлеев в память).
(Реальный режим]
Программа, использующая оверлеи, должна компилироваться
на диск.
142 Procedure or function variable expected (Должна использовать-
ся процедурная или функциональная переменная).
Стандартная процедура Assigned требует аргумента типа пере-
менной указателя или процедурною типа.
143 Invalid procedure or function reference (Недопустимая ссылка
на процедуру или функцию).
• Попытка вызова процедуры или функции в выражении.
• Если се нужно присвоить переменной-процедуре, то проце-
дура или функция должны компилироваться в состоянии
(SF+J и нс может описываться с помощью ключевых слов in-
line или interrupt.
144 Cannot overlay this unit (Этот модуль нс может использовать-
ся в качестве оверлейного).
(Реальный режим]
Попытка использовать в качестве оверлейною модуль, который
нс был скомпилирован с директивой {$0+).
146 File access denied (Файл недоступен).
Файл не можете быть открыт или создан. Вероятно, компиля-
тор пытается записать файл, доступный только д.тя чтения.
147 Object type expected (Ожидается объектный тип).
Идентификатор нс является объектным типом Object.
148 Local object types are not allowed (Локальный объектный тип
недопустим).
359
Приложение Б. Сообщения об ошибках /15, 50/
• Объектный тип может быть определен только в самой внеш-
ней сфере действия программы или модуля. Определение
объектного типа внутри процедур или функций недопустимо.
I49 VIRTUAL expected (Ожидается VIRTUAL).
Отсутствует ключевое слово virtual.
150 Method identifier expected (Ожидается идентификатор метода)
Идентификатор нс является методом.
151 Virtual constructor arc not allowed (Виртуальный конструктор
нс допускается).
Метод конструктора должен быть статическим.
152 Constructor identifier expected (Ожидается идентификатор
конструктора).
Идентификатор нс является конструктором
153 Destructor identifier expected (Ожидается идентификатор де-
структора).
Идентификатор не является деструктором.
154 Fail only allowed within constructors (Fail допускается только
внутри конструкторов).
Стандартная процедура Fail может быть использована только
внутри конструкторов.
155 Invalid combination оГ code and operands (Недопустимая ком-
бинация кода операции и операндов).
Код операции ассемблера не воспринимает данное сочетание
операндов. Возможны следующие причины:
• для данного кода операции ассемблера слишком много или
слишком мало операндов, например INC АХ, ВХ или MOV
АХ;
• число операндов корректно, но их тип и порядок не соответ-
ствуют коду операции, например DEC 1, MOV АХ, CL или
MOV АХ. |BX+Sl|;
• в операторе ассемблера содержится комментарий, например
MOV {начальное значение} АХ, I.
156 Memory reference expected (Требуется ссылка на память).
Операнд ассемблера не является ссылкой на память, которая
здесь требуется. Скорее всего, вы забыли указать в индексном
операторе квадратные скобки, например MOV АХ. BX+S1 вместо
MOV АХ. |BX+SI|.
157 Cannot add or substract relocatable symbols (Нельзя склады-
вать или вычитать перемещаемые идентификаторы).
360
I. Сообщения об ошибках периода компиляции
Единственная операция, которую допускается выполнять с пе-
ремещаемыми идентификаторами в операнде ассемблера — это
сложение с константой или вычитание константы. Переменные,
процедуры, функции и метки представляют собой перемещаемые
идентификаторы. Предположим, что Var — это переменная, а
Const — константа. Тогда инструкции MOV АХ, Const +Const и
MOV АХ, Var+Const являются допустимыми, a MOV АХ,
Var+Var — нет.
158 Invalid register combination ( Недопустимое сочетание регист-
ров).
Допустимыми сочетаниями индексных регистров являются
IВХ|, |ВР|. |S1|, |DI|. |BX+S1|, IBX+D1I, |BP+S11 и |BP+DI|. Дру-
гое сочетание индексных регистров, например |АХ|, |ВР+ВХ| и
[SI t DX], нс допускается.
Локальные переменные (переменные, описанные в процедуре
или в функции) всегда размещаются в стеке и доступны через ре-
гистр ВР. При ссылках на такие переменные ассемблер автомати-
чески добавляет |ВР|, поэтому, хотя конструкция типа Local |ВХ|
(где Local — локальная переменная) выглядит допустимой, это не
так, поскольку в итоге операндом будет ЕосаЦВР+ВХ].
159 286/287 Instructions not allowed (Инструкции процессоров
286/287 не разрешены).
Для разрешения кодов операций указанных процессоров испо-
льзуйте директиву компилятора (SG+), но имейте в виду, что ре-
зультирующий код не сможет работать на машинах с процессора-
ми 8086 и 8088.
160 Invalid symbol reference (Недопустимая ссыпка на идентифи-
катор). Данный идентификатор в операнде ассемблера недоступен.
Возможны следующие причины:
• в операнде ассемблера вы пытаетесь обратиться к стандарт-
ной процедуре, стандартной функции или к специальным
массивам Mem. McmW, MemL, Port, PortW;
• в операнде ассемблера вы обращаетесь к строке. значению с
плавающей точкой или к константе-множеству;
• в операнде ассемблера вы пытаетесь обратиться к процедуре
или к функции типа inline;
• вне функции вы пытаетесь обратиться к специальному иден-
тификатору ©Result;
• вы пытаетесь сгенерировать короткую инструкцию JMP, ко-
торая выполняет переход не на метку, а на что-то другое.
361
Приложение Б. Сообщения об ошибках /15, 50/
I61 Code generation error (Ошибка генерации кода).
11рсдшествующая часть оператора содержит инструкции LOOP-
NE, LOOPE, LOOP или JCXZ, которые нс могут достичь целевой
метки.
162 ASM expected (Нужно ключевое слова ASM).
163 Duplicate dynamic method index (Дублируется идентификагор
динамического метода).
Этот индекс динамическою метода уже используется другим
методом. Возможно, вы пытаетесь переопределить динамический
метод, но неправильно набрали его имя, введя, таким образом,
новый метод.
164 Duplicate resource identifier (Дублирование идентификатора
ресурса).
(Только Windows или защищенный режим]
Данный файл ресурса содержит ресурс с именем или с иденти-
фикатором, которые уже используются для другого ресурса.
165 Dupiicetc or invalid export index (Дублирующийся или недо-
пустимый индекс экспорта).
(Только Windows или защищенный режим]
Порядковый номер, заданный в операторе Index, нс находится
в диапазоне 1 .. 32767 или уже используется другой экспортируе-
мой подпрограммой.
166 Procedure or function Identifier expected (Ожидается иденти-
фикатор процедуры или функции).
|Только Windows или защищенный режим]
Оператор export допускает экспорт только процедур и функций.
167 Cannot export this symbol (Этот идентификатор экспортиро-
вать нельзя).
| Только Windows или защищенный режим]
Процедура или функция не может экспортироваться, если она
не описана в операторе процедуры export.
168 Duplicate export name (Дублирование экспортируемого име-
ни).
( Только Windows или защищенный режим]
Имя, заданное в операторе name, уже используется для другой
экспортируемой подпрограммы.
169 Executable Die header too large (Слишком велик заголовок
выполняемого файла).
| Только Windows или защищенный режим]
362
II. Ошибки периода выполнения программ
Генерируемый заголовок файла .EXE превышает 64 Кбайт (вер-
хний предел для компоновщика). Вероятно, вы импортируете или
экспортируете по имени слишком много процедур или функций.
Рассмотрите возможность использования порядковых значений.
Возможно также, что у вас слишком много именованных ресур-
сов. Попробуйте также использовать порядковые значения.
II. Ошибки периода выполнения программ
Некоторые ошибки во время выполнения программы приводят
к тому, что программа выводит на дисплей сообщение об ошибке и
завершается: Run-lime error nnn at xxxx:yyyy (ошибка выполнения
nnn по адресу хххх:уууу. где nnn — номер ошибки выполнения, а
хххх:уууу — адрес ошибки выполнения (сегмент и смешение))
Ошибки выполнения разделяются на следующие категории:
А) Ошибки операционной системы DOS;
В) Ошибки ввода/вывода;
С) Критические ошибки;
D) Фатальные ошибки;
Е) Ошибки DPMI (ошибки в защищенном режиме)
А) Ошибки DOS
1 Invalid function number (Недопустимый номер функции).
Вы обратились к несуществующей функции DOS.
2 File not found (He найден файл).
Ошибка генерируется процедурами Reset. Append. Rename или
Erase в случае, если имя, присвоенное файловой неременной, ука-
зывает несуществующий файл.
3 Path not found (Путь нс найден).
• Ошибка генерируется процедурами Reset. Rewrite. Append
или Erase в случае, если имя, присвоенное файловой пере-
менной, является недействительным или указывает на несу-
ществующий подкаталог.
• Описывается ChDir MkDir или RmDir в случае, если путь явля-
ется ошибочным или указывает несуществующий подкаталог.
4 Too many open files (Слишком много открытых файлов).
Ошибка генерируется процедурами Reset. Rewrite или Append в
случае, если программа имеет слишком много открытых файлов.
363
Приложение Б. Сообщения об ошибках /15, 50/
Операционная система DOS не позволяет использовать более I5
открытых файлов для каждого процесса. Если вы получили эту
ошибку при наличии менее 15 открытых файлов, то она может ука-
зывать на то, что файл CONFIG.SYS не включает параметров FI-
LES = ххх или что этот параметр задаст слишком мало файлов. Уве-
личьте число файлов до какого-либо подходящего значения, на-
пример до 20.
5 File access defined (Нет доступа к файлу).
Данная ошибка генерируется процедурами:
• Reset или Append в случае, если File Mode допускает запись, а
имя, присвоенное файловой переменной, указывает каталог
или файл, доступные только для чтения:
• Rewrite в случае, если каталог заполнен или если имя, при-
своенное файловой переменной, задает каталог или сущест-
вующий файл, доступный только для чтения;
• Rename в случае, если имя, присвоенное файловой перемен-
ной, указывает каталог или если новое имя указывает суще-
ствующий файл;
• Erase в случае, если имя, присвоенное файловой переменной,
указывает каталог или файл, доступный только для чтения;
• MkDir в случае, если файл с тем же именем уже существует в
порождающем каталоге, если нет места в порождающем ка-
талоге или если путь задает устройство;
• RmDir в случае, если каталог не является пустым, если путь
не определяет каталог или если путь задаст корневой катают;
• Read или Block Read в случае типизированного или нетипизи-
рованного файла, если файл нс открыт для чтения;
• Write или BlockWritc для типизированного или нетипизиро-
ванного файла в случае, если этот файл не от крыт для записи.
6 Invalid file handle (Недопустимый описатель файла).
Данная ошибка генерируется в том случае, если системному
вызову DOS передастся недопустимый описатель файла. Эта
ошибка возникать не должна. Если же она появляется, то это яв-
ляется свидетельством того, что файловая переменная испорчена
каким-либо образом.
12 Invalid file access code (Недействительный кед доступа к файлам).
Ошибка генерируется процедурами Reset или Append в файле с
типом или без типа в случае, если значение Filc.Mode является не-
действительным.
364
II. Ошибки периода выполнения программ
15 Invalid drive number (Недопустимым номер дисковода).
Ошибка генерируется процедурой Get Dir в случае, если номер
дисковода недопустим.
16 Cannot remove current directory (Нельзя удалить текущий ка-
талог).
Ошибка генерируется процедурой RmDir в случае, если путь
указывает текущий каталог.
17 Cannot rename across drives (Нельзя при переименовании ука-
зывать разные дисководы).
Описывается Rename в случае, если оба файла нс находятся на
одном и том же диске.
18 No more files (Нет файлов).
Сообщается через переменную DosError в модуле DOS и Win-
Dos. когда вызов FindFirst или FindNcxt нс находит файлов, совпа-
дающих с заданными именем или набором атрибутов.
В) Ошибки ввода-вывода
Если один из операторов ввода компилировался с директивой
{S1+}, то эти ошибки приводят к прекращению выполнения про-
граммы. В состоянии {$1—} программа продолжает выполняться, а
ошибка генерируется функцией lOResult
100 Disk read error (Ошибка чтения диска).
Описывается Read в типизированном файле в случае, если вы
пытаетесь осуществить считывание после конца файла.
101 Disk write error (Ошибка записи на диск).
Ошибка генерируется процедурами Close. Write, WritcLn. Flush
или Page в случае, если диск переполнен.
102 File not assigned (Файлу нс присвоено имя).
Ошибка генерируется процедурами Reset. Rewrite. Append. Re-
name и Erase в случае, если файловой переменной не было при-
своено имя с помощью обращения к процедуре Assign.
103 File not open (Файл нс открыт).
Ошибка генерируется процедурами Close, Read, Write, Seek.
Eof, FUPos. FileSize. Flush. BlockRead или BlockWrite в случае, если
файл нс открыт.
104 File not open Гог input (Файл не открыт для ввода).
Ошибка генерируется процедурами Read. RcadLn. ЕоГ, EoLn,
SeekEof или SeekEoLn в текстовом файле в случае, если файл нс
открыт для ввода.
365
Приложение Б. Сообщения об ошибках /15, 50/
105 File not open Гог output (Файл нс открыт для вывода).
Ошибка генерируется процедурами Write, WriteLn и Page в тек-
стовом файле в случае, если файл нс открыт для вывода.
106 Invalid numeric format (Неверный числовой формат).
Описывается Read или ReadLn в случае. если числовое значе-
ние. считанное из текстового файла, нс соответствует правильно-
му числовому формату.
С) Критические ошибки
Примечание. Только для реальною или защищенного режима.
150 Disk is write protected (Диск защищен от записи).
151 Unknown unit (Неизвестный модуль).
152 Drive not ready (Дисковод находи тся в состоянии «нс готов»).
153 Unknown command (Неопознанная команда).
154 CRC error in data (Ошибка в данных).
155 Bad drive request structure length (При запросе к диску указа-
на неверная длина структуры).
156 Disk seek error (Ошибка при операции установки головок
на диске).
157 Unknown media type (Неизвестный тип носителя).
158 Sector not found (Сектор нс найден).
159 Printer out of paper (Кончилась бумага на устройстве печати).
160 Device write fault (Ошибка при записи на устройство).
161 Device read fault (Ошибка при чтении с устройства).
162 Hardware failure (Сбой аппаратуры).
DOS сообщает об этой ошибке в результате нарушения совме-
стного доступа или различных сетевых ошибок.
D) Фатальные ошибки
Эти ошибки всегда сразу же завершают программу.
200 Division by zero (Деление на нуль).
201 Range check error (Ошибка при проверке границ).
Ошибка генерируется процедурами и операторами, скомпили-
рованными в состоянии {SRt}, при возникновении одной из сле-
дующих ситуаций:
• индексное выражение квалификатора массива находилось
вне допустимого диапазона;
• была осуществлена попытка присвоить переменной значе-
ние, находящееся вне диапазона переменной;
366
II. Ошибки периода выполнения программ
• была осуществлена попытка передать значение, находящееся
вне допустимого диапазона, в качестве параметра процедуре
или функции.
202 Stack overflow error (Переполнение стека).
Эта ошибка генерируется на входе в процедуру или функцию,
скомпилированные в режиме {SS+}, в случае, если нет достаточной
области для размещения локальных переменных подпрограммы.
Увеличьте размер стека, используя директиву компилятора {$М}.
Данная ошибка может также вызываться циклической рекур-
сией или процедурой на ассемблере, которая нс поддерживает стек.
203 Heap overflow error (Переполнение динамически распреде-
ляемой области памяти).
Эта ошибка генерируется процедурами New или GetMem в том
случае, если нет достаточного свободного места в динамической об-
ласти памяти, чтобы выдел ить память для блока требуемого размера.
204 Invalid pointer operation ( Недействительная операция ссылки),
Эта ошибка генерируется процедурами Dispose или йгееМеш в
случае, если ссылка имеет значение nil или указывает на адрес, ле-
жащий за пределами динамически распределяемой области памя-
ти, или если список свободных блоков нс может быть расширен.
205 Floating point overflow ( Переполнение при операции с плава-
ющей точкой).
Операция с плавающей точкой обрабатывает слишком большое
для Borland Pascal или сопроцессора число.
206 Floating point underflow (Исчезновение порядка при опера-
ции с плавающей точкой).
Операция с плавающей точкой привела к исчезновению поряд-
ка. Эта ошибка генерируется только в том случае, если вы исполь-
зуете сопроцессор математических вычислений 8087 с управляю-
щим словом, которое демаскирует ошибки, возникающие при ис-
чезновении порядка. По умолчанию исчезновение порядка
приводит к возвращению результата, равного нулю.
207 Invalid floating point operation (Недопустимая операция с
плавающей точкой).
• Действительное значение, передаваемое функцией Trunc или
Round, нс может быть преобразовано в целое число, находя-
щееся внутри диапазона типа Longlnl (от —2 147 483 648 до
+2 147 483 647).
.367
Приложение Б. Сообщения об ошибках /15, 50/
• Аргумент, передаваемый функцией Sqrt (Извлечение квад-
ратного корня), отрицательный.
• Аргумент, передаваемый функцией Ln (логарифм), равен ну-
лю или имеет отрицательное значение.
• Произошло переполнение стека 8087.
208 Overlay manager not installed (He установлена подсистема
управления оверлеями).
(Только реальный режим]
Ваша программа вызывает оверлейную процедуру или функ-
цию, а подсистема управления оверлеями не инициализирована.
Вероятнее всего отсутствует обращение к процедуре Ovrlnit или
обращение к этой процедуре завершилось с ошибкой. Нужно
иметь в виду, что если в каком-либо из оверлейных модулей у вас
содержится код инициализации, го вы дагжны создать дополните-
льный неоверлейный модуль, вызывающий процедуру Ovrlnit, и
использовать этот модуль перед любым из оверлейных модулей,
209 Overlay file read error (Ошибка чтения оверлейного файла).
(Только реальный режим]
Когда подсистема управления оверлеями пыталась считать
оверлей из оверлейною файла, произошла ошибка чтения.
210 Object not initialized (Объект не инициализирован).
При включенной проверке диапазона вы обращаетесь к виртуа-
льному методу объекта до того, как объект инициализируется с
помощью вызова конструктора.
211 Call to abstract method (Вызов абстрактного метода).
Данная ошибка генерируется процедурой Abstract модуля Ob-
jects и указывает, что ваша программа пытается выполнить абст-
рактный виртуальный метод. Когда объектный тип содержит один
или более абстрактных методов, он называется абстрактным объ-
ектным типом. Инициализация объектов абстрактного типа счита-
ется ошибкой — абстрактные объектные типы существуют только
для того, чтобы вы могли из них наследовать и переопределять аб-
страктные методы.
Например, метод Compare типа TSortedCollection в модуле Ob-
jects является абстрактным и показывает, что для реализации от-
сортированного набора вы должны создать объектный тин, насле-
дующий из TsortedCollcetion и переопределяющий метод Compare.
212 Stream registration error (Ошибка регистрации потока).
368
II. Ошибки периода выполнения программ
Данная ошибка генерируется процедурой Register Гуре в модуле
Objects и указывает, что произошла одна из следующих ошибок:
• запись регистрации потока нс находится в текущем сегменте
данных:
• поле ОЬ’Гуре записи регистрации потока является нулевым;
• зил уже зарегистрирован;
• уже зарегистрирован другой тип с тем же значением ObValue.
213 Collection index out of range (Индекс набора вне диапазона).
Индекс, передаваемый методу TCollcetion, выходит за границы
диапазона.
214 Collection overflow error (Ошибка переполнения набора).
Данная ошибка выводится методом TCollcetion при попытке до-
бавить элемент, когда набор утке расширить нельзя.
215 Arithmetic overflow error (Арифметическое переполнение).
Эту ошибку' дают операторы, скомпилированные в состоянии
{SG+}, когда арифметическая операция приводит к переполне-
нию, например когда результат операции лежит вне допустимого
диапазона.
216 General Protection fault (Обшес нарушение зашиты).
[Только защищенный режим]
Эта ошибка является результатом того, что вы пытаетесь полу-
чить доступ к памяти, к которой ваша программа обращаться не
может. Операционная система останавливает вашу прикладную
программу' и сообщает вам об общем нарушении зашиты (GP), но
это не приводит к сбою системы.
Ситуацию GP вызывают следующие причины:
• загрузка в сегментные регистры значений-констант;
• выполнение арифметических операций с сегментными реги-
страми или селекторами;
• использование сегментных регистров для временной записи
в сегменты кода;
• доступ к памяти вне локального адресного пространства, за-
данного в прикладной программе;
• разыменование указателей nil.
Е) Ошибки DPMI
В случае работы в дополнительном режиме следующие допол-
нительные сообщения об ошибках (там, где это, возможно, приво-
дятся возможные причины и решение):
369
Приложение Б. Сообщения об ошибках /15, 50/
Е1) Ошибки DPMHNST
А20 line already enabled, so test is meaningless (Строка A20 уже
разрешена, проверка нс имеет смысла).
DPMHNST 1енерируег это сообщение. когда вы выполняете ее
для нахождения и дополнения информации о вашей машине в
базу данных ядра. Если вы обнаруживаете ряд таких сообщений,
возможно, это означает, что HIMEM.SYS загружен. Удалите HI-
MEM.SYS и загрузитесь с обычными файлами CONFIG.SYS и
AUTOEXEC.BAT. Затем снова 'запустите DPMHNST перед пере-
загрузкой HIMEM.SYS.
Е2) Ошибки фиктивного модуля
Фиктивный модуль, программа реального режима, встроенная
в вашу программу защищенного режима, отвечает за за<рузку
DPMI-сервера и администратора этапа выполнения (если они от-
сутствуют).
Сообщения об ошибках фиктивного модуля имеют следующий
текстовый формат:
Stub error (хххх): хххх
где Stub error указывает на ошибку, генерируемую фиктивным мо-
дулем; (.хххх) — номер ошибки, хххх — текст сообщения.
Stub error (0001): needs at least 286 (Ошибка фиктивного .моду-
ля: требуется процессор не младше 286).
Эта ошибка возникает, если вы пытаетесь выполнить програм-
му .EXE защищенного режима в системе с процессором младше
286.
Stub error (2002): can't find rtm.exe (Ошибка фиктивного модуля:
нс найден файл rtm.exe).
Файл администратора этапа выполнения rtm.exe должен нахо-
диться по указанному пути или в текущем каталоге.
Stub error ((2003): can't find DPMII6BI.OVL (Ошибка фиктив-
ного модуля: не найден DPMI 16131.OVL).
Файл DPMI16B1.OVL должен находиться по заданному пути
или в текущем каталоге.
Stub error (0012): file not found (Ошибка фиктивного модуля:
файл нс найден).
Эта ошибка возникает, если фиктивный модуль нс может най-
ти файл вашей прикладной программы. Убедитесь, что вы задали
корректное имя и путь.
370
II. Ошибки периода выполнения программ
Stub error (0013): path not found (Ошибка фиктивного модуля:
пуль не найден).
Stub error (0015): file access denied) (Ошибка фиктивного моду-
ля: файл недоступен).
Stub error (0018): not enough memory to load file (Ошибка фик-
тивного модуля: для загрузки файла нс хватает памяти).
Stub error (001 A): invalid environment (Ошибка фиктивного мо-
дуля: недопустимая операционная среда).
Эта ошибка возникает, если испорчена спецификация среды
DOS вашей системы.
Stub error (001 В): invalid file (Ошибка фиктивного модуля: недо-
пустимый файл).
Error: no DOS extensions in DPMI server (Ошибка: в DPMI-сер-
вере нет расширений DOS).
Возможно, используемый вами DPMI-сервер не поддерживает
отраслевых стандартов. Попробуйте использовать DPMI-сервер
Borland или Windows.
Error: needs DOS 3.x or higher (Ошибка: требуется DOS версии
3.x или старше).
Failed to locate DPMI-sener (DPM116B1.OVL) (He удастся най-
ти DPMI-сервер).
Убедитесь, что файл DPM116BI.OVL находится по указанному
вами пути (как и прикладная программа защищенного режима).
ЕЗ) Ошибки администратора этапа выполнения
Загрузчик фиктивного модуля пытается загрузить администра-
тор этапа выполнения и указывает ему на загрузку части вашего
файла, предназначенного для защищенного режима. Если этот
процесс завершается неудачно, то выводится сообщение об ошиб-
ке следующего формата:
leader error (хххх): хххх (Ошибка загрузчика (хххх): хххх),
где Loader error представляет ошибку, генерируемую загрузчиком
фиктивного модуля: (хххх) — номер ошибки, хххх — текст сооб-
щения.
Большинство сообщений администратора этапа выполнения
вызываются нехваткой памяти. В большинстве случаев вы можете
ус1ранить приводящую к ошибке ситуацию.
Если вы работаете в диалоговом окне DOS Windows и ваш файл
информации о прикладной пргираммс (PIF) находится слишком
371
Приложение Б. Сообщения об ошибках /15, 50/
«низко* в памяти и нс может запускаться администратором этапа
выполнения, измените установку файла PIF. чтобы для зафузки
администратора этапа выполнения было достаточно памяти.
В случае работы под DOS:
• переменная операционной среды DPIMEME у вас установ-
лена в МАХМЕМ, попробуйте увеличить значение МАХ-
МЕМ;
• если у вас есть псевдодиск или установлен кэш лиска, по-
пробуйте уменьшить их размер.
Loader error (ОООI): out of memory (Ошибка зафузчика: нет па-
мяти).
Loader error (0002): out of selectors (Ошибка загрузчика: нет се-
лекторов).
Не хватает селекторов. Если вы используете 386ЛМАХ (версии
6.00 или старше), попробуйте добавить в 3S6.pro/blucmax.pro клю-
чевое слово DPMIMEM - I200.
Loader error (0003): out (Ошибка загрузчика: нс хватает внут-
ренних таблиц).
Загрузчик превысил предельное значение внутренних таблиц.
Loader error (0020): Invalid dynamic link (Ошибка зафузчика: не-
допустимая динамическая компоновка).
Недопустимая ссылка импорта из DLL. Эта ошибка происхо-
дит, если вы:
• ссылаетесь на несуществующую функцию DLL;
• используете функции ядра или пользовательские функции,
которые Borland Pascal не эмулирует в модуле VVinapi.
Loader error (0022): couldn't open file (Ошибка загрузчика: невоз-
можно открыть файл).
Файл или импортируемая файлом DLL не найдены или нс мо-
гут быть открыты. Убедитесь, что DLL находится по указанному
маршруту или попробуйте увеличить число доступных описателей
файлов в CONFIG.SYS (FILE = 30).
Loader error (0023): invalid cxe format (Ошибка загрузчика: недо-
пустимый формат файла .схе).
Фаты или импортируемая файлом DLL нс найдены или имеют
недопустимый формат NEWEXE.
Loader error (0024): wrong versions (Ошибка загрузчика: невер-
ная версия).
372
II. Ошибки периода выполнения программ
Убедитесь, что файл DPMI I6.OVL находится но корректному
пули и является первым файлом, доступным для загрузки. Убеди-
тесь, что вы используете корректный загрузчик, а не тот, кото-
рый предназначен для другой прикладной программы, например
Paradox.
Loader error (0025); cannot initialize (Ошибка загрузчика: невоз-
можно инициализировать).
Loader error (0026): DLL initialization error (Ошибка зафузчика:
ошибка инициализации DLL).
Неудачно завершилась (т. с. возвратила ненулевой код ошибки)
одна из подпрограмм инициализации DLL. Убедитесь, что DLL за-
писана корректно и не требует больше памяти, чем у вас доступно
в данный момент.
Error: error in the environment string (Ошибка: ошибка в строке
операционной среды).
Некорректные параметры в строке операционной среды
«RTM».
Runtime error: invalid entry point called ( Ошибка этапа выполне-
ния: вызов недопустимой точки входа).
Прикладная программа ссылается на несуществующее имя или
порядковый номер одного из модулей. Обычно это вызывается не-
корректной ссылка на .DLL.
Application load & execute error 0001
Application load & execute error EEE0 (Ошибка загрузки и выпол-
нения прикладной про|раммы).
Для загрузки прикладной профаммы защищенного режима не
хватает дополнительной памяти.
373
Приложение В
Проверка знаний с помощью
электронных тестов
П В1. Описание прилагаемых электронных
тестов
В данном приложении приведено описание электронных тес-
тон, приложенных к данному учебному пособию для проверки или
самопроверки знаний студентов. Здесь же содержатся инструкции
по использованию этих тестов и разъяснения по оценке результа-
тов электронного тестирования.
Описание электронных тестов
Проверка знаний, полученных в результате изучения пособия,
проводится с помощью тестирования.
На CD-диске предложено 8 вариантов теста: TEST1.EXE,
TEST2.EXE, TEST3.EXE, TEST4.EXE, TEST5.EXE, TEST6.EXE,
TEST7.EXE, TEST8.EXE. Каждый вариант теста охватывает все 9
гем, рассматриваемых в учебном пособии.
Тест состоит из 25 вопросов. К каждому вопросу прилагаются 4
варианта ответа. Варианты ответа отмечены буквами русского
языка — а), б), в) и г). При ответе на вопрос необходимо выбрать
один из предложенных вариантов путем нажатия соответствующей
клавиши на клавиатуре.
Вопросы в тесте выделены зеленым цветом. Варианты ответа
выделены белым цветом. Ваш, пользовательский ответ, для удоб-
ства, выделен желтым цветом.
Каждый правильный ответ оценивается в I балл. Максималь-
ное количество балов, которое можно набрать в результате тести-
рования — 25 баллов.
Критерии выставления оценки в результате тестирования:
«отлично» — 24-25 баллов;
«хорошо» — 20-24 балла;
«удовлетворительно* — 15-20 баллов;
«очень плохо» — 0-14 балов.
374
П В1. Описание прилагаемых электронных тестов
Инструкция по использованию теста
Для запуска теста необходимо:
I Вставить CD-диск в CD-привод;
2. Прочитать описание и инструкцию в файле — Инструк-
ция.ёос;
3. Запустить один из вариантов тестов (TEST1.EXE,
TEST2.EXE, TEST3.EXE, TEST4 .EXE, TEST5.EXE, TEST6.EXE,
TEST7.EXE, TEST8.EXE). На экране появится окно приветствия,
с поясняющей тест информацией (например, см. рис. ниже):
Тест проверки полненных знаний по языку прогрямнироеаяио "Рассе!"
Jeer состоит ил 2V вопросов. К и а о и *j вопрос у пре ал м яс тс я 4 вар и ап та
отлягу. Вдг«г <»|1М oirrir и* иплрое, иялкхоя****) м« кпдаил1у(1* мжкрлз».
еукву, соответствуете правильному варианту ответа - а, в, в или г.
Результатом успеиного выполнения теста является оценка 3. 4 илм 5.
в зависимости от количества правильных ответов на вопросы теста.
Насеемте на клавиатуре:
Рис II8 1
4. Дзя начала тестирования необходимо на клавиатуре нажать
клавишу 1. Для выхода из теста — нажать клавишу 2;
5. Далее на экране появляется первый вопрос теста (например,
см. рис. ниже);
1. Назовите автора а зек а “Расса 1“ ?
а> Никлаус Вирт
в> Денис Ритчи
Рис. НВ 2
6. Для ответа на вопрос необходимо нажать на клавиатуре бук-
ву, соответствующую правильному на ваш взгляд варианту ответа
(а, б, в или г);
375
Приложение В. Проверка знаний с помощью электронных тестов
7. После ответа на первый вопрос на экране появится второй
вопрос и г. д.
8. После завершения тестирования на экране отображаются ре-
зультаты контроля знаний (количество баллов) и их оценка (на-
пример, см. рис. ниже);
TiiinTiH tbcti
Коллнчесгво ндбраиных Баллов 24
ПлЫС эивнкя ”0 ТПИ*1К’1"
Иля выхояс махните Enter
Рис. 118 3
9. После ответа на все вопросы, необходимо пригласить препо-
давателя для фиксирования результатов тестирования. Выход из
теста разрешается только с разрешения преподавателя.
10. При выполнении самостоятельного тестирования выход из
теста может быта выполнен самостоятельно.
ВНИМАНИЕ! При выходе из теста результаты тестирования
ТЕРЯЮТСЯ.
П В2. «Электронные тесты»
В данном приложении содержатся электронные тесты, их тех-
ническое описание и инструкция по использованию. Электронные
тесты расположены в интернете по адресу:
www.solon-press.ru/cd-test.nu*.
376
Содержание
Список принятых сокращений.................................3
Путеводитель ио данному учебному пособию...................4
Введение..................................................11
Гема 1
Обзор языков про1раммиронания, программных комплексов
и основных понятий программирования....................17
1.1. Место языка Pascal в ряду других языков
программирования.......................................17
1.1.1. Хронология создания языков программирования..17
1.1.2. Классификация языков программирования........20
1.1.3. Общие характеристики основных языков
про1раммирования...................................26
1.1.4. Эволюция и тенденции развития языков
программирования...................................39
1.1.5. История создания и развитие языка Pascal.....42
1.2. Обзор программных комплексов......................53
1.2.1. Программные комплексы, применяемые
в машиностроении....................................53
1.2.2. Программные комплексы, применяемые
в кораблестроении...................................67
1.3. Основные исходные понятия процесса
программирования.......................................82
1.4. Контрольные вопросы по теме 1.....................90
Тема 2
(рода программирования Borland Pascal..................91
2.1. Структура среды пршраммировання Borland Pascal....92
2.1.1. Строка меню (главное меню)...................92
2.1.2. Строка состояния.............................93
2.1.3. Рабочая область..............................93
2.2. Структура и обзор главного меню ..................94
2.2.1. Меню - File................................94
2.2.2. Меню - Edit.................................95
2.2.3. Меню — Search...............................96
2.2.4. Меню — Run..................................97
2.2.5. Меню — Compile..............................99
377
Содержание
2.2.6. Меню — Debug.............................100
2.2.7. Меню - Tools.............................101
2.2.8. Меню — Options...........................102
2.2.9. Меню — Window............................103
2.2.10. Меню - Help..............................104
2.3. Основы практической работы в IDE BORLAND PASCAL.105
2.3.1. Запуск и выход из среды программирования..105
2.3.2. Принципы работы с меню....................107
2.3.3. Принципы работы с диалоговыми окнами.....108
2.3.4. Конкретная работа с окнами................116
2.3.5. Работа с текстовым редактором.............120
2.3.6. Сохранение программы......................124
2.3.7. Компиляция и запуск программы на выполнение.. 127
2.3.8 Поиск ошибок...............................133
2.3.9. Просмотр результатов выполнения программы...134
2.4. Отладка программы..............................135
2.4.1. Понятие об отладке нрО1раммы..............135
2.4.2 Рекомендации по предотвращению ошибок......136
2.4.3. Предварительные рекомендации
по поиску ошибок.................................137
2.4.4. Причины и тины ошибок.....................138
2.4.5. Способы и средства отладки................139
2.5. Рекомендации по составлению программ на языке Pascal.. 140
2.6. Практические задания по теме 2.................143
2.6.1. Практические задания......................143
2.7. Контрольные вопросы по теме 2..................144
Тема 3. Основы языка Borland Pascal....................145
3.1. Алфавит языка..................................145
3.1.1. Буквы и цифры языка.......................146
3.1.2. Зарезервированные слова...................146
3.1.3. Специальные символы.......................149
3.2. Общая структура программы......................151
3.2.1 Понятие о компьютерной профамме............151
3.2.2. Структура программы.......................152
3.2.3. Имя иршраммы..............................153
3.2.4. Содержание раздела описаний...............154
3.2.5. Основной блок профаммы....................155
3.3. Раздел описаний ............................. 157
3.3.1. Описание модулей (Uses)...................157
3.3.2. Описание мсгок (Label)....................158
378
Содержание
3.3.3. Описание констант (Const).................159
3.3.4. Описание типов переменных (Туре)..........161
3.3.5. Описание переменных (Var).................163
3.3.6. Замечание об описании процедур и функций...165
3.4. Идентификаторы, константы и выражения..........166
3.4.1. Идентификаторы............................166
3.4.2. Константы.................................167
3.4.3. Выражения.................................170
3.4.4. Оператор присваивания.....................170
3.5. Комментарии....................................172
3.6. Теорема структуры..............................173
3.7. Практические задания но теме 3.................173
3.7.1. Практические задания......................174
3.8. Контрольные вопросы по теме 3..................174
Тема 4
Разработка программ линейной структуры.................175
4.1. Правила построения линейных выражений..........175
4.2. Операции над переменными.......................177
4.2.1. Бинарные операции.........................177
4.2.2. Операции отношения........................179
4.2.3. Логические операции.......................180
4.3. Стандартные арифметические функции.............180
4.4. Операторы ввода данных.........................182
4.5. Операторы вывода результатов...................183
4.6. Вывод результатов с форматом...................184
4.7. Использование пустого оператора ReadLn.........188
4.8. Оформление программы...........................188
4.9. Дополнительные примеры и практические задания
но теме 4...........................................190
4.9.1. Дополнительные примеры....................190
4.9.2. Практические задания......................192
4.10. Контрольные вопросы по теме 4.................193
Тема 5
Разработка программ развствляющися структуры...........194
5.1. Условный оператор..............................194
5.2. Составной оператор.............................196
5.3. Логический тип и виды условий..................198
5.4. Оператор выбора варианта.......................200
379
Содержание
5.5. Оператор безусловного перехода.................204
5.6. Дополнительные примеры и практические задания
но теме 5...........................................206
5.6.1. Дополнительные примеры....................206
5.6.2. Практические задания......................208
5.7. Контрольные вопросы по теме 5..................208
Тема 6
Разработка программ циклической структуры..............210
6.1. Понятие цикла и виды цикла.....................210
6.2. Цикл с параметром..............................211
6.3. Цикл с предусловием............................214
6.4. Цикл с постусловием............................217
6.5. Вложенные циклы................................219
6.6. Дополнительные примеры и практические задания
по теме 6...........................................222
6.6.1. Дополнительные примеры....................222
6.6.2. Практические задания......................226
6.7. Контрольные вопросы по теме 6..................226
Тема 7
Работа с массивами.....................................227
7.1. Понятие массива................................227
7.2. Описание массива ..............................228
7.3. Одномерные массивы.............................229
7.4. Двумерные и многомерные массивы................231
7.5. Действия над массивами.........................234
7.5.1. Заполнение массива данными................234
7.5.2. Вывод элементов массива...................235
7.5.3. Перестановка элементов в массиве..........236
7.6. Рекомендации по работе с массивами.............237
7.7. Дополнительные примеры и практические задания
по теме 7...........................................238
7.7.1. Дополнительные примеры....................238
7.7.2. Практические задания......................240
7.8. Контрольные вопросы по теме 7..................240
Гема 8
Подпрограммы процедуры и функции.......................241
8.1. Понятие подпрограммы, процедуры
и функции............................................241
380
Содержание
8.2. Структура подпрограмм «Процедура» и «Функция*..243
8.2.1. Вызов подпрограмм «Процедура» и «Функция».243
8.2.2. Директивы для подпро|раммы...............244
8.2.3. Раздел описаний поднро1раммы.............245
8.3. Особенности работы с подпрограммами............247
8.3.1. Иерархия подпрограмм.....................248
8.3.2. Описание констант и переменных...........254
8.3.3. Передача параметров в подпрсярамму.......256
8.3.4. 11араметры-значения, параметры-переменные
и ।шраме гры-константы..........................257
8.4. Особенности описания типов в подпрограммах.....261
8.4.1. Тип-массив и тип-строка..................261
8.4.2. Процедурные типы.........................263
8.5. Дополнительные примеры и практические задания
но теме 8..........................................266
8.5.1. Дополнительные примеры...................266
8.5.2. Практические задания.....................271
8.6. Контрольные вопросы по геме 8..................271
Тема 9
Дополнительные вопросы программирования.............272
9.1. Работа с файлами...............................272
9.1.1. Имя и расширение файла...................272
9.1.2. Виды файлов..............................273
9.1.3. Файловые переменные......................275
9.1.4. Процедуры и функции для работы с файлами..276
9.1.5. Примеры работы с файлами.................278
9.2. Работа с множествами...........................280
9.2.1. Понятие множества........................280
9.2.2. Операции над множествами.................281
9.2.3. Примеры работы с множествами.............282
9.3. Работа с записями..............................284
9.3.1. Описание записи..........................285
9.3.2. Работа с записями........................286
9.3.3. Пример использования записей.............288
9.4. Дополнительные примеры и практические задания
по теме 9..........................................289
9.4.1. Дополнительные примеры...................289
9.4.2. Практические задания.....................294
9.5. Контрольные вопросы но теме 9..................295
381
Содержание
Гема 10
Ответы на практические гадания и контрольные вопросы...296
10.1. Ответы на практические задания..................296
10.1.1. Ответы на задания по теме 2................296
10.1.2. Ответы на задания по теме 3................298
10.1.3. Ответы на задания по теме 4................299
10.1.4. Ответы на задания но теме 5................299
10.1.5. Ответы на задания по теме 6................300
10.1.6. Ответы на задания по теме 7................301
10.1.7. Ответы на задания по теме 8................302
10.1.8. Ответы на задания по теме 9................303
10.2. Ответы на контрольные вопросы...................305
10.2.1. Ответы на контрольные вопросы по теме 1....305
10.2.2. Ответы на контрольные вопросы но теме 2....306
10.2.3. Ответы на контрольные вопросы по теме 3....307
10.2.4. Ответы на контрольные вопросы по теме 4....312
10.2.5. Ответы на контрольные вопросы по теме 5....317
10.2.6. Ответы на контрольные вопросы по теме 6....321
10.2.7. Ответы на контрольные вопросы по теме 7....323
10.2.8. Ответы на контрольные вопросы по теме 8....324
10.2.9. Ответы на контрольные вопросы по теме 9....328
Заключение...............................................332
Биографическая справка об авторах........................333
Тарануха Николай Алексеевич........................333
Гринкруг Лев Соломонович...........................333
Бурмснский Андрей Дмитриевич.......................334
Ильина Снежана Владимировна........................335
Список литературы........................................337
Приложение А. Команды встроенною редактора...............342
Основные команды перемещения курсора...............342
Расширенный набор команд перемещения курсора........342
Команды вставки и удаления.........................342
Команды работы с блоками...........................343
Команды поиска и замены............................343
Прочие команды.....................................343
Приложение Б. Сообщения об ошибках.......................344
1. Сообщения об ошибках периода компиляции............344
П. Ошибки периода выполнения процктмм.................363
382
Содержание
А) Ошибки DOS...............................363
В) Ошибки ввода-вывода......................365
С) Критические ошибки.......................366
D) Фатальные ошибки.........................366
Е) Ошибки DPMI..............................369
El) Ошибки DPMHNST..........................370
Е2 ) Ошибки фиктивного модуля...............370
ЕЗ ) Ошибки администратора этапа выполнения.371
Приложение В. Проверка знаний с помощью электронных тестов 374
383