/
Текст
Ю.А. Аляев, О.А. Козлов
Алгоритмизация
и языки
протраммирования
Список данных
х - вещественный;
Г - целый
II® I II ® /
Ш В«К И
Вывод ( X )
Ю.А. Аляев, О.А. Козлов
Алгоритмизация
и языки
программирования
Разса!, С++,
У|яю Ва$к
Рекомендовано
Научно-методической комиссией по информатизации
при Управлении военного образования
Министерства обороны Российской Федерации
в качестве учебно-справочного пособия
для курсантов военно-учебных заведений и училищ,
студентов технических вузов
и учащихся специальных классов школ
Москва
“Финансы и статистика”
2002
УДК 1004.421+004.4381(035)
ББК 32.973.26-018.1я2
А60
РЕЦЕНЗЕНТЫ:
С. А. Жданов, кандидат педагогических наук, профессор Московского
педагогического государственного университета;
В. Д. Киселев, доктор технических наук, профессор Тульского
артиллерийского инженерного института
Аляев Ю. А., Козлов О. А.
А60 Алгоритмизация и языки программирования Рахса!, С++,
У1$иа1 Вахте: Учебно-справочное пособие. — М.: Финансы и ста-
1 метика, 2002. — 320 с.: ил.
18ВИ 5-279-02294-2
Рассматриваются важнейшие разделы информатики — алгоритмиза-
ция и про: раммирование. На простых примерах излагаются основы алго-
ритмизации. особенности языков программирования высокого уровня и
интегрированных инструментальных оболочек Ра$са1 7.0. С++ и У18иа1
Ва$1С 5.0. Проиллюстрирована методика использования возможностей
языков программирования Разса! и Ва$1С при проектировании \Мпс1оиъ-
приложений.
Для преподавателей и студентов средних и высших учебных заведе-
ний, а также для учащихся профильных классов лицеев и гимназий.
2404010000-070
010(01) - 2002
254-2002
УДК 1004.421 +004.4381(035)
ББК 32.973.26-018.1 я2
18В19 5-279-02294-2
© Ю.А. Аляев. О А. Козлов, 2002
ОГЛАВЛЕНИЕ
Введение...............................................
Глава 1. ОБЩИЕ СВЕДЕНИЯ ОБ ИНФОРМАТИКЕ
И ЯЗЫКАХ ПРОГРАММИРОВАНИЯ..................... 11
1.1. Языки программирования и их развитие............ 11
1.1.1. Классификация и терминология................ 12
1.1.2. Выбор языка программирования................ 21
1.2. Этапы решения задачи с использованием компьютера 23
1.2.1. Модели решения функциональных и вычислительных
задач ............................................. 23
1.2.2. Общая характеристика этапов решения задачи
с использованием ЭВМ............................... 25
Глава 2. ОСНОВЫ АЛГОРИТМИЗАЦИИ......................... 30
2.1. Общие сведения об алгоритмах.................... 30
2.1.1. Свойства алгоритмов и способы их задания.... 30
2.1.2. Исполнение алгоритма........................ 3 5
2.2. Понятие о техноло! ии программирования.......... 38
2.2.1. Принципы структурной алгоритмизации ........ 38
2.2.2. Базовый набор структур...................... 41
2.2.3. Линейные и разветвляющиеся струк гуры....... 4 1
2.3. Организация циклических вычислительных процессов.... 46
2.3.1. Цикл с заданным условием продолжения работы
(цикл-ПОКА)........................................ 4~
2.3.2. Цикл с заданным условием окончания работы
(цикл-ДО) ......................................... 48
2.3.3. Цикл с заданным числом повторений........... 50
2.3.4. Исполнение циклических структур............. 53
2.4. Массивы и работа с ними......................... 54
2.4.1. Основы типизации и структуризации данных.... 54
2.4.2. Описание массивов........................... 55
2.4.3. Выборка элементов массивов.................. 58
2.4.4. Использование циклических операций для обработки
массивов........................................... 59
2.5. Пошаговая детализация алгоритма................. 65
2.5.1. Запись «блок-схема» методом пошаговой детализации
2.5.2. Запись структурного алгоритма в псевдокодах. 67
2.5.3. Словарь..................................... 67
2.5.4. У чет конкретных особенностей задач......... 69
Глава 3. ЯЗЫК ПРОГРАММИРОВАНИЯ
ТУРБО ПАСКАЛЬ 7.0.................... 73
3.1. Система программирования Турбо Паскаль.
От падка пользовател ьских I фог рамм................. 73
3.1.1. Интегрированная инструментальная оболочка Турбо
Паскаль 7.0......................................... 73
3.1.2. Отладка пользовательских программ. Классификация
ошибок.............................................. 78
3.1.3. Основные э 1 алы отладки..................... 79
3.1.4. Диагностические сообщения.................. 81
3.2. Общее описание языка Паскаль..................... 82
3.2.1. Назначение и основные особенности языка...... 82
3.2.2. Алфавит и словарь............................ 83
3.3. Структура программы на языке Паскаль............. 86
3.3.1. Тш пл данных, ис! юльзуемые в языке Паскаль.. 86
3.3.2. Структура программы.......................... 89
3.3.3. Заголовок программы и раздел описаний........ 91
3.4. Операторы языка Паскаль.......................... 95
3.4.1. Раздел 01 гераторов.......................... 95
3.4.2. Оператор присваивания........................ 95
3.4.3. Операторы процедур........................... 97
3.4.4. Операторы языка Паскаль для ор] анизации ветвления 100
3.5. Операторы цикла языка Паскаль.................... 105
3.5.1. Про1 раммирование конструкции цикл-ПОКА.... 105
3.5.2. Прох раммирование конструкции цикл-ДО....... 106
3.5.3. Оператор цикла с параметром................ 107
3.5.4. Массивы и их обработка с помои(ыо циклов.... 109
3.6. 1[роцедуры и функции........................... 112
3.6.1. 11роцедуры................................. 1 12
3.6.2. Функции.................................... 1 16
3.6.3. Побочный эффект. Рекурсии.................. 117
3.7. Сложные типы данных............................ 119
3.7.1. Записи .................................... 19
3.7,2. Множества .................................. 122
3.7.3. Файлы и работа с ними....................... 124
3.7.4. Списки, деревья, сети...................... 128
3.8. Библиотечные модули Турбо Паскаля 7.0.......... 133
3.8 1. Использование библиотечных процедур и функций ... 133
3.8.2. Библиотечныймодуль Сг1..................... 134
3.8.3. Библиотечный модуль Сгарй .................. 136
3.9. Визуальное программирование в Ве1рЫ........... 143
Глава 3. ЯЗЫК ПРОГРАММИРОВАНИЯ ТУРБО ПАСКАЛЬ 7.0
3.9.1 .Пользовательская оболочка Ое1рЫ........... 143
3.9.2. Создание стартовой формы проекта.......... 145
3.9.3. Написание кода (текста программы)......... 149
3.9.4. Основные понятия объск гно-ориентироваппого про-
граммирования ................................... 154
3.9.5. Организация обмена сообщениями между графически-
ми объектами в языке Турбо Паскаль (М8-ОО8)...... 159
Глава 4. ЯЗЫК ПРОГРАММИРОВАНИЯ С++.................. 1 65
4.1. Общее описание языка С++...................... 165
4.1.1. 11азпачение и некоторые особенности языка. 165
4.1.2. Алфави г и словарь........................ 166
4.1.3. Базовые типы данных, используемые в С++... 168
4.1.4. Структура программы....................... 169
4.2. Операторы языка С++........................... 171
4.2.1. Оператор присваивания..................... 172
4.2.2. Операторы ввода и вы вода данных.......... 173
4.2.3. Операторы языка С++ для организации ветвления.... 177
4.3. Операторы цикла языка С++..................... 181
4.3.1. Программирование конструкций цикл-ПОКА.... 182
4.3.2. Программирование конструкции цикл-ДО...... 183
4.3.3. Оператор цикла с параметром............... 184
4.3.4. Массивы и их обрабо тка с помощью I щк юв. 186
4.4. Функции....................................... 189
4.4.1. Описание и вызов функций.................. 189
4.4.2. Изменение значений фактических параметров при
помощи указателей и ссылок....................... 192
4.4.3. Перегрузка функций........................ 194
4.4.4. Значения параметров функции по умолчанию.
Локальные и глобальные переменные................ 195
4.5. Сложные типы данных........................... 19
4.5.1. С груктуры................................ 197
4.5.2. Объединения............................... 200
4.5.3. Файл ы и работа с ними.................... 202
4.5.4. Файловые операции над массивами и структурами ... 207
4.6. Классы языка С++.............................. 209
4.6 1. Попя гие класса .......................... 209
4.6.2. Инкапсуляция данных....................... 211
4.6.3. Конструкторы и деструкторы................ 213
4.6.4. Перегрузка операторов..................... 214
4.6.5. Статические элементы класса............... 216
Глава 4. ЯЗЫК ПРОГРАММИРОВАНИЯ С++
4.7. Наследова!ше и полиморфизм........................... 217
4.7.1 1 Грос гое наследование................... 217
4.7.2. Множественное наследование....................... 220
4.7.3. Друзья класса.................................... 223
4.7.4. Понятие о полиморфизме и виртуальных функциях ... 225
Глава 5. ОСНОВЫ ПРОГРАММИРОВАНИЯ
НА МЗГАЬ ВА81С...................................... 227
5.1. Визуальное программирование в У1$иа1 Вазю 5.0........ 227
5.1.1. Пользовательская оболочка У1зиа1 Вазк 5.0........ 227
5.1.2. Создание стартовой формы проекта................. 230
5.1.3. Написание кода (текста программы)................ 233
5.1.4. Подготовка приложения для инсталляции с 1 ибких
дисков.................................................. 237
5.2. Разработка программного комплекса контроля знаний ... 241
5.2.1. Постановка задачи................................ 241
5.2.2. Создание стартовой формы приложения дня подготов-
ки кон грольных заданий................................. 242
5.2.3. Код проекта Кесогд-Са11.......................... 252
5.2.4. Создание стартовой формы приложения для контроля
знаний ................................................. 252
5.2.5. Код проек та СЭиезйоп............................ 257
При. южения ........................................
1. Коды сообщений об ошибках в программе на языке
Турбо Паскаль........................................... 259
2. Зарезервированные слова в Турбо Паскале 7.0.......... 276
3. Перечень операций языка Турбо Паскаль................ 277
4. Таблица перевода основных алгоритмических конструк-
ций в конструкции языка Турбо Паскаль 7.0............... 278
5. Встроенные функции языка Турбо 11аскаль 7.0... 281
6. Зарезервированные слова в С++........................ 283
7. Перечень операций я зыка С++......................... 284
8. Таблица перевода основных алгоритмических конструк-
ций в конструкции языка С++............................. 285
9. Таблицы основных свойств обьектов проекта Кесогс! -СаЕ 28 8
10. Коды (текст программы) проекта 1<есогд-Са11......... 296
11. Таблицы основных свойств объектов проекта (^иезйоп . 302
12. Коды (текст программы) проекта Оиехйоп.............. 307
Литература................................................. 318
ВВЕДЕНИЕ
Переход современного общества к информационной эпохе
развития выдвигает в качестве одной из основных задач, сто-
ящих перед системой образования, задачу формирования основ
информационной культуры будущего специалиста. Потребность
общества в квалифицированных специалистах, владеющих ар-
сеналом средств и методов информатики, превращается в веду-
щий фактор образовательной политики.
В настоящее время учебный курс информатики изучается во
всех средних учебных заведениях, вузах и колледжах. При этом
тенденция к распространению этого курса в сфере образования
продолжает расти. Причина этого заключается в том, что се) одня
в обществе существует достаточно серьезная и устойчивая соци-
альная потребность в изучении информатики, а главное — в ис-
пользовании информационных технологий (ИТ) в повседневной
деятельности. Эта потребность обусловлена стремительным раз-
витием средств вычислительной техники и связи, проникновени-
ем ИТ почти во все сферы социальной практики и настоятельной
необходимостью их эффективного использования в интересах
решения ряда социально-экономических проблем.
Человек XXI века должен обладать информационной куль-
турой, поэтому образование в области информатики должно
решать следующие стратегические задачи:
мировоззренческую^ формируя категориальные понятия систем-
ного подхода, такие, как система, информация, свойство и г.д.;
алгоритмическую т.е. задачу развития мыслительной дея-
тельности обучаемых, формируя понятийные, фактографичес-
кие и процедурные знания;
профессиональную, подготавливая выпускника к практической
работе и прививая потребность в непрерывном образовании.
Содержание информатики как науки и как учебной дисцип-
лины в последнее время сильно изменилось. Нерешенность мно-
гих вопросов, определяющих «окончательный облик» дисцип-
лины «информатика», привела к тому, что в ее преподавании
сложился драматический разрыв между математическими и тех-
нико-технологическими содержательными линиями, с одной ва
стороны, и мировоззренческими, социально-гуманитарными со- М1
держательными линиями — с другой. 11ри этом в большинстве ум
случаев из учебного курса изымаются именно мировоззренчес- ту
кие аспекты, что, конечно, не способствует формированию у нс
обучаемых целостного мировоззрения на этапе перехода к ин- М1
формационному обществу. уч
В современной психологии отмечается значительное влия- тс
нис изучения информатики и информационных технологий на те
развитие у обучаемых логического, алгоритмического (опера-
ционного) и творческого мышления. Информатика вместе с ма- ст
тематикой и лингвистикой закладывает в образование опорный те
треугольник главных проявлений человеческого интеллекта: спо- пр
собность к обучению, рассуждению и действию. рс
Важнейшую роль в курсе информатики играет развитие у гс
обучаемых способности к действию на основе формирования
алгоритмического (операционного) стиля мышления Человек, сс
живущий в современном технократическом мире, должен уметь ф<
алгоритмически мыслить. Вокруг него множество объектов, ра- М1
ботающих по законам компьютерной логики. Алгоритмичес- ст
кое мышление, таким образом, выступает не только как стиму- кг
лятор общего развития, но еще и вводит человека в изначально к
чуждый для него мир современной техники. Формирование ал- м;
горитмического мышления как одной из важнейших составля- у1
ющих информационной культуры всегда было важной задачей п]
курса информатики [9]. Ведь в профессиональной деятельности 01
будущему специалисту предстоит не только использовать гото- ч<
выс ИТ, но и заниматься проектированием различных инфор- о;
мациоппых систем, например, в экономике [5, 6]. Т
Несмотря на большой исторический опыт преподавания ал- ч<
горитмизации и программирования как в высшем, так и в сред-
нем образовании, проблем здесь остается немало. Многие видят н
в информатике предмет, в котором преподаватель должен научить к-
пользоваться современными информационными технологиями. п
Действительно, сейчас этот аспект курса, как никогда, актуален и
злободневен. Но. как в школе, так и вузе, информатика должна в
ориентироваться не на сиюминутные потребности общества, а В
строиться на основе взгляда в будущее. Стержнем, на котором в
строится программа предмета «Информатика», должен по- А
прежнему оставаться раздел «Алгоритмизация и программиро- Р
вание» поскольку именно при изучении этого раздела у ооучае-
мых формируется системно-информационная картина мира,
умение выделять объекты, процессы и явления, понимать их струк-
туру и, что самое главное, вырабатывается умение самостоятель-
но ставить и решать задачи. Раздел «Алгоритмизация и програм-
мирование» может стать одним из тех ключей, которыми наши
ученики откроют дверь в информационное общество, станут не
только потребителями, но и творцами новых информационных
технологий.
Не все преподаватели имеют собственный опыт программи-
стской работы , да и уследить за так быстро развивающимися
технологиями программирования тоже не просто. Подготовка
программистов не входит в задачи курса, тогда как программи-
рование является главным способом развития алгоритмическо-
го мышления.
Однако технология решения задач на ЭВМ - это не только
составление программы и получение загрузочного модуля, а
формирование модели, составление алгоритма, отладка програм-
мы, тестирование ее. На этапе отладки выявляется много ситак-
сических ошибок (особенно на начальных этапах изучения я пл-
ка программирования), исправление которых может привести и
к изменению алгоритма, по которому разрабатывалась програм-
ма. Этот этап болезненно воспринимается и преподавателями, и
учениками. От преподавателя требуется высокая квалификация
программиста, чтобы за максимально короткое время найти
ошибку в программе ученика и помочь ему исправить синтакси-
ческие ошибки. Перед учеником стоит задача после исправления
ошибки продолжить поиск и исправление очередных ошибок.
Тестирование программы дает возможность выявить алгоритми-
ческие ошибки и получить ожидаемые результаты.
Без программирования развитие алгоритмического мышле-
ния практически невозможно, так как отсутствует возможность
компьютерного эксперимента: проверки работоспособности ал-
горитма.
Проблема обучения алгоритмизации и программированию
впервые рассматривалась И М. Антиповым, В.М. Монаховым,
В.С. Ледневым и получила свое развитие в работах А.П. Ершо-
ва, Г.А. Звенигородского. Ю.А. Первина. в исследованиях
А.А. Кузнецова. Э.И. Кузнецова. М. Шведского, А Р. Есаяна.
Различным прикладным аспектам этой методической проблемы
посвящены десятки кандидатских диссертаций, и при этом потреб-
ность в литературе, адресованной практическому педагогу, оста -
ется.
Помочь преподавателям на всех ступенях образования, сту-
дентам, учащимся техникумов, колледжей, лицеев и школ в
освоении одного из важнейших разделов курса информатики
«Алгоритмизация и программирование» призвано настоящее
пособие. Предлагаемый подход к изучению курса «от алгорит-
ма к программе через таблицу кодирования» применялся авто-
рами более двадцати лет и показал высокую эффективность
[1, 2, 11, 12] при обучении различных категорий пользователей
ИТ.
Реализация алгоритмических конструкций, рассмотренных
в книге, демонстрируется на трех языках программирования
высокого уровня: ТигЬо Разса! 7.0, С++ 3.1, У1$иа1 Вамс 5.0.
Акцент при описании первых двух языков программирования
делается на «табличный» способ перевода алгоритмических
конструкций в конструкции выбранного языка. Такой подход к
программированию позволяет в некотором смысле свести ра-
боту прО1раммиста к работе переводчика иностранного языка,
например английского: есть текст на русском языке (в нашем
случае алгоритм), нужно перевести его на английский язык (в
нашем случае — в программу на выбранном языке програм-
мирования).
Выбор языков ТигЬо Разса!, С++ и У1$иа1 Вамс обусловлен
требованиями Государственного образовательного стандарта
высшего профессионального образования, а также популярно-
стью и широким распространением этих языков среди рядовых
пользователей и профессионалов.
Изложение вопросов программирования подкрепляется кон-
кретными примерами и сопровождается необходимыми ком-
ментариями. Проводится сравнение программных конструкций,
записанных на различных языках программирования, анали-
зируются их достоинства и недостатки, даются рекомендации
по применению конструкций в пользовательских программах.
ГЛАВА 1
г
Общие сведения об информатике
и языках программирования
1.1. Языки программирования
и их развитие
Информатика стала развиваться с середины XX столетия, когда
появились специальные устройства — компьютеры, ориентиро-
ванные на хранение и преобразование информации,
С информацией люди оперировали уже задолго до появле-
ния компьютеров. Конторские счеты, механические устройства
типа арифмометров, счетные электрические клавишные маши-
ны и многие другие приборы были нацелены на решение тех
задач, которые в полном объеме стали реализовываться в ком-
пьютерах»
Для хранения и передачи символьной информации (текстов
различного характера) также придумывали и создавали раз-
личные приспособления и устройства. Простейшим примером
могут служить каталоги (например, на карточках), в которых
можно хранить в систематизированном виде любую информа-
цию, записанную на некотором естественном или специальном
языке.
Компьютер в одной системе объединяет хранение и обработ-
ку числовой и текстовой информации. Широкое применение ЭВМ
позволяет в корне изменить технологию сбора, храпения и пре-
образования информации, а хорошо развитое программное обес-
печение не только освобождает нас от рутинной работы, но и
позволяет решать задачи оптимизационного характера. Резуль-
таты решения таких задач помогают принят ь правильное реше-
ние в сложной, экстремальной обстановке.
Современный компьютер представляет собой совокупность
технического (Ьагдмаге) и программного (зоГмаге) обеспечения,
предназначенного для переработки информации в соответствии с
заданными правилами.
Слово «8оГг\уаге» — «мягкое изделие» удачно характеризует
свойства программного обеспечения (ПО): гибкость, способность сн
приспосабливаться, изменяться, подчеркиваег равнозначное! ь ] Ю лс
и самой машины. ра
пь
1.1.1. Классификация и терминология
нс
Язык — эго знаковая система любой физической природы, вы- кс
полняющая познавательную и коммуникативную функции в про- кг
цессе человеческой деятельности. Взаимодействие человека с ЭВМ нг
носит характер общения. Поэтому возникли и широко исполь- др
зуются различные специальные языки программирования как гм
средство общения человека с компьютером. Языки про! рамми-
рования являются искусственными языками, в которых синтак- н<
сис и семантика ст рого определены и обеспечивают однозначное нс
толкование всех выражений. Без языков программирования ком- нс
пыотеры и связанные с ними уст ройства стали бы грудой беспо- ш
лезного металла. Л1
Язык программирования, предложения которого выражают ст
машинные команды, «понятные» компьютеру, называется язы- 1п
ком машинных команд. 11аписать программу на гаком языке до-
вольно сложно. Программист должен хорошо знать аппаратную ш
часть компьютера и коды машинных команд. Ошибка в одной н<
цифре может сделать программу неработоспособной.
Пример программы, записанной на языке машинных кодов в<
одного из первых отечественных персональных компыо- р]
теров «ЭЛЕКТРОНИКА МС-0513» для получения эффекта «по- т
лосатыи экран»: П
120327 000377 001005 010546 011505 010537 000212 012605 п;
000207 000000 П]
Появление в конце 40-х годов языков ассемблера (а§8етЫу п
ху81ет собирающая система, отсюда слово «ассемблер»), в п:
которых короткие мнемонические имена соответствуют машин- ет
ным командам, облегчило работу про) раммистов. я:
Пример программы, записанной на языке ассемблера р
«ЭЛЕКТРОНИКА МС-0513» для получения эффекта «очистка и
экрана»: Г]
МОХ/ #14, КО — 14 — кол «очистки» экрана п
ЕМТ 16 — вывод на экран содержимого КО
НАЬТ — останов 51
Язык Ассемблер — это машинно-зависимый (машинно-ори-
ентированный) язык, реализующий набор машинных команд, за-
ложенных в центральный процессор конкретного компьюте-
ра Поэтому программа, написанная на Ассемблере одного ком-
пьютера, не будет работать на компьютере другого типа.
Языки программирования высокого уровня являются машин-
но-независимыми. Одна и та же программа, написанная на та-
ком языке, может работать на компьютерах разных типов. Язы-
ки программирования высокого уровня напоминают естествен-
ные языки общения между людьми, часто имеют множество
диалектов, но в отличие от естественных языков они более стро-
ги и точны.
Использовать языки программирования высокого уровня для
написания программ очень удобно и просто, однако компьютер
не может обрабатывать команды и данные до тех пор, пока они
не будут представлены последова гельностыо нулей и единиц (ма-
шинными кодами). Перевод программ, записанных на каком-
либо языке программирования, в машинные коды осуществля-
ется специальной служебной программой — транслятором (от
1гап81а1е — переводит ь).
В настоящее время известны два вида трансляторов ком-
пилятор и интерпре гатор, которые отличаются способом выпол-
нения перевода [19].
Компилятор читает всю программу целиком, делает ее пере-
вод и создает законченный вариант на машинном языке, кото-
рый затем загружается в компьютер и выполняется. Интерпре-
татор переводит и выполняет программу строка за строкой.
После того как программа откомпилирована, ни сама исходная
программа, ни компилятор больше не нужны. В го же время
программа, записанная на интерпретируемом языке, должна ин-
терпретироваться перед каждым выполнением. Поз тому отком-
пилированные программы работают быстрее, но интерпретиру-
емые проще исправлять и модифицировать. Иногда для одного
языка имеется и компилятор, и ин терпретатор. В этом случае для
разработки и тестирования программ можно воспользоват ься
интерпретатором, а затем откомпилировать оглаженную про-
грамму (создать так называемый исполняемый модуль), чтобы
повысить скорость ее выполнения.
Языки про] раммирования высокого уровня появились в конце
50-х годов [19]. Одним из самых распространенных в мире стал
язык Фортран (ЕОК1 КАХ. РОКти1а 1 КАЫ$1а1ог — переводчик
формул), который создавался программистами фирмы 1ВМ под ул
руководством Джона Бекуса (ЗоЬп Васкиз) специально для ра- н
боты с формулами, используемыми в математике и в других на- 7;
учно-технических дисциплинах. т]
Пример фрагмента программы, записанной на языке
Фортран (вычисление среднеарифметического Ы чисел): я:
...ББМ=0.0 Г
БО 10 1=1,К Н
10 зим=зом+д<1)
8А=8ПМ/Ы...
Впоследствии появились версии языка (Фортран II, III, IV и п
т.д.), расширяющие его возможности. Фортран и сегодня остает-
ся популярным языком программирования, особенно среди на- с
учных работников. Вторым широко распространенным языком у
программирования высокого уровня стал Кобол (СОВОЬ, у
Соттоп Ви$те8$ Опеп1ед Ьап^иа§е — общий язык, ориентиро-
ванный на экономические задачи). Он был разработан совмест- в
ными усилиями специалистов военного ведомства США в фирм, и
производящих компьютеры. и
Пример фрагмента программы, записанной на языке я
Кобол (начисление заработной платы): р
...ПОМЕСТИТЬ СТАВКА В ЗАРПЛАТА. Н
ЕСЛИ СТАЖ БОЛЬШЕ 10 н
ТО УМНОЖИТЬ СТАВКА НА 0.20 К
ПОЛУЧАЯ ПРОЦЕНТ-ПРИБАВКИ... *
Структура и словарь языка близки к обычному естественно-
му языку общения. Кобол стал основным языком для обработ-
ки данных в банках и страховых компаниях. п
Третий язык программирования высокого уровня Алгол з
(АБСОЦ АБСОпШпвс Бап^иа^е — алгоритмический язык) был
признан международным языком европейских программистов. [
Впоследствии появились версии языка (Алгол-60, 68 и т.д.), рас- с
ширяющие его возможности. Ь
Пример фрагмента программы, записанной на Алголе ь
(вычисление и печать значения функции у в точке х): >
...геа! х,у; Г
ЧТЕНИЕ (х) ; р
у:=1/(1+Х-2); Е
ПЕЧАТЬ (х, у)... у
Как и Фортран, язык Алгол ориентирован на проведение на-
учно-технических расчетов. Три важнейшие черты Алгола: блоч-
ная структура, рекурсия и формализованное определение син-
таксиса оказали существенное влияние на становление и разви-
тие других появившихся позднее языков программирования.
Важной вехой в истории языков программирования стало по-
явление в 1964 г. универсального языка, получившего название
ПЛ/1 (РЬ/1, Рго§гатшт§ Бап^ьа^е Опе — язык программирова-
ния, первый).
Пример фрагмента программы, записанной на языке
ю
ПЛ/1 (вычисление и печать значения функции у = х,):
...ОСЬ Х(10) ГЬОАТ; 1=1
СЕТ Ы8Т(Х); РИТ ОАТА(Х);
7=0; ОО 1=1 ТО 10;
У=У+Х (I) ; Е№; РОТ ОАТА (У) ;...
Разработчикам языка из фирмы ТВМ удалось создать уни-
версальное средство для решения вычислительных и информа-
ционно-расчетных задач. Язык ПЛ/1 обладает многими преиму-
ществами перед другими языками программирования, но в го
же время в нем много недостатков, самыми серьезными из кото-
рых являются его. на первый взгляд, пугающая сложность, труд-
ность в изучении и большой размер компилятора. Хотя язык не
нашел применения в персональных компьютерах, им продолжа-
ют пользоваться при работе на ЭВМ третьего поколения (напри-
мер, ЕС ЭВМ).
Появление языка ПЛ/1, поддержанного большинством про-
фессиональных программистов, дало, в свою очередь, импульс к
пересмотру языков-предшественников с целью их «универсали-
зации» (появились, например. Алгол-68, Алгол-ХУ, Фортран-77).
Особое место в истории программирования занимает язык
Бейсик (Ва^ю, Ве^1ппег§ АП-ригрохе 8утЬоНс Собе универ-
сальный символический код для начинающих). В 1964 г. Томас
Курц (Тйота$ Киг(х) и Джон Кемени (1оЬп Кетелу) из Дарт-
мутского колледжа написали простой и легкий в изучении язык,
моделируемый на Фортране. Предполагалось, что основным
предназначением Бейсика будет обучение основам программи-
рования — это следовало и из названия языка. Однако в скором
времени Бейсик завоевал невероятную популярность не только
у начинающих программистов, но и у профессионалов и в даль-
нейшем стал основным языком микроЭВМ и персональных ком-
пьютеров.
Пример программы, записанной на языке Бейсик (вы-
числение площади прямоугольного треугольника):
...ЮТОТ “Введите значения катетов’ ; А, В
8=(А*В)/2
РВ1ПТ “Площадь треугольника: 8=”,8...
Со времени своег о возникновения Бейсик, как ни один дру-
гой язык, подвергался многочисленным изменениям и доработ-
кам. В 1975 г. Кемени и Курц ввели в язык структурные возмож-
ности, а в середине 80-х годов разработали в содружестве с Аме-
риканским институтом национальных стандартов (А№51)
обновленную версию языка, который назвали Тгие Вамс — «ис-
тинный Бейсик». В дальнейшем появилось столько диалектов это-
го языка, что их даже трудно перечислить (М5Х-Ваыс, ТигЬо-
Ваыс, 6ЛУ-Ва$1с. рЬаыс и т.д.). С момента выпуска в свет фирмой
МюгозоЛ. первой версии Уг$иа1 Ва§гс в 1991 г. начался новый этап
развития Бейсика. Соединение возможностей универсального
языка программирования высокого уровня со средствами визу-
альной разработки позволило достаточно просто и быстро со-
здавать приложения в операционной системе ХУшдоиа. Сожале-
ния заслуживают программисты, свысока оз носящиеся к данно-
му языку. Современный Бейсик мощное средство создания
программного обеспечения для решения задач промышленного,
экономического и оборонного характера.
Язык Паскаль (назван в честь французского математика XVII в.
Блеза Паскаля (Шаше Разса1)) был разработан в начале 70-х го-
дов швейцарским ученым Никлаусом Виртом (ЫкЯаш ДЛ'ЧгПт) как
инструмент для систематизированного обучения программиро-
ванию. В состав языка включены элементы структурного про-
граммирования. Определения всех переменных задаются в Пас-
каль-программе в явном виде, что, с одной стороны, ограничи-
вает свободу программиста, но, с другой — способствует более
строгому стилю прог раммирования. уменьшает количество оши-
бок и улучшает «читаемость» программы.
Пример фрагмента программы, записанной на языке
ю
Паскаль (вычисление и печать значения функции у - ^Пх; ) :
1=1
..дгаг у:геа1; 1:1пГедег; х:аггауI 1. . 10] геа1;
Ведгп
ш
ТР
дг
К
ш
В
Н(
НГ
Р‘
П(
Л1
&
и
п-
С1
н
п
п
к
X
л
н
(
у:==1; Тог ±:=1 Го 10 с!о Ьедгп
геа<1(х[±]); юг1Ге1п(х[1]); у:=у*х[_1]; епд;
мг±Ге1п Су=\ у)
С 1983 г. Паскаль был введен в учебные курсы во всех средних
школах США для учащихся, которые специализируются в облас-
ти информатики. Широкое распространение язык получил благо-
даря усилиям французского математика Филипа Кана (РЬШрре
КаЬп), разработавшего в 1983 г. компактный, быст родействую-
щий и дешевый компилятор, который он назвал Турбо Паска н>.
В начале 80-х годов Кан создал фирму по разработке программ-
ного обеспечения (Вог1апд 1п1егпайопа1), занимавшуюся перво-
начально распространением Турбо Паскаля для микрокомпьюте-
ров. В скором времени Турбо Паскаль стал одним из наиболее
популярных языков для персональных компьютеров.
Принципы построения программ, заложенные в Паскале, по-
лучили развитие в таких языках программирования, как Ада,
Модула-2. Си и т.д.
Язык программирования Ада назван в честь Ады Лавлейс
(Аи§ш1а Ада, Ле СоиШеез оГ Ьоуе1асе). математика и писателя
XIX в., появился в 1979 г. Он был разработан небольшой груп-
пой специалистов из разных стран под руководством француз-
ского ученого Жана Ишбиа (1сап 1сЬЫаЬ). Наиболее характер-
ной чертой данного языка является ориентация на структурное
программирование. Язык позволяет писать программы в виде
пакетов, т.е. самостоятельных модулей, которые разрабатыва-
ются отдельными программистами, а зач ем собираются вместе.
Пакет может быть разработан, отлажен, оттестирован и со-
хранен в библиотеке модулей для дальнейшего использования в
программе, как если бы это была часть стандарт ного программ-
ного обеспечения.
Пример фрагмента программы, записанной на языке Ада
(ввод целых чисел, признаком окончания служит нуль):
...ЬООР
СЕТ (ГШМВЕВ) ;
1Е 1ТОМВЕК=0 ТНЕК
ЕХ1Т;
ЕДО 1Е;
ЕИЕ ЬООР;...
В Аде много особенностей, затрудняющих изучение этого
языка, кроме того, компилятор Ады занимает больше места, чем
компилятор се предшественника Паскаля. Несмотря на все труд-
ности, удачные компиляторы для Ады появились. В 1983 г. ми-
нистерство обороны СИ 1А распорядилось, чтобы все новые про-
граммы для «критических» приложений писались на Аде (под
«критическими» понимались компьютеризованные системы свя-
зи и системы вооружений). В 1981 г. Никлаус Вирт разработал
язык программирования Модула-2. Подобно Аде, язык представ-
лял собой расширение Паскаля в нескольких направлениях.
Пример фрагмента программы, записанной на языке
Модула-2 (нахождение наибольшего общего делителя двух
натуральных чисел):
...ИН1ЪЕ Х#Х ЮО
ТЕ Х>У ТНЕК Х:=Х-У
ЕЬЗЕ У:=У-Х
ЕЖ
ЕЖ;...
Наиболее примечательным было введение средств написания
больших и сложных программ, которые можно создавать в виде
отдельных самостоятельных модулей, а затем собирать их вмес-
те. По сравнению с Адой язык Модула-2 более прост в изучении.
Язык программирования Си (язык С, получил свое название
от третьей буквы латинского алфавита) был создан в 1972 г. Ден-
нисом Ричи (Вепшз КйсЫе) и Кеном Томпсоном (Кеп Тйотрзоп).
В этом языке сочетаются лучшие свойства языка Ассемблер и язы-
ков программирования высокого уровня. По компактности и
скорости выполнения программы на языке Си приближаются к
программам, написанным на языке Ассемблер. Язык Си поддер-
живает технологию структурного программирования
Пример фрагмента программы, записанной на языке Си
(копирование десяти элементов одного вектора в дру-
гой) :
...11ТО 1=0;
\лЛ1Ые (1<10)
{
Основной программной единицей в языке Си является функ-
ция. I [рограммы на этом языке получаются лаконичными, при
этом не теряются их наглядность и удобочитаемость. В качестве
недостатка языка Си следует отметить достаточно высокие требо-
вания к квалификации программиста, использующего этот язык
программирования.
В начале 70-х годов, во время «микрокомпьютерной револю-
ции», среди профессиональных программистов получил призна-
ние и распространение еще один язык программирования Форт.
Разработчик этого языка Чарльз Мур (СИ. Н. Мооге) хотел дать
ему название ЕО1Ж1 Н (четвертый), так как считал язык настоль-
ко мощным, что он будет использоваться на ЭВМ будущего, чет-
вертого поколения. Однако компьютер 1ВМ-1130 (ЭВМ третьего
поколения), на котором в то время работал Мур, ограничивал
длину идентификатора пятью символами, поэтому название языка
пришлось сократить, но получилось тоже неплохо — НОВ! Н
(вперед).
Пример фрагмента программы, записанной на Форте
(сумма квадратов первых п натуральных чисел):
: 882 ( п сумма )
О 8КАР 1 + 1 00 I ПОР X + ЬООР;...
Одной из особенностей Форта является его компактность, не-
которые ключевые слова языка представляют собой просто знаки
пунктуации. Другое важное качество, отличающее его от осталь-
ных языков программирования, — возможность работы с объек-
тами типа «словарь», описывающими активный в данный момент
список слов, извест ный системе. Язык допускает использование
кириллицы, символьную обработку, рекурсию и обладает возмож-
ностями ряда других языков. Форт успешно применяется для раз-
работки систем управления разнообразными научными инстру-
мент ами и установками. Программы, написанные для микроком-
пьютеров на этом языке, в частности, управляют в реальном
масштабе времени системой наведения одиннадцатиметрового те-
лескопа обсерватории Китт-Пик (штат Аризона). К недостаткам
языка следует отнести то, что он труден для изучения.
Все языки, рассмотренные нами до сих пор, о гносятся к гак
называемым процедурным языкам программирования В осно-
ве любого процедурного языка лежат понятия операторов и дан-
ных (операндов). Пользуясь процедурными языками, програм-
мист описывает, как что-либо следует делать. Программа, напи-
санная на процедурном языке, явно указывает способ получения
требуемого результата при помощи процедуры, которая пред-
ставляет собой определенную последовательность действий.
При использовании непроцедурного (декларативного) язы-
ка прохраммист указывает в явном виде, что следует делать,
какими свойствами должен обладать результат, но не описыва-
ет, каким способом он будет получен. В декларативном языке
определяется «что», а не «как», поэтому такие понятия, как
команды управления, их порядок, операторы присваивания, в
них отсутствуют'.
К представителям непроцедурных (декларативных) языков
программирования относится, например, язык Пролог 1[РКОЬОС,
от РКО&гаттшё т ЬОСнс — программирование в логике), раз-
работанный Аланом Колмери (А1ат Со1тегапсг) в 1972 г.
Пример фрагмента программы, записанной на языке
Пролог (вычисление ряда 1:(х,п)=1 + х+х +.. 4-х ) :
..Т(х,0,1) -
Г(х,п,5)
М 15 Ы-],
Пх,м,ю ,
5 15 К*Х+1....
Стремительное развитие декларативного программирования
началось в 80-е годы. В 1981 г. был разработан японский проект
создания ЭВМ пя того поколения, целью которого являлась под-
готовка почвы для создания «интеллектуальных» машин. Пред-
полагалось разработать ЭВМ с большими базами знаний, спо-
собными эффективно взаимодействовать с человеком, т .е. ориен-
тированными на особенности работы и мышления человека . В
качестве базового языка реализации японского проекта был выб-
ран Пролог.
В последнее время все большее распространение получают
объектно-ориентированные языки программирования, на кото-
рых программа задается описанием поведения совокупности вза-
имосвязанных объектов.
К представителям объектно-ориентированных языков мож-
но отнести языки Си++ и У1§иа1 Ваыс 5.0 (УВ5.0), краткое описа-
ние которых приводится в данной книге (справедливости ради
следует отметить, что последние версии языка Турбо Паскаль так-
же ставят его в ряд объектно-ориентированных языков програм-
мирования).
Язык Си++ был разработан в начале 80-х годов Ььерном Стра-
уструпом (В]агпе 81гои$1гир) в результате расширения и допол-
нения языка Си. Иногда его называют языком Си с классами.
►Ы-
ГЬ,
ва-
1КС
:ак
, в
:ов
Ст.
аз-
ке
[ИЯ
жг
ЭД-
ед-
1О-
гн-
. В
лб-
юг
го-
за-
>ж-
са-
ди
ак-
ш-
ра-
ЭЛ-
ЛИ.
Класс — это тип, определяемый пользователем. Язык Си++ пред-
назначен для написания больших программ и проектов. Он со-
держит в себе все основные черты объск гно-ориентированных
языков программирования: наличие объектов и инкапсуляцию
данных, наследование, полиморфизм и абстракцию типов. В даль-
нейшем эти понятия будут раскрыты подробно.
Язык Уьиа! Ваыс 5.0 (УВ5) появился на рынке программных
продуктов в 1997 г. благодаря усилиям специалистов фирмы
М1сго8ой. Обладая всеми свойствами объекгно-ориен тированных
языков, УВ5 хорош еще и тем, что позволяет с легкостью раз-
рабатывать программные продукты для операционный оболоч-
ки ^Ушбо\У8, такие, как утилиты для повседневных нужд, обо-
лочки для уже существующих или создаваемых программных
продуктов и т.д. Необходимо также отмети гь, ч го ХЧзиа! Вахте
является составной частью самых популярных программных
продуктов фирмы МюгохоЛ текстового редактора ХУогб. элек-
тронной таблицы Ехсе1 и базы данных Ассехх.
1.1.2. Выбор языка программирования
Рассматривая предыдущий вопрос, мы уже частично касались
области применения языков программирования. Если, например,
попросить у десяти программистов назвать самый лучший язык
программирования, то скорее всего мы получим десять разных
ответов, ибо такого языка прос то не существует, как нет и само-
го лучшего естественного языка. Теоретически для решения боль-
шинства задач программирования можно использовать любой
язык. Однако на практике оказывается, что написать программу
для конкретной задачи гораздо легче на одних языках, чем на
других. Эго связано с тем, чго в языках программирования спо-
соб выражения тех или иных понятий приспособлен к потребно-
стям конкретного образа мыслей.
Каждый язык программирования имеет свой собственный
набор ключевых слов, состоящий из слов, букв, чисел или дру-
гих символов. Ключевые слова соответствуют конкретным опера-
циям или последовательностям операций, которые должен про-
извести компьютер. Некоторые ключевые слова выполняет] фун-
кцию глаголов, другие — существительных, определений или
знаков препинания. Они связываются друг с другом в соответ-
ствии с синтаксическими правилами, образуя предложения язы-
ка программирования. 11ри выборе наиболее подходящего язы-
ка для решения гой или иной задачи следует учитывать ряд фак-
торов. в том числе степень квалификации программиста и раз-
мер будущей программы. Бейсик сравнительно несложен для изу-
чения и хорошо подходит для разработки коротких и простых
программ. В то же время большие программы на этом языке
могут оказаться неуклюжими и плохо организованными Язык
Паскаль обеспечивает возможность создания больших программ,
поддерживая их строгую логическую структуру. Это качество
языка весьма ценно для начинающих программистов, создаю-
щих серьезные программы, так как приучает их к определенной
дисциплине. Однако для коротких про! рамм Паскаль может ока-
заться излишне громоздким.
Другими важными факторами являются скорость выполне-
ния программы и легкость се сопровождения (т.с. простота ее
последующего изменения, дополнения и отладки в течение всего
периода эксплуатации). Программы на языке Форт предельно
кратки и занимают совсем немного места в памяти. Несколько
ключевых слов этого языка — просто знаки препинания. Поэто-
му программы на Форте работают значительно быстрее, чем про-
граммы на Бейсике, но одновременно это затрудняет их чтение и
сопровождение. Напротив, программы на языке Кобол очень
удобны для сопровождения. Это достигается тем, что, во-первых,
вся программа на этом языке делится на 4 различные секции, каж-
дая из которых содержит определенный тип описаний (назначе-
ние программы: характеристики компьютера, для которого она
написана; тип используемых данных; выполняемые команды).
Во-вторых, синтаксис Кобола моделирует синтаксис предложе-
ний английскою языка.
Рассмо грим пример использования языков программирова-
ния на практике [19]
В 1985 г. в водах Северной Атлантики на глубине более 3 км
медленно продвигался подводный аппарат «Арго». Этот аппа-
рат. имевший длину около 5 м. напоминал секцию строитель-
ных лесов, положенную набок и начиненную аппаратурой: про-
жекторами, эхолотом, видеокамерами. А вверху, на поверхнос-
ти океана, в рубке управления исследовательского судна ВМФ
США «Кнорр» перед видеоэкраном расположились члены фран-
ко-американской научной экспедиции. После 16 дней поисков был
наконец обнаружен океанский лайнер «Титаник», затонувший в
1912 г. и унесший жизни более 1500 человек из 2200 находивших-
ся на борту.
Не последнюю роль в успехе дела сыграла гибкость совре-
менных средств программирования. Комплекс устройств, уста-
новленных на борту «Арго» (сонар, прожекторы и видеокаме-
ры), управлялся несколькими компьютерами, каждый из кото-
рых был запрограммирован на своем языке. Компьютер
подводного аппарата использовал компактный, но гибкий язык
Форт, разработанный первоначально для управления движени-
ем телескопов. Компьютер на борту судна «Кнорр» был запрог-
раммирован на мощном, но малопонятном языке Си. Телемет-
рическая система на обоих концах коаксиального кабеля, связы-
вающего подводное и надводное суда, использовала язык
Ассемблер.
Таким образом, выбор языка программирования обычно
определяется следующими тремя факторами (или одним из них):
• язык должен быть удобен для программист а:
• язык должен быть пригоден для данного компьютера:
• язык должен быть пригоден для решения данной задачи.
Яркий пример тому многообразие языков, использован-
ных в экспедиции по поискам затонувшего «Т итаника».
1.2. Этапы решения задачи
с использованием компьютера
1.2.1. Модели решения функциональных
и вычислительных задач
Формальный подход к определению объектов и систем мате-
риального мира требует ввода в рассмотрение моделей 110]
концептуальных, формальных, математических, алгоритмичес-
ких, программных, позволяющих исследовать существующие и
разрабатывать новые системы. Это определяется гем, что чисто
содержательного описания систем недостаточно для формирова-
ния правильных решений. Последние могут приниматься, толь-
ко если для исходной содержательной теории (концепции) будет
построена соответствующая формальная система, определяющая
поле всех возможных стратегий организации поведения, функ-
ционирования исходной системы, где по некоторым критериям хо,
будут выбираться остальные, предпочтительные или пригодные 1
стратегии. Для этого формальные модели должны отображаться зы
в математические, алгоритмические и программные модели, по- ям
зволяюшие решать указанные задачи но
В компьютерных технологиях перечисленные модели обра- мс
зуют иерархию моделей, между уровнями которой устапавлива- ки
ется цепь отображений. При этом каждая из перечисленных мо- ки
делей — это образ или прообраз соответствующей системы. ви
Рассмотрим идеальную цепь отображения системы в различ- мь
ные модели в схеме компьютеризации, т.е. когда требуется прой • ли
ти путь от наблюдаемого процесса (явления) к программе, кото- ф)
рая в среде ЭВ М позволит воспроизвести данный процесс.
Приняв к рассмотрению некоторую систему, далее в процессе не
исследований необходимо следовать основным требованиям ди- нс
алектики: фс
• всякий объект для изучения должен браться во всем его мно- бс
гообразии и опосредованиях; ал
• объект должен рассматриваться в движении и развитии; мг
• только практика выступает как критерий человеческих знаний. < гр
Первоначально наблюдаемая система фиксируется как систе-
ма определенных концептов (понятий), между которыми уста-
навливаются различные причинно-следственные связи.
При формировании концептуальной модели посредством не-
которого языка (скажем, русского) определяются совокупности
элементов или понятий, из которых состоит система, а также спо- вс
собы их комбинаций. Каждый исследователь должен понимать, тп
что создание правильной концептуальной модели является самым пс
ответственным и трудным этапом в процессе исследования любой ш.
системы. Каждая концепция может быть зафиксирована с различ- к .
ной степенью детализации. Очевидно, что уровень рассмотрения
системы или детализации определяется самим исследователем ис- ва
ходя из решаемой задачи, показателей эффективности и кригери- эт
ев, на основе которых в дальнейшем будут приниматься решения.
Строгий подход к получению истинно научных знаний об ис- ш
следуемых системах требует, чтобы они были представлены в не- Л1
котором формальном виде с помощью таких языковых средств,
в пределах которых можно вести доказательства и рассуждения. нс
Другими словами, речь идет о создании некоторых строгих фор-
мальных систем или формальных моделей, сос гветсгвующих ис- дг
ходным концепциям. Синтез формальной модели можно осуще-
ствлять на некотором формальном языке (Н-язык, язык выска-
зываний) и сопровождать некоторыми I рафичсскими построени-
ями (граф состояний, граф переходов системы и т.п.). Получен-
ной формальной модели могут быть поставлены в соответствие
модели математические. Как известно, множество математичес-
ких моделей (для функциональных задач) образуют аналитичес-
кие модели, в которых показатели эффективности выражаются в
виде формульных зависимостей относительно параметров систе-
мы, и имитационные модели, позволяющие решать задачи моде-
лирования при помощи алгоритмов и программ, имитирующих
функционирование исследуемой сип смы.
Математические модели отображают средствами математики
некоторые процессы, протекающие в системах, и в общем случае
не содержат сведений о том, как должна перерабатываться ин-
формация, чтобы получить результат. Поэтому порядок перера-
ботки информации необходимо определить и представить в виде
алгоритма решения задачи (реализации соответствующей мате-
матической модели), т.е. в виде алгоритмической, а затем про-
граммной модели.
1.2.2. Общая характеристика этапов
решения задачи с использованием ЭВМ
Человечество живет в мире алгоритмов и программ. Например,
все без исключения физиологические процессы — это огромная,
тщательно отлаженная и сложно устроенная «библиотека» программ
поведения организма. Основы алгоритмизации и программирова-
ния фундаментальны и имеют общий характер, приближающий их
к основным законам математики, речи или письма.
В процессе решения задачи с применением компьютера пользо-
ватель самостоятельно или с помощью специалистов проходит ряд
этапов, которые показаны на рис. 1.
На всех этапах подготовки задачи к решению и при ее реше-
нии на ЭВМ необходимо учитывать особенности работы вычис-
лительной техники:
• огромное быстродействие ЭВМ и абсолютную исполнитель-
ность;
• ограничения на объемы памяти, которые могут отводиться
для записи чисел, переменных и т.п.;
Сод ержател ьн ы й
уровень
Математический
уровень
Алгоритмический
уровень
Компьютерный
уровень
Рис. 1. Этапы решения задачи на ЭВМ
нук
ем
льк
мос
нат
етс
• отсутствие у ЭВМ интуиции и чувства здравого смысла;
• способность ЭВМ решать только ту задачу, программу ре-
шения которой ей подготовил человек.
Рассмотрим последовательность прохождения этапов (см. рис.
1) на примере решения простой задачи.
На первом этапе формулируются условия задачи (кон-
цептуальная модель), например, в словесной форме: функция Г(х)
должна получить значение, равное единице, если переменная х боль-
ше нуля, и нуль, если переменная х принимает другие значения.
Для уяснения содержания задачи можно представить ее в гра-
фическом виде — отложить на числовой оси точку нуль и отме-
тить значения переменной х, при которых функция Г(х) прини-
мает значения 0 или 1 (рис. 2).
На втором этапе производится математическая поста-
новка задачи (математическая модель):
• определяются исходные (вводимые) данные и их типы. В
нашем случае к исходным данным относится переменная х, ко-
торая может принимать целые и вещественные (содержащие дроб-
ма.
ма]
ем
слс
лас
дат
и с
каз
ДИЗ
Пр1
реа
Раг
Ргс
Ве<
Рис. 2. Графическая интерпретация условий задачи
ную часть) значения. В качестве типа для переменной х выбира-
ем вещественный, поскольку данный тип включает в себя и це-
лые значения тоже;
• решение задачи описывается в виде аналитических зависи-
мостей. Для нашей задачи:
Г(х) =
1, при х > 0;
0, при х < 0;
• определяются конечные (выводимые) данные и их типы В
нашем случае конечными данными (результатом решения) явля-
ется значение функции Г(х) целого типа.
На третьем этапе осуществляется разработка алгорит-
ма. Алгоритмизация выступает как связующее звено между «до-
машними» этапами решения задачи и непосредственно общени-
ем человека с компьютером. Именно на этом этапе начинаются
сложности у людей, не имеющих специальной подготовки в об-
ласти программирования (поэтому значи гельное внимание при
дальнейшем изложении материала будет уделено умению читать
и составлять алгоритмы). Алгоритм решения нашей задачи по-
казан на рис. 3.
На четвертом этапе решения задачи алгоритм перево-
дится в программу, записанную на языке высокого уровня. Ниже
приводятся программы на языках Ра§са1, С++ и (^Ваыс, которые
реализуют данный алгоритм.
Разса!:
Ргодхат хадасИа;
\7аг х:геа1; Г:хп11едег;
Ведхп
НеасЦх); ИгтЬеЬп Гх=\ х) ;
ГТ х>0 ТИеп 1:=1
Е1зе Г:=0;
Начало
I»
Рис. 3- Алгоритм решения задачи
ЮгпЛеЬп (*!>’, ;
Епд-
•г,;^ >д< г*? МьИЪъЬ
• ► >74’- .го<й .ДОВДЬ
г •. < л Н: • л .*Мр лё'Л- . -
□Ьнйсоту1
С++:
#1Лс1ийе <1оз^геа1п.Ъ>
Vо^(3 т&тп^о1с1) - : о *<!.' '"*•*“ . • ’*
Г1оа1: х; 1гЛ с!п»х;
сои1«их=”<<х<<епб1; ’А.лМ.
Г=(х>0)?1:0;
соиИ«*^=”«^«епд1; . о >
X ► - ♦ • * ♦ » •
СВазхс:
КЕМ гадасИа
28
ЭЕЕ8ЫС X: ПЕЕ1ПТ Г
1ПРИТ X: РРТ1ТГ "Х-”, X
1Г Х>0 ТНЕИ Е=1 ЕЪ8Е Е=0
РК1ЫТ ‘*Е=’\Е
ЕЫО
На пятом этапе программа вводится в память компью-
тера, осуществляются ее отладка и решение.
В процентном отношении время, затрачиваемое пользовате-
лем на выполнение каждого из этапов при решении задачи с по-
мощью ЭВМ (на выполнение всех этапов положим 100%), рас-
пределяется примерно так, как показано на диаграмме (рис. 4).
Рис. 4. Распределение времени на решение задачи
Этапы
Из диаграммы видно, что больше всего времени, как прави-
ло, требуется на выполнение этапа отладки и решения. Это свя-
зано с тем, что здесь устраняются ошибки, допущенные пользо-
вателем на всех предыдущих этапах решения задачи. Нс очень
страшно, если это ошибки синтаксиса или семантики, они доста-
точно легко устранимы. Гораздо хуже наличие алгоритмичес-
ких ошибок, выявить которые значительно труднее, а для их ус-
транения иногда прошс разработать новый алгоритм и написа гь
новую программу, чем исправить существующую.
Основы алгоритмизации
2.1. Общие сведения об алгоритмах
2.1.1. Свойства алгоритмов
и способы их задания
Алгоритм это точное предписание, определяющее вычис-
лительный процесс, ведущий о г варьируемых исходных данных
к искомому результату.
Само слово «алгоритм» происходит от латинской формы напи-
сания имени великого математика IX века Аль Хорезми
(МиЬатшес! 1Ьп Мша а! Ногеытп), который сформулировал пра-
вила выполнения арифметических действий. 11ервоначально под ал-
горитмом и понимали только правила выполнения четырех ариф-
метических действий над мно! означными числами, а в дальнейшем
это понятие стало использоваться для обозначения последователь-
ности действий, приводящих к решению поставленной задачи. Сей-
час с помощью алгоритмов решаются не только вычислительные,
но и многие другие задачи.
Качество алгоритма определяется его свойствами (характе-
ристиками). К основным свойствам алгоритма относятся следу-
ющие.
I. Массовость. Предполагается, что алгоритм может быть
пригоден для решения всех задач данного типа. Например, алго-
ритм для решения системы линейных алгебраических уравнений
должен быть применим к системе, состоящей из произвольного
числа уравнений.
2. Результативность. Это свойство означает, что алгоритм
должен приводить к получению результата за конечное число
шагов.
3. Определенность. Предписания, входящие в алгоритм, дол-
жны быть точными и понятными. Эта характеристика обеспечи-
вает однозначность результата вычислительного процесса при
заданных исходных данных.
ал! с
пы,
не в
НИС.
бы г
лож
I
гор1
ную
ЯЗЫ1
пре;
ке з;
писг
вып-
на С
обж
мож
перс
г-
(ПС
наш
про.
нос I
си. I
схел
ляеп
пор
ЛИЧ]
ния
фиг
грае
19.7
И С1<
НИЯ
ОПИ
4. Дискретность. Описываемый алгоритмом процесс и сам
алгоритм могут быть разбиты на отдельные элементарные эта-
пы, возможность выполнения которых на ЭВМ у пользователя
нс вызывает сомнений. Можно сказать, что алгоритм это зада-
ние, которое нужно исполнить. Утверждения и вопросы могут
быть использованы в алгоритмах только как подчиненные пред-
ложения в составе предписания.
Наиболее простой и универсальной формой предел авления ал-
горитма является словесное описание, которое содержит записан-
ную на естественном языке (точнее, на подмножестве естественного
языка) последовательность предписаний. Выполнение алгоритма
предполагается в естественной последовательности, то есть в поряд-
ке записи. При необходимости изменить порядок выполнения пред-
писаний в явной форме указывается, какое предписание надлежит
выполнить следующим. Если необходимо такой алгоритм записать
на бланке, то рекомендуется придерживаться следующих правил,
облегчающих переход от алгоритме! к программе:
1) каждое предписание записывается с новой строки:
2) после предписания ставится точка с запятой;
3) если предписание нс поместилось в одной строке, то его
можно продолжить на следующей строке без каких-либо знаков
переноса.
Такую словесную запись алгоритма называют псевдокодом
(ПСК), подчеркивая этим ее промежуточное положение между
нашей естественной речью и понятным для компьютера языком
программ. Достоинством псевдокодов является их универсаль-
ность, а к недостаткам можно отнести малую наглядность запи-
си. Наглядностью обладает другая форма записи графическая
схема алгоритмов (ГСА). или блок-схема. Такая схема представ-
ляет собой графический документ, ко торый даст представление о
порядке работы алгоритма. Здесь предписания имеют вид раз-
личных геометрических фигур, а последоват ельност ь выполне-
ния операций отображается с помощью линий, соединяющих эти
фигуры. Условные обозначения, применяемые при составлении
граф-схем алгоритмов, и правила выполнения определены в ГОСТ
19.701-90 (ИСО 5807-85) «Схемы алгоритмов, программ, данных
и систем. Условные обозначения и правила выполнения».
В табл. 1 приведены наименования, обозначения и определе-
ния отображаемых функций для символов, используемых при
описании программ и алгоритмов.
Описание символов, используемых в ГСА
Наименование Обозначение Функции
Данные / / Символ отображает данные, носитель данных не определен. Используется для обозначения опера- ций ввода и вывода данных
Процесс — Символ отображает функцию обра- ботки данных любого вида (выполне- ние определенной операции или группы операций, приводящее к изменению значения, формы или размещения информации). Используется для обозначения опера- ций присваивания
Предопределен- ный процесс Символ отображает предопределен- ный процесс, состоящий из одной или нескольких операций или шагов, которые определены в другом месте (в подпрограмме, модуле). Используется для обозначения неэлементарных блоков
Подготовка 1 Символ отображаем модификацию команды или группы команд с целью воздействия на некоторую последую- щую функцию (установка переключа- теля, модификация индексного регистра или инициализация програм- мы). Может быть использован для обозначения заголовка цикла
। Решение С имвол отображает решение или функцию переключательного типа, имеющую один вход и ряд альтерна- тивных выходов, один и только один из ко торых может быть активизиро- ван после вычисления условий, определенных внутри этого символа. Соответствующие результаты вычис- ления могут быть записаны по соседству с линиями, отображающими эти пути. Используется для обозначения опера- тора условного перехода или операто- ра варианта
Наименование Обозначение Функции
Граница цикла Символ, состоящий из двух частей, отображает начало и конец цикла. Обе части символа имеют один и тот же идентификатор. Условия для инициализации, приращения, завер- шения и т.д. помещаются внутри символа в начале или в конце в зависимости от тина цикла
1 * • * 1
Соединитель Символ отображает выход в часть схемы и вход из другой части этой схемы и используется для обрыва линии и продолжения ее в другом месте. Соответствующие символы- соединители должны содержать одно и то же уникальное обозначение
Терминатор Символ отображает выход во внеш- нюю среду и вход из внешней среды. Используется для обозначения начала или окончания алгоритма
Линия Символ отображает поток данных или управления. Направления справа налево и снизу вверх обозначаются стрелками. Используется для соедине- ния символов в алгоритме
Параллельные действия Символ отображает синхронизацию двух или более параллельных опера- ций
Пунктирная линия Символ отображает альтернативную связь между двумя или более символа- ми. Кроме того, символ используется для обведения аннотированною участка при записи комментариев
Комментарий — — — — — — — Символ используется для добавления описательных комментариев или по- яснительных записей с целью объясне- ний или примечаний. Пунктирные линии в символе комментария связаны с соответствующим символом и пи могут обводить группу символов. Текст ком- ментариев или примечаний должен быть помещен около ограничивающей фигуры
2—987
Символы могут быть вычерчены в любой ориентации, но
предпочтительной является горизонтальная ориентация. Внутрь
символа помещают обозначения или описания операций. На-
правления линий связи слева направо и сверху вниз считают-
ся стандартными, и линии связи изображаются без стрелок, в про-
тивоположном случае — со стрелками. В операционные блоки
(процесс, ввод-вывод и подпрограмма) входит и из них исходит
только одна линия связи. В блок проверки условий (ветвление)
входит одна, а выходит не менее двух линий, около которых за-
писываются результаты проверки условий. Из начальной вер-
шины исходит одна линия связи, в конечную вершину также вхо-
дит одна линия связи. Линии могут соединят ься одна с другой,
но не могут разветвляться. Символы ГСА могут быть отмечены
идентификаторами или порядковыми номерами. Идентификатор
представляет собой букву или букву с цифрой и должен распо-
лагаться слева над символом.
Внутри соединителей ставятся номера (координа гы) блоков,
к которым или от которых идут линии связи. Вместо номера (ко-
ординат) может быть поставлен некоторый (один и тот же в обо-
их соединениях) идентификатор (рис. 5).
П
полу1
щесп
Д
цу зн
Ше
Рис. 5. Применение соединений
Недостатком графических схем алгоритмов является громоз-
дкость. Для решения специальных задач, например проектиро-
вания вычислительных устройств, применяются другие способы
задания алгоритмов, такие, как логические (операторные) и мат-
ричные схемы. Их достоинствами являются компактность и про-
стота дальнейшей формализации, а недостатком — малая нагляд-
ность.
Л
хран:
роль
ЦЫ II
нами
мети'
няты
значс
Р
имит
виде
Н
ная с
Ь=4,
ние 7
значе
на оС
месте
П
женн
НОСТ1
мост
2.1.2. Исполнение алгоритма
Практическая реализация всех предусмотренных действий по
получению результате! для конкретных значений аргументов осу-
ществляется в процессе исполнения алгорит ма.
Для моделирования работы ЭВМ обычно составляют табли-
цу значений, заголовок которой имеет следующий вид (рис. 6):
При исполнении алгоритма компьютером значения величин
хранятся в его памяти. При выполнении алгоритма человеком
роль памяти играет таблица значений переменных. Такие табли-
цы широко используются, поскольку они помогают понять ди-
намику выполнения алгоритмов различных типов. Следует от-
метить, что в процессе работы значения переменных могу г изме-
няться, однако в памяти остается только последнее вычисленное
значение.
Рассмотрим порядок работы с таблицей значений на примере
имитации выполнения простого алгоритма, представленного в
виде псевдокодов и I раф-схемы на рис. 7.
На каждом шаге выполнения алгоритма заполняется очеред-
ная строка таблицы (табл. 2). После ввода исходных данных а=5,
Ь=4, с=1 и проверки условия а>Ъ переменная х принимает значе-
ние 7, а по гом меняет его на 8. На печат ь выводится последнее
значение переменной, так как предыдущее стирается (так же как и
на обычном магнитофоне при повторной записи на одно и то же
место).
При работе с большими алгоритмами пользоваться предло-
женной таблицей становится неудобно. Таблица теряет нагляд-
ность, возрастает трудоемкость ее заполнения из-за необходи-
мости многократного переписывания одних и тех же значений
1. Начало;
2. Список данных:
а, Ь с — целый;
х — вещественный;
3. Ввод (а, Ь, с);
4. Вывод (а, Ь, с);
5. Если (а>Ь) То
6. х:=2а - Зс;
Иначе
7. х:=2Ь + 3 с;
Конец — Если 5;
8. х:=х + с;
9. Вывод (х);
10. Конец.
Исходные данные: 5, 4, 1
Рис. 7. Пример алгоритма
переменных. В этом случае целесообразно использовать таблицу,
содержащую только три столбца: «Память», «Условие», «Вывод».
Таблица 2
Таблица значений
Шаги алгоритма Переменные Условия Вывод
а Ь С X
3 5 4 1
4 5 4 1 541
5 5 4 1 5>4да
6 5 4 1 7
7 5 4 I 8
8 5 4 1 8 8
Заполнение таблицы проводится последовательно, по мере
имитации выполнения алгоритм^! в компьютере.
1. При появлении в алгоритме имени переменной оно запи-
сывается в столбец «Память», имитируя выделение в ЭВМ соот-
ветствующей ячейки памяти с таким же именем.
2. Первое значение, которое получит переменная, записыва-
ется в столбец «Память» в выделенную для нее строку. Напри-
мер, если переменная А получит значение 5, то в строке А следу-
ет записать: А=5.
3. Каждое новое значение переменной записывается в строке
с ее именем через запятую. Например, если переменная А полу-
чит новое значение 7, то в строке А запись будет иметь вид: А~5, 7.
Следует помнить, что в памяти компьютера новое значение пере-
менной будет записано на место старого.
4. Столбцы «Условие» и «Вывод» заполняются по мере появ-
ления соответствующих предписаний в алгоритме.
Если использовать предложенную форму, то таблица значе-
ний (см. табл. 2) будет иметь вид, показанный в чабл. 3.
шицу,
1ВОД».
ица 2
вод
И
*
Таблица 3
Таблица значений
11амять Условие Вывод
ОО Г'' II II II II -О о X 5 > 4 да 54 1 8
Изложенной выше методикой пользуются на алгоритмичес-
ком уровне (см. рис. 1) решения задачи с помощью ЭВМ —
для проверки соответствия разработанного алгоритма задан-
ным требованиям. Ее можно рекомендовать и для поиска оши-
бок в уже существующих алгоритмах, а также для анализа
алгоритмов и программ, на которые документация имеется не
в полном объеме.
2.2. Понятие о технологии тес
программирования на;1
пул
2.2.1. Принципы структурной сга;
алгоритмизации бол
рьп
Впервые понятие «про! раммистская деятельность» ввели ин- ния
женсры, обслуживающие цифровой компьютер «Марк-1» в Гар- зов
вардском университете (1944 г.). В то время практически все сфс
было впервые. При написании программ для вычисления ар- наз
тиллерийских баллистических таблиц впервые стали применять нсв
многократно используемые последовательности — нодпрограм- ма>
мы. Устранение неисправности, вызванной попаданием мотылька $О1<
(Ьи§ — насекомое) в электрические цепи машины, привело к ле]
появлению понятия «отладка» (деЬи§^ш§), которое использу-
ется сейчас для обозначения поиска неисправностей в компью- ТрС
тере и его программном обеспечении Впервые была предложе-
на программа-компоновщик как вспомогательное средство для оп^
создания других программ из нескольких различных подпрог- ток
рамм ... и т.д. ся !
Появление языков программирования высокого уровня дало
мощный импульс развитию программного обеспечения. Одна- ло
ко первоначально нс было выработано подходов (методоло-
гий) к программированию, использование которых позволило вол
бы уменьшить вероят ность пропуска ошибок в программах, ни$
упрощало бы их понимание, облегчило бы модификацию про- ми
грамм и их сопровождение. Значительный вклад в теорию про- как
граммирования внес научный сотрудник фирмы «Барроуз»
(Виггоп^Ьз) голландский ученый Эдсгер Дейкстра (ЕЛУ О1]кз1га) цш
[19]. В 1968 г. в работе под названием «Заметки по структурно-
му программированию» он доказал, что большинство программ
неоправданно сложны из-за отсутствия в них четкой математи- алг
ческой структуры. По мнению Дейкстры, использование трех
типов управляющих структур — простой последовательности,
альтернативы и повт орения — позволило бы программистам
обходиться без операторов безусловного перехода (§о1о) и тем
самым преодолеть сложность и запутанность программ, добит ься ли«.
простоты их модификации. Проверку программ Дейкстра пред-
ложил производить математическими методами, а не просто
И ИН-
Гар-
и все
я ар-
енять
грам-
>глька
гло к
шьзу-
шыо-
ложе-
о для
прог-
дало
Эдна-
цоло-
>лило
имах,
про-
> про-
эоуз»
кзГга)
урно-
рамм
мати-
трсх
юсти,
ютам
и тем
иться
пред-
эосто
тестированием, которое, ио его мнению, может показать лишь
наличие ошибок, а не их отсутствие.
Сегодня структурное программирование является самой по-
пулярной технологией программирования. Эта технология пред-
ставляет собой процесс пошагового разбиения алгоритма на все
более мелкие части с целью получить такие элементы, для кото-
рых можно легко написать конкретные предписания (высказыва-
ния). Идея структурного программирования является формали-
зованным выражением принципов рационального мышления,
сформулированных Рене Декартом (Репе БесаП) более 350 лет
назад. Под конкретными предписаниями обычно понимают ли-
нейные, разветвляющиеся и циклические структуры. В алгорит-
мах, разработанных таким методом, как правило, меньше оши-
бок, и верифицировать алгоритм (доказывать его правильность)
легче.
В основу структурной алгоритмизации положены следующие
требования:
• программа должна состоять из мелких шагов. Размер шага
определяется количеством решений, принимаемых программис-
тски на каждом шаге. Таким образом, сложная задача разбивает-
ся на достаточно простые, легко воспринимаемые части;
• логика программы должна опираться на минимальное чис-
ло достаточно простых базовых управляющих структур.
По своей сути структурное программирование является
воплощением принципов системного подхода к процессу созда-
ния и эксплуатации математического обеспечения ЭВМ. Други-
ми словами, алгоритм надо писать так. как мы его понимаем и
как хотели бы обьяснить его другим людям.
Структурная алгоритмизация основывается тга двух прин-
ципах:
• последовательная детализация алгоритма «сверху вниз»:
• ограниченность базового набора структур для построения
алгоритма любого уровня сложности.
Можно перечислить основные свойства и достоинства струк-
турного программирования:
• возможность преодоления барьера сложности программ;
• возможность демонстрации правильности программ на раз-
личных этапах решения задач:
• наглядность программ;
• простота модификации (внесения изменений).
Составление алгоритма с применением ст руктурной алгорит-
мизации осуществляется следующим образом. На первом шаге
решения задачи считаем, что перед нами самая совершенная ЭВМ
(например, ЭВМ пятого поколения), которая уже «все умеет и
все знает». Поэтому задача для нее записывается на естественном
для данной предметной области я тыке. Например, нам необхо-
димо по результатам испытаний выбраз ь оптимальные парамет-
ры двигательной установки ракеты. Тогда первоначально алго-
ритм можно записат ь так.
1. Начало;
2. Список данных: данные: тип; ... ; данные: тип;
3. Ввод (исходные данные);
4. Вывод (исходные данные);
5. Обработка результатов испытаний;
6. Оценка надежности двигательной установки;
7. Выбор оптимальных параметров;
8. Вывод (результат);
9. Конец.
Затем следует определить, какие из использованных нами кон-
струкций «понятны» ЭВМ, имеющейся в нашем распоряжении. Дело
в том, что алгоритм может быть реализован в ЭВМ, если он содер-
жи! только элементарные предписания и структуры, входящие в
базовый набор (о них речь пойдет ниже). Элементарными, т.е. не
требующими детализации, мы будем считать следующие предписа-
ния или операции: Начало; Конец; Список данных; Ввод; Вывод;
вычислительные операции, реализуемые операторами присваива-
ния (:-). Сложные конструкции, которые ЭВМ не может реализо-
вать сразу, разбиваются на более простые. Например, предписание
5 для рассматриваемого алгоритма может быть записано так:
5.1. Начало 5;
5.2. ... Операции, раскрывающие смысл обработки
результатов испытаний ... ;
5 .М . Конец 5 .
Количество шагов при последовательной детализации не
ограничивается. Детализация заканчивается, когда конструкции
алгоритма будут содержать только элементарные предписания и
структуры, входящие в базовый набор.
Обратите внимание на то, что предписания 1—4 и 8—9, как
правило, присутствуют в каждом алгоритме, разрабатываемом
методом структурной алгоритмизации.
2.2.2. Базовый набор структур
Теория структурного программирования доказывает, что ал-
горитм любой степени сложности можно построить с помощью
основного базового набора структур:
• последовательной (линейной) структуры (рис. 8, л);
• ветвящейся структуры (рис. 8, б);
• циклической структуры (рис. 8, в).
Рис. 8. Базовый набор структур’
а — последовательная (линейная) структура;
б — ветвящаяся структура; в — циклическая структура
Поскольку каждая типовая структура имеет 1 вход и 1 выход,
то любой операционный блок может быть, в свою очередь, пред-
ставлен в виде последовательности любых базовых структур
(в общем случае с любой глубиной вложения). Эта возможность
и обеспечивает в конечном счете построение алгоритмов любой
степени сложности только из основных базовых струк гур.
2.2.3. Линейные и разветвляющиеся
структуры
Наиболее простыми для понимания и использования явля-
ются линейные структуры. Первоначально с их помощью мож-
но описать любой вычислительный процесс. Предписания, кото-
рые обычно содержит такой алгоритм, представлены на рис. 9.
Предписание «Список данных» содержит сведения об именах
и типах данных, обрабатываемых в этом алгоритме. Предписа-
ние «Ввод (исходные данные)» определяет, какие исходные дан-
Список данных
данные — тип;
Вывод
(исходные данные)
5 1
Ввод
(исходные данные)
Обработка данных
с целью получения
требуемого результата
Рис. 9. Типовой алгоритм вычислительного процесса
угодх
шени
присг
нениз
ние г
ляетс
следе
ние >
роват
бавл!
прио1
Л
лиза1
НИЯ 1
пред]
нейш
вает
ТОрО!
Ч
ветвя
В
мент
или г
ные и в каком порядке должны быть введены в ЭВМ. Предписа-
ние «Вывод (исходные данные)» позволяет проконтролировать
правильность ввода информации. Предписания 5 и 6 позволяют
получить требуемые результаты и выдать их пользователю. Рас-
сматриваемый алгоритм относится к линейным алгоритмам.
Линейным называется алгоритм (фрагмент алгоритма, см. рис.
8/0, в котором отдельные предписания выполняются в естествен-
ном порядке (в порядке записи) независимо от значений исход-
ных данных и промежуточных результатов.
Линейной, например, является последовательность вычисле-
ний по какой-либо формуле с помощью карманного калькуля-
тора. Более подробно следует рассмотреть запись математичес-
ких формул в виде конструкции Х:=А; которая читается следую-
щим образом: «Переменной X присвоить значение, равное А».
В этой формуле X — переменная; А может быть любым, сколь
Если ।
ОП(
Инач<
ОГК
Конек
42
угодно сложным математическим выражением. В процессе ре-
шения задачи на ЭВМ выражение А вычисляется и ею значение
присваивается содержимому ячейки памяти, отведенной для хра-
нения переменной X. При этом переменная X теряет свое значе-
ние и приобретает новое. Таким образом, символ «:=» употреб-
ляется при изображении алгоритмов в значении «присвоить». Как
следствие этого, бессмысленное с точки зрения алгебры выраже-
ние Х:= Х+5; является широко распространенным в программи-
ровании и означает, что к текущему значению переменной X до-
бавляется число 5, после чего X теряет свое старое значение и
приобретает новое, которое на 5 больше предыдущего.
Линейные фрагменты используются на первых этапах дета-
лизации задачи. Однако только в редких случаях все предписа-
ния такого алгоритма являются элементарными. Так, например,
предписание 5 на рис. 9 не является элементарным и требует даль-
нейшей детализации. Поэтому назначение блока 5 предусматри-
вает сверху свободное место для записи координат блока, в ко-
тором будет раскрываться смысл детализируемого участка.
Часто для дальнейшей детализации алгоритма используются
ветвящиеся структуры (рис. 10).
Ветвящимся (разветвляющимся) называется алгоритм (фраг-
мент алгоритма), в котором в зависимости от исходных данных
или промежуточных результатов вычисления реализуется по од-
Если (условие) То
операторы ветви 1;
Иначе
операторы ветви 2;
Конец-Если;
Если (условие) То
операторы ветви;
Конец-Если,
Если (условие) То
Иначе
операторы ветви;
Конец-Если;
Рис. 10. Ветвящаяся структура: а стандартная схема;
б, в — частные случаи ветвления
ному из нескольких заранее предусмотренных (возможных) на-
правлений. Такие направления называются ветвями вычислений.
Каждая ветвь может быть любой степени сложности, а может во-
обще не содержать предписаний (как это показано на рис. 10, б, в).
т.е. быть «вырожденной». Выбор той или иной вегви осуществляется
в зависимости от результата проверки условия. В каждом конкрет-
ном случае алгоритм реализуется только по одной ветви, а выполне-
ние остальных исключается. В схемах, приведенных па рис. 10, поло-
жительный исход проверки условия обозначен знаком «+» (да, 1гие3
истина, «1»), а отрицательный — знаком «-» (нет, Гаке, ложь, «0»).
При составлении алгоритма в виде псевдокодов линии связи
заменяют ся словами «Идти» или «11ерей ги» с указанием номера
предписания (оператора), которое должно выполняться на следу-
ющем шаге алгоритма. Горизонтальная линия, объединяющая
ветви «+» и « », в псевдокодах имеет аналог «Конец-Если». После
фразы «Конец-Если» можно указать номер псевдокода, в котором
записано проверяемое условие. Например, после пункт а 7 в алго-
ритме, представленном на рис. 7, указывается: «Конец-Если 5».
Использование данной конструкции при записи алгоритма в
псевдокодах позволяет легко определить место окончания раз-
ветвления (продолжения основного алгоритма).
Па практике часто встречаются задачи, когда нужно выбрать
не одно из двух, а одно и? трех или более предписаний. Такую
структуру называют выбором варианта, ее также можно постро-
ить из линейных и ветвящихся структур, как показано на рис. 11.
В такой структуре (см. рис. 11) сначала вычисляется значение
выражения, стоящего в операторе присваивания В зависимости
от значения переменной 1 за тем будет выбран либо 1-й, либо 2-й,
либо 3-й. либо 4-й оператор. Число выбираемых операторов в
такой структуре нс ограничено.
В качестве примера использования ветвлений рассмотрим
составление алгоритма для вычисления функции Г в зависимости
от конкретных значений х, а. Ь:
О ।
х + а, при х< 2.5;
х —а-Ь, при 2.5 <х
<10;
х-Ь, прих>10.
Первое приближение ал) орит ма будет иметь вид, показанный
на рис. 12.
(х) на-
чений.
кетво-
б, в)9
ляегся
нкрет-
полне-
, поло-
а, йие,
«О»).
связи
омера
следу-
ющая
После
тором
> алго-
I 5».
1тма в
я раз-
орять
Гакую
остро-
ис. 11.
1чение
мости
>о 2-й,
>ров в
Рис. 11. Выбор варианта: а — структура выбора варианта;
б, е—условное обозначение
Список данных
Рис. 12. Первый этап составления алгоритма
х, а, Ь, Г— вещественный
этрим
мости
1ННЫЙ
Анализ этого алгоритма показывает, что все его блоки, кро-
ме блока 5, являются элементарными. Возможный вариант даль-
нейшей детализации блока 5 представлен на рис. 13. Все блоки
второго этапа детализации являются элементарными, поэтому со-
ставление алгоритма практически закончено.
ЛИШЬ!
кратш
Сч
орган]
задач
Ци
некотс
гократ
в прог
грамм
кие ал
В :
разли*
жения
цикл с
Ло
занног
Те:
степей
5.1
Рис. 13. Второй этап составления алгоритма
На заключительном этапе производится сборка алгоритма, । Г
т.е. содержимое рис. 13 помещается на рис. 12 вместо блока 5.
Данный этап здесь не показан, при желании можно выполнить
его самостоятельно.
2.3. Организация циклических
вычислительных процессов
Реализация на ЭВМ линейных и разветвляющихся программ
не дает большого выигрыша во времени по сравнению, напри-
мер, с использованием простого калькулятора. Настоящие пре- Рис
имущества вычислительной машины становятся очевидными
и, кро-
г даль-
блоки
эму со-
лишь при решении тех задач, где возникает необходимость много-
кратного повторения одних и тех же фрагментов алгори гмов.
Считается, что если бы в программах не было возможности
организовать циклы, то применять ЭВМ для решения многих
задач не имело бы смысла.
Циклическими называются алгоритмы, у которых выполнение
некоторых операторов (групп операторов) осуществляется мно-
гократно с одними и теми же или модифицированными данными.
Циклические алгоритмы находят самое широкое применение
в программировании, так как при этом человек составляет про-
грамму один раз, а ЭВМ выполняет ее многократно. Цикличес-
кие алгоритмы часто называют циклами.
В зависимости от способа организации числа повторений
различают три типа циклов: цикл с заданным условием продол-
жения работы; цикл с заданным условием окончания работы и
цикл с заданным числом повторений.
2.3.1. Цикл с заданным условием
продолжения работы (цикл-ПОКА)
Логика работ ы такой структуры описывается схемой, пока-
занной на рис. 14, а.
Тело никла может включать в себя группу операторов любой
степени сложности. При выполнении условия продолжения ра-
ритма,
юка 5.
элнить
Цикл-ПОКА (условие);
операторы тела цикла;
Конец-цикла;
Цикл-ПОКА
(условие)
I
Тело цикла
I
Конец-цикла
I
>грамм
напри-
ю пре-
дными
Рис. 14. Структура цикл-ПОКА' а — развернутая схема цикла;
б — запись в псевдокодах: в — компактная схема цикла
боты выполняется тело цикла; если же условие не выполняется,
то работа циклической структуры заканчивается и начинает вы-
полняться следующая структура основного алгоритма.
Рассмотрим применение циклической структуры этого типа
на простом примере: составить алгоритм печати таблицы значе-
ний х, х-, 81п(х) и 1/х при изменениях х от 1 с шагом 0,1 , пока
выполняется условие х<10.
Составим алгоритм в виде псевдокодов:
1. Начало;
2. Список данных:
х, ^1, €2, ГЗ — вещественный;
3 . х:=1;
4. Цикл-ПОКА (х < 10);
5. С1:=х';
Т2:=51п(х);
Г3:=1/х;
6. Вывод(х, 1:1, 1:2, ГЗ) ;
7. х:=х+0.1;
8. Конец-цикла 4;
9. Конец.
Здесь тело цикла содержит вычислительные операции, ввод
очередной строки таблицы и модификацию значения х. Графи-
ческую схему этого алгоритма вам предлагается составить само-
стоятельно.
2.3.2. Цикл с заданным условием
окончания работы (цикл-ДО)
Структура цикл-ПОКА предусматривает вариант, ко да тело
цикла не выполняется ни разу. Такое возможно, если условие,
стоящее в начале цикла, сразу же нс выполняется. Когда на прак-
тике возникает необходимость использовать структуру, у кото-
рой тело цикла выполняется хотя бы один раз, то в этом случае
применяется структура цикла, приведенная на рис. 15.
С помощью такой структуры обычно составляют алгорит-
мы итерационных вычислительных процессов, т.е. процессов, в
которых для определения последующих значений переменной
используется ее предыдущее значение. Итерационный процесс
положен, например, в основу метода последовательных при-
ближений.
зяется,
1ет вы-
о типа
значе-
, пока
Цикл-ДО (условие);
операторы тела цикла;
Конец-цикла;
Цикл-ДО
(условие)
Тело цикла
Конец-цикла
б
в
Рис. 15. Структура цикл-ДО: а — развернутая схема цикла;
б — запись в псевдокодах; в — компактная схема цикла
[, ввод
"рафи-
. само-
.а тело
ловие,
прак-
кото-
случае
горит-
х?ов, в
[енной
роцесс
с при-
Выход из конструкции цикл-ДО осуществляется по дости-
жении заданной точности или по какому-либо другому при-
знаку.
Рассмотрим использование циклической структуры цикл-ДО
на простом примере: разработать алгоритм, позволяющий най-
ти и вывести на печать наибольшее целое положительное число
х, удовлетворяющее условию: 0.7 • е -150 х < 12 5 -
Составим алгоритм в виде псевдокодов.
1. Начало;
2. Список данных:
х — целый;
3. х:=1;
4. Цикл-ДО (0.7е - 150 > 12.5);
5. х:=х+1;
6. Конец-цикла 4;
7. х:=х-1;
8. Вывод(х);
9. Конец.
Здесь тело цикла содержит модификацию числа х. Графичес-
кую схему этого ал1 оритма вам предлагается составить самосто-
ятельно.
2.3.3. Цикл с заданным числом повторении
Рассмотренные типы циклических структур имеют один не-
достаток: при ошибочном задании исходных данных может про-
изойти зацикливание, т.е. возникает неприятная ситуация, когда
происходит бесконечное повторение операторов, входящих в тело
цикла. В этом случае приходится принудительно завершать ра-
боту программы, иногда это связано с потерей несохраненных
данных и самой программы.
В практических инженерных задачах обычно известны началь-
ные значения изменяемых величин, закон изменения и конечное
число повторений. Переменная, изменение которой организует-
ся в ходе реализации цикла, называется параметром цикла или
управляющей переменной. Алгоритм работы цикла с заданным чис-
лом повторений (иногда его называют циклом с параметром)
приведен на рис. 16.
Предварительные вычисления,
присваивание параметру
начального значения
Проверка условия окончания
цикла
Расчеты при текущем значении
параметра цикла
Изменение параметра цикла по
заданному закону и переход к
блоку 2
1
нуге
ма у
наш
В пс
Цик,
до :
Кон;
1
писг
Ком
зада
тург
1
на г
81П(>
услс
(
1
2 .
3 .
4 .
Рис. 16. Развернутая схема цикла с заданным числом повторений
Следует подчеркнуть, что цикл с заданным числом повторений
представляет собой соединение линейной структуры (начало цикла),
структуры цикл-ПОКА (условие в нем заменено на противополож-
ное) и снова линейной (последовательной) структуры в теле цикла.
Прочитать этот алгоритм можно следующим образом: «Ме-
няя параметр от начального значения до конечного значения,
повторять тело цикла».
5.
6.
7.
(
дач<
стру
алге
лосг
зада
мот
ращ
>
рам(
«Гр;
шн не-
?т про-
, когда
I в тело
ать ра-
тенных
гачаль-
нечиое
шзует-
7/7 ИЛИ
ш пиа-
стром)
ления,
ачении
по
к
лож-
«Ме-
Алгоритм, приведенный на рис. 16, принято называть развер-
нутой схемой цикла с заданным числом повторений. Такая схе-
ма удобна для анализа алгоритма и поиска ошибок. Однако при
написании алгоритма можно использовать и компактную запись.
В псевдокодах она выглядит так:
Цикл по параметр от начальное значение
ло конечное значение шаг приращение;
операторы тела цикла;
Конец-цикла.
Необходимо подчеркнуть, что развернутая и компактная за-
писи после реализации в машине дают один и тот же результат.
Компактная запись менее громоздка за счет того, что в ней не
задаются в явном виде связи между отдельными элемент ами струк-
туры.
Рассмотрим использование циклической структуры этого типа
на примере: составить алгоритм печати таблицы значений х. х2,
8ш(х) и 1/х при изменениях х от 1 с шагом 0,1 . пока выполняется
условие х < 10.
Составим алгоритм в виде псевдокодов:
1. Начало;
2. Список данных:
х, 11, 12, О— вещественный;
3. Цикл по х от 1 до 10 шаг 0.1;
4. Г1:=х2;
12:-згп(х);
13:=1/х;
5. Вывод(х, 11, 12, 13);
6. Конец-цикла 3;
7. Конец.
Отметим, что алгоритм состоит из 7 пунктов. Та же самая за-
дача была решена в подразд. 2.3.1, но там в качестве циклической
структуры для построения алгоритма использовался цикл-ПОКА,
алгоритм состоял из 9 пунктов. Сокращение алгоритма оказа-
лось возможным за счет использования в нашем случае цик та с
заданным числом повторений, в структуре которого уже предус-
мотрены присваивание начального значения параметру и при-
ращение параметра.
Для изображения компактной графической схемы цикла с па-
раметром могут быть использованы символы «Подготовка» или
«Г раница цикла» (см. табл. 1), как показано на рис. 17.
срав1
числ<
ми (г
С
го ус
а л го]
ЦИКЛ]
пакт!
а
Рис. 17. Компактная запись цикла с параметром:
а — с использованием символа ««Подготовка»; б — с использованием
символа «Граница цикла»; 1 — параметр цикла; 1и— начальное
значение параметра; 1к — конечное значение параметра;
— приращение (шаг)
раме
Б ко]
I (см. I
ЛИЗ и
лров<
в
Если величина шага в цикле с пара метром равна единице,
то в заголовке цикла шаг можно не указывать. Приведем для
ма, з;
1. н
а
Рис. 18. Развернутая схема цикла с заданным числом повторений:
а — с возрастающим параметром; б — с убывающим параметром
3.
4.
5.
6.
7. К
Р
в тас
ОТ’н
' Д|*
та
кла
ванием
люе
[инице,
ем для
ений:
ггром
сравнения развернутые графические схемы циклов с заданным
числом повторений с возрастающим и убывающим параметра-
ми (рис. 18).
Схемы отличаются знаками в блоке проверяемого логическо-
го условия и в блоке изменения параметра цикла.
2.3.4. Исполнение циклических структур
При работе с технической литературой, а также при отладке
алгоритмов и программ необходимо уметь правильно читать
циклические операторы. Сложность состоит в том, что при ком-
пактной записи, которая чаще всего используется в технической
литературе, проверка условия окончания цикла и изменение па-
раметра цикла с заданным числом повторений не указаны явно.
В компактной форме могут быть заданы и другие типы циклов
(см. подразд. 2.3.1, 2.3.2 — цикл-ПОКА, цикл-ДО), поэтому ана-
лиз и проверку исполнения циклических структур рекомендуется
проводить по развернутой схеме алгоритма.
В качестве примера рассмотрим анализ циклическо) о ал] орит -
ма, записанного в виде псевдокодов:
1. Начало;
2. Список данных:
х, 1:1 — целый;
3. Пикл по х от 1 до 10 шаг 3;
4. П:=х2;
5. Вывод(х, II);
6. Конец-цикла 3;
7. Конец.
Результаты анализа рассматриваемого алгоритма приведены
в табл. 4.
Таблица 4
Таблица значений
Память Условие Вывод
х=1,4, 7, 10. 13 11 = 1,16,49,100 1>10нет 4> 10 нет 7> 10 нет 10>10нет 13>10да 11 416 7 49 10100
Отметим, что при х = 10 результатом проверки 10 > 10 являет-
ся ответ «нет» и тело цикла выполняется последний раз. При
х = 13 условие окончания цикла выполняется, и управление пе-
редается оператору, стоящему в ст роке 7 алгоритма.
2.4. Массивы и работа с ними
2.4.1. Основы типизации и структуризации
данных
Информацию, относящуюся к решаемой задаче, принято под-
разделять на данные (исходные данные, промежуточные и конеч-
ные результаты) и программу (информация, задающая алгоритм
решения задачи). В алгоритме данные описываются в предписа-
нии: «Список данных:...».
Все данные по своему виду подразделяются на константы и
переменные (рис. 19). Константы — это данные, которые при
выполнении алгоритма (программы) всегда определены и неиз-
менны. Запись константы полностью определяет ее назначение,
тип, форму представления и фактическое значение. Переменные —
это условные обозначения данных, которые в процессе выполне-
ния п
фактт
П
симв<
ДЛЯ у,
тичес
лов, з
верка
вещее
в вещ
делят
ные д
с плав
+ 01 =
ГЪ
гут о<
некие
М
менш
О1ЛИЧ
МИ ПС
н
тура 1
ние. 19. Классификация данных
Темп»
Эт
ных о
двадц
П]
хоров
красн
мы нс
являет-
аз. При
п!ие ле-
гации
[ТО под-
I КОНСЧ-
ггоритм
едписа-
?анты и
>ые при
и неиз-
ачение,
иные —
вполне-
ния программы не меняют своего типа, но могут менять свое
фактическое значение.
По своему назначению данные делятся на арифметические,
символьные и управляющие. Управляющие данные применяются
для управления выполнением программы. Значениями арифме-
тических данных являются числа, а символьных — строки симво-
лов, заключенные в апострофы, например: Конец решения. П ро-
верка и т.п. Арифметические данные по своему типу делятся на
вещественные (действительные) и комплексные. В том случае, если
в вещественном числе отсутствует дробная часть, мы будем опре-
делять тип таких данных как целый. 11о форме представления дан-
ные делятся на данные с фиксированной точкой (например. 78.5) и
с плавающей точкой (с масштабным множителем, например, 7.85Е
+ 01 = 7.85 101).
Переменные, применяемые в алгоритмах и программах, мо-
гут образовывать упорядоченные структуры, Широкое приме-
нение находит упорядочение переменных в виде массивов.
2.4.2. Описание массивов
Массив — это упорядоченное множество однотипных пере-
менных (элементов массива), объединенных общим именем и
отличающихся номерами (индексами). Массивы сходны с таки-
ми понятиями в математике, как векторы и матрицы.
Например, на метеостанции каждый час измеряется темпера-
тура воздуха, и значения записываются в табл. 5.
1ВЫ
ющие
Таблица 5
Температура воздуха
Время измерения, я 1 9 • . 23 24
Температура. °С 17 16 - . . 18 17.5
Этот массив (таблица) содержит 24 элемента, пронумерован-
ных от 1 до 24. Так, второй элемент массива имеет значение 16, а
двадцать третий — 18.
Примеры таких массивов ест ь не только в математике. Всем
хорошо известна пушкинская строка: «И тридцать витязей пре-
красных...». Имен витязей и их отличительных характеристик
мы не знаем. Для нас все тридцать вполне могут выступать под
одним именем «Дружина». Таким образом, если у простых пере-
менных имя относится только к одной ячейке, тс у массивов одно
имя обозначает множество ячеек памяти, отличающихся только
номерами (индексами). Значения индексов указываются в скоб-
ках справа от имени массива и однозначно определяют положе-
ние переменной в массиве. 1 {апример:
а(1:5) — массив (вектор) из пяти элементов: а(1), а(2), а(3),
а(4), а(5);
Ь(1:2, 1:3) — массив (матрица) из шести элементов: Ь( 1,1).
Ь(1,2), Ь(1.3). Ь(2,1), Ь(2,2), Ь(2.3). 1
Каждый массив характеризуется размерностью (числом изме-
рений), границами индексов по каждому измерению и длиной.
Диапазон изменения индексов на каждой позиции определя-
ется парой чисел — минимальным и максимальным значениями
индекса, разделенными двоеточием. Если нижняя граница (ми-
нимальное значение) равна единице, то ее можно не указывать.
Длина массива равна количеству элементов в массиве.
Размерность массива — это число индексов в списке индексов.
Чаще всего на практике используются одно-, двух- и трехмерные мас-
сивы, графическая интерпретация которых показана на рис. 20 и 21.
Из рисунков видно, что одномерный массив (рис. 20. а) можно пред-
ставить «линией», состоящей из столбцов ячеек памяти. Двухмерный
(рис. 20. б) массив — это «плоскость», состоящая из строк и столбцов
ячеек памяти. Трехмерный (см. рис. 21) массив — это «куб», состоя-
щий из плоскостей. строк и столбцов ячеек памя ти. Кстати, одну ячейку
памяти можно в общем случае представить одномерным массивом,
состоящим из одного столбца, и обраща гься к ней как к Х(1).
Существуют массивы и большей размерности — четырсхмер-
ные, пятимерные и т.д. Например, в алгоритмическом языке ПЛ/1
допускается применение массивов размерностью до шес1идесяти
четырех. Как представить себе многомерные массивы? — Очень
просто: четырехмерный массив — это «линия», состоящая, в свою
очередь, из столбцов «кубов» (трехмерных массивов) или, дру-
гими словами, «линия кубов». Пя гимерный массив это «плос-
кость», состоящая из строк и столбцов «кубов», или «плоскость
кубов». Шестимерный массив — это «куб», состоящий из плос-
костей. строк и столбцов «кубов», или «куб кубов» («куб второй
степени»). Продолжив градацию, можно сказать, например, что
девятимерный массив — это «куб кубов кубов», или «куб кубов
второй степени» («куб третьей степени»).
1_\ пере-
ев одно
голькоI
В скоб" I
юложе-
2) а(3), I
Ь(1Л),|
’ изме-
нной. I
ре целя-1
[ениями I
ца (ми-1
ывать.
щексов.
гые мае-1
20 и 21. |
<о пред-1
мерный
голбцовI
состоя-
у ячейку |
1ССИВОМ, I
). I
рехмер-
ке ПЛ/1
идесяти I
Очень
, в свою
[и, дру-
► «ллос-
оскость
[3 плос-
второй
гер, что
5 кубов
• • • . . -
а
Х(1:п)
или Х(п)
Х1Л х,2 Х,п
X,
• • а * • » • л •
хт.. хт„ пхп
Х(1:т, 1:п)
или Х(т. п)
Рис. 20. Массивы: а — одномерный; б—двухмерный
Для того чтобы «объяснить» компьютеру, что мы будем ра-
ботать с массивами, необходимо в специальном предписании
«Список данных...» указать имя и границы изменения индексов
массива. Предписание «Список данных» может включать в себя
константы, переменные и массивы. В нем указывается, сколько
ячеек памяти следует выделить в машине, чтобы записать все не-
обходимые данные.
Например:
...Список данных:
Константы: Р1=3.14159;
0=1.5678;
Переменные: а, Ь — целый;
х — вещественный;
с — символьный;
Массивы: у (1:2, 1:3) — вещественный;...
В разделах «Переменные» и «Массивы» желательно указать
тип используемых переменных и массивов.
2.4.3. Выборка элементов массивов
Работа с массивами сводится к работе с его элементами. Об-
ращение к элементам массива осуществляется с помощью пере-
менной с индексом. Так, х(1.5) — элемент массива х, располо-
женный на пересечении первой строки и пятого столбца.
Пример. Заданы два двухмерных массива х(1:2, 1:2) и у(1:2, 1:2):
О
2
Определит ь значение: Н := х(1,1) • у(2,1) + х(2,2).
После выборки указанных элементов и выполнения операции при-
сваивания получим: Н-14.
Следует особо отмстить, что х(1) не равно х1, т.е. первый эле-
мент массива х не имеет никакого отношения к переменной х1.
Некоторые языки высокого уровня дают возможность обра-
батывать массивы целиком; в этом случае для обозначения мас-
сива достаточно указать только его имя. При одинаковой раз-
мерности, типе и длине массивов можно записать
с: = а + Ь; с: = а • Ь; с: = а - Ь,
что означает соответственно суммирование, умножение и вычи-
тание элементов массивов а и Ь (с одинаковыми индексами) и за-
пись результатов в массив с.
Для того чтобы задать всем элементам массива одинаковые
значения, например 5, можно записать: а: = 5, где а — массив.
В дальнейшем мы будем пользоваться такой записью, чтобы со-
кратить, упростить написание алгоритма, считая элементарны-
ми предписания: ввод и вывод всего массива, присваивание все-
му массиву каких-либо значений и т.д. На самом деле, за редким
исключением, такие операции можно осуществить только при
работе с каждым элементом массива в отдельности, используя
для этого циклические операторы.
2.4.4. Использование циклических
операций для обработки массивов
Основным инструментом для работы с массивами являются
операторы цикла. С их помощью можно записывать значения в
массивы, выбирать значения из массивов, менять элементы мас-
сивов местами и т.д. Порядок использования циклических опе-
раторов для обработки массивов рассмотрим без потери общно-
сти на следующих конкретных примерах.
Пример. Составить фрагмент алгоритма, в котором четным элемен-
там массива х( 1:100) будут присвоены значения квадратов индексов, а
остальным элементам —нули.
Будем формировать массив по следующему правилу: сначала весь
массив обнулим, а затем будем присваивать четным элементам нужное
значение, т.е. записывать значения в массив с помощью цикла:
« •
Список данных:
к — целый;
х( 1:100) вещесп венный;
х: - 0;
Цикл по к от 2 до 100 шаг 2;
х(к): = к;
Конец-цикла;
• « а
В данном фрагменте алгоритма (и далее) под записью вида
х:=0 (в том случае, конечно, если х — это массив) будем пони-
мать работу с массивом «целиком», т.е. каждый элемент массива
х получае! значение 0. На самом деле такое присваивание (ввод,
вывод и т.д.) можно выполнить, например, в цикле: «... Цикл по
к от 1 до 100; х(к):=0: Конец-цикла; ...».
Пример. Составить алгоритм вычисления скалярного произведе-
ния векторов а и Ь длиной 10 по формуле
10
к=1
Смысл этой задачи сводится к выбору одноименных элементов из
массивов, их перемножению с последующим суммированием получен-
ных произведений. Алгоритм имеет следующий вид:
1. Начало;
2. Список данных:
к — целый;
а( 1:10), Ь( 1:10), с вещественный;
3. Ввод(а, Ь):
4. Вывод(а, Ь);
5. с:=0;
6. Цикл по к от 1 до 10;
7. с:=с+а(к) Ь(к);
8. Конец-цикла 6;
9. Вывод(с);
10. Конец.
В этом алгоритме для организации накопления значений «с»
мы предварительно «очистили» отведенную для этого ячейку па-
мяти. В каждом новом повторе цикла к значению «с» прибавля-
лось очередное слагаемое.
Пример. Сост авить таблицу отклонений экспериментальных дан-
ных Уь Уз,.. ,У2о от их среднего значения.
Сначала необходимо вычислить среднее значение, а затем пост-
рочно сформировать и отпечатать таблицу значений. Фрагмент алго-
ритма решения этой задачи представлен на рис. 22.
Пример. 11осгроить алгоритм для определения суммы элементов мат-
рицы, состоящей из 2 строк и 3 столбцов, при условии, ч го первый эле-
мент матрицы больше или равен нулю, или произведения элемен гов
матрицы, если первый элемент меньше нуля.
Математическая постановка задачи будет иметь следующий
вид:
У8:=0
Вычисление
среднего
значения
Построчное
формирование
и печать
таблицы
Рис* 22. Фрагмент алгоритма вычисления и печати таблицы
отклонений от среднего значения
Задана матрица:
а12 а13
а21 а22 а23
Необходимо рассчитать величину К по формуле
[ 2 3
УУау>еслиаи -0;
2 3
|ППач’еслиа|1<0-
Алгоритм решения этой задачи, заданной в форме ГСА, приведен
на рис. 23.
Рассмотрим еще два примера, иллюстрирующих циклическую
обработку массивов.
Рис. 23. Алгоритм обработки матрицы
Пример. Составить фрагмент алгоритма, позволяющий вычислить
сумму положительных элементов, лежащих под (над) дополнительной
диагональю ма грины А(4,4):
В за
ния ина
сумма и
больше
мент ал!
5. 8:=0;
6. Цив
7. I
8.
9.
10.
11. 1
12. Ко1
13. Выв
Пр»
сумму с
лью ма 1
Вэ:
щихна,
индекс
ритма}
етлиш!
алгори
Рас
ку мае
пла на:
приме]
менам
Пр
мерны
В задачах такого рода важно определить закономерность измене-
ния индексов элементов массива: в этой задаче нужно увидеть, что
сумма индексов элементов, лежащих под дополнительной диагональю,
больше 5 (над диагональю — меньше 5; на диагонали — равна 5). Фраг-
мент алгорит ма решения задачи в виде псевдокодов выглядит так:
5. 8:=0;
6. Цикл по 1 от 1 до 4;
7. Цикл по з от 1 до 4;
8. Если (1 +]>5) и (А(1,])>0) То
9. 8:=5+А(1,]);
10. Конец-Если 8;
11. Конец-цикла 7;
12. Конец-цикла 6;
13. Вывод(8);
Пример. Составит ь фрагмент алгоритма, позволяющий вычислить
сумму отрицательных элементов, лежащих над (под) главной диагона-
лью матрицы А(4,4):
В этой задаче важно увидеть, что первый индекс у элементов, лежа-
щих над главной диагональю, меньше второго (под диагональю первый
индекс больше второго; на диагонали индексы равны). Фрагмент алго-
ритма решения задачи очень похож на предыдущий, изменения потребу-
ет лишь пункт 8 (изменится проверяемое логическое условие) Фрагмент
алгоритма решения этой задачи можно написать самостоятельно.
Рассмотрим еще один алгоритм, обеспечивающий сортиров-
ку массива. Известно множество методов решения задач такого
плана; словесное описание некоторых из них можно найти, на-
пример, в [1]. Реализуем алгоритмически «метод сортировки об-
менами».
Пример. Дана последовательность чисел аь а?,..., а^ (одно-
мерный массив а(10)). Требуется переставить числа в порядке
возрастания* Для этого сравниваются два соседних числа а[ и а^+р
Если а^ан-ь то делается перестановка. Так продолжается до тех
пор, пока не будут выполнены все перестановки. Алгориз м ре-
шения задачи показан на рис. 24.
Не]
горите
перече
ЗИруЮ;
Ра(
НОМ Э7
ранее
снабжс
ется, г,
зации
тьевы*
Рис. 24. Алгори гм сортировки массива
Бл
на отд
бцов 1
ки— I
СКОРО
На
ражен
Наим<
листа,
и т.д.
взаим
ритма
рий(п
В КОТС
знак :
ется л
сывак
ром р
опера
рва нн
знак я
л 31+1.
;о тех
м ре-
2.5. Пошаговая детализация
алгоритма
Непосредственная поша] овая детализация структурного ал-
горитма требует большого количества нетворческой работ ы по
перечерчиванию па очередном этапе блоков, которые не детали-
зируются (т.е. не изменяются) на этом этапе.
Работа может быть существенно сокращена, если на очеред-
ном этапе отображать только блоки, являющиеся детализацией
ранее составленных блоков. Такая детализация должна быть
снабжена подробной системой взаимных ссылок: что раскрыва-
ется, где раскрывается и т.п. Описанная ниже методика детали-
зации алгоритма была разработана профессором Л.Ф. Викен-
тьевым.
2.5.1. Запись «блок-схема» методом
пошаговой детализации
Блок-схема при структурной алгоритмизации записывается
на отдельных листах, каждый из которых разделен на 5 —7 стол-
бцов и на 8—10 строк. Столбцы обозначаются цифрами, стро-
ки— буквами: А, В, С, Е, Н, К, М, О, Р, Т, X, общими для рус-
ского и латинского алфавитов (рис. 25).
На пересечении строк и столбцов размещаются зоны для изоб-
ражения условных графических обозначений блоков алгоритма.
Наименование зоны обозначается следующим образом: номер
листа, номер (буква) строки, номер столбца, например: 1Е4, 2ВЗ
и т.д. Между зонами оставляются по две строки для размещения
взаимных ссылок. В каждой зоне располагается один блок алго-
ритма, слева сверху при необходимости ссылка на коммента-
рий (примечание): справа сверху указывается наименование зоны,
в которой находится начало детализации данного блока или при-
знак элементарности блока символ*. В низу блока указыва-
ется перечень переменных, задействованных в эт ом блоке (запи-
сываются имена переменных или имена строк словаря, в кото-
ром расположены наименования). Если наименование блока или
операций, располагаемых в блоке, не помещается в зоне, го пре-
рванная запись может быть продолжена в комментариях (при-
знак продолжения — символ #).
В качестве примера рассмотрим построение алгоритма нахож-
дения максимального по абсолютной величине элемента масси-
ва (см. рис. 25).
Заполнение блок-схемы осуществляется поблочно, от нача-
ла алгоритма к его концу. Если очередной блок не является
элементарным и еще не раскрыт, то сверху, справа о г него, I
ставится наименование свободной зоны, в которой будет раз- I
мещаться начало подалгоритма, раскрывающего данный блок. I
После этого приступают к раскрытию подалгоритма. В блоках
«Начало» и «Конец» этого подалгоригма указывается паимсно-
вание
ляется
внизу
(их на
персм(
МАХАВ8: определение максимального по абсолютной
величине элемента одномерного массива
Лист 1
Листов 1
# наибольшего по абсолютной величине
Рис. 25. Представление структурного алгоритма в виде блок-схемы
Пс
на о н
ССЫЛК1
псевдс
Пс
состав
ся элс
расши
записи
из дву
на ли
дстал]
лизир;
ки на
ные»;
докод-
М<
нием 1
тодик.
1,птах, Х(|),тах
О
щие с
ные С1
в ПОД]
полни
крез н<
Ст
боге ;
вание зоны, содержащей детализируемый блок. Если блок яв-
ляется элементарным, то сверху справа ставится символ *, а
внизу выписываются задействованные в этом блоке переменные
(их наименования или номера строк словаря, содержащие эти
переменные).
2.5.2. Запись структурного алгоритма
в псевдокодах
Псевдокоды при структурной алгоритмизации записываются
на отдельных листах, имеющих 4 колонки: № п/п; псевдокоды;
ссылки на расшифровку; переменные, задейсг вованные в данном
псевдокоде.
Порядок составления псевдокодов соответствует порядку
составления блок-схемы. Если очередной псевдокод не являет-
ся элементарным и еще нс раскрыт, то в столбце «Ссылки на
расшифровку» указывается номер псевдокода, в котором будет
записано начало детализации. Номер псевдокода формируется
из двух составных частей — номера листа и номера псевдокода
на листе. В свою очередь, псевдокоды «Начало» и «Конец»
детализации содержат номера тех псевдокодов, которые дета-
лизируются. Для элементарных псевдокодов в столбце «Ссыл-
ки на расшифровку» ставится символ *. а в столбце «Перемен-
ные» дается перечень переменных, задействованных в этом псев-
докоде.
Методика построения структурного алгоритма с использова-
нием псевдокодов иллюстрируется на том же примере, что и ме-
тодика построения алгоритма в виде блок-схемы (рис. 26).
2.5.3. Словарь
Словарь, или список переменных, включает в себя следую-
щие столбцы (колонки): п/п; обозначение (имя); дополнитель-
ные сведения; пояснения. Словарь для примера, рассмотренного
в подразд. 2.5 2 (см. рис. 25), приводится на рис. 27. Графа «До-
полнительные сведения» содержит описание переменных на кон-
кретном языке программирования и пока не заполняется.
Словарь желательно составлять в процессе разработки лю
бого алгоритма. Сведения, представленные в словаре, помогут
Лист 1. Листов 1
№ п/п Псевдокоды Ссылки на расшифровку Переменные
1.01 Начало МАХАВ 8'
1.02 Ввод (X); * п, Х(п)
1.03 Поиск элемента, максимального по
абсолютной величине 1.06
1.04 Вывод (птах, тах) * птах, тах
1.05 Конец МАХАВ8;
106 Начало 1.03;
1.07 Подготовка к циклу; 1.10
1.08 Цикл поиска; 1.15
1.09 Конец 1.03;
1.10 Начало 1.07;
1.11 птах:=1; * птах
1.12 тах:=1Х(1)1; * тах, Х(1)
1.13 |~2; *
1.14 Конец 1,07;
1.15 Начало 1.08;
1.16 Цикл по । от 2 до п; *• 1. п
1.17 Сравнение; 1.20
1.18 Конец-цикла 1.16; *
1.19 Конец 1.08;
1,20 Начало 1.17;
1.21 Если 1Х(|)1>тах То * Х(|), тах
1.22 птах:=|; л птах, ।
1.23 тах:=|Х(|)1; * тах, Х(|)
1.24 Конец-Если 1.21; л
1.25 Конец 1.17.
Рис. 26. Представление структурного алгоритма в виде псевдокодов
Лист 1. Листов 1
№ п/п Имя Дополнительные сведения Пояснения
1 Х(п) Обрабатываемый массив
2 п Количество элементов
3 птах Номер максимального элемента
4 тах Значение найденного элемента
5 Текущее значение номера
элемента
Рис. 27. Бланк записи списка переменных
вам вп<
имен к
зованы
шим ат
Дог
нужно
всего в
сущест
этом с>
чтобы
тий (ф'
получе
Ма
щении.
ющей ]
его изу
НИЯ ср1
модели
•с;
матиче
• о:
ними
• з<
зульта
Сд|
лении
пии вь
В>
ные, п
руковс
ВВОДИ!
вычис:
ХН” 1 9 <
прави!
да исх1
сваива
вам впоследствии восстановить (вспомнить) смысл обозначений
имен констант, переменных и массивов, которые были исполь-
зованы при составлении алгоритма, а людям, не знакомым с ва-
шим алгоритмом, помогут разобраться в нем.
2,5.4. Учет конкретных особенностей задач
Допустим, необходимо решить какую-либо задачу и при этом
нужно воспользоваться услугами ЭВМ С чего начать? Прежде
всего нужно разобраться, что в изучаемом объекте или явлении
существенно для данной задачи, а чем можно пренебречь. При
этом существенные свойства должны быть сформулированы так.
чтобы их можно было записать па языке математических поня-
тий (формул, уравнений, неравенств и т.п.). В результате будет
получена математическая модель задачи.
Математическая модель всегда основана на некотором упро-
щении, однако благодаря замене реального объекта соответству-
ющей моделью появляется возможность сформулировать задачу
его изучения как математическую и воспользоват ься для се реше-
ния средствами математики. Итак, для создания математической
модели нужно:
• сделать предположения, на которых будет основана мате-
матическая модель;
• определить, что надо считать исходными данными и конеч-
ными результатами;
• записать математические соотношения, связывающие ре-
зультаты с исходными данными.
Следующим этапом является создание алгоритма. При состав-
лении алгоритма необходимо учитывать особенности организа-
ции вычислительного процесса при помощи ЭВМ,
В ходе анализа решаемой задачи следует четко выделить дан-
ные, подлежащие вводу в ЭВМ. Опытные программисты всегда
руководствуются принципом минимизации вводимых данных:
вводить следует только то, что нельзя вычислить. Например, для
вычисления У-цх), где х=1, 3, 5, 7, 9, 11, ... , 19, следует ввести
хн=1, хк=19 и Дх=2, а все остальные значения х вычислить по
правилу: х:=х+Д.х. Для программ разового действия вместо вво-
да исходных данных целесообразно использоваз ь операторы при-
сваивания. Самой первой операцией рекомендуется ставить вы-
вод заголовка задачи и печать текста «Исходные данные», чтобы
при отладке программы иметь информацию о начале ее работы
После ввода исходных данных рекомендуется сразу осуществить
вывод исходных данных на печать, чтобы обеспечить своевре-
менное обнаружение ошибок ввода.
При разработке алгоритма в виде псевдокодов для повыше-
ния наглядности и удобочитаемости алгоритма следует исполь-
зовать ступенчатую форму записи. При этом рекомендуется строго
на одном уровне записыват ь начало и конец всех базовых конст-
рукций, а их вну греннее содержание записывать на 1 -2 позиции
правее, например:
Начало;
Цикл ...
Если...То
х:= ...
Иначе
Конец-Если;
Копец-пикла;
Конец.
Для обозначения констант, переменных и массивов рекомен-
дуется использовать короткие названия, состоящие из 4 6 букв.
Применение коротких имен позволит избежать синтаксических
ошибок при последующем написании программы. Имя должно
нести смысловую нагрузку, что позволяет улучшить чит аемость
алгоритма, например: таб1п8, уйос1, 1еп§1Ь и т.п (вместо х, у, х).
Не беда, если для этой цели будут использованы русские слова,
записанные английскими буквами (не все изучаю! английский
язык), главное, чтобы в дальнейшем при переводе алгоритма в
программу нс делать ошибок.
Константы рекомендуется вводить с помощью операций при-
сваивания в самом начале алгоритма. Этот прием дает возмож-
ность достаточно просто модифицировать программу при ее до-
работ ке в процессе эксплуатации. Например: рк=3.141593;
8циаге:=14.273; и г.д.
Каждый признак, каждую переменную следует использован ь
только в одном качестве; это позволит потом существенно сэко-
номить силы при поиске ошибок в процессе отладки
Пр
горит*
ритме
варите
мени т
времет
Ал
ших ф
лягь п
внести
Пр
дусмог
В про]
Это ст
ситуат
та, яв:
а при
рок П1
вычис
НИЯ о!
ни в :
Ра
где х, -
тогда,
нулю,
ходим
Ес
опера'
ция 1
При использовании базовых структур следует выявить в ал-
горитме общие фрагменты (фрагменты, повторяющиеся в алю-
ритме несколько раз), которые рекомендуется выносить в пред-
варительный блок. Такой подход приводит к сокращению вре-
мени вычислений или объема памяти, занимаемой программой,
времени ввода программы и т.п.
Алгоритм должен быть составлен ясно, понятно, из неболь-
ших фрагментов (блоков). Это дает возможность быстро состав-
лять по нему программу, а в случае необходимости оперативно
внести изменения.
При проектировании алгоритма пользователь должен пре-
дусмотрегь проверку существования рассчитываемой функции
в произвольной (или заданной) области изменения аргументов.
Это связано с тем, ч го при обработке массивов часто возникает
ситуация, когда при одном или нескольких значениях аргумен-
та, являющихся элементами массива, функция не имеет смысла,
а при остальных— может быть вычислена. Отсутствие прове-
рок приводит в этом случае к преждевременному прекращению
вычислительного процесса с выдачей диагностического сообще-
ния об ошибках, которых на самом деле нет ни в программе,
ни в алгоритме.
Рассмотрим некоторые характерные примеры.
Пример 1. При вычислении функции
г = .
где х, элемент массива х( 1 :п)1 результат может бы гь получен тол ько
тогда, когда подкоренное выражение (?(х -) положительное или равно
нулю. Поэтому перед расчетом квадратного корня в алгоритме необ-
ходимо предусмотреть проверку:
0(х1) > 0.
Если это условие не выполняется, то в алгори тме следует поставить
оператор выдачи сообщения о том, что при заданном значении х( функ-
ция Е нс имеет смысла, и перейти к расчету значения
)
Пример 2. Математическое выражение, содержащее дробь, может
быть вычислено только в том случае, если знаменатель дроби нс стре-
мится к нулю. Следовательно, прежде чем рассчитыва 1 ь функцию
необходимо предусмотрев ь проверку:
И/(г)>0.
Алгоритмически проверку можно организоват ь так:
|ИЛ(г)|>10’6.
Модуль знаменателя необходимо вычислять, так как неважно, по-
ложительное или отрицательное значение принимает функция. Важно,
чтобы ее абсолютное значение было больше некоторой условно малой
величины. В этом случае за такую величину принимается машинный
нуль или число, к нему приближающееся, например 10 6.
При невыполнении этого условия после выдачи сообщения о невоз-
можности расчета функции Г следует прекратить выполнение алгорит-
ма, если 2 просто переменная, или перейти к расчету следующего зна-
чения если е — элемент массива.
Пример 3. Функция 1$(х) не может быть рассчитана, если х прини-
мает значения, кратные Р1/2. Таких точек на числовой оси бесконечное
множество. Однако проверка существования функции 1^(х) может быть
легко организована, если учесть, что х)=$т(х)/со$(х). В этом случае
в алгоритм целесообразно включить проверку: |со8(х)|> 10'6.
Аналогично может быть организована проверка существования
функции сЦ*(х). Здесь проверяется условие |81п(х)|> 10’6.
Пример 4. Функция у=1о^(х) существует только для положитель-
ных значений х, поэтому в данном случае нужно проверять условие
х>0. Описать вес случаи ор] анизании проверок сущест вования функ-
ции при произвольных значениях аргументов нс представляется воз-
можным. Пользователь должен сам, составляя конкретный алгоритм,
предусмотреть необходимые проверки.
Сис
програ?
грамму
ляет на»
грамму
Не1р, к
всем вс
Паскал
тегрир(
Дл*
файл к
на экра
7.0, вне
экрана
торую
Строка
• Г
список
> ?
> С
> 5
> (
ГЛАВА 3
Язык программирования Турбо
Паскаль 7.0
3.1. Система программирования
Турбо Паскаль.
Отладка пользовательских
программ
3.1.1. Интегрированная инструментальная
оболочка Турбо Паскаль 7.0
Система программирования Турбо Паскаль упрощает процесс
программирования и делает его более эффективным. Запустив про-
грамму ГпгЬо.ехс, вы получаете комплекс услуг, который позво-
ляет написать, отредактировать, откомпилировать и отладить про-
грамму [16,18]. У вас всегда под рукой развитая система помощи
Не1р, которая позволяет получить справочную информацию по
всем вопросам, касающимся программирования в системе Турбо
Паскаль. Все эти возможности предоставляет пользователю ин-
тегрированная инструментальная оболочка (ИИО).
Для вызова ИИО Турбо Паскаля 7.0 поставьте на исполнение
файл ШгЬо.ехе. Через некот орое время после запуска этого файла
на экране дисплея появится основной экран ИИО Турбо Паскаля
7.0, внешний вид которого показан на рис. 28. В верхней части
экрана расположена строка основного меню, активизировать ко-
торую можно с помощью клавиши [ЕЮ] или щелчком мыши.
Строка содержит следующие меню:
• Ейе - выполнение операций с файлами. Раскрывающийся
список команд:
> ГЧе>? создать новый файл;
> Ореп открыть существующий файл;
> 8ате, 8ате а$, 8ате аП сохранить файл;
> СЬап^е Й1г — изменить текущий ката лог;
'г РппЕег $е<ир, РппЕ — установка печати и почат ь файла;
Вов 8Йе11 — выйти в оболочку 008;
г Ехй выйти из ИИО Турбо Паскаля 7.0;
• Едй редактирование текста программы. Раскрывающийся
список команд:
> 1п<1о восстановить последнюю команду редактирования.
> Вейо повторить последнюю команду редактирования;
> Си< — вырезать выделенный текст и занести его в тексто-
вый буфер;
> Сору — копировать текст в буфер;
> Ра§1е — вставить текст из буфера;
> С1еаг — стереть, удалить текст без сохранения его в буфере;
> 8Еклу скрЬоап! — показать содержимое текстового буфера.
• 8еагск — поиск и замена текста. Раскрывающийся список
команд (основные команды):
> Нп(1 — найти текст по образцу;
> Кер1асе — замени! ь текст;
> 8еагсЬ а^аш — повторить поиск (повторить деист вие после-
дней команды Етб или Кер1асе);
> Со €о Нпе питЬег — перейти к строке с номером (номер стро-
ки отображается в левом нижнем углу окна редактирования).
• Кип
Раскрь
> Е
> 8
> 1
> (
находи
> Е
закрыт
ИНИЦИс
• Сот
зоне. Р
> (
> В
> Е
проект
> Е
щем ст
• ОеЬт
Раскрь
> I
ТОЙ СТ]
> (
стек вт
> 1
> (
> I
грамм]
> 1
ражен:
значен
• Гоо!
Турбо
• Орб
Паска]
• \У11М
СПИСОК
• Кип выполнение программы, находящейся в рабочей зоне.
Раскрывающийся список команд:
> Кип — выполнить программу;
> 81ер Отег выполнить программу по шагам (построчно);
> Тгасе 1п1о выполнить программу пооператорно;
> Со Со сиг8ог — выполнить программу до строки, в которой
находится курсор;
> Рго^гат геаеС прекратить отладку, освободить память,
закрыть все файлы, которые использовались в программе (ре-
инициализация программы);
> РагашеСега — задать аргументы командной строки;
• СотрНе — компиляция программы, находящейся в рабочей
зоне. Раскрывающийся список команд (основные команды):
> Сотрйе — компилировать программу;
> Маке — компилировать программу в ехе-файл;
> ВшШ — выполнить полную перекомпиляцию всех файлов
проекта;
> 1пГогтаНоп — выдать окно диалога с информацией о теку-
щем состоянии системы;
• ОеЬи§ — отладка программы, находящейся в рабочей зоне.
Раскрывающийся список команд (основные команды):
> ВгеакрошСз — установить или отменить точку останова на
той строке, в которой находится курсор:
> Са11 §1аск — открыть блок диалога, в котором содержится
стек вы ювов функций;
> ХУаСсй открыть окно просмотра выражений;
> Ои1риС — открыть окно просмотра результатов решения;
> П$ег зегееп — открыть пользовательский экран (текст про-
граммы не виден);
> Ета1иаСе/то(Шу — вычислить значение переменной или вы-
ражения, отобразить вычисленное значение, модифицировать
значение.
• Тоо1$ выполнение некоторых программ без выхода из ИИО
1 урбо Паскаля;
• Орбоп$ — установка параметров компилятора и ИИО Турбо
Паскаля;
• ХУт<1<ву — выполнение операций с окнами. Раскрывающийся
список команд (основные команды):
> Тйе расположить окна на экране таким образом, чтобы
они были видны одновременно и не перекрывали друг друга;
х Са8сайе расположить окна так, чтобы край последую-
щего окна выступал из-под предыдущего (каскадное расположе-
ние);
г С1о8е аП закрыть все окна;
> 8ие/Моте — изменить размер и местоположение активно-
го окна;
> /оот — увеличить окно до размеров экрана;
> №х€ — сделать активным следующее окно;
> С1о$е — закрыть активное окно;
> ЬЫ — получить список всех открытых и недавно закрытых
окон.
ком кне
В рабо1'
В в
НИЯ, В 1
ций ИР.
Вво,
бочей з
ноявляп
допуще
ошибок
1анови।
ВаскЗ!
нажать
• Не1р получение справочной информации. Раскрываю-
щийся список команд:
х Соп1еп(8 — отобразить перечень тем (содержание) справоч-
ника;
> 1пйех открыть список ключевых слов (тематический ука-
затель);
х Торк зеагсЬ отобразить справку по выбранному элемен-
ту (тематический поиск);
х Ргеиоиз 1орк открыть текст, который просматривался
последний раз при обращении к справочнику;
> Ье1р вывести сведения о системе контекстовой по-
мощи;
> ГПеа — подключить другие справочники;
> СотрПег йкеейтез вывести список директив компиля-
тора;
х Кевепсй отогйз вывести список зарезервированных слов;
> 8(апйагй ипЙ8 вывести список стандартных модулей;
> ВоНапй Ра8са! Еап§иа§е вывести список основных эле-
ментов языка;
х Еггог тс88а^е8 — вывести справку об ошибках:
х АЬоШ — вывести информацию о версии Турбо Паскаля ТО.
В рабочей зоне (основная часть экрана) открываются окна
с номером в правом верхнем углу и заголовком. На правой и
нижней границе окна находятся линии прокрутки, позволяющие
двигать просматриваемый текст в окне. Передвижение окна по тек-
сту может осуществляться клавишами управления курсором и кла-
вишами [Ра^сПр/Ра^еПоип]. Любое окно можно закрыть щелч-
торопя-
знаков
и латит
не прог
Сох
ную пр
нужно;
но так;
мы и и;
ре в те
катало]
зоватьс
ло] а). Ч
вами и
можно
имя, за
сан без
Вьп
шейся ]
именно
Если в
Паскал
сообще
диске, ?
По<
полнит
тексту
гобы
дую-
оже-
гвно-
>1ТЫХ
ваю-
1ВОЧ-
ука-
мен-
ялся
! по-
йдя-
лов;
эле-
I 7.0.
окна
ой и
чцие
тек-
кла-
:елч-
ком кнопки мыши на кнопке закрытия окна (левый верхний угол).
В рабочей зоне пользователь набирает текст программы.
В н и ж н е й части экрана расположена строка состоя-
ния. в которой отображаются некоторые из доступных опера-
ций ИИО и комбинации клавиш для их быстрого вызова.
Ввод и корректирование программы. Мигающий курсор в ра-
бочей зоне указывает на то место на экране, в котором будет
появляться вводимый текст программы. Для устранения ошибок,
допущенных при вводе текста, нужно установить курсор под
ошибочно введенным символом и нажать клавишу Ое1еТе или ус-
тановить курсор правее удаляемого символа и нажать клавишу
Васк8расе]. После ввода очередной строки программы нужно
нажать клавишу [Еп1сг]. Набирать текст следует внимательно, не
торопясь, обращая внимание на точное воспроизведение всех
знаков пунктуации и сходных по написанию символов русско! о
и латинскою алфавитов (И, В, С, X), поскольку компилятор
нс прощает ошибок подобного рода.
Сохранение программы на диске. Перед исполнением создан-
ную программу рекомендуется сохранить на диске. Для это! о
нужно активизироват ь в меню ЕПе команду 8ате или 8ате а» (мож-
но также воспользоваться клавишей [Е2]), ввести имя програм-
мы и нажат ь клавишу [ЕпТег]. Файл будет сохранен на винчесте-
ре в текущем каталоге. Если нужно сохранить файл в другом
каталоге или на другом диске, то перед записью следуе г восполь-
зоваться командой СЬап^е Шг в меню ЕПе (для смены имени ката-
лога). Турбо Паскаль 7.0 автоматически добавляет к введенному
вами имени файла расширение ,ра$. Если есть необходимость,
можно задать другое расширение самостоятельно или записать
имя, заканчивающееся точкой, — в этом случае файл будеч запи-
сан без расширения (с пустым расширением).
Выполнение программы. Для выполнения программы, находя -
щейся в рабочей зоне, нужно активизировать команду Кип в одно-
именном меню или воспользоваз ься комбинацией клавиш [С1х)+Е9].
Если в программе есть синтаксические ошибки, транслятор Турбо
Паскаля укажет на их местоположение и выдаст соответствующее
сообщение (Еггог...). Исправив ошибки и сохранив программу на
диске, можно вновь поставить ее на выполнение.
Посмотреть результаты рабо гы программы можно, если вы-
полнить команду П8СГ зегееп в меню Г)сЬ1Щ. Для возвращения к
тексту программы достаточно нажать любую клавишу. Можно
воспользоваться также командой Оифи( в меню ВеЬи^, которая
откроет окно просмотре результатов решения. Чтобы оставить I
это окно открытым на время сеанса работы с ИИО Турбо Паска-
ля, выполните команду Савдаде в меню УУш(1оуу.
Для завершения работы с ИИО Турбо Паскаля 7.0 достаточ-
но выполнить команду Ехй в меню ГНе или нажать комбинацию
клавиш IА1Г+Х]. I
3.1.2. Отладка пользовательских программ.
Классификация ошибок
В процессе отладки осуществляются обнаружение и устранение
ошибок, допущенных на всех этапах подготовки задачи к решению
на ЭВМ. По своему характеру ошибки делятся на три группы. I
1. Синтаксические ошибки — это ошибки, связанные с нару-
шением синтаксических правил языка Паскаль. К типовым син I
таксическим ошибкам можно отнести: пропуск знаков пункт уа-
ции (чаще всего «;»); использование имен констант, переменных
и массивов, которые не описаны в списке данных; неправильное
объявление типов данных и т.п. Ошибки подобного рода обна-
руживаются средствами ИИО Турбо Паскаля на этапе компиля-1
ции. Компилятор выставляет курсор на место ошибочного опе-1
ратора и выводит сообщение об ошибке.
2. Семантические ошибки — это ошибки, связанные с наруше-
нием семантических правил языка Паскаль (деление на нуль, по- |
пытка вычисления корня из отрицательного числа и т.п.). Ошиб I
ки подобного рода проявляются на этапе выполнения програм-
мы. При обнаружении такой ошибки выполнение программы
прекращается, курсор выставляется на место ошибки и выдается
сообщение:
Кип-Ыте еггог <Г1ПП> аг <хххх:уууу>,
где ппп — номер ошибки, хххх:уууу — адрес ошибки.
3. Алгоритмические ошибки — это ошибки, связанные с не-
правильным применением алгоритмических конструкций. Ошибки
этого типа порой трудно обнаружить, иногда для этого требует-
ся вернуться на этап алгоритмизации. В ИИО Турбо Паскаля
отсутствую! средства автоматического обнаружения логических
ошибок. Для того чтобы был ь уверенным в отсутствии таких
ошибок в программе, рекомендуется оглаживать различные под-
програ
ходнук
низаци
живае*
ПОЛНИ'
операт
ветвле!
выход*
тельно
получе
ИМ
могут <
В с
бо Пас
ЩЬЮ К1
мы О ]
• п;
• В1
• о<
• п
грамме
По
вой (п
вать к<
клави)
актив!
циона.1
и трас
вой от.
проце;
можне
Вы
если н
можне
остане
•У
няться
программы отдельно, начиная с нижнего уровня иерархии. В ис-
ходную программу нужно вставлять операторы вывода для орга-
низации выдачи на печать информации о ходе выполнения отла-
живаемой программы (вывод промежуточных результатов). До-
полнительные сообщения рекомендуется выдавать после
операторов ввода (для проверки вводимых данных), в местах раз-
ветвлений алгоритма, перед обращением к подпрограммам и после
выхода из них и т.п. Результат работы программы нужно обяза-
тельно сравнить с результатом просчета контрольного примера,
полученным при одном из вариантов исходных данных.
ИИО Турбо Паскаля 7.0 включает в себя средства, которые
могут облегчить процесс поиска логических ошибок.
3.1.3. Основные этапы отладки
В состав интегрированной инструментальной оболочки Тур-
бо Паскаля 7.0 входит вст роенный отладчик (ОеЬи^ег), с помо-
щью которого можно проследить за ходом выполнения програм-
мы. Отладчик позволяет:
• производить пошаговую отладку и трассировку программы:
• выполнять программу до определенной точки:
• осуществлять перезапуск программы;
• просматривать и модифицировать переменные в про-
грамме.
Пошаговая отладка и 1рассировка. Для выполнения пошаго-
вой (построчной) отладки программы достаточно активизиро-
вать команду 81ер Огег в меню Кип или нажать функциональную
клавишу [Г8]. Для выполнения трассировки программы нужно
активизировать команду Тгасе пйо в меню Кип или нажать функ-
циональную клавишу [Р7]. Отличие между пошаговой отладкой
и трассировкой программы заключается в том. что при ноша] о-
вой отладке нельзя проследить за выполнением операторов внутри
процедур и функций, в то время как при трассировке такая воз-
можность имеется.
Выполнение программы до определенной точки. В том случае,
если необходимо отладить не всю программу, а только ее часть,
можно выполнить программу до определенной точки (до точки
останова, Вгеакройи}. Для этого нужно:
• установить курсор на строку, до которой должна выпол-
няться программа;
• активизировать команду Со (о сигзог в меню Кип или на-
жать функциональную клавишу [Е4].
Программа будет выполнена до строки, в которой находится
курсор.
Точку останова (ВгеакропН) можно уст ановить в строке (стро-
ках) программы еще несколькими способами:
• открыть локальное меню (Ьоса! тепи) в строке состояния
нижней части экрана нажатием правой кнопки мыши или комби-
нацией клавиш [А11+Е10]) и активизировать кохманду То§§1е
ВгеакротГ:
• нажать комбинацию клавиш [Сгг1+Р8];
• активизировать команду Айй Ьгеакрош! в меню 1)еЬи<* и на-
жать клавишу [Еп1ег];
• активизировать команду ВгеакрошЬ в меню ВеЪи§ — откро-
ется список всех точек останова, используемых в программе; щел-
кнуть левой кнопкой мыши в поле ЕсШ и нажать клавишу [ЕгДег].
Чтобы удалить точку останова, достаточно нажать комбина-
цию клавиш [С1г1+Е8] или воспользоваться командой Пекк (Скаг
а11 для удаления всех точек останова) в раскрывающемся окне
Вгеакро1п1$ в меню ПеЬи^.
Перезапуск программы. Для того чтобы осуществить переза-
пуск программы, не дожидаясь завершения ее работы, достаточ-
но активизировать команду Рго^гат тезе! в меню Кип или нажать
комбинацию клавиш [СЦ1+Е2] — программа будет выполняться
с начала.
Просмотр и модификация переменных в программе. Для того
чтобы просмотреть значение переменной в определенной точке
программы, нужно:
• выполнить программу до точки останова;
• активизировать команду \Уа1сЬ в меню ПеЬи§ — откроет ся
окно ЪУа1ске$\
• нажать комбинацию клавиш [СпН Е7] или клавишу [1п$еЛ] —
откроется окно А с1с1 ]Уатск\
• ввести имя переменной и нажать клавишу [ЕпГег] в окне
РЕд/сйел появятся имя и текущее значение переменной.
Удаление переменных из окна 1Уа1ске$ производится нажати-
ем клавиши [Ое1] или комбинации клавиш |С1х1+У].
Для того чтобы изменить текущее значение переменной в про-
грамме, нужно:
• ак
нажать
окно
• ВВС
• ВВ(
нуть ле<
появитс
• тс
тем по
Пос
некие п
Тур
пах кол
Соо
на э тал
выдают
сообще
и соотт
2 1с
3 Ъ
4 Е
10 1
26 '
37 I
42 1
61 ]
62 1
85 <
113
Сед
на эта]
ческое
где ппп
• выполнить программу до точки останова;
• активизировать команду Еуа1иа1е/тод1Гу в меню ОеЬн§ или
нажать комбинацию клавиш [С1г1+ 14 — откроется диалоговое
окно ЕчаЫаге ап(1 МосН/уг
• ввести имя переменной в поле ЕхргеШоп^
• ввести новое значение переменной в поле Мтс Уа1ие и щелк-
нуть левой кнопкой мыши по клавише | МосНГу] — в поле Кезик
появится новое значение переменной;
• щелкнуть левой кнопкой мыши по клавише [Еуа1иа1е], а за-
тем по клавише [СапсеЦ.
После описанных выше действий можно продолжить выпол-
нение программы уже с новым значением переменной.
3.1.4. Диагностические сообщения
Турбо Паскаль 7.0 выдаст диагност ические сообщения па эта-
пах компиляции и выполнения программы.
Сообщения об ошибках компиляции. Если ошибка возникла
на этапе компиляции программы, ее место отмечается курсором,
выдаются код ошибки (всего таких кодов 163) и диагностическое
сообщение. Ниже приводятся наиболее часто встречающиеся коды
и соответствующие им сообщения об ошибках:
2 ТдепЕПег ехрес!ед (Ожидается идентификат ор);
3 Спкпои'п йепййег (Неизвестный идентификатор);
4 ОирНса1е иЗепбНег (Повторение идентификатора);
10 Ппехресгед епб оГ Гйе (Неожиданный конец файла);
26 Туре т18та1с11 (Несоответствие типов);
37 ЕНЕ) ехрес1е<1 (Ожидается оператор ЕЬЮ);
42 Еггог 1п ехрге8§1оп (Ошибка в выражении);
61 1пуа11<1 1уреса$1 (Недопустимое преобразование типов);
62 О1У18ЮП Ьу /его (Деление на нуль);
85 «;» ехрес!ед (Ожидается символ «;»);
113 Еггог ш $1а1етеп1 (Ошибка в операторе).
Сообщения об ошибках выполнения. Если ошибка возникла
на этапе выполнения программы, на экран выдается диагности-
ческое сообщение:
Вип-Ыте еггог <ппп> аГ <хххх:уууу>,
где ппп — номер ошибки выполнения, хххх:уууу — адрес ошибки вы-
полнения.
Ошибки выполнения делятся на четыре категории:
• ошибки на уровне 008 (коды ошибок с 1 до 99, например:
2 Р11е по1 Гоппе! — не найден файл);
• ошибки ввода-вывода (коды ошибок с 100 до 149, напри-
мер: 100 Э18к геас! еггог — ошибка чтения диска);
• критические ошибки (коды ошибок со 150 до 199. например:
150 О1$к \уп(е-ргогес1е<1 — диск защищен от записи);
• фатальные ошибки (коды ошибок с 200 до 255. например:
200 ВпЫоп Ьу гего деление на нуль).
Более полный перечень сообщений об ошибках приведен в
приложении 1.
3.2. Общее описание языка Паскаль
3 .2.1. Назначение и основные особенности
языка
Язык Паскаль был разработан в начале 70-х годов профессо-
ром Никлаусом Виртом (Швейцария) как инструмент для систе-
матического обучения программированию. Для этого в состав
языка включены элементы структурного программирования (пос-
ледовательные, разветвляющиеся и циклические структуры) и
структуры данных (массивы, записи, файлы и ч.п.). Это простой
язык, однако все. чем он располагает, настолько соответствует
исполняемым задачам, что на практике этот язык оказывается
продуктивнее, чем его более развитые «конкуренты». Используе-
мый первоначально как инструмент обучения программирова-
нию, язык Паскаль вскоре стал стандартным языком для обуче-
ния основам вычислительной техники и сейчас является принад-
лежностью ЭВМ любого класса. Широкое распространение язык
получил благодаря усилиям французского математика Филипа
Кана, разработавшего в 1983 г. компактный, быстродействую-
щий и дешевый компилятор, который он назвал Турбо Паскаль.
В 1992 г. фирма Вог1апб 1п(егпа1юпа1 выпустила в свет оче-
редную версию языка Турбо Паскаль 7.0. отличающуюся от пре-
дыдущих улучшенным интерфейсом пользователя и более быст-
рым компилятором. Естественно, в новую версию вошли все пре-
дыдущие наработки: использование мыши, многооконный режим
работы, возможность включения программ на Ассемблере, воз-
можность создания объектно-ориентированных программ и т.д.
К основным особенностям я *ыка про] раммирования Паскаль
следует отнести довольно строгие требования к структуре програм-
мы: оператор начала программы, блок (разделы описаний меток,
констант, типов, переменных, процедур и функций, операторов).
Стандартный Паскаль предполагает запись вышеперечисленных
разделов программы в строгой последовательности. Версии язы-
ка, появившиеся в недавнем прошлом (в том числе и Турбо Пас-
каль 7.0), в определенной мере свободны от этого ограничения —
разделы описания можно менять местами (это не относится к раз-
делу операторов, которым должна заканчиваться программа).
Операторы Паскаль-программы должны заканчиваться точ-
кой с запятой, в одной строке может быть записано несколько
операторов, что тоже может быть отнесено к особенностям язы-
ка. В Паскале есть все тины циклов: «Пока», «До», «С парамет-
ром». Хорошо продумано использование выбирающих операто-
ров: операторы безусловного и условного переходов, оператор
варианта. В Паскале имеется возможность подключения библио-
течных модулей, расширяющих, например, графические возмож-
ности языка. Вместе с тем отсутствие некоторых «привычных»
функций (например, функции тангенса, функции возведения в
степень и т.д ) может на первых порах изучения я$ыка вызывать
недоумение, а порой негодование у рядового пользователя. Бе-
зусловно, как и любой язык программирования, Паскаль имеет
свои достоинства и недостатки.
3 .2.2. Алфавит и словарь
Основой любого языка программирования является алфа-
вит — набор допустимых символов, которые можно использо-
вать для записи программ. Язык Паскаль оперирует со следую-
щим набором символов:
• латинские прописные и строчные буквы (А В, С ..., х, у, >);
• арабские цифры (0, 1, 2, ..., 7, 8, 9);
• символ подчеркивания;
• специальные символы и символы-разделители.
Специальные символы и их комбинации чаще всего использу-
ются для обозначения операций. Список специальных символов
языка Паскаль приведен в табл. 6.
Таблица 6
Специальные символы
Изображение Название Изображение Название >
— * । + Плюс Минус Звездочка Наклонная черта Точка Запятая Двоеточие Точка с запятой Апостроф «Крышка» Знак адреса Знак номера Знак доллара ~ : Т| — С2 л А V Л V 11 о * — V II II Равно Больше Меньше Больше или равно Меньше или равно Не равно Круглые скобки Квадратные скобки Фшурные скобки Присваивание Две точки Скобка-звездочка Скобка-точка
Символами-разделителями считаются пробелы, комментарии
и концы строк. Комментарии могут содержать любые символы,
заключенные в ограничивающие скобки. В качестве О] раничива-
ющих скобок в этом случае используются фигурные скобки { }
или скобки со звездочкой (* *). Например: {Главная программа}
(*Рпта 1*)
С помощью перечисленных символов формируются:
• имена;
• ключевые (служебные) слова;
• числа;
• строки символов:
• метки.
Имена в Паскале применяются для обозначения различных
конструкций языка: констан г, переменных, типов, границ, про-
цедур и функций. Имена обязательно начинаются с латинской
буквы или символа подчеркивания «_»; за ними могуч следовать
в любой комбинации латинские буквы и цифры. Турбо Паскаль
7.0 не различает прописные и строчные буквы. Длина имени мо-
жет быть любой, но сравнение имен производится по первым 6^
символам. Не допускается использование для написания имен
специальных символов и символов-разделителей. Например:
_х, В12, 8Ъаск — правильно; ЪаЬе!. 4, КсюТ-З — непра-
вильно .
Нек
смысл (
станз и
примен
должны
вые ело*
в языке
сок зар<
пожени
Им»
(от 0 дс
рукцик
1, 999
Ст]
люченн
троф, т
Чис
сываюз
бым чи
ле цела
62782Ф
кой; 5 Г
Веи
иметь 1
Числа (
ной тс
4.897Е-
восьмо
знаком
нельзя
ки на д
0,2 —
1 000
ЕЗ—
08 —
120.
Некоторые имена имеют в Паскале заранее определенный
смысл (это имена математических функций, типов данных, кон-
стант и т.д.). Такие имена называются стандартными. Имена,
применяемые пользователем для обозначения конструкций, не
должны совпадать по написанию с ключевыми словами. Ключе-
вые слова — это некоторое множество имен, зарезервированных
в языке для написания операторов и других конструкций. Спи-
сок зарезервированных слов в Турбо Паскале 7.0 приведен в при-
ложении 2.
Имя метки перехода может представлят ь собой целое число
(от 0 до 9999), строку символов или символьно-цифровую конст-
рукцию. Например:
1, 9999г И2, 4т32е, текка!.
Строка символов — это последовательность символов, зак-
люченная в апострофы. Если нужно включить в строку сам апос-
троф, то он записывается дважды. Например:
‘*\ V, ьВеВщ’, ‘Аэ, Ъ, .
Числа, обозначающие целые и вещественные значения, запи-
сываются в Паскале в десятичной системе счисления. Перед лю-
бым числом может стоять знак «+» или «-». В вещественном чис-
ле целая часть от дробной отделяется точкой. Например: 3, -50,
6278244 — целые числа; -0.6, 15.75 — числа с фиксированной т оч-
кой; 5Е-8, 9.422Е+08, 1Е10 — числа с плавающей точкой.
Вещественные числа, содержащие десятичную точку, должны
иметь перед ней и после нее по крайней мере по одной цифре.
Числа с плавающей точкой имеют мантиссу (число с фиксирован-
ной точкой) и масштабный множитель (порядок). Например,
4.897Е+08 означает, что число 4.897 надо умножить па десять в
восьмой степени. Порядок — это целое двухразрядное число со
знаком. Пробелы внутри чисел недопустимы. Числа, как и имена,
нельзя разрывать при переносе текста программы с одной стро-
ки на другую. Например, неправильно написаны числа:
0,2 — запятая вместо точки (правильно 0.2);
1 000 — число содержит пробел (правильно 1000);
ЕЗ — нет мантиссы перед Е (правильно 1ЕЗ);
08 — пет целой части (правильно 0.08):
120. — нет дробной части (правильно 120.0 или 1.2Е2).
3.3. Структура программы на языке
Паскаль
Программа на Паскале состои г из двух частей: описания дан-
ных и описания действий. Описание данных содержит сведения обо
всех данных, обрабатываемых программой. Если программа со-
держит отдельные процедуры и функции, то их описание также
располагается в этой части. Описание действий включает все опе-
раторы. с помощью которых осуществляется обработка данных.
______Тг
1п1е^ег
(целое)
Еоп^Тш
(длинно
ВуГе
(длиной
\\7огё
(длиной
3.3.1. Типы данных, используемые в языке
Паскаль
Любой тип данных определяет множество значений, которые
может принимать та или иная переменная, и множество опера-
ций, которые можно к ним применить. Типы данных, используе-
мые в языке Турбо Паскаль 7.0. можно разделить на три группы:
простые типы (целочисленный, вещественный, символьный,
строковый, логический, интервальный, перечисляемый);
структурированные типы (запись, массив, множество, файл);
ссылочные типы.
Рассмотрим более подробно простые типы данных.
Целочисленные типы. Переменные целого типа могут прини-
мать только целые значения. Использование десятичной точки в
изображении целого числа недопустимо (например: 35.0 не-
правильно, 35 — правильно). Если используются операнды цело-
го типа, то операции сложение «+», вычитание «-», умножение
«*», Моё и ЕЙу (см. приложение 3) дают результат цело] о типа.
Операция тоё обозначает взятие остатка от целочисленного де-
ления (например: 13 Моё 5 =3; 5 Моё 2 =-1). Операция Э1У яв-
ляется операцией целочисленного деления с отбрасыванием ос-
татка (например: 13 В1у 5 =2; -5 О1У 2 = 2). В табл. 7 приведены
целочисленные типы, допустимые в языке Турбо Паскаль 7.0.
Таблица 7
Целочисленные типы Турбо Паскаля 7.0
Тип Допуст имые значения Формат
ЗЬогНгП (короткое целое) -128.. 127 1 бай г со знаком
Чап
ватели
Вен
мен гов
формат
3.14, 2.'
мыс в я
Кеа! (вс
81п§1е О
точное!
ВоиЪк
ТОЧНОС1
ЕхТепйе
НОЙ ТОТ
Сотр (
В
ные. О.
прилоя
ного п
Сил
ются э:
лов. С>
челове]
Продолжение
Тип Допустимые значения Формат
1п1е$ег (целое) Еоп&1п1 (длинное целое) Ву1е (длиной в байт) №огс! (длиной в слово) -32768.. 32767 -21 47483648 .. 2147483647 0.. 255 0.. 65535 2 байта со знаком 4 байта со знаком 1 байт без знака 2 байта без знака
Чаще всего для обозначения переменных целого типа пользо-
ватели выбирают тип 1п1е§ег.
Вещественные типы. Вещественный тип формируется из эле-
ментов подмножества вещественных чисел, представленных в
форматах с фиксированной или плавающей точкой (например:
3.14, 2.5Е+01)* В табл. 8 показаны вещественные типы, допусти-
мые в языке Турбо Паскаль 7.0.
Таблица 8
Вещественные т ины языка Турбо Паскаль 7.0
Тип Допустимые значения Точность Формат
Кеа! (вещественный) ±(2.9*10’39.. 1.7*10+38) 11—12 знаков 6 байт
81п§1е (с одинарной точностью) ±(1.5*10'45.. 3.4*10+38) 7—8 знаков 4 бай га
ИоиЫе (с двойной точностью) ±(5.0*10'324.. 1 7*1О+308) 15 16 знаков 8 баш
Ехипдед (повышен- ной точности) ±(3.4*10 4932.. 1.1*10+4932) 19—20 знаков 10 байт
Сотр (сложный) ± 9.2*10+1К 19— 20 знаков 8 байт
Все операции над данными вещественного типа приближен-
ные. Операции, дающие вещественные результаты, приведены в
приложении 3. Чаше всего для обозначения переменных веществен-
ного типа пользователи выбирают тип Кеа1.
Символьный тип. Значениями символьного типа СЬаг явля-
ются элементы конечного и упорядоченного множества симво-
лов. Символьные данные используются для облегчения общения
человека с машиной. К сожалению, не существует единого стан-
дарта множества символов. Чаще всего используются символы
американского стандарта А8СН (Атепсап 81апдагё Соде Гог
1пГогтайоп 1п1егскап^е).
Значения типа Скат записываются одним символом, заклю-
ченным в апострофы (например: ‘А\ Т), или задаются непос-
редственно А8СП-кодом символа (например: #65 — код символа
‘А'). В компьютере переменная типа Скат занимает один байт
памяти.
В рамках этого типа десятичные цифры упорядочены в соот-
ветствии с их численными значениями (например: ’5’<16’). Буквы
упорядочены в алфавитном порядке (например: ‘А'<'В’)-
Строковый тип. Тип данных предназначен для хране-
ния последовательности символов (элементов типа Скаг). Стро-
ка символов должна быть заключена в апострофы (например:
‘строка символов4). Максимальная длина строки — 255 симво-
лов. В машине каждый символ строки занимает 1 байт памяти.
Кроме того, 1 байт отводится дополнительно для хранения ин-
формации о длине строки. Таким образом, область памяти,
выделяемая под строку символов, всегда на 1 байт больше той.
которую вы запрашиваете при объявлении переменной.
Логический тип. Данные логического типа Воо1сап могут при-
нимать одно из двух значений, обозначаемых стандартными име-
нами Тгие (истина, 1) и Раке (ложь, 0). Эти величины упорядоче-
ны следующим образом: Тгие>Еа1$е. Чаще всего на практике ис-
пользуются следующие логические операции, дающие логические
результаты применительно к логическим операндам (см. прило-
жение 3):
№о1 — инверсия (логическое отрицание, операция «НЕ»);
Апд конъюнкция (логическое умножение, операция «И»):
От — дизъюнкция (логическое сложение, операция «ИЛИ»);
Хог операция «исключающее ИЛИ».
Логические операции дают следующие результаты:
Мог Еа1$е=Тгие: ЪЗог Тгие=Еакс;
Еа1зе Ап<1 Еа18С=Еа1$е;
Гаке Апс! Тгис=Еакс:
Тгие Апй Гаке=Еакс;
Тгие Апд Тгие=Тгие:
Гаке Ог Еа1$е=Еаке;
Гаке Ог Т гие=Тгие;
Тгие Ог Еаке=Тгие;
Т гие Ог Тгие=Тгие;
Гаке Хог Еаке=Еаке;
Гаке Хог Тгие=Тгие;
Тгие Хог Гаке=Тгие;
Тгие Хог Тгие=Еаке.
К переменным логического чипа могут применяться опера-
ции сравнения «=» и «<>».
Переменные типа Воо1еап занимают I байт памяти.
Для того чтобы обеспечить совместимость с оболочкой
\У1пдо\у&, в Турбо Паскале 7.0 введены логические типы Ву(еВоо1,
№огс!Воо1 и Еоп^Воо!, занимающие в памяти один байт, два байта
и четыре байта соответственно.
Интервальный тип. Интервальный (ограниченный. 8иЬгап«:е)
тип описывается так:
имя_типа=т1п . . так;
где тт — левая граница диапазона, шах — правая граница диапазона.
Диапазон значений задается с помощью любого простого типа
данных, за исключением вещественного. Например, запись
Репой-1975..]998; будет означать, что переменные типа Репой
могут принимать значения целых чисел, лежащих в интервале от
1975 до 1998. Если попытаться присвой! ь этим переменным зна-
чения, не входящие в заданный интервал, — это может привести
к ошибке в программе.
Перечисляемый тип. Перечисляемый тип конструируется
пользователем путем перечисления в круглых скобках через запя-
тую всех констант, которые должны принадлежать этому типу
данных. Константы этого типа обязательно задаются именами.
Перечисляемый тип описывается так:
имя_типа=(имя!, имя2,..., имяЫ) ;
где имя1, имя2,..., имяК — имена конкретных констант, включаемых
в указанный топ. Эти значения упорядочены, 1 .е, имя1 <имя2<. ..<имяЫ.
Например, запись Со1ог(Кей. Уе11о\у, Огсеп, В1пе): будет оз-
начать, что переменные типа Со1ог могут принимать одно из пе-
речисленных значений: Кеб, Уе11о\у, Сгееп или В1ие. К перемен-
ным этого типа применимы операции сравнения. Значения пере-
менных перечисляемого типа не могут вводиться оператором
КеайЬп и выводиться оператором \Уп1сЬп.
3.3.2. Структура программы
Программа, записанная на языке Паскаль, должна иметь за-
головок и тело программы, называемое блоком.
Заголовок программы состоит из зарезервированного слова
Рго^гат и имени программы. В Турбо Паскале 7.0 в отличие от
стандартного Паскаля эта строка необязательна. После заголов-
ка программы в некоторых случаях записывается оператор Е^еа,
используемый для подключения к тексту программы стандарт-
ных библиотечных модулей, например: Пзез Сг1, Отарк, 81пп^8,
Рпп1ег;. Оператор Пзев может быть использован в программе
только один раз.
Блок программы состоит из шести разделов:
1) описания меток (ЬаЬе1);
2) описания констант (СопаХ);
3) описания типов (Туре);
4) описания переменных (Уаг);
5) описания процедур и функций;
6) описания операторов.
В стандартном Паскале менять разделы местами нельзя. В Тур-
бо Паскале 7.0 соблюдение такого порядка следования разделов
(за исключением раздела операторов) необязательно.
Структура программы (блока) может иметь многоуровневый
характер, т.е. внутрь программы могут быть включены другие
программы. Так, программа М (рис. 29) является главной про-
граммой нулевого (старшего) уровня. В нее вложены программы
других (младших) уровней. Приведенная на рис. 29 программа
имеет следующие уровни:
Рис. 29. Структура блока
0-й ур<
1-й урс
2-й ур<
3-й урс
Прот
мами. П
Описань
кций де!
описаны
ствующ]
а также
дают св<
Так,
грамма
ми). Им<
имена о!
В ка1
кале (та
произве,
вого эле
веден ш
Про:
смотрил
В за
вид зап
Ргодга]
ВТ
мендует
мы и ее
поможе
имени т
именам
мере, п
строка:
Нач
алгори!
0-й уровень — программа М;
1-й уровень — программы Р и Т;
2-й уровень — программы А, К и 8;
3-й уровень программа В.
Программы младших уровней часто называют подпрограм-
мами. Подпрограммы также начинаются с разделов описаний.
Описания меток, констант, типов, переменных, процедур и фун-
кций действительны только в рамках тех подпрограмм. где они
описаны, т.е. являются локальными. Это означает, что соответ-
ствующие имена имеют смысл только в тексте своей программы,
а также в программах младших уровней. Говорят, что они обла-
дают своей областью действия.
Так, областью действия имен программы М является вся про-
грамма полностью (имена программы М являются г юбальны-
ми). Имена программы Р действительны и для программ А и В, а
имена объектов программы В действительны только внутри нее.
В качестве примера рассмотрим структуру программы на Пас-
кале (табл. 9), реализующей алгоритм определения суммы или
произведения элементов матрицы в зависимости от значения пер-
вого элемента. Алгоритм был разработан в подразд. 2.4.4 и при-
веден на рис. 23.
Программа содержит все перечисленные выше разделы. Рас-
смотрим более подробно структуру каждого из них.
3.3.3. Заголовок программы и раздел
описаний
В заголовке программы ука зывается имя программы. Общий
вид заголовка:
Ргодгат имя;
В Турбо Паскале 7.0 эта строка необязательна, однако реко-
мендуется в начале программы все-таки указывать имя програм-
мы и се версию — это повысит удобочитаемое! ь программы и
поможет в дальнейшем упорядочить вашу работу. К написанию
имени программы предъявляю гея такие же требования, как и к
именам констант, переменных и т.д. (см подразд. 3.2.2). В при-
мере, приведенном в табл. 9, заголовком программы является
строка: Ргодгат МАТЕ;
Начинающий программист может использовать для перевода
алгоритма в программу на Паскале таблицу перевода, приведен-
Таблица 9
Структура программы на Паскале
Структура программы
Заголовок программы
Тело программы (блок)
Оператор Бзез
1. Раздел описания меток (ЬаЬе1)
2. Раздел описания констант (СопзС)
3. Раздел описания типов (Туре)
4. Раздел описания переменных (Уаг)
Описание данных 5. Раздел описания процедур и функций (Ргоседиге, Рипсйоп)
Описание действий 6. Раздел операторов
Пример
Ргодгат МА ТВ.;
158е8 Сг1;
ЬаЬе! 10, 20;
Сопзг п=2; т=3;
Туре МаГ=аггау[1..п,1„т] оГ гса1;
Уаг А:Ма1;
К:геа1,
1. рнПе^ег;
Ргоседиге $ит(А:Ма1;п?гп:т1еёег;
Уаг К:геа1);
Уаг 1, рт1е|>ег;
Ве^т Я:=0;
Рог й=1 То п Во
Рог р=1 То т Во
Я-К+АВЛ;
Епд;
Ргоседиге Рго(А:Ма1;п,т:1п1еёег;
Уаг Я:геа1);
Уаг 1, ртГе^ег;
Ве$1п К:=1;
Рог к=1 То п Вс
Рог р=1 То т Во
К:=К*А[Ц];
Епд;
Ве^т
С1г8сг;
Ро1 1=1 То п Во
Рог р=1 То т Во Вс^пп
Кеад(АВЛ);
\УгкеЬп(А[1Л); Епд;
10. И А[1,1]>=0Ткег5ит( Х,п,т,К)
Еке Рго(^,п,т,К);
20 \УпГе1 <А(1,1)=>,А[1,1]? К=’,К);
Епс1.
ную в приложении 4. В соответствии с этой таблицей заголовок
программы соответствует началу алгоритма.
В следующей строке программы (см. табл. 9) использован
оператор Цзсз для подключения к программе библиотеки СгТ. в
которой находится, например, такая процедура, как С1г8сг (очи-
стка экрана).
Раздел описания меток (ЬаЬеГ). Любой оператор программы
может быть снабжен меткой перехода. Метка представляет со-
бой строку символов (например: Ме1ка1, 1с2) или целое положи-
тельное число, содержащее не более четырех цифр (от 0 до 9999).
Метки отделяются от операторов двоеточием. Все метки, встре-
чающиеся в программе, должны быть описаны в разделе ЬаЬек
Общий вид раздела:
ЬаЬе! метка!, метка2,...;
В примере, приведенном в табл. 9, раздел описания меток
имеет вид:
ЬаЬе! 10, 20;
а метки указывают на строки:
10: II А[1,1 ] >=0 ТНеп Зит(А,п,т,П)
Е1зе Рго(А, п,ш,Н);
20: Юг11еЬп(‘А(1, 1) =’, А [ 1,1 ] ,4 Н=’,Н) ;
Раздел описания констант (Соп8Г). Под константой в языке
Паскаль подразумевается число, отделенный символ или строка
символов.
Общий вид раздела описания констант:
СопвЬ имя1=значение; имя2=значение;...
Здесь имя! и имя2 — имена констант, описываемых в разделе.
Числовые константы могут быть целыми и вещественными.
Вещественные константы могут быть представлены в двух фор-
мах: с фиксированной и плавающей точкой. Символьная констан-
та представляет собой символ, заключенный в апострофы. Кон-
станты-строки — это последовательность символов, заключен-
ная в апострофы. Длиной строки называется число элементов в ней
Логические (булевы) константы имеют два значения — Тгие и Раке.
Пример.
СопзТ а=23; Ь=-15;
с=4.35; а=7.12Ен 02;
е=ьА?; Е=‘5!;
д=РиЬпа’; 13=42345 6’;
г=Тгие;
2=Га1зе;
В приведенном примере (см. табл. 9) раздел описания кон-
стант имеет вид:
СопзС п=2; т=3;
Раздел описания типов (Туре). Этот раздел используется, если
в программе вводятся типы, отличные от стандартных.
Общий вид раздела описания типов:
Туре имя!=тип; имя2-тип;...
где имя 1 и имя2 — имена типов.
В примере, рассмотренном в табл. 9, раздел описания типов
имеет вид:
Туре МаТ=агтау[1..г,1..т] о! геа1;
Здесь тип Мат определен как вещественный двухмерный мас-
сив с индексами интервального (ограниченного) типа.
Раздел описания типов включается в блок, если необходимо
предусмотреть несколько имен для стандартных типов или ввес-
ти новые имена. Эти возможное! и делают про] рамму более на-
глядной и отражающей смысл решаемой задачи.
Раздел описания переменных (Уаг). Раздел имеет следующий вид:
Уаг имя1, имя2,...: тип;
имя 11/ имя 12,...: тип;...
В разделе Уаг вводится имя каждой переменной и указывает-
ся, к какому типу эта переменная принадлежит. Каждая перемен-
ная должна быть описана до ее использования в программе и
отнесена к одному и только одному типу.
В примере, рассмотренном в табл. 9, раздел описания пере-
менных имеет вид:
Уаг А:МаТ;
Р:геа1;
1/ з:1пЬедег;
Здесь А — массив типа Ма1; К — вещественная переменная;
1 и ] — переменные целого типа.
Таким образом, любая переменная в программе может быть
описана двумя способами: либо описанием самого т ипа в разделе
Уаг, либо указанием в разделе Уаг имени типа, которое предва-
рительно описано в разделе Туре.
Раздел описания процедур и функций рассматривается в под-
разд. 3.6.1 и 3.6.2.
Разделу описания данных в программе на языке Паскаль со-
ответствует конструкция «Список данных» в алгоритме. Для пе-
ревода алгоритмической конструкции «Список данных» в про-
грамму в
в прилол
Опер;
ствий О)
ле опера
этого ра
Разде
Бес 1п
ОЕ
СП
оп
Епс1.
В это
ные опер
раторы с
тор стой
той не с
СИМВОЛО1
Проа
ставные
сятся- оп
вода дан
Слом
гих (про<
вида Вс<1
Опер
ным опе]
имя лер
Наир
грамму на Паскале можно использовать таблицу, приведенную
в приложении 4.
3.4. Операторы языка Паскаль
Операторы в языке Паскаль предназначены для описания дей-
ствий Операторы сосредоточены в специальном разделе (разде-
ле операторов), который располагается в конце блока. Наличие
этого раздела в программе обязательно.
3.4.1. Раздел операторов
Раздел операторов имеет следующий вид:
Вед1п
оператор!;
оператор2;
операторК;
Епд.
В этот раздел могут быть включены пустые, простые и слож-
ные операторы. Любой из них может быть помечен меткой. Опе-
раторы отделяются друг от друга точкой с запятой. Если опера-
тор стоит перед словом Еке. то в конце оператора точка с запя-
той не ставится. Пустой оператор («:») не содержит никаких
символов и не обозначает никаких действий.
Простым называется оператор, в который нс входят как со-
ставные части другие операторы. К простым операторам отно-
сятся: оператор присваивания, операторы процедур ввода и вы-
вода данных и оператор перехода.
Сложные операторы — это конструкции, состоящие из дру-
гих (простых) операторов, заключенных в операторные скобки
вида Ве^1п...Еп<1;.
3.4.2. Оператор присваивания
Оператор присваивания является основным, фундаменталь-
ным оператором. Общий вид оператора:
имя_переменной:=выражение;
Например: Е:=3*с+ 2*$ш(х+Р1/2);
Выражение состоит из операндов и операций. Операндом
может быть константа, переменная или функция. Операции объе-
диняют операнды и выражения. Язык Паскаль содержит ряд пред-
варительно описанных (встроенных) функций, перечень которых
приведен в приложении 5.
Вид выражения однозначно определяет правила его вычисле-
ния: действия выполняются слева направо с соблюдением стар-
шинства, указанного в таблице приоритетов (табл. 10).
Табл ица 10
Таблица приоритетов
Очередность выполнения операций Операции
1 +, Ыо1
9 *, / , ОК, Мод, Апд, 8Ьг, 8Ы
3 + , Ог, Хог
4 1п, >, <, =, <>, >= <=
Операция @ — операция взятия адреса.
Операция 8йг (8Ы) — циклический сдвиг вправо (влево). Опе-
рация 1п является операцией отношения и позволяет определять
присутствие элемента в множестве. Любое выражение в скобках
вычисляется раньше, чем выполняется операция, предшествую-
щая скобкам. Так. в примере Р:=3*с+2*8т(х+Р1/2); сначала вы-
числяется значение х+Р1/2, затем определяе тся значение функции
8т(х+Р1/2), затем выполняется операция умножения 3*с, затем —
вторая операция умножения 2*8т(х4Р1/2) и последней выполня-
ется операция сложения.
Операция присваивания допускается для переменных всех типов,
за исключением типа «файл». В опера горе присваивания перемен-
ная, стоящая слева от знака присваивания, и выражение, стоящее спра-
ва от него, должны иметь один и тот же тип. Переменные и выраже-
ния, относящиеся к символьному или строковому типу в операции
присваивания, должны иметь одинаковое число элементов. Разреша-
ется присваивать переменной типа Кеа! выражение типа 1п1е^ег.
Пример
у:=81п(х)+Со$(х); а:-(Ь+с)*(1.01+с1); к:=п>т;
Здесь переменным у и а присваивается значение типа геа1.
Логическая переменная к принимает значение Тгие или Раке.
3.4.3. Операторы процедур
Оператор процедуры запускает на выполнение (активизирует)
некоторую подпрограмму, задающую последовательность действий,
составляющих суть процедуры. В языке Паскаль различают стан-
дартные процедуры и процедуры, разработанные пользователем.
Среди стандартных процедур чаще всего используются процеду-
ры ввода-вывода.
При реализации Паскаль-программы данные хранятся в па-
мяти ЭВМ в так называемом внутреннем представлении. Напри-
мер, числа хранятся в двоичной системе счисления, а символы —
в виде их двоичных номеров в алфавите. Поэтому данные при
вводе должны преобразовываться из привычного человеку тек-
стового представления во внутреннее представление, а при выво-
де, наоборот, данные из внутреннего представления должны пре-
образовываться в последовательность символов, которую может
прочитать человек.
Как при вводе, так и при выводе данные во внутреннем пред-
ставлении образуют строки текста. Последовательное гь входных
строк считается расположенной в специальном файле с именем
1при1, а выходные строки поступают в файл с именем Ои1риГ.
При работе в диалоговом режиме, когда входные данные вводят-
ся в ЭВМ в ходе решения задачи, файл 1прн( обычно связывается
с клавиатурой, а файл Ои1ри1 — с экраном дисплея.
Процедуры ввода. Для ввода переменных используется стан-
дартная процедура:
КеасЦ переменная 1,переменнаяЫ) ;
Значения вводимых переменных (входной поток) должны со-
ответствовать типам переменных, указанным в разделе описания
переменных. Значения переменных вводятся с клавиатуры и от-
деляются друг от друга хотя бы одним пробелом. Например: 1.5
2.15 -1.1 25.
При вводе символьных переменных пробел во входном по-
токе воспринимается как символ и его ставить нельзя.
Пример
Пусть с1,с2,сЗ:скаг; г:геа1; а : тпТедег; . Переменным
с1, с2, сЗ, г, г надо присвоить значения: ‘В’,
1.5, 25, соответственно.
В этом случае во входном потоке значения должны распола-
гаться так:
АВС 1.5 25
Оператор Веаб(с1лс2,сЗ,г,±); введет необходимые
данные.
Когда данные вводятся не с терминала, а из какого-либо ино-
го файла ввода Г (например, с магнитного диска), то в процедуре
указывается имя этого файла: Кеай(Г,с1,с2,сЗ,гл);
Кроме процедуры Ксад для ввода переменных может быть
использована процедура:
КеадЬп (переменная!,..., переменная!») ;
Как и процедура кеа<1, процедура Кеа<1Еп осуществляет ввод
данных из входного потока в соответствии со списком ввода.
Отличие состоит в том, что после выполнения процедуры
КсабЬп осуществляется автоматический переход на новую строку
входного потока, даже если в текущей строке остались невве-
денныс символы. Процедура Кеаб такого перехода не дает.
Например, если переменные х, у, / вещественного типа (геа1), а
при выполнении процедур Кеа(1Ьп(х,у); Кеаб(г); входной поток
имеет вид:
22.2
-287000.0 26.2
0.033 88.8,
то переменные получат следующие значения: х=2.22Е+01,
у— -2.87Е+05, х=3.ЗЕ-02.
Процедура КеайЬп может употребляться и без параметров.
В этом случае она просто пропускает все символы в текущей стро-
ке и переходит на начало следующей строки. Так, при выполне-
нии процедур
Веас1(х,у); КеадЬп; Кеаб(г);
в условиях предыдущего примера результат останется тем же.
Процедуры вывода. Для вывода данных из программы исполь-
зуется процедура ХУгпе. Общий вид оператора1
?7гтТе (выражение!, ...г выражением) ;
Здесь в круглых скобках помещается список выражений, зна-
чения которых выводятся на печать. В списке вывода могут быть
целые, вещественные, символьные и логические выражения, а так-
же произвольные наборы символов. Набор символов обязатель-
но заключается в апострофы.
Пример: \Уп1сСр=',р);
Этот оператор выполняется так: сначала выводятся символы,
заключенные в апострофы: р=. Затем выводится значение пере-
менной р, например 13.5. На экране монитора в результате ра-
боты оператора появится: р= 1.35Е+01.
Пользователь может определить, сколько разрядов должны
содержать выводимые данные. В этом случае процедура вывода
имеет вид:
ИгхЪе (выражение! : п!: т1, выражение2 : п2 :ш2,...) ;
Здесь п1, п2,... общее количество позиций в числах; ш1,
гп2,... — количество позиций в дробной части этих чисел.
Если число отводимых позиций избыточное, то поле слева
дополняется пробелами. Для целых чисел (т1е§ег) указывается
только общее количество позиций в числах (п1, п2,.. .). Для веще-
ственных (геа1) чисел количество позиций в дробной части (т1,
ш2,...) можно также не указывать, в этом случае числа будут вы-
водиться на экран в формате с плавающей точкой.
Пример
Ргодгат К;
Уаг а:геа1; 1:1п1.едег;
Вед! п
а:=23.745; 1:=189;
ДОглЪе (‘а=\ а: 6 : 3 , ‘ 1=’,1:4);
Мг±Те(‘ а=’,а:11, 1=\1:3);
Епд.
В результате выполнения программы на экран монитора бу-
дут выведены значения:
а=23.745 1=189 а=2.3745Е+01 1=189
Процедура вывода ХУгПеЬп отличается от процедуры XV1 Не
только тем, что после вывода значений, указанных в списке вы-
вода, происходит переход в начало новой строки. Если в преды-
дущем примере изменить операторы \Угйе(...) на операторы
\Уп1еЬп(...), то на экран монитора будут выведены значения:
а=23.745 1=189
а=2,3745Е+01 1=189
Список вывода у процедуры ХУгПеЬп может отсутствовать.
В этом случае будет выведена пустая строка.
Таблица перевода алгоритмических конструкций (присваи-
вание, ввод и вывод) в программные приведена в приложе-
нии 4.
3.4.4. Операторы языка Паскаль
для организации ветвления
Операторы программы, написанные на языке Паскаль, вы-
полняются в порядке их записи. Если при некотором условии надо
выполнить определенную последовательность операторов, то их
объединяют в один составной оператор.
Составной оператор. Оператор начинается ключевым словом
Ве§1п и заканчивается словом Епб. Между этими словами помеща-
ются операторы, которые выполняются в порядке их следования.
Пример
Ведхп
1:=2; к:=1/5; з:=1+к;
Епд;
Слова Ве%1п и Епс1 играют роль операторных скобок. Тело
самой программы также имеет вид составного оператора. Нельзя
извне составного оператора передавать управление внутрь его.
Для изменения естественной последовательности выполнения
операторов (передачи управления) язык Паскаль содержит ряд
специальных конструкций, по своему смыслу совпадающих с ана-
логичными конструкциями алгоритмов. К ним относятся опера-
тор перехода и выбирающие операторы.
Оператор перехода. Оператор перехода имеет вид:
СоТо метка;
Здесь метка указывает на то, что дальнейшая работа должна про-
водиться в другой части программы, а именно с той строки, на кото-
рую указывает метка. Метки, используемые в операторе, должны быть
предварительно описаны в разделе ЬаЬе! (см. подразд. 3.3.3).
Пример
Ргодгат С;
ТаЬе! 7;
Уаг а,Ь:геа1;
Ведтп
Ь:=5;
Со!: с 7;
7: а:=Ь*3;
ЕпсЗ.
Пс
ПИЙ в
П]
прове
ратор
вать т
ходы
рой в
затру;
соста!
кг
иногд
• I
• (
дожщ
• I
го бл<
• I
заверт
Вь
ны дл
ПОЛНЯ1
опера-;
О*
предн
СТИ 07
тор и?
1Г ус
Зд
вырая
опера
Если }
УСЛОВ1
Сл
ящего
вить 7
случае
гается
Пс
ма в г
Перевод оператора перехода из алгоритмических конструк-
ций в программу показан в приложении 4.
При выполнении оператора СоЮ переход осущесэ вляется без
проверки каких-либо условий, поэтому его часто называют опе-
ратором безусловного перехода. Этот оператор следует использо-
вать только в исключительных ситуациях, поскольку такие пере-
ходы разрушают связи между структурой программы и структу-
рой вычислений, что приводит к потере ясности программы и
затрудняет задачу верификации (доказательстве! правильное ги
составления программы).
Кроме оператора безусловного перехода, в Турбо Паскале 7.0
иногда используются четыре безусловные функции:
• Вгеак — позволяет досрочно закончить цикл:
• СопНгше — позволяет начать новую итерацию цикла, не
дожидаясь окончания предыдущей итерации:
• Ехй позволяет завершить работу текущего программно-
го блока (программу, процедуру);
• Нак(п) — позволяет завершить работу программы с кодом
завершения п.
Выбирающие операторы. Выбирающие опера горы предназначе-
ны для выделения из множества операторов одного, который вы-
полняется. В языке Паскаль предусмотрены два вида выбирающих
операторов: оператор условного перехода и оператор варианта.
Оператор условного перехода. Оператор условного перехода
предназначен для выбора одного из двух опера горов в зависимо-
сти от значения некоторого проверяемого условия. Этот опера-
тор имеет вид:
1Г условие Тйеп оператор! Е1зе оператор2;
Здесь в качестве условия используется некоторое логическое
выражение, задающее условие выбора выполняемого оператора:
оператор! и оператор2 могут бьпь простыми или составными
Если условие истинно (Тгие), то выполняется опера гор 1, если же
условие ложно (Еа1вс), то выполняется оператор2.
Следует обратить внимание на то, что в конце оператора, сто -
ящего перед словом Е1ае, точка с запятой нс славится. Нельзя ста-
вить точку с запятой и после слов ТЬеп и Е1зе, так как в этом
случае соответствующая ветвь оператора условного перехода счи-
тается пустой.
Порядок перевода оператора условного перехода из алг орит-
ма в программу приведен в приложении 4.
В качестве примера рассмотрим следующую задачу. Ввести
два вещественных числа и вывести их в порядке убывания:
Ргодгат ПитЬег;
\7аг а,Ь, г1, г2:геа1;
Ведтп
Неад(а,Ь);
КпЬеГп (а,Ь);
II а>Ь Тйеп Вед1п г1:=а; г2:=Ь; Епб
Е1зе Ведтп г1:=Ь; г2:=а; Епф
ПеЬп ("большее число=\ г! г ‘меньшее числом ,г2);
Епб.
Оператор условного перехода может содержать только одну ветвь:
ГI условие ТЬеп оператор;
В этом случае, если условие истинно (Тгие), то выполняется
оператор, если условие ложно (Ьа1§е), то управление передается
следующему оператору программы.
Пример
...II а=0 ТНеп Ь:=Ъ/а; .
Ь:=х*а;...
В этом примере если условие а=0 не выполняется, то управ-
ление передается оператору Ь:=х*а;
Условие представляет собой логическое выражение, состоя-
щее из операндов и знаков операций. В качестве операций в ло-
гическом выражении прежде всего используются операции срав-
нения (-, >, <, >=, <=, <>), причем сравнивать между собой мож-
но только однотипные величины. Кроме операций сравнения, для
построения логических выражений можно использовать логичес-
кие операции, а также стандартную функцию определения нечет-
ности 033 (см. приложения 3 и 5).
Значение лог ического выражения вычисляется путем выпол-
нения указанных в нем операций с учетом их приоритета и рас-
ставленных круглых скобок.
Примеры записи условий в виде логических выражений:
АЬз(х)<=2 — значение х по модулю не превышает 2,
(х>=1) АпЗ (х<=2) — точка принадлежит отрезку [1,2];
Оск1(х) АпЗ (х>8) целое число х нечетное и больше 8;
$цг(х)+$дг(у)< 1 — точка плоскости с координатами (х,у) при-
надлежит единичному кругу с центром в начале координа г.
Таким образом, оператор условного перехода позволяет в
зависимости от значения лог ического условия перейти к опера-
тору (простому или составному), стоящему в одной из двух вет-
вей, причем одна из них может быть пустой.
Оператор варианта. В отличие от оператора условного пере-
хода в операторе варианта может быть не две, а произвольное
число ветвей.
Оператор варианта имеет вид;
Сазе переключатель СЕ
конст1,..., констЫ: оператор!;
констИ,конст] М: оператор2;
Е1зе
операторы;
Епд;
Переключатель и константы должны быть одного и того же
целочисленного типа. Переключатель (селектор) представляет
собой некоторое выражение. Выполнение оператора варианта
начинается с вычисления значения селектора. Затем оператор
выбора передает управление тому оператору, перед которым сто-
ит константа, совпадающая со значением переключателя. Если
совпадений не обнаружено, выполняется оператор, стоящий после
Еке. Ветвь Е1зе в операторе варианта может отсутствовать.
Пример
...Сазе з СТ
1/ 2: х:=0;
3: х:=х*х;
100: х:=81п(х);
Е1зе
х: =Соз(х);
ЕпЗ;...
В этом примере если селектор 1 принимает значение 3, то вы -
полняется оператор х:=х*х; .
Константы в операторе варианта не являются метками, не
описываются в разделе ЬаЬе! и их нельзя использовать в опера-
торе Оо1о.
Возможности оператора варианта можно продемонстриро-
вать, решая следующую задачу.
В старояпонском календаре принят шестидссятилетний цикл,
который состоит из пяти двенадцатилетних подциклов. Подцик-
лы обозначаются названием цвета: зеленый, красный, желтый,
белый, черный. Внутри двенадцатилетнего подцикла годы носят
названия животных: крысы, коровы, тигра, зайца, дракона, змеи,
лошади, овцы, обезьяны, курицы, собаки и свиньи. Составить
программу, которая читает год и выводит название этого года
по старояпонскому календарю.
Ргодгат Уеагз;
7аг уеаг:тпкедег; 1:0..11; к:0..4;
Вед1п
Неад(уеаг); Мг11е(уеаг); 1:=(уеаг-3) Моб 12;
к4: = (3010-уеаг) Мод 60 01\л 12;
ГОггЪеС ~ это год ’) ;
Сазе к 01
О :ТСг1Де (‘зелен’) ;
1 :ДОг1ке (‘крас') ;
2 :(Ъкелт’) ;
3 сТСггГе (‘бел’) ;
4 :МгНе (‘черв’) ;
Епб;
Сазе 1 ОГ {окончание прилагательного}
0,1,2,6,7,8,9,10, 11:ГОг1Ге(‘ой’) ;
3,4,5: МгПе (‘ого’) ;
Епб;
Сазе 1 ОГ
1 :Иг1ге (‘ крысы’) ;
2 : ДОг1Ге С коровы*) ;
3:№г1Ге(‘ тигра’) ;
4 :ГОг1Ге (* зайца') ;
5:ЭДг1Ге(‘ дракона’) ;
6:ТСг1Ге(‘ змеи’);
7:^г11еС лошади’) ;
8:й/г1Ге(‘ овцы’);
9:1Яг1Ге(‘ обезьяны’);
10:Иг1Ге (‘ курицы’);
11:Юг1Ге(‘ собаки’);
0:Иг1Ге(‘ свиньи5);
Епд;
Епд.
Если во входном потоке записать 1999, то в результате выполне-
ния программы будет напечатано: 1999 это год черного зайца.
Порядок перевода оператора варианта из алгоритма в про-
грамму приведен в приложении 4.
3.5. Операторы цикла языка
Паскаль
Циклы предусматривают многократное выполнение некото-
рых операторов, входящих в тело цикла (см. подразд. 2.3). В
языке Паскаль имеются три вида операторов цикла: №Ы1е (цикл-
ПОКА), К.ереа1 (цикл-ДО) и Рог (цикл с параметром). Если чис-
ло повторений известно, то лучше воспользоваться оператором
цикла с параметром. В остальных случаях целесообразно исполь-
зовать операторы цикла-ПОКА (цикла с заданным условием про-
должения работы) или цикла-ДО (цикла с заданным условием
окончания работы, цикла с итерацией).
3.5.1. Программирование конструкции
цикл-ПОКА
Цикл-ПОКА реализуется в языке Турбо Паскаль 7.0 с помо-
щью оператора ХУййе и имеет следующий вид:
№11.1е условие ОО оператор;
Здесь условие — это логическое выражение, определяющее
условие продолжения работы, оператор — простой или состав-
ной оператор, являющийся телом цикла.
Ло1 ичсское выражение вычисляется перед каждым выполнени-
ем оператора. Если условие Гше, то тело цикла выполняется и уп-
равление передается снова на вычисление условия, если же условие
Еаке, то тело цикла не выполняется и происходит выход из цикла.
Переход от алгоритмической конструкции цикл-ПОКА
к программе производится по правилам, показанным в прило-
жении 4.
Пример
...х: =5;
№111е х<>0 Оо
Ведыт
с:=с+1/х;
Епд;...
В процессе выполнения цикла сначала проверяется условие
х<>0. Если оно истинно (т.е. х не равно 0), то выполняется со-
ставной оператор, состоящий из операторов с:=с+1/х и х:=х-1.
после чего опять проверяется условие х<>0. Как только условие
перестанет выполняться, управление передается оператору, сто-
ящему после оператора Епд.
В качестве примера приведем программу вычисления суммы
членов бесконечного ряда 8=1 + 1/2+1/3+...+1Л+... с точностью до
8>е.
Ртодгат 8ит;
Уаг зЛе:геа1; тстпЛедег;
Ведтп
КеасЗ (е) ; ИгтЁеЬп (‘е=’, е) ;
з: =0; 1: =1 ;
№Ы1е 8<=е Оо
Ведгп
8:=8+1/х;
1: = 1 +1;
Епб;
МгтЪеЬп ('8=’, е) ;
Епб.
3.5.2. Программирование конструкции
цикл-ДО
Цикл-ДО реализуется в языке Турбо Паскаль 7.0 с помощью
оператора Кереа! и имеет следующий вид:
ВереаТ: оператор!; оператор2; . . .; ИпЪ11 условие;
Здесь условие — это логическое выражение, определяющее
условие окончания цикла. В данной конструкции опера горы тела
цикла, располагающиеся между словами Кереа! и ЦтН, заклю-
чать в операторные скобки Ве§ш...Епд необязательно.
Работает цикл-ДО гак: сначала выполняются операторы 1 ела
никла, затем вычисляется значение логического выражения, сто-
ящего в условии. Если условие Т аЬе, то вновь выполняются опе-
раторы тела цикла, если же условие Тгие, то цикл заканчивается.
Если проверяемое условие принимае! значение Тгие с самого
начала, то операторы тела цикла выполняются только один раз.
Если проверяемое условие никогда не принимает значение Тгие,
то операторы тела цикла будут выполняться бесконечное число
раз (зацикливание).
Переход от алгоритмической конструкции цикл-ДО к програм-
ме осуществляется по правилам, показанным в приложении 4.
Пример
...х: =5;
Нереа!
с:=с+1/х;
х:=х-1;
ЦптИ х=0;...
В этом примере сначала выполняются операторы с:=с+1/х
и х:=х-15 а затем проверяется условие х=0. Если х не равно О,
то операторы тела цикла выполняются повторно, если же
х=0, то управление передается оператору, стоящему за ПпЫ
х=0.
Программа вычисления суммы членов бесконечного ряда
8=1+1/2+1/3+...+1Л+-... с точностью до 8>е при использовании
оператора Кереа! будет выглядеть так:
Ргодгаш Зит;
5,е:геа1; 1:1пТедег;
Ведтп
Кеаб.(е); ДОгтСеЪп (‘е=’, е) ;
8:=0; т:=1;
НереаТ
8:=841/1;
1:=1+1;
Ип-Ы! 8>е;
йгйеЬп Сз=’, 8) ;
Епй.
3.5.3. Оператор цикла с параметром
Этот оператор предусматривает повторное выполнение опе-
раторов тела цикла с одновременным изменением по правилу
арифметической прогрессии значения, присваиваемого парамет-
ру цикла. Цикл с параметром имеет следующий вид:
Гог параметр :=начальное__значение То
конечное_значение По оператор;
Параметр цикла должен быть любого целочисленного типа.
Начальное и конечное значения параметра цикла могут задаваться
выражениями, которые должны иметь тот же тип, что и параметр.
Начальное и конечное значения вычисляются только один раз пе-
ред началом цикла. Параметр цикла нельзя изменять внутри тела
цикла. Шаг изменения параметра в этом цикле всегда равен 1.
Оператор, являющийся телом цикла, может быть как простым,
так и составным.
Пример
...Гог 1:=1 То 20 Во а:=а+1;...
В этом примере для 1=1, 2,..., 20 будет выполняться оператор
а:=а+1. Если начальное и конечное значения параметра цикла
относятся к символьному типу, например, имеют значения ‘а’ и
то переменная 1 принимает последовательно значения в по-
рядке алфавита: ка\ ‘с\.../х’.
Цикл по убывающим значениям параметра имеет вид;
Гог параметр:=начальное_значение ВомпТо конечное_
значение Во оператор;
Шаг изменения параметра в таком цикле равен -1.
Пример: ...Рог 5.: =20 ВомпТо 1 Во а:=а+1;...
В этом примере параметр 1 будет изменяться от 20 до 1 с ша-
гом -I.
Программа вычисления суммы 8= 1 + 1/2+1/3+...+ 1/50 с помо-
щью оператора Еог записывается так:
Ргодгат Бит;
7аг з:геа1; п:±пВедег;
Ведхп
з: =0;
Гог п:=1 То 50 Во
з:=з+1/п;
ДОгТВеЬп('8=',з);
Епс1.
В этой программе оператор з:=8+1/п; выполняется 50 раз для
п=1, 2...., 50, а результат будет иметь вид: 8= 4.4992053383Е+00.
Оператор цикла Еог не позволяет задавать шаг изменения па-
раметра, отличный от 1 или -1. Однако этот недостаток легко ис-
править в теле цикла. Например, если необходимо вычислить
сумму 8=1+ 1/2+1/4+...+1/50, то программа будет иметь вид:
Ргодгат 8ит;
\^аг з:геа1; к,п:1пВедег;
Ведз-П
з:=1;
Гог п:=1 То 25 Во
Ведтп
к :=2*п;
з : =8+1/к;
Епд;
Югг'СеЬп Сё-9, ё) ;
Епб.
В этом примере в тело цикла введен оператор к:=2*п. содер-
жащий масштабный коэффициент 2, который позволяет получить
нужную величину шага для расчета переменной 8.
Порядок перевода цикла с параметром из алгоритма в програм-
му для случая, когда шаг равен 1 (-1), приведен в приложении 4.
3.5.4. Массивы и их обработка с помощью
циклов
Кроме простых данных, язык Паскаль дает возможность эф-
фективно обрабатывать сложные типы. Сложные типы данных
формируются из простых типов.
К сложным типам относятся:
• массивы (аггау);
• записи (гесогс!);
• множества ($е1);
• файлы (П1е).
Массивы (аггау). Массив — это упорядоченный набор эле-
ментов одинакового типа, имеющих общее имя (см. подразд. 2.4).
Все элементы массива пронумерованы. Номер элемента массива
называется его индексом. Массивы должны быть обязательно опи-
саны перед использованием в про! раммс в разделе описания ти-
пов или в разделе описания переменных.
Общий вид описания массива (в разделе описания перемен-
ных Уаг):
имя_массива:аггау[тип1, тип2,...,типЫ] тип_элемен-
тов;
Здесь тип1, тип2, ..., типИ — типы индексов. Количество ин-
дексов определяет размерность массива. Индексы могут быть
любых скалярных типов, кроме геа1. Тип индексов определяет
границы их изменения. Границы изменения индексов должны бы ть
константами, причем верхняя граница должна быть больше
нижней.
Пример описания массивов:
Уаг а г Ь: аггау [ 1. . 100 ] оГ 1п1гедег;
с:аггау[1..3] оГ сЬаг;
б.: аггау [ 1. . 40г ‘а’. . *е’ ] о! геа1;
Здесь описаны два одинаковых массива а и Ь, каждый из ко-
торых состоит из 100 целочисленных элементов. Массив с содер-
жит три элемента символьного типа Массив с1 — двухмерный
массив, содержащий 40 строк и 5 столбцов. Строки нумеруются
цифрами от 1 до 40, а столбцы — буквами от а до е. Так, напри-
мер, нумеруются места в самолете: номер кресла состоит из номе-
ра ряда (от 1 до 40) и номера в ряду (от а до е).
Массив можно описать и в разделе описания типов Туре.
Общий вид описания массива (в разделе Туре):
Туре имя_массива=аггау[тип1,.,.{типМ] сТ тип_элемен-
тов;
Компоненты описания в этом случае определяются так же,
как и при описании массивов в разделе Уаг.
К элементам массива применимы две операции: присваива-
ние и выборка. Примеры использования элементов массивов в
операциях присваивания:
х:=а[5]; — переменной х присваивается значение пятого эле-
мента массива а;
а[20]:-2*Ь[3]- 6; двадцатому элементу массива а прис-
ваивается значение, получаемое после расчета выражения
2*Ъ[3]-6;
д[5/е’]:=8ш(х); — элементу двухмерного массива д, располо-
женному на пересечении пятой строки со столбцом е, присвоить
значение 8т(х).
Для организации выборки элементов массива чаще всего ис-
пользуются циклы Рассмотрим несколько примеров.
В языке Паскаль процедуры ввода и вывода не могут обраба-
тывать массив целиком. Поэтому для ввода данных в одномер-
ный массив а, состоящий из 100 элементов, нужно использовать
цикл с параметром:
Гог ±:=1 То 100 Эо Кеа6(а[1]);
Для определения суммы 8 всех элементов массива а также мож-
но использовать цикл с параметром:
5 :=0 ;
Гог 1:=1 То 100 Эо 5:=з+а[1];
Для нахождения максимального элемента массива а можно
использовать следующие операции:
...тах: =а [ 1 ] ;
Гог 1:=2 То 100 Оо
тах<а[1] ТЬеп тах:=а [г] ;...
Здесь в цикле осуществляются сравнение предполагаемого мак-
симального элемента со значением текущего элемента массива,
начиная со второго, и присваивание переменной шах нового зна-
чения, если условие шах<ар] выполняется.
Для определения суммы всех положительных элементов мас-
сива а, состоящего из 100 элементов, предшествующих первому
отрицательному элементу, в состав программы целесообразно
включить следующие операторы:
...з:=0; 1:=1;
(1<=100) Апб (а[1]>=0) Бо
Вед1п
з:=з+а [1];
1:=1+1;
Епб;...
Здесь целесообразно использовать цикл-ПОКА, так как чис-
ло элементов массива а, входящих в сумму, заранее не известно.
Во многих задачах бывает необходимо поставить элементы
массива таким образом, чтобы они располагались в порядке воз-
растания или убывания. Такие массивы называются упорядочен-
ными, а сам процесс их получения называется сортировкой (см.
подразд. 2.4.4).
Пусть необходимо ввести текстовый массив длиной 60 симво-
лов, упорядочить символы по алфавиту и вывести их на печать.
Программа решения этой задачи имеет вид:
Ргодгат 5ог1;
Сопз! п=60;
Уаг г, й : тг.Гедег; г:сИаг;
к:аггау[1..п1 о Г сИаг;
Ведхп
Рог 1:=1 То п Бе Кеас1(х[1]);
Рог 1:=1 То п-1 Бо
Гог д:=1+1 То п Бо
11 х[;]<х[1] ТНеп
Вед1п
г:=х [ 1] ;
х[±]:=х[д];
х[}]:=г;
Епс1;
КгтТеЬп (‘упорядоченный массив: ’) ;
Гог х:=1 То п Бо КгИе(хд]);
ИгИеЬп;
Епб.
Наряду с одномерными и двухмерными массивами в Турбо
Паскале 7.0 могут использоваться и многомерные массивы (см.
подразд. 2.4.2), однако на практике массивы размерностью свы -
ше трех используются крайне редко.
Порядок перевода алгоритмической конструкции Список дан-
ных (в которой содержатся массивы) в программу приведен
в приложении 4.
3.6. Процедуры и функции
Кроме стандартных функций и процедур, язык Паскаль по-
зволяет пользователю формировать свои процедуры и функции.
Их целесообразно создавать, если при решении задач возникает
необходимость проводи гь вычисления по одним и 1 ем же форму-
лам (гглгоритмам) многократно, например, находить корни квад-
ратного уравнения ах+Ьх+с-0 при различных значениях коэф-
фициентов а, Ъ и с.
При использовании процедур (функций) необходимо разли-
чать описание процедуры (функции) и оператор вызова проце-
дуры (функции). Описание процедуры (функции) дается в разде-
ле описания процедур и функций, который должен распола] агь-
ся в блоке после раздела описания переменных. Оператор вызова
процедуры (функции) ставится в основной программе (в разделе
операторов) и служит для активизации процедуры (функции).
3.6.1. Процедуры
Описание процедуры должно начинаться с заголовка и закан-
чиваться опера гором Епд. Общий вид заголовка:
Ргосес1иге имя (параметр! :тип;.„, параметра:тип;
1Уаг параметрМ: тип;...) ;
Структура описания процедуры аналогична структуре глав-
ной программы и может содержать разделы описаний меток
(ЬаЬе1), констант (Соп$1), типов (Туре), переменных (Уаг) и раз-
дел операторов процедуры.
Пример
Ргодгат Ргос;
7аг а:1п!:едег;
Ь:геа1; с:сйаг;
Ргосес1иге Ы(р1:геа1; р2:сИаг; \7аг рЗ:геа1);
Ведтп {начало работы процедуры}
Епс1; {конец процедуры}
Ведтп {начало работы программы)
Епск
Параметры, используемые в заголовке процедуры (пара-
метр!,...), являются формальными.
Формальные параметры — это наименования переменных, че-
рез которые передается информация из программы в процедуру
либо из процедуры в программу.
Пусть, например, процедура осуществляет решение квад-
ратного уравнения ах2+Ьхтс=0. Тогда она должна иметь пять
формальных параметров: для значений коэффициентов а, Ь. с и
для результатов X] и хо.
Для того чтобы запустить процедуру в работу, необходимо к
ней обратиться (ее вызвать).
Общий вид оператора вызова процедуры:
имя (параметр!, параметр2,...);
Здесь параметр!, параметр2,... — фактические пара-
метры.
Фактические параметры — это наименования переменных,
значения которых при обращении к процедуре присваиваются
соответствующим формальным параметрам.
При вызове процедуры происходят следующие действия. Ус-
танавливается взаимно однозначное соответствие между факти-
ческими и формальными параметрами (формальным парамет-
рам присваивается значение фактических параметров). Реализу-
ются операторы, составляющие тело процедуры. После окончания
работы процедуры управление передается вызывающей про] рам-
ме на оператор, следующий за оператором вызова процедуры.
Между фактическими и формальными параметрами должно
быть взаимно однозначное соответствие по количеству, порядку
следования и типу.
Пример
Составить программу для решения квадратного уравнения ау"+
+ Ьу + с = 0 в предположении, что дискриминант больше или ра-
вен нулю. Для вычисления корней квадратного уравнения использо-
вать процедуру:
Ргодгатп К^ад;
\7аг у1,у2:геа1_;
Ргосебиге 8д(а,Ъ,с:геа1; \7аг х1,х2:геаЗ);
\7аг с!:геа1;
Вед1п
б:=Ь*Ь-4*а*с;
х1:=(-Ь+8дгС(б))/(2*а);
х2:=(-Ь-8дгЪ(б))/(2*а) ;
Епб;
Ведхп
5д(4.2, -0.5,-1 .3,у1,у2) ;
МгтСеЬп Су1= , у1:5:3, у2- , у2 : 5 : 3 ) ;
Епб.
В этой программе первым выполняется оператор обращения
к процедуре 8д(4.2,--0.5,~1.3,у1,у2);
Здесь первые три фактических параметра заданы конкретны-
ми значениями и соответствуют формальным параметрам а, Ь, с.
Последние два фактических параметра у! и у2 соответствуют
формальным параметрам х! и х2. В ходе выполнения процедуры
в ячейки а, Ьис попадут числа 4.2, -0.5, -1.3 соответственно,
затем будут выполнены операторы присваивания, являющиеся
телом процедуры. После окончания работы процедуры факти-
ческому параметру у1 будет присвоено значение формального
параметра х1, а у2 получит значение х2, и управление будет пере-
дано оператору ХУгйеЬп, который выведет результат
у 1=0.619 у2= -0.500.
Программа может содержать несколько операторов вызова
одной и той же процедуры.
В процедуре различают параметры-значения и параметры-
переменные.
Если в качестве формально! о параметра указана переменная,
то такой параметр и есть параметр-значение. Так, в заголовке
процедуры 8д параметрами-значениями являются а, Ь и с.
Если перед именем формального параметра стоит слово Уаг.
то такой параметр есть параметр-переменная. В заголовке про-
цедуры 8д такими параметрами являются х! и х2.
Для параметров-значений машина при вызове процедуры про-
изводит следующие действия: выделяет место в памяти для каж-
дого формального и фактического параметра, вычисляет значе-
ние фактического параметра и засылает его в выделенную для
фактического параметра ячейку, а также в ячейку соответствую-
щего формального параметра. На этом связь между соответству-
ющими ячейками для фактических и формальных парамет ров
обрывается. В ходе выполнения процедуры значение форма хьно-
го параметра может изменяться, значение же соответствующего
фактического параметра остается неизменным.
При вызове процедур парамет ры-переменные обрабатываются
так: для записи формального параметра используется именно та
ячейка, которая содержит соответствующий фактический пара-
метр. Так, в процедуре 8д под параметры х1 и у1 будет отведена
одна ячейка, под параметры х2 и у2 — другая. Поэтому резуль-
тат выполнения процедуры может быть возвращен в вызываю-
щую программу только через параметр-переменную.
Пример [17]
Ргодгат Рагат;
\7аг а, Ъ : 1п1:едег;
Ргоседиге Н (х: з пТедег; \7аг у:1пТедег);
Ведгп
х:-х+1; у:=у+1;
МгтРеЬп(х,у);
Епб;
Ведгп
а:=0; Ь:=0;
Н (а,Ь) ;
ИггХеЬп (а, Ь) ;
Епс1.
Здесь фактический параметр а соответствует формальному
параметру-значению х, а фактический параметр Ъ — формально-
му параметру-переменной у. Под параметры а и х отводятся две
разные ячейки памяти, а под параметры Ь и у — одна и та же
ячейка Ь.
При обращении к процедуре с помощью оператора Н(а,Ь) из
ячейки а в ячейку х перепишется 0, а в ячейку у записывается ад-
рес ячейки Ь, содержащей 0. При выполнении оператора х:=х+1 в
ячейку х будет записана 1, а в ячейке а по-прежнему останется 0.
Оператор у:=у+1 выполняется следующим образом: берется чис-
ло из ячейки, адрес которой находится в у (т.е. из ячейки Ь),
к нему прибавляется 1, результат записывается в ту же ячейку
(т.е. в Ь). Поэтому в результате выполнения оператора у:=у+1
значение ячейки Ь станет равным 1. Оператор печати ХУп1еЬп(х,у)
выведет содержимое ячеек х и у, т.е. 1 и 1. Оператор печати
\\тп1еЬп(а,Ь) в программе напечатает содержимое ячейки а, кото-
рое осталось равным 0. и содержимое ячейки Ь, которое равно 1.
Таким образом, в результате работы программы па экран
монитора будут выведены значения 11 и 01.
3.6.2. Функции
Часть алгоритма программист может оформить как функцию,
если в качестве результата выполнения функции необходимо по-
лучить одно-единственное число. Описание функции похоже па
описание процедуры и содержит заголовок функции и раздел
операторов. Общий вид заголовка функции:
Еппсйоп имя(параметр! :тип;.. .;параметрК:тип):тип_функции;
Здесь в круглых скобках указан перечень формальных пара-
метров и их типов. Тип функции характеризует тип результата,
возвращаемого функцией вызывающей программе.
Для вызова функции достаточно указать ее имя со списком
фактических параметров в любом выражении вызывающей про-
граммы. Результаты выполнения функции записываются в ячей-
ку памяти, имя которой совпадает с именем функции. 1 Тоэтому в
блоке функции должен обязательно присутствовать оператор вида
имя__фупкции:=результат;
Пример
Ргодгат Зиттах;
\7аг а, Ь, с, б,Е:геа1;
ЕипсЬтов Мах(х,у:геа!):геа1;
Вед±п
II: х>у ТЬеп Мах:=х Е18е Мах:=у;
Епб;
Ведтп {основная программа}
Реаб(а,Ь, с, б) ;
Е:=Мах(а, Ь)+Мах(с,б);
МгтГеЬп (Т=\ I) ;
Епб.
В этой программе первым выполняется оператор ввода
Веаб(а,Ь,с?д), записывающий из входного потока четыре веще-
ственных числа а, Ь, с и <1. Затем при выполнении оператора
Г:=Мах
кции К'
чисел,
параме
Пус
обраще
своено
3.75. Ф
его в ос
Мах в <
зультат
дено на
В ф
менныс
фекты.
Пер
кции), 1
ной пре
действу
ные пеу
ры (фу1
Поб
ствия. в
жит оп<
локалы
При
ГТ ус
Рип-
Вед
Епб
Т.е. в II]
ную вел
рим ДВс
у:=Г (х
С:=Мах(а,Ь)+Мах(с,<1) происходит двухкратное обращение к фун-
кции Мах, обеспечивающей нахождение максимального из двух
чисел. В функции Мах формальные параметры х и у являются
параметрами-значениями.
Пусть а=5.7, Ь=3.75, с= 3, <1=0-5. Тогда в результате первого
обращения к функции Мах формальному параметру х будет при-
своено значение 5.7, а формальный параметр у приме] значение
3.75. Функция Мах получит значение, равное 5.7, и возвратит
его в основную программу. После второго обращения к функции
Мах в основную программу будет возвращено число 0.5. В ре-
зультате переменная Г получит значение 6.2, которое будет выве-
дено на экран монитора.
В функциях не рекомендуется использовав ь параметры-пере-
менные, так как из-за этого могут возникать побочные эф-
фекты.
3.6.3. Побочный эффект. Рекурсии
Переменные, описанные внутри какой-либо процедуры (фун-
кции), называются локальными. Переменные, описанные в основ-
ной программе, называются глобальными. Локальные переменные
действуют только внутри своей процедуры (функции), глобаль-
ные переменные действуют везде, в том числе и внутри процеду-
ры (функции).
Побочным эффектом называются непредвиденные послед-
ствия, возникающие в программе, если описание функции содер-
жит операторы присваивания, в левой части которых стоит не-
локальная переменная или параметр-переменная [17].
Пример
Пусть функция Г(х) имее! вид:
ЕипсМоп Е (х: геа!) : геа1;
Ведтп
V: = V * х ;
Е:—5дгГ(V)+х;
Епд;
т.е. в процессе работы функция Г изменяет некоторую нелокаль-
ную величину V, описанную в другой части программы. Рассмот-
рим два выражения, содержащиеся в основной программе:
у:=Е (х) -Ну;
2 : —VI Е (х) ;
Эти выражения дадут разные результаты, так как в первом
случае сначала рассматривается Р(х), т.е. происходит обращение
к функции Е, и значение V изменяется в процессе вычисления фун-
кции. а во втором случае к первоначальному значению V прибав-
ляется Р(х).
Вторая опасность заключается в неправильном использова-
нии параметров-переменных в качестве формальных параметров.
Пример
Ргодгат Рагрег;
\7аг п,га:ГпЬедег;
ЕипсТтоп А(\/аг х:1пТедег; у:зпТедег):гпЕедег;
Ведтп
х:=х+у; п:=у;
А: =х;
Епб;
Ведтп
п:=1; т:=2; ДОгдЛеЪп (А (п,го) , п, т) ;
Епб.
В результате выполнения программы будет напечатано: 2 2 2.
Таким образом, значение константы п будет «испорчено», так
как значения переменных п и х будут записываться в одной ячей-
ке, а переменная А вместо 3 примет значение, равное 2. Ошибки
такого рода трудно найти, поэтому в функциях не рекомендуется
использовать параметры-переменные.
В языке Паскаль процедуры и функции могут вызывать сами
себя, т.е. обладать свойствами рекурсивности.
Пример [17)
Вывеет и на печать в обрат ном порядке цифры целого положитель-
ного числа п.
Составим процедуру Кеуегз:
Ргосебиге НеVе^з(п:хпЕедег);
Ведгп
ДОТтТе(п Моб 10);
ГЕ (п □IV 10)<>0 ТЬеп
НеVе^з(и ОГ’У 10);
Ело;
Рассмотрим работу этой процедуры при п = 153. Оператор
АУгШе(п Моб 10); выведет на экран остаток от деления числа 153
на 10, т.е. будет напечатана цифра 3. Оператор условного пере-
хода 1Г проверяет целую часть частного 153/10=15 на нуль. Если
целая часть нс 0, то с этим значением (15) идет вновь обращение к
процедуре Кехегь. Оператор ХУгйе выводи! на экран остаток ст
деления 15 на 10, т.е. 5, затем со значением 15/10=1 идет обраще-
ние к Кеуег8. После вывода оператором ХУгйе цифры ] осуществ-
ляется проверка на 0 и управление передается на конец процеду-
ры. В результате будет напечатано число 351.
Таким образом, однократное обращение к процедуре Кетегз
вызвало трехкратное ее срабатывание. Условие полного оконча-
ния работы рекурсивной процедуры должно находиться в самой
процедуре, иначе произойдет зацикливание.
Рекурсивные процедуры и функции имеют одну из двух форм:
прямую рекурсию и косвенную рекурсию. В первом случае про-
цедура (функция) вызывает саму себя, во втором случае процеду-
ра (функция) вызывает какую-либо другую процедуру (функцию),
которая либо сама, либо посредством других процедур вызывает
исходную процедуру.
Процедуры и функции позволяют иметь в качестве формаль-
ных параметров другие процедуры или функции. Процедура (фун-
кция), используемая в качестве формального параметра, называ-
ется параметром-процедурой (параметром-функцией).
Пример
РгосесЮге Р(₽госедиге А); Ргоседиге □ (ЕппсЫоп 8:геа1;
Ь:геа!);
Здесь процедура Р содержит параметр-процедуру А, а проце-
дура (^ имеет два параметра: параметр-функцию 8 и парамс гр-
значение Ь.
3.7. Сложные типы данных
К сложным типам данных, кроме массивов (аггау). относя гея
записи, множества и файлы.
3.7.1. Записи
Запись (гесоп!) — это структура, состоящая из фиксированно-
го числа компонентов, называемых полями. В отличие от компо-
нентов массива (элементов массива) каждое поле имеет собствен-
ное имя. В одном поле данные имеют один и тот же тип, а в раз-
ных полях данные могут иметь разные типы.
Описание п ипа гесогд имеет следующий вид:
Туре имя=гесогд
имя_поля11,имя^ поля1п: тип1;
имя_по.пяк1 гимя_полякт: типк;
Епб ;
Здесь тип 1,...,типк— типы данных в соответствующих полях.
Пример 1
Даты каких-либо событий можно записать следующим образом:
Туре да11е=гесогд
дау:1..31;
пюпкк:1..12;
уеаг: ХпТедег;
Епд;
Уаг д:баке;
В этом примере описаны тип дате и переменная д, принадле-
жащая этому типу. Переменная д описана как запись, состоящая
из трех полей: дау, топ1й и уеаг. Каждое из полей содержит
данные:
• поле дау — целое число в пределах от 1 до 31, обозначающее
день;
• поле топХй — целое число в пределах от 1 до 12, обознача-
ющее месяц;
• поле уеаг — целое число, обозначающее год.
Для обращения к полю переменной надо указать имя пере-
менной и имя поля, разделив их точкой. К полю применима опе-
рация присваивания. Например, чтобы заслать в д дату 30.12.1930
г., надо в программу включить следующие операторы:
д.дау: =30;
д.топГИ: =12;
д.уеаг:=1930;
Запись может быть компонентом других структур. Напри-
мер, конструкция типа ГатпПу (семья: отец, мать, ребенок) может
быть описана следующим образом:
Туре ЕатИу= (ЕаЪИег, то Олег, сЪИд) ;
Уаг ЫгЕИдау: аггау [ЕатНу] о! даке;
Переменная ЫгШдау (дата рождения) есть массив, состоящий
из записей дат рождения членов семьи: отца, матери и ребенка.
Каждая дата рождения имеет тип да!е, который должен быть
описан в программе как гесогд.
Пример 2
Дату рождения отца (см. пример 1) можно записать следующим об-
разом:
ЫгЬМау [РаВЪег] .с1ау:=ЗС;
ЫгкЬДау [1а1Иег ] .топЬк:=12;
ЫгЪИЗау [ Га1Иег ] .уеаг:=1930;
Такие поля имеют слишком громоздкие имена и пользоваться
ими неудобно. Здесь существенную помощь может оказать опе-
ратор формирования имени поля ХУйЪ, который в общем случае
имеет вид:
МЪИ имя Во оператор;
Пример 3
Для занесения даты рождения в примере 2 достаточно выполнить
операторы:
ИтХй Ы гХМау ^аЪИег ] Во
Ведтп
бау:=30;
топВИ:=12;
уеаг:=1930;
Епд;
Здесь оператор ХУпй как бы добавляет имя переменной
Ь1гШдау[Га1Ьег^ к имени каждого из полей, включенных в состав-
ной оператор, давая тот же эффект, что и в примере 2.
Запись на языке Паскаль, кроме фиксированной части, рас-
смотренной выше, может содержать вариантную часть. Общий
вид такой записи:
Туре имя=гесогс1
имя_поляI:тип1;
имя поля2:тип2;
имя поляЫ:типы;
Сазе переключатель:тип 01
метка! : (имя_поля!1: тип 11 ;имя поля 12 : тип! 2;...) ;
меткак: (имя__псляк1: типк1;имя_поляк2 :типк2;...) ;
Епо;
Фиксированная часть записи формируется по правилам, рас-
смотренным выше Вариантная часть начинается с ключевого сло-
ва Сазе и располагается после фиксированной части. Далее идет
имя переменной, называемой переключателем^ и тип переключи-
теля. Переключатель осуществляет выбор варианта. Каждый ва-
риант имеет метку и свой набор полей. Если какая-либо метка не
содержит полей, то пишут:
метка:();
Пример 4
Пусть необходимо собрать сведения о курсантах: фамилия, дата
рождения и, если есть семья, то фамилия и дата рождения жены. Эта
информация может быть описана, например, записью регзоп. Пусть
переменная ктй может иметь одно из значений («холост», «женат»).
Тогда описание записи будет иметь вид:
Туре к!пс1= (таггтей, зтпдТе) ;
регзоп=гессгд
пате:зТгтпд;
датеЫгЪЬ: даСе;
Сазе уезпо:к±пс1 СТ
таггтей: (пате1:з^гтпд;даСе1:да Те) ;
81пд1е: () ;
Епд;
Здесь пате — строка символов (например, То^оу’); йа1еЫгЛ —
запись, содержащая дату рождения: уезпо — переключатель типа
ктй, который принимает одно из двух значений: татей либо
$т§1е; пате! — строка символов, содержащая фамилию супруги
(например, То^оуа'): даге] —запись, содержащая дату рождения
жены; зт§1е — пусгое поле.
3.7.2. Множества
В языке Паскаль множеством называется конечный неупоря-
доченный набор элементов. Все элементы одного множества дол-
жны принадлежать к одному и тому же т ипу, который называет-
ся базовым типом данного множества. В качестве базового типа
можно использовать любой простой тип, кроме вещественного.
Множество должно бьп ь описано в разделе описания типов.
Общий вид описания:
Туре имя^зеС о Г базовый_тип;
Пример
Пусть в нашем распоряжении имеется множество монет различно-
го достоинства: 1р, 5р и Юр. Из этих монет можно составить следую-
щие подмножества (их число равно 2=8):
1р; 5р; Юр; 1 р, 5р; 1р, Юр; 5р, Юр; 1р, 5р, Юр; пустое множес! во
Эти подмножества и будут принадлежать некоторому множеству
8шп. Сами элементы (монеты), из которых состоит подмножество, пусть
принадлежат некоторому базовому типу топе!. Тогда описание будет
иметь вид:
Туре шопеЕ= (г!, гб, г10) ;
Уаг зипизеС оЕ топеЪ;
В программе значение переменной типа «множество» изобра-
жается путем перечисления конкретных компонентов подмноже-
ства, разделенных запятыми и заключенных в скобки [ ] Такие
изображения называются конструкторами множеств. Например:
[г1],[г1,г10].
С переменной типа хе1 допустимы следующие операции: —,
о >= <— 1п + — *
Пример использования операции присваивания:
Туре п=1..9;
Уаг к:зеЪ оЕ п;
к:=[3..6];
В этом случае в ячейку к будет записана комбинация [3,4,5,6].
Операции = и <> используются для проверки эквивалентнос-
ти: два значения переменной типа §е! считаются равными, если
они состоят из одних и тех же элементов.
Пример
[1,3]=[3,1] — дает Тгие;
[1..3]=[1,2,3] — дает Тгие;
[1] <>[2] — дает Тгие;
[1,2,3]=[1,4,3] — дает Еа1зе.
Операции >= и <= используют ся для проверки принадлежно-
сти одного множества другому: так, если множество а содержит-
ся в множестве Ь, то а<=Ь дает Тгие. Например: [1,2] <=[1,2,3] дает
Тгие.
Операция 1п используется для установления наличия опреде-
ленного элемента в множестве. Так, если х есть элемент множе-
ства Ь, то ( х 1п Ь) дает Тгие.
Пример: [3] 1п [1,2,3] даез Тгие.
Если а и Ь — операнды, имеющие один и тот же конкретный
тип, то к ним применимы операции:
+ объединение;
дополнение;
* пересечение.
Так, а+Ь представляет собой объединение множества элемен •
тов, входящих в а или в Ь (одинаковые элементы не повторяют-
ся); а-Ь — это множество элементов, которые есть в а, но отсут-
ствуют в Ь; а*Ь представляет собой объединение множества эле-
ментов, входящих в множества а и Ь одновременно (рис. 30).
Рис. 30. Операции с множествами:
а — объединение; б — дополнение; в — пересечение
Пример
[1,3]+[1,4] - дает
[1,3]-[1,4] - дает
[1,3,4];
[3] ;
[ 1,3] * [ 1,4 ] - дает [1] .
Операция а:~аЧ х добавляет элемент х к множеству а, а опера-
ция а:=а-х исключает х из а.
3.7.3. Файлы и работа с ними
Фаш представляет собой последовательность элементов од-
ного и того же типа, имеющих общее имя. Число элементов (дли-
на файла) не ограничено. Файлы создаются на магнитной ленте,
на магнитном диске, на других внешних устройствах, а также в
оперативной памяти ЭВМ
Общий вид описания переменной типа П1е:
Туре имя=П1е о Г тип_элементов;
Здесь тип элементов может быть любым, кроме типа П1е.
Файл может быть описан и непосредственно в разделе пере-
менных:
'Уаг имя:Ше сТ тип элементов;
Если элементами файла являются данные типа сЬаг, то такой
файл называется текстовым. Текстовый файл может быть задан
в разделе описания переменных одним из двух способов:
1) имя:П1е оГ сЬаг;
2) имя:1ех1;
Например: ...Уаг П:й1е оГ сЬаг; Г2:1ех1;...
Для того чтобы связать файловую переменную в программе с
конкретным файлом, нужно использовать процедуру назначения
файла Азз^п:
Азз1дп (имя,‘путь к файлу’);
Например: А8ы§п(Г,‘а:\гех.Ш’)- В этом примере переменная типа
файл Г связывается с файлом гех.Ш, расположенным на диске а.
Запись данных в файл возможна в двух режимах:
I) создание нового файла (перезапись существующего, ранее
созданного файла);
2) добавление данных в существующий файл.
Для открытия файла в режиме создания используется проце-
дура Ке^п1е(Г), а в режиме добавления — процедура Аррепб(Г).
Здесь Г — имя файловой переменной.
Чтобы вывести (записать) какие-либо данные в файл, можно
воспользоваться операторами вывода \Уп1е и \Уп1сЬп. Для зак-
рытия файла используется процедура С1о§е.
Пример
Уаг Е:ЪехГ; {описание текстового файла}
1: тпбеде г;
Ведш
Аззтдп (Г,‘а:\гег.Ъхб’) ; {связать Г с аАгех.бхб)
КеюттТе (15) ; {открыть файл в режиме создания}
Гог т:=1 То 3 Бо
Мг1ЛеЬп(Г,‘Ы \т); {записать данные в файл.
С1озе(Г); {закрыть файл}
Епб.
В результате выполнения этой программы на диске а будет
открыт файл гех.Ш, в который будут записаны 3 строки:
К 1
И 2
П 3
Пример
Уаг Е:бехб; {описание текстового файла}
г:а пбедег;
Вед! п
Аззтдп (Г/а:\гег.Ъхб’) ; {связать с а:\гег . 6x1:}
АррепсКГ); {открыть файл в режиме добавления}
Еог 1:=4 То 5 Эо
№г16еЬп (Г, \1); {записать данные в файл}
С1озе(Г); {закрыть файл}
Епб.
В результате выполнения этой программы на диске а будет
открыт файл гех.Ш, в который будут добавлены 2 строки 1\ 4 г
Ы 5. Таким образом, в файл гех.Ш будет записано:
ы 1
К 2
Ы 3
Ы 4
И 5
Чтобы исключить ошибки открытия файла (отсутствует диск,
не закрыта ш горка накопителя, отсутствует файл в режиме до-
бавления), можно воспользоваться функцией ЮКехиИ. Функция
ЮКезик возвращает значение 0, если операция ввода-вывода за-
вершилась успешно, в противном случае эта функция возврашае!
значение, отличное от нуля. Разрешение на проверку результата
ввода-вывода дает директива компилятора {$!-}, которая долж-
на быть добавлена в программу перед вызовом процедуры от-
крытия файла (ЕеитПс или Аррепй). После процедуры открытия
файла в программе нужно добавить директиву компилятора
{$!+}-
Пример
...Аззтдп ( I, ка : \гег . ;
{$!-}
АррепД(Г);
{$!+}
II 1ОКези1Ь<>0 ТЪеп Кеъ-гтЬе (I) ;...
В этом примере запрещено открытие файла тех. 1x1 в режиме
добавления, если этот файл не был создан ранее на диске а.
Данные во время работы программы на Паскале могут быть
выведены не только в файл на диске, но и на экран или принтер.
Для вывода данных на экран достаточно записать процедуру
назначения файла в виде
Аззтдп (Г," ’) ;
Для вывода данных на принтер доста точно записать проце-
дуру назначения файла в виде
Азз тдп (I, ргп’) ;
В Турбо Паскале 7.0 есть еще две интересные процедуры для
работы с файлами, о которых нельзя не упомянуть: Кепаше и
Ега$е. Процедура Кепапте позволяет переименовывать файл На-
пример:
...Аззтдп (I, ‘а:\гех. Ъх!1’) ;
Кепате (^/а: ХгезЫ Т. 11ХТ1) ;... {переименование гег.ЕхЕ в
гези1Г.1:х1:}
Следует иметь в виду, что процедура Кепате применима толь-
ко к закрытым файлам.
Процедура Егазе позволяет удалить существующий файл с
диска. Например:
...Аззтдп (Т, *а: \гег . ^хЪ’) ;
Егазе(Е);... {удаление файла гег.ТхТ с диска а}
Ввести исходные данные в программу на Паскале можно не толь-
ко с клавиатуры, но и, например, из текстового файла. Для этого,
как и в случае с выводом (записью) данных в файл, нужно объявить
файловую переменную и связать ее с конкретным файлом на диске,
после чего можно открыть файл для ввода с помощью процедуры
Кезе!: (имя) ;
Чтение данных из файла осуществляется с помощью операто-
ров Кеад и КеаёЬп.
Пример
Предположим, что в текстовом файле гех.Ш записано 5 строк:
Ы 1
Ы 2
М 3
М 4
М 5
Ввод этих данных из файла в программу можно выполнить
так:
\7аг Е:СехЪ; {описание текстового файла}
а:аггау[1..51 ог сйаг;
х:аггау[1..5] оГ ЛпСедег;
1: тп’Тедег;
Ведгп
Аззгдп (Г, иа:\гег . !:х!’) ; (связать Е с а: \гез .-1x1:}
ВезеТ(Г); 'открыть файл для ввода]
Еог г: 1 То 5 Во
КеасТЬп (С а Ш ,х [1]); {ввести данные из файла}
С1озе(Е); {закрыть файл}
Епс1.
В результате выполнения этой программы все элементы мас-
сива а[1..5] получат значения Ъ*, а целочисленный массив х[1..5]
будет заполнен числами от 1 до 5.
Определить, прочитана ли последняя строка в файле, можно
с помощью функции ЕОГ (Епс! ОГ Ейе конец файла). Функция
ЕОЕ возвращает значение Тгие, если достигнут конец файла, и
значение Еаке — в противном случае. С учетом этого программа
решения предыдущего примера будет иметь вид.
Уаг Е:ЕехЕ;
а:аггау[1..5] оЕ сйаг;
х:аггау11..5 ] о Г 1пЕедег;
1:гпГедег;
Ведгп
Аззгдп ( р , а: \ гег . ЕхЕ’) ;
КезеГ(Г);
1 :=1;
ИЫ1е ЫоГ ЕОЕ(Е) Оо Вед5п {проверка конца файла)
КеадЬп , а [ 1 ] г х [1] ) ; г: =1 + 1; Епс1;
С1озе(Е);
Епб.
В этой программе значение функции ЕОР проверяется перед
каждым чтением данных из файла гехЛхЕ
3.7.4. Списки, деревья, сети
Язык Турбо Паскаль 7.0 дает возможность пользователю при-
менять в программах сложные динамические структуры данных —
списки и деревья. В таких структурах широко используются пе-
ременные-указатели и динамические переменные.
При рассмотрении предыдущих вопросов мы имели дело только
со статическими переменными, которые во время выполнения про-
граммы могут менять свои значения, но не количество самих пере-
менных. На практике это не всегда удобно. Например, при объявле-
нии массива Уаг а:аггэу[1..5] оГ геа1; мы вынуждены назначать фик-
сированные границы индексов. В том случае, если программа
работает не со всеми элементами массива (меньше 5), очевидно не-
рациональное (избыточное) использование памят и компьютера.
Если же по условиям задачи требуется использовать большее коли-
чество элементов массива (больше 5), то программа вообще не бу-
дет работать до тех пор, пока в ее текст нс будут внесены соответ-
ствующие правки, например Уаг а:аггау[1..]0] о! геа1.
Динамическим называется способ распределения памяти под пере-
менные в момент их появления в процессе выполнения программы.
Переменная-указатель это элемент данных, представляю-
щий собой ссылку (адрес) на определенную ячейку оперативной
памяти компьютера.
Переменные, кот орые размещаются в динамической области
опера] ивной памяти с помощью переменных-указателей, назы-
ваются динамическими переменными.
Переменные-указатели могут быть объявлены в программе
одним из двух способов.
I. Непосредственно в разделе объявления переменных, напри-
мер: Уаг а:Лгеа1. Здесь а — переменная-указатель на тип геа1.
2. Сначала объявляется тип в разделе объявления типов, на-
пример: Туре Вр=Лгеа1. Затем объявляется переменная-указатель
в разделе объявления переменных, например Уаг а:бр.
В начале работы значение переменной-указателя — ТЧП («пу-
сто»). Присвоить значение переменной-указателю можно с по-
мощью оператора присваивания, например: хЛ:=5; (в область
памяти, на которую указывает переменная-указатель х, запи-
шется число 5). Переменной-указателю можно присвоить зна-
чение другой переменной-указателя, например: х1:=х2. В этом
случае переменные-указатели х1 и х2 будут указывать на одну
и ту же переменную.
Выделение памяти под динамическую переменную происхо-
дит с помощью процедуры например: Кеи(х); — создается
динамическая переменная, а переменная-указатель х будет со-
держать адрес этой переменной. Графически этот процесс можно
изобразить так, как показано на рис. 31.
х
Л
Переменная-указатель
(адрес переменной)
Динамическая переменная
(значение переменной)
Рис. 31. Выделение памяти с помощью процедуры Кси
Освобождение памяти под динамическую переменную осу-
ществляется с помощью процедуры О1зро$е, например:
О18рО8С(х).
В качестве иллюстрации использования динамических пере-
менных приведем следующую программу на Паскале:
5—987
Ргодгат Оупапыс;
\7аг х1, х2, хЗ: л1п1:едег; {объявление переменных-ука-
зателей)
Ведтп
Мем(х1); Меи(х2); Мем(хЗ); {создание динамических
переменных}
НеабЬп(х!Л,х2Л);
хЗЛ:=х1А+х2Л;
МгтТеЬа(хЗЛ);
0±зро8е(х1); 018ро8е(х2); Созроее (хЗ); {освобож-
дение памяти}
ЕпО.
Списком называется структура данных, каждый элемент кото-
рой связан с предыдущим (следующим) элементом. Элемент спис-
ка это запись, состоящая из двух частей. Первая часть содер-
жит поле данных (йа1а). Вторая часть содержит поле ссылки (пех!)
на предыдущий (следующий) элемент. Последний элемент спис-
ка должен содержать пустое (ЫП) поле ссылки. Очередной эле-
мент может быть добавлен в начало, в середину или в конец спис-
ка. Любой элемент может быть исключен из списка.
Пример
Сформировать список, содержащий цифры: 0, 1,2, 3, 4 (рис.
32). Очередной элемент должен добавляться в начало списка.
Рис. 32* Список цифр
Результатом работ ы программы должен быть вывод на эк-
ран списка цифр, начиная с 0. Программа, реализующая задан-
ные условия, имеет вид:
Ргодгат Ь1зТ;
Туре питЬег
Ы==гесргс1 {описание типа элемента списка}
да 1а:тпледег; {поле данных}
пехС:питЬег; {поле ссыпки}
Епд;
Уаг кеад:питЬег; {указатель на начало списка]
сиггепС:питЬег; {указатель на текущий элемент
списка}
сНдтТ: хпЪедег; {вводимые значения}
Ведтп
Переа!:
Мг1Се СЦифра-’) ; {ввод цифр с клавиатуры}
КеайЪп (сИд! Д) ;
Нею(сиггепД); {создать элемент списка}
сиггепДА >с1аДа:=с11д±Ц; {записать в поле данных
цифру}
сиггепДА .пехЪ: =кеас1; {записать в поле ссылки
начало списка)
кеас!: =сиггепД; {значение указателя — на начале
списка}
Ш1Ы1 сНд11=0;
ОДг1Ъе1п (‘****Список****’) ; {вывод элементов спис-
ка )
сиггепД:=Ьеад;
МЬ11е сиггепДОМЫ Эо
Ведтп
КгтДе (‘ сиггеп€А .даДа) ;
сиггепЪ: =сиггепДА. пехЬ;
Епс1;
Епа.
Протокол работы программы:
Цифра-4
Цифра“3
Цифра-2
Цифра-1
Цифра-О
****Список** * *
0 12 3 4
Чтобы добавить элемент в список, нужно найти элемент, за
которым должен следовать добавляемый элемент, после чего ус-
тановить его указатель на новый элемент, а указатель нового эле-
мента установить на элемент, перед которым он вставляется.
Чтобы удалить элемент из списка, нужно изменить указатель
элемента, который находится перед удаляемым элементом. После
удаления элемента из списка можно освободить память, занима-
емую этим элементом (В18ро8е).
Сетью называется граф с какой-либо прикладной интерпре-
тацией [8]. Граф — это непустое множество точек (вершин) и мно-
жество отрезков (ребер), концы которых принадлежат заданно-
му множеству точек. Если на каждом ребре указано направле-
ние, то граф называется ориентированным.
Частным случаем сети является двоичное дерево граф, в ко-
тором из каждой вершины исходит не более двух ребер (рис. 33).
Рис. 33. Двоичное дерево
Вершина 4 называется корнем дерева. Вход в дерево проис-
ходит только через корень. Для каждой вершины различаются
левое и правое поддеревья. Элементы дерева упорядочены: эле-
менты левого поддерева меньше элементов правого поддерева.
Описание дерева на языке Турбо Паскаль 7.0 в случае, если его
элементы имеют целый тип, выглядит так:
Туре 11пк=ЛТгее;
Тгее=гесогд
ЗаЬа:1пЪедег; {поле данных}
1еГ^,г!дЫ::11пк; {поле ссылок на предыдущий]
Епб; {и последующий элементы}
\7аг гоот:11пк; {корень дерева]
Каждый элемент двоичного дерева имеет три поля: поле дан-
ных и два поля ссылок на предыдущий и последующий элемен гы
дерева.
К основным операциям над деревьями относятся:
• вставка элемента в дерево;
• обход дерева:
• удаление элемента из дерева.
Использование двоичных деревьев позволяет значительно
сокра гить время поиска нужного элемента. В среднем для поис-
ка заданного элемента в списке нужно просмотре] ь половину
списка, т.е. если в списке Ы элементов, то надо выполнить Ь1/2
сравнений. Для поиска элемента в двоичном дереве требуется нс
более 1о^М сравнений.
Более подробно вопросы работы с динамическими структу-
рами данных (списками, деревьями, стеками, очередями и сетя-
ми) рассмотрены, например, в [3.13].
3.8. Библиотечные модули
Турбо Паскаля 7.0
Кроме встроенных процедур и функций, в Турбо Паскале 7.0
имеется набор библиотечных модулей — процедур и функций,
предназначенных для решения задач определенного типа.
3.8.1. Использование библиотечных
процедур и функций
К наиболее часто используемым в Турбо Паскале 7.0 библио-
течным модулям относятся:
• 8у81ет библиотека поддержки Турбо 11аскаля (операции
ввода-вывода, операции обработки строк, управление динами-
ческой памятью и т.д.). Обращение к процедурам и функциям
модуля 8у$1ет происходит автоматически (по умолчанию) в про-
цессе выполнения программы на Паскале.
• Ооз (\У1пбо\\'8) — библиотека поддержки функций операци-
онной системы и обработки файлов:
• О/ег1ау — процедуры и функции управления памятью ком-
пьютера;
• 81пп§8 процедуры и функции для написания программ,
совместимых с \Мпбо\У8-приложениями;
• ТигЪоЗ (СгарйЗ) — процедуры и функции, обеспечивающие
совместимость с предыдущими версиями Турбо Паскаля;
• РппТег — процедуры и функции для организации работ ы с
принтером;
• Сп процедуры и функции управления режимом экрана,
клавиатуры, звука и т.д.;
• Огарй процедуры и функции для работы с графикой.
Полное описание библио темных модулей можно найти в файле
помощи Не1р интегрированной инструментальной оболочки
Турбо Паскаля 7.0.
Чтобы использовать в своей программе библиотечную про-
цедуру (функцию), нужно знать:
• в какой библиоз еке находится процедура;
• название процедуры;
• количество, порядок следования и типы формальных пара-
метров процедуры.
Подключение библиотечного модуля, содержащего требуемую
процедуру (функцию), к программе осуществляется оператором
Ы§е8, который должен размещаться после оператора заголовка
программы:
Цвез модуль!, модуль2,..., модульК;
Рассмотрим наиболее часто используемые процедуры и фун-
кции библиотечных модулей Сг1 и бтарй.
3.8.2. Библиотечный модуль Сг1
Модуль С11 содержит процедуры и функции, позволяющие
управлять режимами работы экрана, клавиатуры, цвета, окна и
звука. Чтобы использовать модуль Сг1, его имя нужно указать в
операторе Пзез:
Цзез СгЪ;
Основные процедуры и функции модуля Сг! приведены в
табл.11.
Таблица 11
Процедуры и функции модуля Сг<
Название Назначение Пример 1 1
СкЕОЬ Удаление символов, начиная с позиции курсора, до конца строки СкЕОЬ;
С1г8сг Очисз ка экрана С1г8сг;
Пе1ау(Мя) Задержка выполнения программы на указанное в миллисекундах время. М$» тип: АУогс! Ое1ау( 10000);
ЭеИлпе Удаление строки, в которой находится курсор. Следующие строки сдвигаются вверх Е)е11лпе;
Название ] 1азначение Пример
Со1оХУ(х,у) Позиционирование курсора на экране. Координаты экрана в стандартном режиме: X (тин: ппенег) — от 1 до 80; V (тин: шГе^ег) — О1 1 до 25. (1,1) левый верхний угол экрана (80,25) — правый нижний угол экрана Со1оХУ(39.13);
Н1$ЬУ1део Повышенная яркость символов ШёЬУШсо;
(пяЫпе Вставка пустой строки перед строкой, на которой расположен курсор 1п§1лпе;
Ьои'УМео Выключение повышенной яркости символов ко\уУ1дсо:
МогтУхбсо Стандартная яркость символов ЫоптМдео;
КеуРгехзед Возврашаег значение Тгие, если на кла- виатуре нажата клавиша (в противном случае — Еа1$е) Ксрса! АУп1с(‘а’); СшП КеуРгсззсд;
МоЗоипё Отключение динамика Ыо8оипд;
КеадКеу Считывание символа с клавиатуры (тип функции: ейаг) а:=КеадКеу;
8оипд(2) Включение динамика. Значение 7 тип: июгд. Частоты нот гаммы: 262, 294, 330, 349, 392, 440, 494, 524 8оипс1(440); Пе1ау(1000); 1Чо8оипс1;
ТехТВаск- Сгоипд(Е) Установка цвета фона. Значение Е: 0 В1аск (черный). 1 — В1ие (синий); 2 — Сгееп (зеленый): 3 — Суап (1 олубой): 4 — Кед (красный); 5 — Ма^епТа (фиолетовый); 6 — Вгоип (коричневый); Ы^ЫОгау (светло-серый) ТехШаскОгоипд(5); Тех1ВаскОгоипд (Ма§сп1а);
Тех1Со1ог(С) Установка цвета символов. Значение С: 0 -7 (см. Тех1ВаскОгоипд); 8 — ОагкОгау (темно-серый); 9 — 1л§1пВ1ис (светло-синий); 10 — [л^ЬЮгееп (светло-зеленый): 11 Ы§й1Суап (светло-голубой); 12 — и§1иКед (светло-красный); 13 — Е1§1пМа§сп1а (светло-фиолетовый); Тех1Со1ог(15); Тсх1Со1ог(\У1и1е) Тех1Со1ог( В1ие+ ВПпк);
Название Назначение Пример
14 — VсПоXV (желты й); 15 — \УН11е (белый); 128 — ВПпк (мерцание)
\У1пс1ои' (х1,у1,х2,у2) Отображение на экране текстового окна. Окно становится текущим, т.е. позиция с координатами (1.1) является левым верхним углом окна, а не экрана АУтс1о\у( 10,5,70,9);
ХУЬегсХ Текущая координата X курсора \Уп1еЬп( \У1зегеХ);
У/ИсгеУ Текущая координата V курсора \Уп 1еЬп( ХУИеге V); -
В качестве примера, иллюстрирующего использование про-
цедур и функций модуля СгЦ приведем следующую программу
на Паскале:
Ргодгат ЦзеСгГ;
17зез СгТ;
Уаг а:зЬггпд;
Ведгп
С1г8сг;
а: =‘Удаление строки’ ;
СоТоХУ (30,13 ) ; ТехТВаскСгоппб. (3) ; НгдйУгдео;
^г1Ъе(а); Эе1ау (10300); 0е1Ьгпе; Ве1ау (10000) ;
Еп<3.
3.8.3. Библиотечный модуль бгарИ
Модуль Огарй содержит процедуры и функции для создания
графических изображений. Чтобы использовать модуль СгарЬ,
его имя нужно указать в операторе 1)8е§:
□зез СгарН;
Перед использованием процедур и функций модуля ОгарИ для
работы с графикой необходимо выполнить инициализацию гра-
фического режима. После окончания работы с графикой следует
выйти из графического режима. Фрагмен г программы, иллюст-
рирующей эти действия, имеет вид:
...Уаг СгОгА^егг СгМобе: гпЪедег; {тип драйвера и режим
видеоадаптера}
Ведгп
СгОгАллег :=Е)е1:еск; {авто определение драйвера и режима}
ТпгкСгарк (СгОгА^ег, СгМосАе, ‘ ’) ;
[инициализация графического режима; предполагаем,
что файлы с расширениями . ВС1 и .СНЕ находятся в
рабочем каталоге]
...{работа с графикой]
С1озеСгарИ; {завершение графического режима)...
В процессе выполнения программы на Паскале (после ини-
циализации модуля Старк) может возникнуть ситуация, когда
нужно на какое-то время включить текстовый режим (напри-
мер, вывести сообщение), а затем вернуться в графический ре-
жим.
Включение текстового режима осуществляется процедурой
КезЪогеСКТМосЗе;
Возвращение в графический режим можно выполнить с помо-
щью процедуры
ЗеТСгарЪМоде (Се1:С гарИМоде) ;
Переключение между режимами показано в следующем фраг-
менте программы:
...{инициализация модуля СгарИ (см. предыдущий пример) }
КезТогеСРТМобе; {переключение е текстовый режим1
ЗеГСгарйМоде(СеГЗгарЬМоде); {переключение е графичес-
кий режим)
... {продолжение программы}
После того как выполнена инициализация графического ре-
жима, можно использовать процедуры и функции модуля Сгарй
для создания графических изображений (табл. 12).
Таблица 12
Процедуры и функции модуля СгарЬ
Название Назначение Пример
Управление текущим указа гелем
Се1Х Определение текущего положения графического курсора (текущей точки) по 1 оризонтали ОшТсх1ХУ (Ое1Х. 200,‘Текст’);
Се(У Определение текущего положения графического курсора (текущей точки) по вертикали ОигТех1 ХУ(200. Ое1Т/Текст’);
Название Назначение Пример
СсГМахХ Определение значения максимальной координаты X экрана Ь1пе(Сс1МахХ, 300,200.200);
СегМахУ Определение значения максимальной координаты У экрана 1лпе(300,Ое1МахУ, 200,200);
МоусКс! (бхЛу) Перемещение на с!х точек по горизон- тали и на ду точек по вертикали от текущей точки МоуеВе1(50.50);
Моуе! о(х.у) Перемещение в точку с координатами х, у (0, 0 — левый верхний угол экрана: 639, 479 — правый нижний угол экрана) МоуеТо(ЮО.ЮО);
Отображение точки на экране
Сс1Р1хе1(х,у) Определение номера цвета точки (пиксела) с координатами х, у (номер цвета — оз 0 до 15, см. табл. 11) Со1:-Ос1 Р1хе1(5,5),
РшРгхс! (х.у,со1ог) Отображение точки в заданном месте экрана. Здесь: х, у — координаты точки; со1ог цвет точки (см. табл. 11) Ри1Р1хе1(5Л4): РшР1хс1(5,5.Кеб); 1
Отображение прямых линий
1лпе(х1.у1,х2, у2) Вывод прямой линии на экран. Здесь: х1, у] — координаты начальной точки; х2, у2 — координаты конечной точки Ь1пс(5.5.2ОО 200);
1лпсТо(х,у) Построение отрезка прямой линии из текущей точки до точки с координа- тами х, у 1дпеТо(100,100);
1лпеК.е1(с1х.(1у) Построение отрезка прямой линии из текущей точки до точки с координата- ми х+бх, у+с!у (здесь: х, у — координа- ты текущей точки) ЫпеВ.е1(50,50);
8с11лпе81у1е (8;Р,АУ) Установка стиля линии. Здесь: 8 — стиль линии: 0 — 8оНдЬп (сплошная); 1 — ОоПебЬп (пункт ирная); 2 — СсШегЬп (штрих-пунктирная); 3 — ВазНедЬп (штриховая); 4 — Ъ\егВйЬп (заданная пользователем); Р — пользовательский шаблон (Р=0 для всех стилей, кроме V $е1 ВйЕп) 8е1Ыпс81у1е (8о1к!Еп, О,ТЧ оптЛУккй)
Название Назначение Пример
Шаблон — это 16 разрядов светящихся (1) или погашенных (0) пикселов, нап- ример: 1111111111111111 — сплошная линия. XV — толщина линии: 1 — КоппХУк№ (нормальной толщины); 3 — ТЫскХУтсИЬ (большой толщины) ।
5е1 Л п1е Моде(М) Управление режимом отображения линий. Здесь М: 0 — СоруРш (повторно отображаемая линия будет иметь заданный цвет ); 1 — ХогРи! (повторное отображение линии в этом режиме стирает линию) 8стХУп1еМос1е(1);
Пост роение многоугольников
ЯесГап^е (х1,у!,х2,у2) Построение прямоугольника на плоскости. Здесь: х1, у! — координа- ты левого верхнего угла; х2, у2 — координаты правогб нижнего угла К.ес1ап₽1е (10,10,200,200);
Ваг(х1.у 1,х2, У2) Построение прямоугольника, закрашенного по текущему шаблону (х!, у 1, х2, у2 — см. Кес1апё1е) Ваг(10.10,200,200): 1
ВагЗВ(х1,у1, х2,у2,1)З.Т) Построение параллелепипеда, лицевая сторона которого закрашена по теку- щему шаблону. Здесь: х1, у 1, х2, у2 — см. К.ес1апё1е; ОЗ — глубина параллелепипеда в пикселах; Г — отображать (ТорОп= Гг не) или не отображать (ТорОГГ-Еа1яс) верхнюю плоскост ь ВагЗО(10,10,200, 200, Ю.ТорОп);
Вга\уРо1у (МР,2) Построение ломаной линии и многоугольника. Здесь: КР — количество точек ломаной; 2 — переменная произвольного типа, содержащая координаты х,у точек Соп81 2:аггау [1..3] оГ РоннТуре= ((х:25;у.Ю0). (х:75;у:400), (х:125;у:100));„. ОгаиРо)у(3.2);„.
Построение дуг, эллипсов и окружностей
Спс1с(х,у,г) Построение окружности. Здесь: х, у — координаты центра; г — радиус С1гс1с(300,250,50);
Название Назначение Пример
Агс(х,у,8А. еА,г) Построение дуги. Здесь: х, у — координаты центра; бА, еА — начальный и конечный углы в градусах (отсчет от 1 оризонталыюй оси против часовой стрелки); г — радиус Агс(300,250,0,90,50);
ЕШр$е(х,у,&А. сА,хг,уг) Построение эллиптической дуги (эллипса). Здесь: х, у, ьА, еА — см. Аге; хг, уг горизонтальная и вертикаль- ная оси Е11ф8с(300.250,0,90, 100,50); Е1Нр8е(300,250,0, 359,100,50);
Отображение текста
ОигТехЦТ) Вывод строки Т, начиная с текущего положения графического курсора ОигТ ехг(* Вывод’),
ОигТехгХУ (х,у,Т) Вывод строки 1, начиная от точки с координатами х. у Ои1Тех1ХУ(300,200, ‘Вывод’);
ОиГГех1(8) ОиЛех1ХУ (х,у,8) Вывод числовой информации Здесь: х, у, Т см ОигТсхГХУ; 8 — переменная для хранения числа, преобразованного в строку процеду- рой: 81г(число.8) 81г(3.14:4:2,8); Ои1ТехЕ(8);
8егТсх181у1е (Е,О,8) Установка параметров шрифта. Здесь: Е — шрифт: 0 — ПеГаикЕоп! (матричный, по умол- чанию); 1 Тг1р1ехГопг (полужирный); 2 — 8та11ЕоШ (тонкий); 3 — 8ап$8е1тГЕогД (рубленый); 4 — Оо(Ь1сЕоп1 (гот ический); В ориентация и направление; 0 стандартное; 1 — поворот на 90е против часовой стрелки, отображение снизу вверх; 3 — поворот на 90° против часовой стрелки; отображение слева направо; 8 размер шрифта — о г 1 до 10 8е1Тех181у1с(4,0,5); •
8егТех1 1и5йГу(Н,У) Задание расположения строки. Здесь: Н — горизонтальное расположение: 8еП ехОи$Шу(],1);
Название Назначение Пример
0 — ЬеНТех! (текущая точка равна левой границе строки); 1 — СепТет (центрировать строку отно- сительно текущей точки); 3 — В1$НТех1 (текущая точка равна правой границе строки); V — вертикальное расположение: 0 — ВопошТех! (размещать символы ниже текущей точки); 1 — СегИег (центрировать символы по вер! икали относительно текущей точки): 3 — ТорТех! (размещать символы выше текущей точки)
Установка цвета, стиля заполнения
СсТМах Со1ог Возвращает максимальный номер цве- та, доступный в текущем графическом режиме 81т(Се1МахСо1ог,8); ОиТТех1(§);
8сГСо1ог(С) Установка текущего цвета. Здесь С — номер цвета (см. табл. 11) 8е1Со1ог(4);
8е1ВкСо- 1ог(С) Установка цвета фона (С — см. табл. 11) 8е1ВкСо1ог(3):
Се1Со1от Возвращает значение текуще! о цвета 81г(Ое1Со1от,8); ОиГГехГ(8);
ОегВкСЫог Возвращает значение текущего цвета фона 81г(СегВкСо1ог,8); Ои1Тех1(8);
8есюг(х,у, 8А,еА,хг,уг) Построение сектора эллипса, залитого цветом по текущему шаблону (х, у. $А, еА,хг, уг — см. ЕШр§е) 8ес1ог( 300,250.0.90, 100,50);
Р1е811се(х,у, зА.еАд) Построение и заполнение текущим узором сектора круга (х, у, »А, еА, г — см. Аге) Р1е8Исе(300,300,0, 180,50),
ЕШЕШрзе (х,у,хг,уг) Построение эллипса и заполнение его текущим цветом (х, у, хг, у г — см. ЕШрзс) Ей1Е1Нр:>е(ЗОО,ЗОО, 100,50);
Р1оо<1РП1(х. У,С) Заполнение заданным стилем области, расположенной внутри замкнутого контура либо вне его. Здесь: х, у — координаты точки внутри (вне) контура, С — цвет контура НоодЕйКЮ,10,15);
Название Назначение Т7 1 Пример
8с1Е1И81у1е (Р.С) Установка стиля заполнения. Здесь: Р — маска: 0 — ЕтргуРШ (сплошной, цветом фона); 1 — 8о1к1Р1И (сплошной, текущим цветом); 2 — ЫпсРШ (—); 3 — 1д81а8ЙР111 (//, нормальной толщины), 4 — 81а&1РШ (//, удвоенной толщины); 5 — Вк81аз11Р111 (\\, удвоенной толщины); 6 — Ь1$1а5ЙР111 (\\, нормальной толщины); 7 — НаГскРШ (клетка); 8 — ХйаГсйРй! (косая редкая клетка); 9 — 1п1сгЕеауеРП1 (косая частая клетка); 10 \У1деПоГРП1 (редкие точки); 11 — С1о8еЭо1р111 (частые точки); 12 — НясгРШ (определяется пользователем); С — цвет (см. табл. 11) 8е1Г11181у1е(7,4); ’
В качестве примера, иллюстрирующего использование про-
цедур и функций модуля ОгарЬ, приведем следующую программу
на Паскале:
Ргодгат ОзеСгарЬ;
□зез Сгарй;
\7аг СгОг^ег, СгМоде: тпЪедег;
х1,у1,х2, у2:тпТедег;
Ведгп
СгСгл^ег:=СеЪесТ;
ХпгЕСгарИ (бгЕгз^ег, СгМсхЗе, ‘ ’) ;
х!:=10; у1:=10; х2:=200; у2:=200;
8еТЕШ8Ту1е (7,4) ; Ваг (х1, у1, х2, у2 ) ; Веас1Тп;
С1озеСгарН;
ЕпЛ.
В результате работы прел раммы в левом верхнем углу экрана
будет изображен прямоугольник, закрашенный красной клеткой.
Заканчивая рассмотрение библиотечных модулей Турбо Пас-
каля, от метим весьма полезную функцию модуля Рпп1ег — уста-
новление связи с печатающим устройством. Модуль содержит
текстовую переменную Ы, которая устанавливает связь с систем-
ным портом ЬРТ1 (порт принтера). Эта переменная использует-
ся в качестве файловой переменной в процедурах ХУпТе и ХУгйеЬп.
Пример
Озез РгтпЬег; [подключение модуля к программе}
Ведз п
ИггЪеЬп (1з I/Вывод*) ; {вывод на печать
Епс1.
Модуль Рппгег уже включает в себя процедуры и Кеитйе
(см. подразд. 3.7.3), осуществляющие связь программы с прин-
тером, поэтому их не нужно включать в программу.
3.9. Визуальное программирование
в Ое1рЫ
Среда визуального программирования Эе1рЫ — это набор
простых и удобных инструментальных средств создания пользо-
вательских программных продуктов, предназначенных для рабо-
ты в \У1пс1о\У8. Языком программирования в Ос1р1гн является
объектно-ориентированный язык ОЬ(ес1 Разса!, в основу кото-
рого положены конструкции Турбо Паскаля 7.0.
3.9.1. Пользовательская оболочка Ое!рЫ
В 1997 г. фирма Вог1апб 1п1егпабопа1 выпустила в свет оче-
редную версию программного продукта Вс1рН 3.0, отличающу-
юся от предыдущих с точки зрения пользователя большей ком-
фортностью, надежностью и удобством в работе.
После запуска среды визуального программирования Ое1р1м
3.0 на экране появляются четыре прикладных окна: основное окно,
окно инспектора объектов, окно формы и окно модуля формы
(рис. 34). В основном окне располагаются меню команд, панель
инструментов и палитра компонентов, которые используются в
режимах проектирования и выполнения программы.
Окно инспектора объектов (ОЬ]ес11п$ресюг) состоит из двух
вкладок: Ргорегбех (свойства объекта) и ЕуепЬ (собьп ия).
Окно формы (Рогт1) представляет собой макет окна разраба-
тываемого пользователем приложения (проекта).
Окно модуля формы (ОпНЦ рис. 35) скрыто за окном формы.
Модуль формы — это готовый к заполнению шаблон (заготовка)
пользовательской программы, который формируется средой
Ве1рй1.
После директивы {$К *.ВЕМ в модуле формы пользователь
может размещать текст своей программы.
Основное окно
Окно инспектора
объектов
Л* Е.<* МО1 У«И РкййК' рм*
; X И? -д & , Шй4«1<1 |АЛвй^| ^/гД2| 5уЛ«1Ш«яйя^ГОЛвС1Хй(^| &йй^ОЛе| ОА«рвл| Йй^^|^Лг»,я*1_*1
Рис. 34. Среда прог раммирования Ое1р1й
Разработка \Утдо\УЬ-приложсния в среде визуального програм-
мирования Ое1рЫ представляет собой довольно простой и увлека-
тельный процесс, не требующий от программиста глубоких зна-
ний. Среда программирования Ое1рЫ имеет в своем составе разви-
тую справочную подсистему Не!р, дающую прог раммисту ответы
на мно1 ис вопросы и позволяющую в большинстве случаев отка-
заться от других справочных руководств. Работа в 13с1р1п похожа
на конструирование моделей из деталей детского конструкт ора.
Разработку приложения в Ое1рЫ можно разделить на два ос-
новных этапа:
1) создание стартовой формы проекта — выбор и расположе-
ние объектов в окне формы проект а;
2) написание кода (текста программы) в окне модуля формы,
состоящего из процедур обработки событий, происходящих с
объектами.
1гй1
Ё 11п|'Ъ. .м
1пЬег1асе
ц«ев
Ухпаомз
*УР*
ТГогш! 1
1.11 I >1||чГШ| ' ~ I
илЛ и»1€1;
- сооЛадаег гсжилятогу, кяг.&л ул-сть}
ЗЮДУЛЯ длд лруг.ух «одулей пуогр<1№?
Мезяадез, ЗузИъИв, С1азиез, ОгврЫсг, СопсгоХз, Коиоз, ГхаХодз;
сХазк (ТГагхп)
рхосеаиге ГогхйСгеаге(5епаег: ТОЬэесс.)
рг!лга1е
/ Ргауа^е с?ас1ага;логг5 ?•
л!
риЬЛс
< РгЛ
ел4;
уаг
ГОГ1Г11: ТГогы!
1лф1епепЪа€1ол .кугдох - лох-акькые с&ьяьжхм.* л регем'»у^мМЯ?
:ярс>^едур г; ^Икклухл, хгоддсри^лисацухх
®ЙГЛ> ’*.ОЕМ^
ргесевиге ТРогт1.Роги|Сгеасе(Зепйег: ТОЬзесъ)
елй
ела
28: з 1Мо(йеа ,Тгт5»1
- -Г|йЛиГ№У|цЛ.
—
Рис. 35. Окно модуля формы
Отладку приложения (запуск на решение и устранение оши-
бок) лучше проводить по мере написания кода обработки оче-
редного события, не забывая периодически сохранять результа-
ты своей работы в памяти компьютера.
3.9.2. Создание стартовой формы проекта
Для практической иллюстрации возможностей Ое1рЫ и тех-
ноло1 ии визуального программирования рассмотрим процесс
создания программы преобразования температурных шкал Цель-
сия, Фаренгейта и Кельвина. Вычисления, которые нужно выпол-
нить в разрабатываемой программе, следующие:
Цельсий > Фаренгейт — Кельвин
ТГ=Тс/5*9+32;
Тк=Тс+273.15.
Фаренгейт > Цельсий — Кельвин
Тс=(Тг-32)*5/9;
Тк=(Тг-32)*5/9+273.15.
Кельвин > Цельсий — Фаренгейт
Тс=Тк-273.15;
Тг=(Тк-273.15) *9/54-32.
Здесь Тс, ТГ, Тк — температура по Цельсию, Фаренгейту и
Кельвину соответственно.
Начнем разработку проекта с создания стартовой формы —
окна, которое появится на экране при запуске ХУшбоиз-прило-
жения (рис. 36).
1>аЪеН
ЬаЬеП
ЬаЬеВ
Рис. 36- Стартовая форма проекта
Установка свойств формы
1. Изменение названия формы:
• на вкладке Ргорегйе» окна ОЬ}ес1 1пзрес1ог найдите свойство
Сарнов (заголовок);
• щелкните по полю Сарйоп левой кнопкой мыши (в правой
колонке появится курсор);
• удалите текст «Еогт!» (клавишей [Васкзрасе] или так: сде-
лайте два щелчка по правой колонке поля СарГющ откройте меню
Е<Ш в главном окне, выполните команду Сн1);
• введите текст: «Температурные шкалы».
2. Изменение размеров формы:
• подведите указатель мыши к границе формы (указатель при-
мет вид стрелки «« >» или «ф»;
• нажмите левую кнопку мыши и, не отпуская ее, передвинь-
те мышь для изменения ширины или высоты формы (заметьте,
что свойства ХУкНЬ и Не1е;Ь1 на вкладке РгорегНе^ изменят свои
значения).
3. Изменение значка приложения:
• на вкладке Ргорегйе» найдите свойство 1соп (значок);
• щелкните по нолю 1соп левой кнопкой мыши (в правой ко-
лонке появится кнопка с многоточием);
• щелкните по кнопке с многоточием, раскроется окно
Р1с1иге ЕсНюг (редактор рисунков):
• в редакторе рисунков нажмите кнопку «Еоай»; в раскрыв-
шемся окне коси! Р1с1йге укажите путь: .../Се1рЫЗ/1та§е$/1соп8/
СИетгса1.гсо; нажмите на кнопку «Открыть» в окне Еоас1 Р1с1иге.
а затем на кнопку «ОК» в Р1с1иге ЕсНюг (значок с «колбой» будет
помещен в заголовок формы проект а).
Размещение объектов в форме проект а
В подготовленной форме разместим объекты, которые пона-
добятся для решения поставленной задачи. Нам потребуется со-
здать четыре объекта типа ЬаЬе! (метка, поле надписи), в которых
будут размещаться поясняющие надписи: «Цельсий», «Фаренгейт ».
«Кельвин» и надпись с выполняемым преобразованием (Цельсий —
Фаренгейт — Кельвин...). Кроме того, в стартовой форме долж-
ны быть созданы три объекта типа ЕсП1 (редактор, поле редакти-
рования), в которых будут размещаться значения температуры.
1. Создание полей надписи (ЬаЬс1):
• выполните щелчок левой кнопкой мыши по кнопке «А» в
палитре компонентов основного окна оболочки Г)е1рй1 (кнопка
изменит цвет);
• переведите указатель мыши в ту точку формы, где должно
находиться поле надписи, и нажмите левую кнопку мыши. В фор-
ме появится поле ЬаЬеП, окруженное восемью квадра гиками (мар-
керами). Одновременно с этим в окне ОЬ]ес1 1пзресЮг появится
имя ЬаЬеП: ТЬаЬе!. Положение и размеры поля надписи в форме
могут быть лег ко изменены традиционными для УМтдом^ спосо-
бами с помощью мыши;
• поместите текстовый курсор в правую половину поля Сарйоп
вкладки РгорегНез и замените текст «ЬаЬеП» в этом месте на
«Цельсий»;
• воспользовавшись возможностями поля +Еот вкладки
Ргорегйез, можно установить понравившийся вам тип и размер
шрифта, которым будет отображен текст' «Цельсий» в форме.
Повторите указанные действия для размещения в форме по-
лей надписей ЬаЬе12 («Фаренгейт») и ЬаМЗ («Кельвин»),
Создайте иоле надписи ЬаЬе14. В правой половине поля СирНоп
вкладки РгорегОез удалите текст «ЕаЬе14»ч значение свойства А И$п
(расположение) установите в аГТор (в верху формы), а значение
свойства АИ^птеШ (выравнивание) установите в шСеШег (ио цен-
тру). В это ноле будет выводиться надпись с выполняемым пре-
образованием (I (ельсий Фаренгейт Кельвин...).
Для удаления объекта из формы нужно выделить удаляемый
объект, а затем воспользоваться командой СиЕ в меню кап в ос-
новном окне 1)е1р№.
2. Создание полей редактирования (ЕсйЕ):
• выполните щелчок левой кнопкой мыши по кнопке «аЫ» в
палитре компонентов основного окна оболочки Эе1рЫ (кнопка
изменит цвет);
• переведите указа тель мыши в точку формы напротив поля
надписи ЬаЪеП («Цельсий») и нажмите левую кнопку мыши.
В форме появится поле ЕсГиЕ одновременно с этим в окне ОЬ]ес1
Зпзресюг появится имя Есйт1: ТЕсНг. Установите нужные размеры
поля редактирования:
• поместите текстовый курсор в правую половину поля Тех?
вкладки РгорегЕ1е$ и удалите текст «Ес1й1»;
• в поле 4 ЕоШ вкладки Ргорегйез установите понравившийся
вам тип и размер шрифта, которым будут отображаться число-
вые значения температуры в форме.
Повторите указанные действия для размещения в форме по-
лей редактирования ЕсН12 (напрот ив надписи «Фаренгейт») и Ес1йЗ
(напротив надписи «Кельвин»),
Если все инструкции выполнены правильно, то внешний вид
формы будет примерно таким, как показано на рис. 36.
Для того чтобы посмотреть, как будет выглядеть форма на
экране в процессе работы приложения, можно воспользоваться
командой Кип в одноименном меню команд основного окна Г)е1рЫ
или функциональной клавишей |Е9].
Чтобы остановить работу программы, воспользуйтесь
командой Рго^гаш Ке^еЕ в меню Кип или комбинацией клавиш
[С1г1]+[Е2]
Созданную стартовую форму рекомендуется сохранить в па-
мяти компьютера. При сохранении проекта Ве1р1и создает не-
сколько файлов, в которых содержится описание проекта, форм
и модулей. Рекомендуется создать на диске отдельный каталог, в
который будут записываться эти файлы.
Для сохранения проекта воспользуйтесь командой 8ауе Ргр)сс(
А$... в меню ГаН. По этой команде Ве1рЫ запросит имя каталога, в
котором вы желаете разместить файлы проекта, имя программного
модуля и имя проекта (имена программного модуля и проекта дол-
жны быть разными). Если проект запускался в Г)е1р1й на решение,
го, кроме основных файлов, в процессе сохранения на диск будет
записан и исполняемый файл (файл: ИмяПроекга.ехе). Его легко
обнаружить в ка галоге на диске по значку «факел на синем фоне».
3.9.3. Написание кода (текста программы)
Проектируемое приложение должно работать следующим
образом:
• пользователь вводит числовое значение температуры в одно
из полей редактирования, например в поле редактирования, пред-
назначенное для записи числовых значений температуры по шка-
ле Цельсия (поле ЕсШЦ см. рис. 36):
• двойной щелчок кнопкой мыши в поле редактирования
(в поле ЕсНЕ!) должен привести к появлению числовых значений
в полях ЕсН12 и ЕсИ13. пересчитанных по шкале Фаренгейта и Кель-
вина соответственно;
• в поле ЕаЪе14 должно появиться сообщение «Цельсий —
Фаренгейт Кельвин».
При вводе числовых значений в поля редактирования Ес1И2 или
ЕсШЗ и двойном щелчке кнопкой мыши пересчитанные значения
температуры должны появиться в соседних полях редактирова-
ния. а в ЁаЬе14 должно появиться соответствующее сообщение.
Рассмотрим процедуру обработки события двойного щелчка
кнопкой мыши по полю редактирования Ес1й1. Предположим,
что пользователь ввел в эго поле числовое значение температу-
ры по шкале Цельсия.
Выполните следующие подготовительные операции:
• выделите поле редактирования Ес1и I в окне формы (щелчок
кнопкой мыши по этому полю объект будет помечен восемью
маркерами);
• раскройте (щелчком кнопкой мыши) вкладку ЕуепСх в окне
ОЬ)ес1 /пхрееЮг. в результате этого в окне инспектора объектов
появится список собы гий, на которые может реагировать выде-
ленный (маркированный) объект;
• два раза щелкните но правому полю события ОпОЫСИск.
раскроется окно модуля формы, в котором вы увидите (рис. 37)
шаблон процедуры обработки события (заготовку программы).
В заголовке процедуры записано имя ТЕогтЕЕйИЮЫСКск,
которое можно расшифровать так: обработка события ЭЫСИск
для объекта Е(Ги1 в форме ЕоппЕ Курсор выставлен на место
(см. рис. 37), с которого можно записывать текст процедуры (опе-
раторы языка Ра$са1).
Очевидно, что для написания процедуры обработки события
нам потребуется несколько переменных:
• Тетр для хранения введенного числового значения в поле
редактирования Ё<1Н1\
• ГГ, Тк для хранения пересчитанных значений температу-
ры по шкале Фаренгейта и по шкале Кельвина соответственно:
• 8Г, 8к — для хранения значений ТГ и Тк в виде символьных
строк;
• со<1е — промежуточная переменная, используемая в функ-
ции преобразования значений символьного типа из поля редак-
тирования ЕсНП в числовую форму.
Преобразование числовых значений температурных шкал не
вызывает особых затруднений, эти вычисления (см. подразд. 3.9.2)
выполняются с помощью обычных операторов присваивания язы -
ка Паскаль.
Сложнее обстоит дело с организацией ввода-вывода инфор-
мации в поле редактирования. Дело в том, что обычные в Турбо
Паскале 7.0 операторы Кеа<1 и \Уп!е не работают в среде Ое!р1п.
Для ввода-вывода значений температуры следует воспользо-
ваться свойством Тех! поля редактирования ЕсШ. Это свойство
определяет содержимое поля редактирования в виде символьной
строки.
К любому доступному свойству объекта в 1)е1р1н можно об-
ратиться, указав через точку имя объекта и выбранное свойство,
например: ЕсНП.Тех!. По свойство Тех! содержит строку симво-
лов из поля редактирования ЕсПт!, а нам нужно, чтобы значения
температуры для их последующей обрабо гки были представлены
в числовом виде.
Для преобразования символьной строки в число и записи этого
числа в переменную Тетр воспользуемся процедурой Уа1. Об-
ратное преобразование из числа в символьную строку можно
выполнить с помощью процедуры $!г.
С,
О
).
С,
к
О
я
се
с-
с-
[е
о
I-
)-
О
1.
)-
О
й
>-
)-
я
о
о
“ ИпйЧ .раз
Опи |
ИйсеДиге ’тгсгго! - Еб1Ь1Ьь 1Л 1ск (Зеп^е*: Т0ь5 есс):
аЬед1п
^В|впй*
I *па-
Рис. 37. Шаблон модуля формы
II Г| П |*|Г|Щ»{|й>»<ии»й<>«|т
Рис. 38. Процедура обработки события ВЪСНск для объекта Едк 1
24: 1
Вывод сообщения о преобразовании температурных шкал
осуществляется присваиванием свойству Сарйоп поля надписи
ЬаЪе14 значения символьной строки: «Цельсий — Фаренгейт —
Кельвин».
Модуль формы, содержащий текст процедуры обработки со-
бытия ГЭЫСПск для объекта ЕсШЕ показан на рис. 38.
Сохраните проект в каталоге на диске (для сохранения проек-
та рекомендуется пользоваться командой 8ате ЛИ в меню И1е),
запустите программу на решение (см. подразд. 3.9.2) и отладьте
созданную процедуру.
Процедуры обработки события ОЫСНск для объектов ЕсШ2
и ЕсШЗ отличаются от процедуры, показанной на рис. 38, вычис-
лительной частью (рис. 39, 40).
После отладки процедур и сохранения проекта на диске можно
выйти из Ве1рЫ (команда Ехй в меню ЕПе) и запустить на реше-
ние исполняемый файл из оболочки \У1пс1оиъ. О правильности рабо-
ты приложения можно судить, если провести сравнение результатов
работы приложения с данными, приведенными в табл. 13.
Таблица 13
Шкала температур
°с " °г
0 32 273
-18 0 255
-273 -459 0
На заключительном этапе работы над проектом преобразо-
вания температурных шкал назначим разработанному приложе-
нию значок, который будет изображать приложение в провод-
нике ХУ'тдоиъ:
• выполните команду Орйопь в меню Рго|ес€;
• в открывшемся диалоговом окне перейдите на вкладку
АррИсаИоп;
• в поле ТШе введите текст: «Шкала температур»;
• нажмите на кнопку «Ьоай 1соп», в открывшемся окне
АррИсаИоп 1соп укажите пут ь:.. .Юс1рЫЗ/1та§е8/1соп$/СЬеш1са1лсо
(значок «с колбой»);
• нажмите на кнопку «Открыть» в окне АррИсаИоп 1соп. а за-
тем на кнопку «ОК» на вкладке АррКсаНоп.
§ ПтП.рае
-^Г| х|
ишп |
рхосейиге ТГоггз!.Ей1Ь2ГЫС11ск (5епйег : ТОЬзесх);
: уаг тегйр, Тс, Тк: геа 1;
сойе: Шлеуег;
зс#зк:в1г1пд;
Ьед!п
\7а1 (Ейас2.Техг,Тещр, сойе) ; <взад ^е^ер^.'гур^ лс
Тс:« (Тегор-З21 *5/9; (счисления>
Тк:”5*(Тетр-32)/9+273.15;
з1г(Тс:4:2,зс):
згг(Тк:4:2,зк);
е, стрелу
Ей1с1.Техс:~зс;
ЕйзхЗ.Техг:«зк;
ЕаЬеХ4.Сарг1оп:
епй;
Фаренгейт-Цельсий-Кельвин*:
(сообщение)
Вл/ВОД рИЗуМЬ Г-йТч?}
|Л.й»»н»т>|>1<
ш4. ншшШ<
Рис. 39.1 Троцедура обработки события ЭЫСНск для объекта Е6Н2
|= ИтЦ.ра>
ЦпгП
...
Л
Й7>ММШ»0Гй1МЙ&1
{в&геод резухьтаг&г
рхосейиге ТГоггп1.Ей1ъЗ$Ъ1С11ск(5епс1ег: ТОЬзесс);
•Уаг Тетр, Тс,Т±:геа1;
сойе:1гледег:
зс,з±:®Ъг1пд;
Ьедш
V© 1 (ЕЙ1СЗ. Техс, Тетр, сойе); пс Келъъюг/}
Тс: -Тетр-273.15; (счисления}
Т1:=32+(Тетр-273.15)/5*9;
ЗРг(Тс:4;2,ес)г
згг:2,з±);
ЕЙ1€1.Техг:=зс;
Ей!Р2. Техь: -ззЕ ;
Ьгйэе IЧ. Сарг юп:
енй;
жн1н<т111Н1Н111Ч1|нг
........................ ......... »***««>*
( 27: 1 {МосЯЫ
{преобрез'С'В-зкяе в игроку сммволод)
Кельвин-Цельсий--Фаренгейт' ; {сообщение)
I ЙГЙ*ЙМ' ’.г|| ||||||Г|1II "111 ни
чЛлл<^/й^л^лЛ'Л5-.-.'\лл^}0^Х>ц00-ллгяС1»
Рис. 40. Процедура обработки события ВЫСПск для объекта ЕдпЗ
После запуска программы на решение (см. подразд. 3.9.2) и
сохранения проекта по команде 8ате (8а\е А») в меню Н1е испол-
няемому файлу приложения в проводнике Шшдои'З будет назна-
чен выбранный нами значок.
3.9.4. Основные понятия объектно-
ориентированного программирования
Если внимательно посмотреть на содержание модуля формы
11пП1, то кроме трех процедур, разработанных нами в предыду-
щем подразделе, можно обнаружить строки, которые Ве1рЫ ав-
томатически добавляет в текст программы (рис. 41).
ППХС1
ТпЪег±асе
и«е®
СТХПСЮТСЗ,
ЗъасггТз;
еуре
ТЕогкй «
ЕаЬеН:
ЬаЬе12:
ЬаЬе13:
Ес1хе2:
ЕсНеЗ:
| ЕЛХС.1:
Й Уп.Л г л
Меззаде», ЗузИы1з, С1аззез, СгарЫсз, СопсгоХз, Гсгше
с1ава? (ТЕоггп)
ТШэеЪ
ТЬаЬеЪ
ТЬаЗэе!;
ТЕйхС;
ТЕсНе;
ТЕ61С;
ЬаЬе14: ТЬаЬе!
I) г осе Лиге
ргосейиге
ргосейиге
ргйгаЪе
риЫхс
ЕсНг 1ВЫС1хек (ЗепДег:
Ес11х2РЫС 1 хек (Зепдег:
ЕсНХЗ РЫС11ск (Зепйег:
ТОЪзесъ)
ТОЬзесГЗ
ТОЬЗесг)
епй?
уаг
Гсгпй: ТГогй>1;
1од1езпеп1 аГ 1 оп
29 1 1п$еЛ
Рис. 41. Модуль формы Ппй!
Для того чтобы понять, почему Ос1рЫ дописывает в текст
программы эти строки, рассмотрим основные поня гия объект-
но-ориентированного программирования.
В основе объектно-ориентированного программирования
лежит понятие объекта — динамической структурыобладающей
определенными свойствами. Над объектами выполняются дей-
ствия (операции).
Например, если в качестве объекта выбрать часы, то к свой-
ствам можно отнести текущее время и время будильника. К дей-
ствиям, которые выполняются над объектом, можно отнести уста-
новку времени, установку будильника, отключение будильника.
Программа на объектно-ориентированном языке программи-
рования задается описанием поведения совокупности взаимосвя-
занных объектов.
ОЬ]ес1 Раьса! позволяет программно определять все атрибуты
объектов с помощью сложных структур, называемых классами. Класс
очень похож на запись, но, кроме описания данных, в отличие от*
записи включает в себя описание процедур и функций (рис. 42).
Класс
Поля (данные) переменная 1
- - •
переменная М
Методы (процедуры и функции) процедура 1
процедура М
Описывают
свойства объекта
Выполняют действия
над объектом
Рис. 42. Ст рук ] ура класс
Данные класса (переменные) называются полями класса, а про-
цедуры и функции методами класса.
Описание класса в программе располагается в разделе Туре.
Пример
Туре
етр1оуее-с1азз
пате:зГгтпд; {поле}
асМгезе:зЬгтпд; {поле}
ргосесЩге рг.гпк; {метод}
епй;
В модуле 1)11111 (см. разд. Туре на рис. 41) объявлен класс
ТЕогт1. Поля класса: ЬаЬе1],....ЕдйЗ. Методы класса:
ЕбШВЫСИск,ЕддЛЗЭЫСЦюк.
Объект является представителем класса и объявляется в раз-
деле Уаг.
Пример
\7аг могкег:етр!оуее;
Ьозз:етр]оуее;
В модуле 13пП1 объявлен объект Еоггп! (см. раздел Уаг на
рис. 41) как представитель класса ТРогт!.
Поскольку объект — это динамическая структура, то нужно
обеспечить выделение памяти для данных объекта с помощью
специального метода класса — конструктора (его имя — сгеа1е).
Пример
егар1оуее=с1а88
пате: зЪгтпд;
асМгёзз:згггпд;
ргосес!иге ргтпк;
сопзЪгисгог сгеаЕе;
епд.;
Доступ к полям объекта осуществляется указанием имени
объекта и имени поля, например:
июгкег. лате=‘Петров’;
Для того чтобы выполнить действия над объектом (восполь-
зоваться методом класса), нужно указать имя объекта и имя мето-
да, например:
июгкег. рг тпТ ;
В программе методы класса записываются так же, как обыч-
ные процедуры (функции). Имя процедуры (функции) состоит из
двух частей — имени класса и имени метода, например:
ртосесГиге етр' суее .ргтпЪ;
Ьед±п
ТСг1Ъе1п (пате, ад.с1ге88) ;
епс1;
Обратим внимание на то, как сформированы имена проце-
дур в модуле ОшП (см., например, рис. 38):
ргосебиге ТЕоптИ. ЕёИ1 РЫСПск(8епс!ег: ТОЬ]ес1),
имя класса имя метода
Крагко остановимся еще на трех важнейших понятиях объек-
тно-ориен тированного программирования: инкапсуляции, насле-
довании, полиморфизме.
Инкапсуляция это сокрытие полей объекта для того, чтобы
к ним можно было обратиться только через методы класса. Ог-
раничение доступа к полям объекта реализуется в ОЬ]сс1 Ра$са1
при помощи свойств объекта. Свойство объекта характеризуется
полем, хранящим значение свойства, и двумя методами, обеспе-
чивающими доступ к полю свойства. — методом записи свой-
ства (\Уп1с) и методом чтения свойства (1<еас1). Работая в Пе1рЫ,
нам не нужно заботиться о программной реализации методов
записи и чтения свойств (это делается автоматически). Использо-
вание свойств объекта внешне ничем не отличается от использо-
вания полей объекта. Например, мы записали сообщение:
йаЬе14.Сар1юп:=ьЦельсий Фаренгейт — Кельвин*. При выпол-
нении про] раммы происходит автоматическое перетранслирова-
ние оператора присваивания в соответствующую инструкцию
вызова метода, изменяющего свойство Сарйоп.
В модуле формы 13тм11 (см. рис. 41) вы можете найти директи-
вы риЬПс и рпуаГе, которые устанавливают степень видимости
элементов класса внутри программы. Элементы класса, обьявлен-
ные в разделе риЬПс, являются общими, т.е. доступными Iвиди-
мыми) для всей программы. Элементы класса, об ьявленные в раз-
деле рпуа1е, являются частными, т.е. доступными только внутри
класса. Обратиться к частным элементам можно только через
методы класса. Если директива риЬПс не используется в програм-
ме, как в нашем случае, то по умолчанию все элементы класса
считаются частными.
Основное преимущество объектно-ориентированно] о про-
граммирования заключается в том, что класс, созданный для од-
ной программы, может быть использован в другой программе.
Новый, производный класс (по гомок) наследует характеристики
базового (родительского) класса. При этом в объявлении класса-
потомка указывается класс родителя, например:
ешр1оуее1=с1азз(етрТоуее)
за1агу:геа1;
сопзГгисСог сгеа.Те (Калпе : ТЬате; 8а 1: геа!) ;
епй;
Заключенное в скобки имя класса етр1оуее показывает; что
класс стр1оуее! является производным от класса етр1оусе. Пос-
ле создания объекта производного класса в программе можно
использовать поля и методы родительского класса.
В некоторых программах вы можете встретить директиву
рго1ес1ес1. Элементы класса, объявленные в разделе рго1ес1сс1. яв-
ляются защищенными, т.е. доступными только в порожденных
от него классах. Обычно в раздел рго1ес1сс1 помещают описания
методов класса, обеспечивающих доступ к полям класса
Полиморфизм — это способность объекта изменять фор-
му (поли — много, морфизм изменение формы), воз-
можность использовать одинаковые имена для методов, вхо-
дящих в различные классы. При создании полиморфных
объектов метод базового класса помечается директивой
уи1иа1 (виртуальный), а одноименный метод порожденного
класса — директивой оуетгМе, позволяющей заместить вир-
туальный метод родительского класса собственным ориги-
нальным методом [13].
В среде Ое1рЫ содержится большое количество классов, оп-
ределяющих форму проекта и его компоненты (поля надписей,
поля редактирования, командные кнопки и т.д.). После запуска
Ве1рЬ1 в окне модуля формы (см. рис. 35) уже содержатся опи-
сание класса исходной формы проекта и объявление объекта-
формы проекта:
Ъуре
ТЕогт1~с1_а.зз (ТЕогтп)
ргг^аГе
{Рг^аГе бесРага Попз ]
риЬИс
{РиЬИс дес!агаМопз}
епб;
Vа^ Ес гт1: ТЕоггпЗ ;
Во время разработки проекта Пе1рЫ автоматически форми-
рует описание класса формы, а при создании процедуры
обработки события формы или ее компонентов добавляет в это
описание объявление соответствующего метода (см. рис. 41),
освобождая программиста от необходимости разбираться
во всех нюансах объектно-ориентированного программи-
рования.
3.9.5. Организация обмена сообщениями
между графическими объектами в языке
Турбо Ра5са1 (М8-ОО8)1
Среды визуального проектирования (Уйша! С++. Г>е1рЬ1 и
т.п.)- призванные обла чить процесс создания программы для ОС
\Утбо\у$, требуют некоторого дополнительного и достаточно
емкого уровня знаний о технологии обвеюно-ориентированно-
го программирования (ООП). Современное обучение основам
программирования строится на базе струк гурного подхода к кон-
струированию алгоритмов и реализации программ, а объектно-
ориентированная технология входит в него пока лишь в качестве
углубленного курса. Кроме того, в настоящее время для изло-
жения основ ООП недостаточно разработаны системы упражне-
ний и задач, при решении которых у учащихся формировались
бы элементарные знания о поведении объектов и их взаимодей-
ствии между собой, отрабатывались бы умения и навыки но ра-
боте с объектами под управлением внешней среды-системы. Ведь
именно четкое понимание принципов организации взаимодей-
ствия объектов дает возможность написания полнофункциональ-
ных объектно-ориентированных приложений.
Одним из возможных вариантов основы для системы задач
может явиться построение набора библиотек, имитирующих дей-
ствия объектно-ориентированной операционной системы. К та-
кой среде можно выдвинуть следующие требования: схожесть
обмена сообщениями с внутренними событиями имитируемой
операционной системы: независимость от внешних объектов (сре-
да не управляет, например, объектом, построенным учеником, а
лишь отсылает ему свои сообщения); предоставление ученику
достаточно обширного набора инструментов для создания и уп-
равления объектами (имитирование интерфейсных функций опе-
рационной системы).
Также необходимо, чтобы построенная система сама была
построена на принципах объектной среды (хотя допустима и
структурная реализация — так как это всего лишь модель), в до-
статочной мере скрывала свою внутреннюю реализацию и на-
глядно представляла объекты ученика, их изменение и взаимо-
действие с «системными» объектами.
1 Материал предоставлен С.А. Ждановым и К.А. Владимировым.
Выполнение вышеперечисленных условий позволит ученику
избежать «погружения» в сложность реализации программы-
оболочки и полностью сосредоточить свое внимание на созда-
нии и управлении самим конструируемым объектом. При этом
в достаточной мере моделируется создание программы под уп-
равлением сложных объек тно-ориен тированных операционных
систем, где необязательно четко представлять себе принципы ра-
боты системы, а одним из главных аспектов является корректная
обработка ее сообщений.
Рассмотрим более подробно один из вариант ов модели объек-
тно-ориентированной среды для операционной системы М8-
1)08 и се реализацию средствами технологии программирова-
ния Вог1апб Разса! \\т11т ОЬдесТз 7.0 (ВР). При моделировании
объектно-ориентированной среды был выбран набор объектов,
имитирующих работу дорожно-транспортных служб, ученикам
же предоставлено несколько моделей автотранспорта. Основ-
ные этапы методики обучения принципам об ьектно-ориенти-
рованного анализа и проектирования решения учебной задачи
следующие.
• Постановка задачи. На данном этапе ученику объясняется,
что для выполнения задания необходимо проанализировать ре-
альные объекты, описать их в виде набора некоторых характе-
ристик (свойств) и видов возможных действий, т.е. ученик дол-
жен провести построение информационной модели реального
обьекта.
• Объяснение принципов работы программы-оболочки и демон-
страция ее возможностей. 11а данном этапе ученику демонстри-
руется сама программа-оболочка, объясняется интерфейс, демон-
стрируется готовый работающий объект и поясняются принци-
пы управления им при помощи программного интерфейса.
• Предоставление ученику средств для создания собственного
объекта и объяснение способа взаимодействия его с оболочкой. На
этом этапе необходимо дать ученику полный набор допустимых
«интерфейсных» функций, список подключаемых библиотек и
самое 1 лавное — все возможные «системные» сообщения, спосо-
бы их приема строящимся объектом от системы и передачи сис-
темным объектам.
Ниже приведены пример задания, этапы объектно-ориенти-
рованного анализа его решения и основные фрагменты программ-
ной реализации.
Задание. Автобус имеет некоторое положение на экране и
может перемещаться с заданной скоростью по указанному мар-
шруту.
Объектно-ориентированный анализ.
1. Объект — «простой автобус».
2. Набор характеристик (свойств) объекта: положение на эк-
ране; скорость движения.
3. Набор методов: создать объект; показать объект на экра-
не; скрыть (удалить) изображение объекта; перемещать объект,
двигать вперед по маршруту; остановить объект.
Программная реализация объекта:
1:уре
ТВ115 ~ ОВТЕСТ {Объект — «простой автобус»)
{Характеристики (свойства) объекта)
РКТУАТЕ
ЕХ, ЕУ : №огс1; {Координаты положения объекта}
ЕЗреес! : ВуДе; {Скорость]
{Методы объекта:}
ргосейиге ЗЪою; {Показать объект на экране)
ргосейиге НтсЗе; {Скрыть объект}
ргосейиге Рк^е; [Двигать объект вперед}
ргосейиге 8Тор; {Остановить объект}
РПВЫС
ргосейиге 0пР^е8задеЕVеп^; {Обработчик сообщений}
ргосейиге Сгеа,1е(АХ/ АУ :№огс1; АЗреей :ВуЪе);
{Создать объект}
ргосейиге 0е81згоу; {Уничтожить объект}
ЕРЮ;
В данном примере все методы объекта, кроме ОпМезза^еЕуепД
являются скрытыми и не работают с сообщениями они вызы-
ваются ОпМе88а§еЕуеп1 в качестве реакций на соответствующие
события. Сам же метод ОпМе88аееЕуеп1 в общем виде записыва-
ется так:
Vа^
Соип!: :ВуТе;
ТещрМеезадеВиЕЕег :1п1:едег;
Ьедхп
СоипЬ:=1; {Пакет сообщений организуется как массив
от 1 до 20}
гереа!:
6—967
ТетрМеззадеВиЕГег: =Кесе1 уеМеззаде (Соипб) ;
сазе ТетрМеззадеВиббег о!
М07Е_Е0КМАК0_0В0ЕСТ1 : Ьедтп
ОТзаЫеМеззаде (Соипб) ;
8е1В. Мсгуе;
епб;
{Обработка других сообщений}
епб;
Соипб:=Соипб+1;
ипбЫ ТетрМеззадеВиГбег=У010;
епб;
Задачи в данном примере являются последовательно в вожен-
ными друг в друга, и при выполнении полного их набора у обу-
чаемых появляется поле для творчества и исследования: возмож-
ность самостоятельно решать вопросы, точно не описанные в
заданиях, возможность сравнивать свои объекты с об ьек хами
других учеников на предмет выявления вероятных неточностей
при выполнении различных действий. Предполагается также со-
здание объектов и сообщений, не поддерживаемых системой за-
ранее. для чего потребуется уже более полное понимание работы
программы-оболочки.
Теперь рассмотрим подробнее, что происходит внутри этого
метода и как реализуется механизм обмена сообщениями. Для
реализации механизма обработки сообщений необходимо опре-
делить структуру сообщения, составить перечень возможных со-
общений и описать его программную реализацию. Определим
глобальный статический массив, компонентами которого явля-
ются записи вида:
буре
ТМеззаде = КЕСОКЭ
СМеззаде : Тпбедег;
БбзаЫеб : ВооХеап;
епб;
Первое поле в каждой записи содержит собственно константу -
идентификатор сообщения, второе же говорит о том. обработано
ли сообщение каким-либо объектом или нет (обработано — 1К СЕ,
не обработано — ЕА15Е). Константы сообщений могуч принимать
значения от -1 до 200. причем сообщение с номером -1 в данном
случае считается пустым и имеет идентификатор УОЮ. Сообщения
с номерами от 1 до 200 являются доступными для использования
внешними объектами (1 - СЕО8Е РКОСКАМ), а сообщение с но-
мером 0 - РКОСЖАМ.^АСПУЕ используется только внутри цен-
трального объекта АррИсаИоп.
Так как при старте программы в системе сообщений нет, то в
поле СМеаза^е каждой ячейки пакета сообщений заносится флаг
УОЮ а в поле Г>1хаЫес1 ГКСЕ.
Сообщения могут быть отправлены и обработаны как об ъек-
тами системы, так и объектами ученика. Например, после старта
программы пользователь нажимает кнопку «Вперед» в подменю
«Объекты», рассмотрим, что происходит внутри программы.
Во-первых, от кнопки к объекту Аррйсайоп приходит сооб-
щение о том, что она нажата (это внутренний обмен низкоуров-
невых объектов, и он не имеет отношения к модели).
Во-вторых, на основе информации о нажатой кнопке объект
АррИсаИоп выбирает сообщение — в данном случае это будет
МОУЕ ЕОК\УАКВ_ОВ1ЕСТ1 (ОВЗЕСТ1 потому, что в програм-
му заложена поддержка до четырех объектов, построенных уче-
никами) и помещает его в первую же свободную ячейку пакета
сообщений. Свободной в данном случае считается ячейка с по-
лем СМша^е, равным константе УОЮ, хотя выбор можно про-
изводить и по полю ВыаЫес! = ТКСТЕ. 1 (осле этого поле СМеш^е
принимает значение выбранной константы, поле же ВкаЫес1 ус-
танавливается в ЕАЬ8Е.
Пакет сообщений доступен любому объекту, включенному в
главный цикл программы, поэтому после того, как сообщение
попало в пакет, оно может быть обработано объектом ученика.
Для просмотра ячеек пакета и выбора нужного сообщения в ме-
тоде ОпМе88а§еЕ\еп1 объект Виз вызывает предопределенную
функцию Кссс1УеМе88а«е (МишЬег :1пСе§ег), которая возвращает
константу идентификатор сообщения из ячейки с номером
ЫитЬег. Так как объекту неизвестно заранее точное место иско-
мого сообщения в пакете, то необходимо орг ани зова гь весь его
просмотр в локальном цикле, для чего потребуются счетчик и
переменная — временный буфер для просматриваемого сообще-
ния. Признаком выхода из этого цикла обычно служит равен-
ство содержимого временного буфера константе УОЮ.
Если необходимое сообщение содержалось в пакете и объект
готов его обработать, то, во-первых, вызывается функция
□18аЫсМе$8а§е (ТМитЬсг :1п1е§ег), которая устанавливает поле
ГИхаЫе сообщения в ТВОЕ, и, во-вторых, происходит собствен-
но обработка сообщения объектом, в данном примере вызыва-
ется метод 8е1Е.Моуе.
Если же объекту пользователя необходимо самому отправить
сообщение-запрос другому объекту, вызывается предопределен-
ная функция ЗепдМезза^е (АМе88а§е :1п1е^ег). Эта функция по-
мещает в поле СМежа^е первой свободной ячейки пакета сооб-
щение АМе88а^е, и поле БгхаЫес! устанавливается в ЕАЕ8Е. Пос-
ле того как пакет обработан внешними объектами (ученика), он
обрабатывается внутренними (системы), которые действуют при
работе с ним абсолютно аналогично. В завершение главного цик-
ла управление опять переходит к объекту АррВсаНоп, который
является как бы промежуточным между внешними и внутренни-
ми объектами.
Этот объект, помимо собственно управления оболочкой, вы-
полняет обслуживающие функции для пакета сообщений. Про-
сматривая все сообщения, он выбирает и удаляет те из них, у
которых поле СМв8$а$е нс равно УОЮ, а поле ГНзаЫес! истинно.
После удаления сообщения оставшиеся сдвигаются к началу па-
кета. АррПсайоп также следит за возможным переполнением мас-
сива сообщений и предотвращает подобные ситуации (внутри
объекта определена переменная для временно] о хранения пере-
полняющего пакет сообщения).
ГЛАВА 4
Язык программирования С++
4.1. Общее описание языка С++
4.1 Л. Назначение и некоторые
особенности языка
Язык программирования высокого уровня С++ был разрабо-
тан в начале 80-х годов Бьерном Страуструпом в результа те рас-
ширения и дополнения языка С. В этом языке сочетаются лучшие
свойства языка Ассемблер и языков программирования высоко-
го уровня. Компактность и скорость выполнения программ на
языке С++ приближают их к программам, написанным на языке
Ассемблер. С++ содержит в себе все основные черты объектно-
ориентированных языков программирования: наличие объектов
и инкапсуляцию данных, наследование, полиморфизм и абстрак-
цию типов. Наряду с этим С++ полностью поддерживает техно-
логию структурного программирования.
В настоящее время фирмой Вог1ап<3 1 пгегпайопа! создано не-
сколько компиляторов С++. Однако при изучении особеннос-
тей языка необязательно иметь самую последнюю версию ком-
пилятора, которая может понадобиться только при написании
больших и сложных программ. Изложение материала будет ори-
ентировано на версию компилятора С+4 3.1, появившуюся на
рынке программных продуктов в начале 90-х годов почти одно-
временно с Турбо Паскалем 7.0. Интегрированная инструмен-
тальная оболочка С++ 3.1 очень похожа на ИИО ТП 7.0. по-
этому нет смысла еще раз описывать структуру НПО. рассмат-
ривать вопросы ввода, корректирования, сохранения,
выполнения и методики отладки пользовательских программ
(см. подразд. 3.1).
К основным особенностям языка программирования С++ сле-
дует отнести возможность разделения программы на легко под-
дающиеся контролю части за счет определения новых пользова-
тельских типов, наличие классов которые обеспечивают скры-
тие данных, их инициализацию, управление памяз ью и механиз-
мы перегрузки операций и функций 115].
Программа на С++ состоит из одной или нескольких функ-
ций, которые содержат переменные, константы и операторы,
предназначенные для решения определенной задачи. В язык С++
включены оригинальные операторы присваивания и выбираю-
щие операторы. Реализация циклов «До» и «С параметром» не-
сколько отличается от привычных для нас алгоритмических струк-
тур: выход из этих циклов осуществляется по условию «Нет».
Как и в Турбо Паскале 7.0, операторы в С++ отделяются друг от
друга точкой с запятой.
Знакомство с языком С++ начнем с рассмотрения алфавита и
словаря, типов данных и структуры программы на языке С++.
4.1 .2. Алфавит и словарь
Язык С++ оперирует со следующим набором символов:
• латинские прописные и строчные буквы (А, В С, ..., х, у, х);
• арабские цифры (0, 1. 2, .... 7, 8, 9);
• символ подчеркивания;
• специальные символы и символы-разделители.
Специальные символы и их комбинации чаще всего использу-
ются для обозначения операций. Список специальных символов
языка С++ приведен в табл. 14.
Таблица 14
Специальные символы
Изображение Название Изображение Название
+ Плюс 1 Черта
4“ 4" Знак приращения Знак логического
— Минус 1 • ИЛИ Восклицательный
л— Знак уменьшения — знак Стрелка
* Звездочка — Равно (операция
/ \ Наклонная черта Образный слеш присваивания) Знак равенствг1
// у (войной слеш * Не равно
Точка Больше
Запятая < Меньше
Продолжение
Изображение Название Изображение Название
V Двоеточие Больше или равно
• В V Знак разрешения — Меньше или
1 очка с запятой << равно Сдвиг влево
Апостроф 2>2> Сдвиг вправо
44 Кавычки <> Угловые скобки
Л «Крышка» о Круглые скобки
% Знак процента [] Квадратные
Знак номера {} скобки Фи1 урныс скобки
& Ампсрсенд у* Скобки коммсн-
Знак логического И Тильда тария
Символами-разделителями считаются пробелы, комментарии
и концы строк. Комментарии могут содержать любые символы,
следующие за знаком двойного слеша, например: //Главная про-
грамма. Компилятор С++ игнорирует текст, следующий за этим
знаком до конца строки. Кроме того, комментарии могут быть
заключены в ограничивающие скобки /* */, например: /* Главная
программа*/.
С помощью перечисленных символов формируются:
• имена;
• ключевые (служебные) слова;
• числа;
• строки символов;
• метки.
Имена (идентификаторы) в С++ различаются по первым 32
символам. Имена обязательно начинаются с латинской буквы или
символа подчеркивания «_», за которыми могул следовать в лю-
бой комбинации латинские буквы и цифры. С++ различает про-
писные и строчные буквы. Не допускается использование для
написания имен специальных символов и символов-разделителей.
Например: _х, В12, 81аск правильно; ЬаЬс1. 4, КооГЗ —
неправильно.
Имена, применяемые пользователем для обозначения конст-
рукций, не должны совпадать по написанию с ключевыми
словами. Список зарезервированных слов в С+т приведен в
приложении 6.
Имя метки перехода предел авляет символьно-цифровую кон-
струкцию, например: шегка!, ра§8, сгозз. Метки в программе на
языке С++ не объявляются.
Строка символов — это последовательность символов, зак-
люченная в кавычки. Например: «Строка символов».
Числа, обозначающие целые и вещественные значения, запи-
сываются в десятичной системе счисления. Перед любым числом
может стоять знак «+» или «-». В вещественном числе целая часть
от дробной отделяется точкой. Вещественные числа, содержащие
десятичную точку, должны иметь перед ней или после нее по край-
ней мере по одной цифре.
4.1.3. Базовые типы данных,
используемые в С++
Большинство программ на языке С++ используют типы дан-
ных, представленные в табл. 15.
В программах на языке С++ часто используется слово УО1д,
которое указывает на то, что функция не возвращает или не име-
ет значений, передаваемых в нее. Следует иметь в виду, что нельзя
создать переменную типа уок1.
Таблица 15
Базовые типы данных языка С++
Тип Значения Размер байтов
(пустой, нс имеющий значений) сЬаг (символьный) 1п1 (целый) ип$1§пе<1 (беззнаковый) 1оп§ (длинный) Поа1 (с плавающей точкой) с!оиЫе (с плавающей точ- кой двойной длины) от - 128 до 127 от -32768 до 32767 от 0 до 65535 от -2147483648 до 21 47483647 от 3.4Е-38 до 3.4Е+38 ОТ-Г7Е-308 до 1.7Е+ЗО8 1 2 | 2 4 4 8
Тип сЬаг служит для определения символьных переменных
и строк. Символьная переменная — это один символ, заключен-
ный в одинарные кавычки, например: ‘а\ ‘+\ Строка симво-
лов в языке С++ — это массив символов, заканчивающийся нуле-
вым байтом. Конец символьной строки (нулевой байт) обозна-
чается символом М1ЛЛ (ЛО’). Строки символов заключаются
в кавычки, например: “Строка символов".
Чтобы использовать переменную в программе, ее нужно объя-
вить — указать тип переменной и ее имя. Опера тор объявления
переменных языка С++ в общем виде выглядит так:
тип_переменной имя1,..., имяЫ;
Например:
тпе т; Г1оаГ х,у,г; ейаг с,5[64];
Обратите внимание, ч го при гаком объявлении с — это сим-
вольная переменная (хранит один символ), а 8 [64] — это сорока
символов (массив символов).
Более сложные типы данных, а также т ипы. определяемые
пользователем, будут рассмотрены при дальнейшем изложении
материала.
4.1.4. Структура программы
Программа, записанная на языке С-1-+, должна иметь заго-
ловок и тело програ^ммы, состоящее из одной или нескольких
функций. В качестве примера рассмотрим структуру программы
(табл. 16), реализующую алгоритм определения суммы или про-
изведения элементов матрицы в зависимости от значения пер-
вого элемента. Алгоритм был разработан в п. 2.4.4 и приведен
на рис. 23.
Каждая программа на языке С++ начинается с оператора
#нтс1ис1е, например (см. табл. 16):
йтпсЗибе <1о8Ггеат.й>
Оператор #1пс1и<1с сообщает компилятору, какие заголовоч-
ные файлы (файлы с расширением К) нужно включить в програм-
му. Заголовочные файлы — это файлы, которые содержат
определения, предоставляемые компиля тором для выполнения раз-
личных операций (например, операций ввода-вывода, матема-
тических операций и т.д.). Заголовочные файлы записаны в фор-
мате А8СП, их содержимое можно вывести для просмотра на
экран или на принтер из каталога ТТмСЫЮЕ.
Тело программы состоит из одной или нескольких функций.
Каждая программа на С++ содержит главную функцию, с
Структура программы на языке С++
~ “ С груктура программы Пример
Заголовок #шс1и(1е <1О81геат,11>
кции Лоаг 8ит(Лоа1 \[2][3]) { ш11; Поа1 К.; К=0; Гог(1 =0;1<2;1++) Гог(]=0;з<3у++) К-К+А[1][й; геШгп(К);
!о программы Фун Лоа: Рго(Лоа: А[2][3]) { 1П11,]; Лоа: К; К=1; Гог(1=0;1<2;Н+) Гоги=0,з<3й++) к=к*АЩШ; ге1игп(К):
о я функция Уок! тат(уо1д) т! 1^; Ноа1 А[2][3]; Гог0=О;1<2;1++) Гог(]=0у<3у++) { ст»А[1][П; со1й«Др](П;
Главна. сои1«еп<11, тейсаЮ: 1Г (А[0][0]>=0) сои1«“А[1][1]=”«А(0][0]«“К=”«8ит(А)«епд1; екс сои1«“А[1][1]=”«А[0][0]«“К=”«Рго(А)«епс11; } |
которой начинается выполнение программы. Главная функция
начинается с оператора
Vо^б тахп (уоЫ)
уок! та1П(У01с!)
Программа не возвращает
значение операционной
системе (например, не
сообщает об успешном
выполнении)
Программа не использует
аргументы командной
строки (например, имя
файла)
После оператора начала главной функции следуют операто-
ры программы, заключенные в группирующие фигурные скобки
{}. Операторы ш1 1,]; и Поа1 А[2][3]; определяют тин перемен-
ных 1, ] и двухмерного массива А, содержащего две строки
и три столбца. Затем следуют операторы цикла с заданным
числом повторений, начинающиеся со слова Гог. В группирую-
щих скобках внутреннего цикла расположены операторы вво-
да-вывода элементов массива А. Оператор сои1<<еп<]1: обеспе-
чивает переход на новую строку при выводе информации на
экран дисплея. Меткой «тетка 10:» помечен условный опера-
тор 1Г (А[0][0]>=0)..., проверяющий значение первого элемента
массива А (нумерация элементов массива в С++ начинается
с нуля).
В зависимости от результата проверки условия осущест вля-
ется обращение к функциям 8ит или Рго, в которых определяет-
ся значение суммы или произведения элементов массива А Вы-
численное значение В возвращается в главную функцию опера-
тором геШгп(К). расположенным в функциях 8ит и Рго.
Значения первого элемента массива А и результата В выво-
дятся на экран оператором вывода сои1«...
Структура функций 8ит и Рго во многом похожа на структу-
ру главной функции.
4.2. Операторы языка С++
Операторы в языке С++ предназначены для описания дей -
ствий. Любой оператор может быть помечен меткой. Операто-
ры отделяются друг от друга точкой с запятой.
К простым операторам языка С++ относятся оператор
присваивания, операторы ввода и вывода данных, оператор
перехода.
4.2.1. Оператор присваивания
Оператор присваивания является основным, фундаменталь-
ным оператором. Общий вид оператора:
имя переменной=выражение;
Например: Р=3*с+2*81п(х);
Выражение состоит из операндов и операций. Операндом мо-
жет быть константа, переменная или функция. Операции объеди-
няют операнды и выражения. Перечень операций языка С++ при-
веден в приложении 7. Вид выражения однозначно определяет
правила его вычисления: действия выполняются слева направо с
соблюдением старшинства, указанного в таблице приоритетов
(табл. 17).
Таблица 1
Наиболее часто используемые в программах математические
функции языка С++ находятся в библиотеке шаЛ.Ъ, расположен-
ной в каталоге 11МСЫЮЕ. Если вы хотите воспользоваться эти-
ми функциями, то в начало программы необходимо включить
заголовочный файл:
#1пс1ис1е <таГЪ.Ъ>
Начальное значение переменной в языке С++ можно присво-
ить при ее объявлении, например, х=16, у=32:
В отличие от других языков программирования в С++ опера-
тор присваивания может использоваться в выражениях, которые
включают в себя операторы сравнения или логические операто-
ры, например:
11: ( (х=х+5) >0) соиТ<<*'Вывод“;
В этом примере сначала происходит увеличение переменной х
на 5, а затем ее значение сравнивается с нулем.
Для того чтобы присвоить одинаковое значение, например
2*к, нескольким переменным, можно воспользоваться операто-
ром присваивания:
х=у=г==2*к;
В языке С++ есть дополнительные операции присваивания:
+=, =, /=, %=. Например, вместо оператора х=х+5; можно
записать: х+=5;
Часто в С++ используются префиксные (до) и постфиксные
(после) операции увеличения и уменьшения значений переменных
на единицу.
Префиксные операции увеличивают (уменьшают) значение
переменной на единицу, а затем используют это значение, напри-
мер: х=++у;
В этом примере сначала происходит увеличение на единицу
значения переменной у, а затем присваивание это] о значения пе-
ременной х.
Постфиксные операции сначала используют значение перемен-
ной, после чего увеличивают (уменьшают) его, например: х=у—;
В этом примере переменная х получает значение у. после чего
у уменьшается на единицу.
4.2.2. Операторы ввода и вывода данных
Заголовочный файл юзХгеаш.Ь содержит определения, позво-
ляющие использовать операторы ввода (ст) и вывода (сои!) дан-
ных. Если вы хотите воспользоваться этими операторами, то
в начало программы следует включить обращение к заголовоч-
ному файлу:
#1пс1ис1е <1О8‘Сгеат.й>
Ввод данных. Для ввода переменных в С++ чаше всего исполь-
зуется оператор:
С1п>>х1>>...>>хН;
Двойной знак «больше» называется операцией извлечения (эта
операция извлекает данные из входного потока, присваивая зна-
чение указанной переменной).
Значения вводимых переменных (входной поток) должны со-
ответствовать типам переменных, указанным в операторах объяв-
ления. Значения переменных вводятся с клавиатуры и отделяют-
ся друг оз друга хотя бы одним пробелом. Например: 1.5 2.15
-1.1 25.
Ввод символьных переменных и строк ничем не отличается
от ввода целых или вещественных чисел. Значения символьных
переменных и строк записываются во входном потоке без апост-
рофов или кавычек.
Для ввода символьных переменных и строк С++ предоставля-
ет пользователю дополнительно две функции С1п.§е1 и
С1п.^е11те.
В том случае, если необходимо читать (вводить) по одному
символу с клавиатуры, можно воспользоваться функцией ст.§е1,
например:
с1=с1п.дет ();
В этом примере символьная переменная, объявленная как сЬаг
с1, получит значение символа, введенного с клавиатуры при на-
жатии соответствующей клавиши.
Если нужно прочитать (ввести) с клавиатуры не один символ,
а целую строку, воспользуйтесь функцией ст.^еШпе, указав имя
символьной строки и ее длину, например:
С1п. деТИ.пе (с2,11);
В этом примере в символьную строку, объявленную как ейаг
с2[64], будет записано 10 символов, введенных с клавиатуры.
Вывод данных. Для вывода данных в С++ используется опе-
ратор
сои11«х1<<...«хН;
Двойной знак «меньше» называется операцией вставки (эта
операция вставляет символы в выходной поток).
Для перевода курсора в начало следующей строки в операторе
сои! часто используется символ епсП (конец строки), например:
соиТ<<х1<<епсГ1_;
В операторе вывода можно использовать специальные сим-
волы, перечисленные в табл. 18.
Таблица
Специальные символы, используемые с сои!
Символ Назначение
\а \Ъ \Г \п Звуковой сигнал динамика Символ возврата Символ перевода страницы Символ новой строки
Продолжение
Символ Назначение
\г \1 Возврат каретки Символ горизонтальной табуляции
\\ Символ вертикальной табуляции
\\ \? V \0 Символ обратный слеш Знак вопроса Одинарные кавычки Двойные кавычки Нулевой символ
Специальные символы должны быть заключены в одинарные
кавычки, если они используются сами по себе, например:
сои!«‘\а’<<“3вонок”;
Если же специальные символы используются внутри двойных
кавычек, то заключать их в дополнительные одинарные кавычки
не нужно.
Пример
#1пс1ис1е <1ОБЁгеат,Ъ>
Vо^д татп
{
1пЪ х=5;
соиТ<<‘вВывод\Ъх='’«х<<епс11;
]
Результат выполнения программы:
Вывод х=5
По умолчанию в С++ числа выводятся в десятичной системе
счисления. Для вывода чисел в восьмеричной или шестнадцате-
ричной системе счисления внутри выходного потока нужно раз-
местить модификаторы ос1 или йех. Чтобы вернуться к десятич-
ной системе счисления, следует воспользоваться модификатором
бес.
Пример
#1пс1пс1е <1О8Тгеап1. Ь>
уогб таги
{
1пё х=20;
соиТ«“8-сс: ”<<осЪ<<х«епс!1;
соиГ«“16 -сс: ”«Ъех«х«епс11;
соо1:«“10 -сс: ”<<с1ес«х«еп61;
}
Результат выполнения программы:
8-сс: 24
16-сс: 14
10-сс: 20
При выводе чисел с помощью оператора сои! можно в явном
виде указать ширину вывода числа с помощью модификатора $е!\\
(число позиций), например:
сои^«“Число”<<8еЁю (10) <<5<<епс11;
В результате выполнения этого оператора на экран дисплея
будет выведено:
Число 5
Чтобы воспользоваться модификатором 8е1^\ необходимо
включить в программу заголовочный файл ютагир.й.
Тот же самый результат можно получить, если воспользоваться
функцией соШ.итскй из библиотеки юташр.Ь:
соиТ<<“Число”;
соиГ.млскЪ (10) ;
сои!1«5«епс11 ;
Функция соШ.йП из библиотеки ютатр.Ь позволяет указать
символ заполнения пустого пространства, который сот будет
использовать вместо пробела при выводе данных с помощью
модификатора зе1ш или функции соиТ.итскН, например:
соиТ . Ш1 С .’) ;
соиТ<<‘*Число”<<зеТм (10) «5<<епс11;
В результате выполнения этих операторов на экран дисплея
будет выведено:
Число...........5
Для управления форматом вывода чисел с плавающей точкой
можно воспользоваться манипулятором 8е!ргес18юп из библио-
теки юташр.й, который определяет количество цифр после де-
сятичной точки, например:
Поа1_ х=3.14159265359;
сои1:<<5еЬргес1з1оп (5) <<х«епбЗ ;
В результате выполнения этих операторов на экран дисплея
бVдет выведено:
3.14159
Для вывода на экран по одному символу за один раз исполь-
зуется функция соШ.риЕ
Пример
#1пс1ис1е <1озЪгеат.й>
уо1.с1. ша±п ^о±с1)
{
скаг с[]=“Си++”;
соис . риТ (с [ 0 ] ) ;
соиТ.риТ (с[2]);
соиТ.ри^(с [3]);
}
Результат выполнения программы: С++
4.2.3. Операторы языка С++
для организации ветвления
Операторы программы, написанные на языке С++, выполня-
ются в порядке их записи. Если при некотором условии надо
выполнить определенную последовательность операторов, то их
объединяют в один составной оператор.
Составной оператор начинается с открывающей фи1 урной
скобки и заканчивается закрывающей фигурной скобкой. Между
этими скобками помещаются операторы, которые выполняются
в порядке их следования.
Пример
1=2; к=1/5; з=14к;
)
Нельзя извне составного оператора передавать управление
внутрь его. Для изменения естественной последовательности вы-
полнения операторов (передачи управления) язык С++ содержит
ряд специальных конструкций, по своему смыслу совпадающих с
аналогичными конструкциями алгоритмов. К ним относятся опе-
ратор перехода и выбирающие операторы
Оператор перехода. Оператор перехода имеет вид:
доЬо метка;
Здесь метка указывает на то, что дальнейшая работа должна
проводит ься в другой части программы, а именно с той строки,
на которую указывает метка. Метки в языке С+-+ предваритель-
но не объявляются.
Пример
#1пс1и6е <1О5^геат.п>
с! талп^отс!)
{
ИоаТ. а,Ь;
Ь=5;
доЪо гп1;
т!: а=ЬжЗ;
}
Перевод оператора перехода из алгоритмических конструк-
ций в программу показан в приложении 8.
При выполнении оператора §оЮ переход осуществляется без
проверки каких-либо условий, поэтому его часто называют опе-
ратором безусловного перехода. Этот оператор следует использо-
вать только в исключительных ситуациях, поскольку такие пере-
ходы разрушают связи между структурой программы и структу-
рой вычислений, что приводит к потере ясности программы и
затрудняет задачу верификации (доказа гельсгва правильности
составления прог раммы).
Выбирающие операторы. Выбирающие операторы предназна-
чены для выделения из множества операторов одного оператора,
который и выполняется. В языке С++ предусмотрены два вида
выбирающих операторов: оператор условного перехода и опе-
ратор варианта.
1. Оператор условного перехода. Этот оператор предназна-
чен для выбора одного из двух операторов в зависимости с г
значения некоторого проверяемого условия. Он имеет следую-
щий вид:
1Г (условие) оператор' ; е1ве оператор2;
Здесь в качестве условия используется некоторое логическое
выражение, задающее условие выбора выполняемого оператора;
оператор! и оператор2 могут быть как простыми, так и состав-
ными. Если условие истинно (любое ненулевое значение), то вы-
полняется оператор!, если же условие ложно (нуль), то выполня-
ется оператор2.
Следует обратить внимание на то, что перед словом еке ста-
вится точка с запятой.
Порядок перевода оператора условного перехода из алгорт -
ма в программу приведен в приложении 8.
В качестве примера рассмотрим следующую задачу. Ввести два
вещественных числа и вывести их в порядке убывания:
МпсГиДе <1оз!:геат.И>
\ют_с! татп ^отс1)
{
^1оа С а,Ь,г1,г2;
с1п>>а>>Ь;
соиТ<<иа=”«а<<“ Ь=”«Ь«епс11;
1Г (а>Ь) {г1=а;г2=Ь;}
е!зе {г1=Ь;г2=а}
соиГ<<‘ьболыпее число=”<<г!<<“меньшее число=”<<г2;
}
Оператор условного перехода может содержать только одну
ветвь:
1Г (условие) оператор;
В этом случае, если условие истинно, то выполняется опера-
тор, если условие ложно, то управление передается следующему
оператору программы.
Пример
...11: (а==С) ЬрИ/а;
Ь=х*а;...
В этом примере, если условие а==0 не выполняется, управле-
ние передается оператору Ь=х*а;.
Условие представляет собой логическое выражение, состоя-
щее из операндов и знаков операций. В качестве операций в ло-
гическом выражении прежде все] о используются операции срав-
нения (==, !=, >, <, >=, <=). Кроме операций сравнения для по-
строения логических выражений можно использовать логические
операции (!, ||, &&). Значение логического выражения вычисляет-
ся путем выполнения указанных в нем операций с учетом их при-
оритета и расставленных круглых скобок.
Примеры записи условий в виде логических выражений
(аЬ8(х)<=:2) — значение х по модулю не превышает 2;
((х>=1)&&(х<=2)) — точка принадлежит отрезку [1,2];
(х*х+у*у<1) — точка плоскости с координатами (х,у) принад-
лежит единичному кругу с центром в начале координат.
Поскольку в С++ истина представляется как ненулевое значе-
ние, а ложь как нуль, то возможно еще и такое использование
оператора условного перехода:
х=значение;
1Г (х) оператор;
В этом примере условие в операторе 1Г представляет собой не
логическое выражение, а переменную, которой предварительно
присваивается какое-либо значение. Если значение переменной
отлично от нуля, то условие истинно, если значение переменной
равно нулю, то условие ложно.
2. Оператор варианта. В отличие от оператора условного пе-
рехода в операторе варианта может быть нс две ветви, а произ-
вольное число вегвей.
Оператор варианта имеет вид:
8^1ЬсЬ(выражение)
{
саге т:оператор!; Ьгеак;
саге : оператор2; Ьгеак;
сазе к:операторК; Ьгеак;
<1еЬаи1Ь: операторы; Ьгеак;
Выполнение оператора варианта начинается с вычисления
значения выражения. Затем оператор выбора передает управле-
ние тому оператору, перед которым стоит константа, совпадаю-
щая с вычисленным значением переключателя 8\у11сЬ. Если совпа-
дений не обнаружено, выполняется оператор, стоящий после
деГап1Ь Оператор Ьгеак, расположенный в каждой ветви опера-
тора варианта, предписывает завершить выполнение текущего
оператора и передать управление следующему оператору про-
граммы.
Пример
...змЬЪск (1)
{
сазе 1:х=0; Ьгеак;
сазе 2:х=х*х; Ьгеак;
сазе 100:х=з!п(х); Ьгеак;
с!еТаи1Ъ:х=соз (х) ; Ьгеак;
}
2=х;...
В этом примере, если селектор 1 принимает значение 100, вы-
полняется оператор х=8ш(х), после чего управление передается
оператору х=х.
Возможности оператора варианта в языке Турбо Паскаль 7.0
были продсмонст рированы на примере составления старояпонс-
кого календаря (см. подразд. 3.4.4). Попробуйте самостоятельно
решить эту задачу с применением оператора варианта языка С++.
Порядок переводаН оператора варианта из алгоритма в про-
грамму приведен в приложении 8.
Рассмотрим еще один способ организации ветвления в я зыке
С+4- с помощью операции «(условие)?».
Эта операция имеет три операнда:
(условие)? выражение!: выражение2;
Выполнение операции начинается с вычисления ус ювия. Если
условие истинно (ненулевое значение), ю результатом операции
будет являться значение выражения 1. Если условие ложно (нуль),
го результатом операции будет значение выражения 2.
Примеры [4]
тах=(х>у)?х:у; определение наибольшс! о из двух чисел х и у;
аЪ8о1иГе=(х>0)?х:-х: — нахождение абсолютного значения числа х;
(х>у)?х:у-1; наибольшее из двух чисел х или у получает значение 1.
Из приведенных примеров видно, что с помощью операции
“(условие)?” можно довольно просто решить задачу, для выпол-
нения которой обычными средствами понадобилось бы состав-
лять целую программу.
4.3. Операторы цикла языка С++
Циклы предусматривают многократное выполнение некото-
рых операторов, входящих в тело цикла (см. подразд. 2.3). В язы-
ке С++ имеются три вида операторов цикла: хуйПс (цикл-ГЮКА),
с1о-\уЬ11е (цикл-ДО) и Гог (цикл с параметром). Если известны на-
чальное и конечное значения, а также шаг изменения параметра,
то лучше воспользоваться оператором цикла с параметром. В
остальных случаях целесообразно использовать операторы цик-
ла-ПОКА (цикла с заданным условием продолжения работы) или
цикла-ДО (цикла с заданным условием окончания работы, цикла
с и герацией).
Реализация цикла-1 ЮКА в С++ полностью совпадает с алго-
ритмической схемой данного цикла. Реализация циклов 'ДО" и
“С параметром" отличается от привычных для пас алгоритми-
ческих структур - при выполнении проверяемого условия выпол-
няюгся операторы тела цикла, выход из этих циклов осуществ-
ляется по условию “нет”.
4.3.1. Программирование конструкции
цикл-ПОКА
Цикл-ПОКА реализуется в языке С++ с помощью опера] ора
хх'ЬИс и имеет следующий вид:
(условие) оператор;
Здесь условие это выражение, определяющее условие про-
должения работы; оператор простой или составной опера] ор,
являющийся телом цикла.
Условие (выражение) вычисляется перед каждым выполнени-
ем оператора. Если условие истинно (любое ненулевое значение),
то тело цикла выполняется и управление передается снова на
вычисление условия; если же условие ложно (нуль), то тело цикла
не выполняется и происходит выход из цикла.
Переход от алгоритмической конструкции цикл-ПОКА к про-
грамме производится по правилам, показанным в приложении 8.
Пример
...х=5 ;
н'П11е (х’=С)
{
с=с+1/х;
х-х-1;
}...
В процессе выполнения цикла сначала проверяется условие
х!=0. Если оно истинно (т.е. х не равно 0)э то выполняет ся со-
ставной оператор, состоящий из операторов с:=с+1/х и х:=х-1,
после чего опять проверяется условие х!=0. Как только условие
перестанет выполняться, управление передается оператору, сто-
ящему после составного оператора.
В качестве примера приведем программу вычисления суммы
членов бесконечного ряда 8=1 + 1/2+1/3+... + 1/1+... с точностью до
8>е:
#1пс1ис1е <1ОзТгеат.Ь>
VО1с^ татп (хюхд)
1:1оаЬ 1,з,е;
с1п>>е;
сои1<<6че=?’«е<<епс11;
8=0; 1=1;
иЫ1е (8<=е)
{
8=8+1/1; 1=1+1;
}
сои1:<<“8=”<<8<<епс11;
}
4.3.2. Программирование конструкции
цикл-ДО
Цикл-ДО реализуется в языке С++ с помощью оператора
с1о-\уЫ1е и имеет следующий вид:
йо {операторы; }
мЫ1е (условие) ;
Работает цикл-ДО так: сначала выполняются операторы тела
цикла, затем вычисляется значение выражения, стоящего в усло-
вии. Если условие истинно (любое ненулевое значение), то вновь
выполняются операторы тела цикла: если же условие ложно (нуль),
го цикл заканчивается.
Если проверяемое условие ложно с самого начала, то опера-
торы тела цикла выполняются только один раз. Если проверяе-
мое условие никогда не принимает значение “ложь'7 (нуль), то
операторы тела цикла будут выполняться бесконечное число раз
(зацикливание).
Переход от алгоритмической конструкции цикл-ДО к програм-
ме осуществляется по правилам, показанным в приложении 8.
Пример
...х=5;
йо {с=с+1/х; х=х-1;}
«Ы1е (х>=0) ;...
В этом примере сначала выполняются операторы с=с+1/х и
х=х-1, а затем проверяется условие х>=0. Если х больше 0 или
равен 0, то операторы тела цикла выполняются повторно, если
же это условие не выполняется, то управление передается опера-
тору, стоящему за м/Ы1е(х>=0).
Программа вычисления суммы членов бесконечного ряда
8=1 + 1/2+1/3+... + 1/1+... с точностью до 8>е при использовании
оператора до-мЪйе будет выглядеть так:
#1пс1ис1е <1о81геат. й>
л7О1с! та±п^одс1)
{
11оа1 1,з,е;
с±п»е;
сои1<<“е=”<<е<<епс11;
8=0; 1=1;
с1о
{
3=3 4-1/1;
1=1+1;
}
кЫ1е (з<=е) ;
соиС<<“8=’’<<з<<епс11;
I
4.3.3. Оператор цикла с параметром
Цикл с параметром в языке С++ имеет вид:
1ог (1=1Н; 1<=1К; 1=1+Д1) оператор;
Параметр цикла (1) может быть любого типа (см. табл. 15),
кроме уо16. Начальное (1И), конечное (1к) значения параметра цикла
и шаг изменения параметра (Д1) могут задаваться выражениями,
которые должны иметь то г же тип, что и параметр цикла= Опера-
тор, являющийся телом цикла, может быть как простым, так и
составным. В этом цикле 1н< 1К-
В начале работы цикла вычисляется значение выражения 1=1Н,
затем проверяется условие 1<=1К. Если это условие истинно,
то выполняется оператор тела цикла, после чего происходят
изменение параметра 1=1+Д1 и переход на проверку условия цикла.
Если условие ложно, цикл завершается и программа продолжа-
ет свое выполнение с первого оператора, следующего
за циклом.
Пример
...1ог (1=1; К=20; 1++) а:=а+1;...
В этом примере для 1=1,2,..., 20 будет выполняться опера! ор
а:=а+1.
Если начальное и конечное значения параметра цикла отно-
сятся к символьному типу (сЬаг), например, имеют значения *а’ и
то переменная 1 принимает последовательно значения в по-
рядке алфавита: ‘а’, ‘Ь\ 1с’,.../х’.
Цикл по убывающим значениям параметра имеет вид:
Гог (1 =1Н; 1>=1К; 1=±~А1) оператор;
В этом цикле начальное значение параметра цикла больше
конечного значения 1Н>1К.
Пример
...Гог (1=20;1>=1;г- —) а:=а+1;.„
В этом примере параметр 1 будет изменяться от 20 до 1 с ша-
гом -1.
Программа вычисления суммы 8=1+ 1/2+1/3+...+1/50 с помо-
щью оператора Гог записывается так:
НпсХиде <1оз+геап1.й>
’уотс! гпатп ^о1с1)
{
Г1оаЬ з,п;
з=0;
Гог(п=1;п<=60;п++)
з=з+1/п;
сои+<<“з=”<<з<<епс11;
В этой программе оператор 8=8+ 1/п; выполняется 50 раз для
п=1, 2,..., 50, а результат будет иметь вид:
8=4.499206
Оператор цикла Гог позволяет задавать шаг изменения пара-
метра, отличный от 1 или -1. Например, если необходимо вы-
числить сумму 8=1+1/2+1/4+... + 1/5О, то программа будет иметь
вид:
#1пс1иде <1оз+геат.Г1>
\го1с1 та1п(\ю1с1)
{
Г1оаГ з,п;
з=1;
Гог(п=0;п<=50;п+=2)
з=з+1/п;
сои1«“з=’’<<з«епс11;
}
В этом примере шаг изменения параметра цикла равен 2.
Порядок перевода цикла с параметром из алгоритма в
программу для случая, когда шаг равен 1 (-1), приведен в прило-
жении 8.
4.3.4. Массивы и их обработка
с помощью циклов
Кроме простых данных язык С++ дает возможность эффек-
тивно обрабатывать сложные типы, например массивы.
Напомним, что массив — это упорядоченный набор элемен-
тов одинакового типа, имеющих общее имя (см. и. 2.4). Все эле-
менты массива пронумерованы. Номер элемента массива назы-
вается его индексом. Массивы должны бьпь обязательно описа-
ны перед использованием в программе.
Общий вид описания массива в программе на языке С++:
тип имЯ—Массива [размер! ] [размер2]... | размеры] ;
Количество индексов ([размер 1][размер2]...[размеры]) опре-
деляет размерность массива. При объявлении массива указыва-
ется только верхняя граница индекса. Нижняя граница индекса
массива в языке С++ всегда начинается с нуля. Таким образом,
первый элемент одномерного массива имеет индекс (порядковый
номер) [0]. двухмерного [0]|0] и т.д. Верхняя граница
индекса массива в языке С++ всегда на единицу меньше размера
массива.
Примеры описания массивов:
тпт а[100], Ь[1001;
ейаг с[200];
с![40] [5] ;
Здесь описаны два одинаковых массива а и Ь. каждый из ко-
торых состоит из 100 целочисленных элемен гов (индексы меня-
ются от [0] до [99]). Массив с это строка символов (см. под-
разд. 4.1.3). содержащая двести элементов символьного типа от
[0] до [199]. Массив с! — двухмерный массив, содержащий 40 строк
и 5 столбцов. Строки нумеруются цифрами от [0] до [39], а стол-
бцы — цифрами от [0] до [4].
В языке С++ возможна инициализация массива при его объяв-
лении. В этом случае первоначальные значения элементов масси-
ва указываю гея между левой и правой фигурными скобками, сле-
дующими за знаком равенства.
Примеры инициализации массивов при объявлении:
нН а[3]={ 10,20,30};
ш1 Ь[ К 10,20,30};
Поа1 с[2][3]={5.10,15.20,25,30}:
Поаг д[ ][3]={{5.10,15}э{20,25,30}};
Обратите внимание на то. ч го массив Ь объявлен без указа-
ния его размера. В этом случае компилятор С++ сам определяет
необходимое количество элементов массива. При объявлении
массива с неизвестным количеством элементов можно не указы-
вать размер только в самых левых фигурных скобках, как это сде-
лано, например, при объявлении массива б.
К элементам массива применимы две операции: присваива-
ние и выборка. Примеры использования элементов массивов в
операциях присваивания:
х=а[5]; — переменной х присваивается значение пятого эле-
мента массива а;
а(20]=2*Ь[3]-6; — двадцатому элементу массива а присваива-
ется значение, получаемое после расчета выражения 2*Ь[3]-6;
д[5][2]=мп(х); — элементу двухмерного массива располо-
женному на пересечении пятой строки со вторым столбцом, при-
своить значение 81п(х).
Для организации выборки элементов массива чаще всего ис-
пользуются циклы. Рассмотрим несколько примеров. Для ввода
данных в одномерный массив а, состоящий из 100 элементов,
можно использовать цикл с параметром
Гог ( г=0; ±<100;±++) с!п»а [ ±1 ;
Для определения суммы 8 всех элементов массива а[100] также
можно использовать цикл с параметром
з=0;
Гог(±=0;±<100;±+ъ) з=з+а[±];
Для нахождения максимального элемента массива а[ 100] мож-
но использовать следующие операции:
...тах=а[0 ;
Гог(±=1;±<100;±++)
±± (тах<а[±])
тах=а [ ± ] ;...
Здесь в цикле осущест вляются сравнение предполагаемого мак-
симального элемента со значением текущего элемента массива,
начиная со второго, и присваивание переменной гпах нового зна-
чения, если условие тах<а[1] выполняется.
Для определения суммы всех положительных элементов мас-
сива а, состоящего из 100 элемент ов, предшествующих первому
отрицательному элементу, в состав программы целесообразно
включить следующие операторы:
...з=0; ±=0;
итЫ1е(1<100 && а[Ц>=0)
{
3=8+а[1];
1++;
Здесь можно использовать цикл-1 ЮКА, так как число эле-
ментов массива а, входящих в сумму, заранее не известно.
Во многих задачах бывает необходимо поставить элементы
массива таким образом, чтобы они располагались в порядке
возрастания или убывания. Такие массивы называются упорядо-
ченными. а сам процесс их получения — сортировкой (см.
подразд. 2.4 4).
Пусть необходимо ввести текстовый массив длиной 60 симво-
лов, упорядочить символы по алфавиту и вывести их на печать.
Програхмма решения этой задачи имеет вид:
#1пс1иде<1О81геагг.. Н>
\ло1с1 гпатп (\/о1с!)
{
1пГ 1,3;
скаг г, х [60] ;
Гог(1=0;1<60;1++) с1п»х[1];
Гог (1=0; К60; 1++) соиГ«х г1] ;
соиГ«епс!1«“Упорядоченный массив''<<еп<51;
Гог(1=0;1<59;1++)
Гог (з =1+1;]<60;3++)
1Г(х[Л<х[±])
{
)
Гог (1=0 ; К60; л++) соиГ«х[1];
}
Наряду с одномерными и двухмерными массивами в С++ мо-
гут использоваться и многомерные массивы (см. подразд. 2.4.2),
однако на практике массивы размерностью свыше трех исполь-
зуются крайне редко.
Порядок перевода алгоритмической конструкции “Список
данных” (в которой содержатся массивы) в программу на языке
С++ приведен в приложении 8.
4.4. Функции
Кроме стандартных функций, расположенных в заголовочных
файлах, которые подключаются к программе с помощью опера-
тора #шс1иде<имя.Ь>, язык С++ позволяет пользователю фор-
мировать свои функции Эти функции целесообразно создавать,
если при решении задач возникает необходимость проводить
вычисления по одним и тем же формулам (алгоритмам) много-
кратно. Применение функций позволяет разделить программу на
простые, легко контролируемые части.
При использовании функций необходимо различать описа-
ние функции и оператор вызова функции.
4.4.1. Описание и вызов функций
Структура функции похожа на структуру программы таш.
Описание функции содержит заголовок функции, объявления пе-
ременных и операторы:
тип функции имя_ функции (список_формальнь:х_параметрОЕ)
{
объявления переменных;
оператор!;
• • • • •
операторы;
}
Здесь: гипофункции — тип возвращаемого в основную про-
грамму результата (см. табл. 15);
имя_функции — уникальное имя, соответствующее по смыслу
операции, которую выполняет функция (например, тах — опре-
деление максимального из двух чисел);
список_формальных параметров — перечень формальных
параметров и их типов.
Напомним, что формальные параметры — эт о наименования
переменных, через которые передается информация из основной
программы в функцию.
Для вызова функции достаточно указать ее имя со списком
фактических параметров в любом выражении вызывающей про-
граммы:
имя функции (список_фактических__параметров);
Напомним, что фактические параметры — это наименова-
ния переменных, значения которых при обращении к функции
присваиваются соответствующим формальным параметрам.
Для возвращения вычисленного значения в основную програм-
му в функциях используется оператор
геЬигп(результат);
Рассмотрим несколько примеров использования функций в
программах.
Пример 1
Функция зИои7 не содержит параметров и не возвращает значение в
основную программу.
#1пс1ис1е <±оз-1геап1. Ь>
VО^С^ зЬом ^О±С1)
[
сои!1<<1 Функция зИо^«епс1] ;
}
\ло1с! татп^отс!)
{
соиЁ«“Вызов функции зЪом”«епс11;
зЬом();
сои1:«“Воэврат в основную программу’<<епс!1;
}
Пример 2
Функция гпах содержит формальные параметры и не возвращает
значение в основную программу.
#1пс1иде <1оз1:геат.Ъ>
уотс! тах(Е1оа‘С х, ^1оа!: у) //х, у — формальные
//параметры
{
1Г (х>у) соиГ<<х<<“>”<<у«епс!1;
е1зе соиЪ<<у«“>”«х«еп61;
}
ллотс! та1п^о1с1)
{
^1оаГ а,Ь;
сгп>>а>>Ь;
тах(а,Ъ); //а, Ь — фактические параметры
шах(20,10); //20, 10 — фактические параметры-значения
тах(2.71,3.14); //2.71, 3.14 - фактические
//параметры-значения
}
Пример 3
Функция тах содержит формальные параметры и возвращает зна-
чение в основную программу. Возвращаемое значение имеет тип Лоа1
Нпс1ис1е схозтгеат.И>
ПоаТ тах(ЫоаТ х,11оаб у)
{
1Е1оаб гезиИ;
(х>у) гези1б=х;
е1зе гези1Н=у;
гебигп (гези1Т) ; )
тахп^охс!)
{
^1оаТ а,Ь;
С1п>>а>>Ь;
соиЪ<<“Наибольшее из двух чисел ”«а«” и <<Ь<<“:
<<тах(а,Ь)«епсП;
соиб«“Наиболыиее из двух чисел 2.71 и 3.14:
<<тах (2.71,3.14) «епсИ; }
В приведенных примерах описание функции предшествовало
обращению к ней. В противном случае в начало программы нужно
поместить прототип функции. Прототип функции содержит ин-
формацию об имени функции, типе возвращаемого значения, ко-
личестве и типе формальных параметров. Прототип функции шах
для третьего из рассмотренных примеров будет выглядеть так:
Г1оаЬ тах(ь1оаб,Н1оаб);
При использовании прототипа функции программа примера
3 может быть записана следующим образом:
#1пс1ис1е <1озТгеат.И>
Иоаб тах(Г1оаН,^1оаТ) ; //прототип функции тах
уо!с1 татп (уоМ)
{
1Г1оаН а,Ь;
с1п>>а>>Ь;
соиб«“Наибольшее из двух чисел ”«а«к и “<<Ъ«‘
<<тах (а, Ь) «еп<11;
соиЪ«*‘Наибольшее из двух чисел 2.71 и 3.14:”
«тах (2.71,3.14) «епсН;
}
^1оаб тах(11оаб х,Ё1оаТ у)
{
^1саЬ гези1Т;
1Г (х>у) гези1Ё=х;
е1зе гези1Т=у;
теСигп (гези1Т) ; }
Кроме переменных в качестве формальных параметров в фун-
кциях могут выступать и массивы. Посмотрим внимательно на
пример, показанный в табл. 16. Здесь в качестве формальных па-
раметров функций 8иш и Рго используется двухмерный массив
А|2][3] типа Поа1.
4.4.2. Изменение значений фактических
параметров при помощи указателей
и ссылок
Рассмотрим более подробно процесс передачи значений фак-
тических параметров из основной программы в функцию.
При вызове функции с помощью оператора
имя функции(список_фактических_параметров);
компилятор С++ создает копию значений фактических парамет-
ров и помещает эту копию в стек — участок памяти компьютера
для временного хранения информации. Значения параметров из
стека присваиваются формальным параметрам функции. После
завершения работы функции происходит очистка стека. Таким
образом, значения фактических параметров в основной памяти
компьютера после завершения работы функции остаются без из-
менений.
В том случае, когда нужно изменить значения фактических
параметров, т.е. осуществить присваивание значений формаль-
ных параметров при выходе из функции фактическим парамет-
рам основной программы, нужно использовать оператор адреса
(признак &) и переменные-указатели (признак *).
Оператор адреса предназначен для передачи адресов значе-
ний фактических параметров из основной программы в функцию.
Оператор адреса имеет вид:
имя_функции (^фактический _параметр1, ...г
&фактический_параметрМ);
Чтобы «объяснить» компилятору С++, чго значения факти-
ческих параметров будут передаваться из основной программы в
функцию с помощью адреса (в стек будут записываться адреса
фактических параметров, а не их значения), в заголовке функции
объявляются переменные-указатели (формальные параметры) с
признаком *:
тип_функции имя_функции (тип хформальный—параметр! ,...9
тип *формальный параметры)
Переменные (формальные параметры), которые используют-
ся в операторах функции, должны быть также помечены звездоч-
кой (*).
Пример
#1пс1ис1е <1О8Ггеат.Ъ>
сЬапде(1пг *х, тпл *у)
{
*х=100;
*у=200;
}
Vо^д та!п (хгод.с!)
{
тпк а,Ъ;
а=10; Ь=20;
соик«“Параметры а и Ь до обращения к функции:”
«а«“ ”«Ь«епс11;
сЬапде(&а,&Ь);
сои к«“Параметры а и Ь после обращения к функции:4'
«а«“ ”«Ь«епс11;
}
В результате решения этой программы на экран дисплея бу-
дет выведено:
Параметры а и к до обращения к функции: 10 20
Параметры а и к после обращения к функции: 100 200
Таким образом, после завершения работы функции фактичес-
кие параметры изменили свои значения.
Значения фактических параметров могут быть изменены в
программе и при помощи ссылок.
Ссылки позволяют создавать псевдонимы (вторые имена) для
переменных, используемых в качестве параметров функции. Для
объявления ссылки применяется знак амперсенда (&) после типа
параметра:
тип& имя_ссылки=имЯ—переменной;
После объявления ссылки в программе можно использовать
имя переменной или имя ссылки.
В качестве иллюстрации изменения значений фактических па-
раметров при помощи ссылок рассмотрим программу:
#1пс1иде <±озбгеат.И>
скапде(1Г)1& х, 1пЬ& у)
{
х=100; у=200;
}
\ло5.с! татп ^016)
{
1пб а,Ь;
1пс& аз=а;//объявление ссылки аз — псевдонима
//переменной а
Ьз=Ь;//объявление ссылки Ьз — псевдонима
//переменной Ь
а=10; Ь-20;
соиб<<ЬкПараметры а и Ь до обращения к функции:"
«а«“ ”«Ь«епб1 ;
сйапде(аз,Ьз);
соиб<<“Параметры а и Ь после обращения к функции:”
«а«“ ”«Ь«епс11 ;
}
В результате решения этой программы на экран дисплея бу-
дет выведено:
Параметры а и Ь до обращения к функции: 10 20
Параметры а и Ь после обращения к функции: 100 200
Таким образом, результат работы программы полностью со-
впадает с результатом работы программы, рассмотренной в пре-
дыдущем примере.
В качестве рекомендации следует заметить, что не нужно ув-
лекаться частым использованием ссылок, так как это затрудняет
понимание программы.
4.4.3. Перегрузка функций
Перегрузка функций позволяет использовать одно и то же имя
для нескольких функций, которые решают одну и ту же задачу,
но имеют разное количество и разные типы формальных пара-
метров. Для того чтобы осуществить перегрузку функций, в про-
грамме просто описываются функции с одинаковыми именами.
При решении программы компилятор С+ч- самостоятельно, без
каких-либо дополнительных указаний определяет нужную фун-
кцию на основании списка фактических параметров в операторе
вызова функции.
Пример [7]
#1пс1ис1е <1С8Тгеат.И>
1пс 5ит(1пТ а, 5.пТ Ь)
{
геТигп(а+Ь);
}
^1оа€ 5ит(^1оаТ а, 1пЪ Ъ, тпТ с)
(
геТигп(а+Ь+с);
}
та!п
{
соиТ<<5ит(2,3) «епсП;
соиЬ«зит (2.5, 3 г 4 ) <<еп61;
}
В этой программе определены две функции кит с разным ко-
личеством и типами формальных параметров. В результа ге ра-
боты программы сначала осуществляется обращение к первой
функции, которая складывает два значения (2+3=5) типа 1п1. За-
тем происходит обращение ко второй функции, которая склады-
вает три значения (2.5+3+4=9.5) и возвращает в основную про-
грамму результат типа ПоаС
Перегрузка функций улучшает наглядность и удобочитаемость
пользовательских программ.
4.4.4. Значения параметров функции
по умолчанию.
Локальные и глобальные переменные
Использование значений формальных параметров функции
по умолчанию рассмотрим без потери общности на следующем
примере [7]:
#1пс1ис1е <1оз^геат.Ь>
хт’отс] 8кюю(±пТ а=1, тпТ Ь=2,±пЪ с=3)
{
соиГ«а«“ ”«Ь«“ ”«с«епс11 ;
\^о±с1 татп (хго1с!)
{
зпоы () ;
зЪом(4) ;
зЬом(5,6);
}
В заголовке функции 8Йо\у происходит присваивание значе-
ний формальным параметрам а, Ъ и с. При первом обращении к
функции фактические параметры отсутствуют, при втором обра-
щении указывается значение для параметра а, при третьем обра-
щении — значения для параметров а и Ь. Как видно из примера,
если опущено значение одного параметра, то опускаются значе-
ния и всех последующих параметров.
В результате решения этой программы на экран дисплея бу-
дет выведено:
1 23
42 3
5 63
Таким образом, если при вызове функции отсутствуют значе-
ния каких-то (или всех) фактических параметров, то функция ис-
пользует вместо них значения формальных параметров, назна-
ченных пользователем по умолчанию.
Остановимся еще на одной особенности использования фун-
кций в программах на языке С++ — объявлении локальных и
глобальных переменных.
Локальные переменные объявляются внутри функции (см.
подразд. 4.4.1) точно так же, как и внутри главной функции таш.
Локальные переменные действуют только внутри функции, в
которой они объявлены.
Глобальные переменные объявляются в начале программы вне
какой-либо функции. Глобальные переменные доступны для лю-
бой функции в программе.
Если локальная и глобальная переменные имеют одинаковое
имя, то переменная в функции воспринимается компилятором С++
как локальная переменная. Если внутри функции нужно исполь-
зовать глобальную переменную, совпадающую по имени с локаль-
ной переменной, то в этом случае нужно воспользоваться гло-
бальным оператором разрешения:
:: имя__переменной
Пример [7]
#1пс1ис1е <1Оз^геат.Ъ>
1ПС хд=1; //объявление глобальной переменной
\^о1с! 8Ъом(1пс хд)
{
соиг«“Локальная переменная хд: ’'«хд«епб1;
соиГ«“Глобальная переменная хдхд«епсЬ' ;
}
^го±б таги (люз-с!)
{
1пЪ у=0;
з!юм (у) ;
}
В результате работы программы на экран дисплея будет вы-
ведено;
Локальная переменная хд:0
Глобальная переменная хд:1
Поскольку значения глобальных переменных могут быть лег-
ко изменены любой функцией, не рекомендуется их использова-
ние в программах.
4.5. Сложные типы данных
К сложным типам данных, кроме массивов, относятся струк-
туры, объединения и файлы.
4.5.1. Структуры
Структура (51гис1) состоит из фиксированного числа компо-
нентов (элементов) разных типов. Структура в языке С++ явля-
ется аналогом записи в языке Паскаль (см подразд. 3.7.1).
Описание типа $1гис1 имеет следующий вид:
8Ъгис!. имя структуры
{
тип! имя элемента!;
типК имя элементам;
} имя е реме нной_типа_ структуры;
Пример
Даты каких-либо событий можно записать следующим образом:
зТгисТ да1е
{
тпЪ дау;
сИаг топтИ[9];
1п11 уеаг;
}д;
В этом примере описаны структура да!е и переменная д, при-
надлежащая типу да1е. Переменная (1 описана как структура, со-
стоящая из трех элементов: дау, шопй1[9]э уеаг. Каждый элемент
содержит данные:
элемент дау — целое число, обозначающее день (от 1 до 31),
элемент топ!Ь[9] — строка символов с названием месяца;
элемент уеаг — целое число, обозначающее год.
Переменная типа структуры (д) может быть объявлена вне
описания структуры при помощи имени структуры, которое иног-
да называют структурным тэгом [7], например:
зЪгисТ даТе
{
1пГ дау;
сИаг топ1_Ь7 9];
1ПТ уеаг;
};
да!е д;
тэг
объявление переменной
Тэг структуры может начинаться со слова 81гис1:
зТгисТ дате д;
Для обращения к элементу структуры нужно указать имя пе-
ременной и имя элемента структуры, разделив их точкой. К эле-
менту' структуры применима операция присваивания. Например,
чтобы заслать в д дату 14 апреля 1930 г., нужно в программу
включить следующие операторы:
д,дау=14;
д.топбЬ=“апреля”;
д. уеаг=1930;
Структура может передаваться в функцию по имени.
Пример
#1пс1иде<1озбгеат.к>
#1пс1иде<збгхпд.И>
збгисб дабе //описание структуры
{
хпб дау;
сбаг топ6И[9];
бпб уеаг;
}д; //объявление переменной д
Vо^д зЪо^дабе(да1е д) //функция вывода даты
{
соиб «“Число: ”«д. дау«епд1;
соиб«“Месяц: ”«д. тспбН«епд 1;
соиб«“Год: ”«д. уеаг«епд1;
}
хгобд татп^обд)
{
д.дау=2;
збгсру (6.топбЬ, **август”) ; //копировать название
//месяца
д.уеаг=1953; //в строку символов
8Ьом_дабе(д); //обращение к функции вывода даты
}
В том случае, когда нужно изменить значения элементов струк-
туры в функции, структура должна передаваться в функцию с
помощью адреса (&), например:
зкои_дабе(&6);
Внутри функции следует использовать указатель на структу-
ру, например:
д->дау=19;
Пример
#1пс1иде<1озЪгеат.Ъ>
#1пс1ибе<5Тг±пд,И>
з^гисЪ дабе //описание структуры
{
1пТ дау;
сИаг топ Ыт[9];
апЬ уеаг;
Vо^д сЪапде_даЪе(баЪе М) //функция изменения даты
{
(3->с1ау=19;
6->уеаг=1993;
}
^01(5 та±п (ллохс!}
{
сЕс!ау=14;
зЪгсру (с!. топЪИ, “апреля”) ;
д.уеаг=1930;
сои!?«“Дата: ”«д.с1ау«“ ”«б.топЪИ«<< ”«д.уеаг«епс11;
сЪапде_с1а11е (;
соиЪ<<“Новая дата: ”<<6.6ау<<“ ”<<<5 . топЪИ< <“
«с1. уеаг<<епд1;
}
В результате решения этой программы на экран дисплея бу-
дет выведено:
Дата: 14 апреля 1930
Новая дата: 19 апреля 1993
4.5.2. Объединения
Объединения (ипюп) в языке С++ отличаются от структур спо-
собом хранения информации. В каждый момент времени объеди-
нение хранит значение только одного элемента. Память распре-
деляется для хранения наибольшего элемента объединения.
Описание типа ипюп имеет следующий вид:
иптоп имя__объединения
{
тип! имя_элемента1;
типЭД имя_элементаИ;
}имя_переменной типа_объединения;
Пример
Единицы измерения времени можно представить следуюшим образом:
иптоп Ътте
{
тпЬ Ьоиг;
1опд зесопё;
}Ь;
В этом примере описаны объединение йше и переменная I,
принадлежащая типу 1ппе. Переменная 1 описана как объедине-
ние, состоящее из двух элементов: Ьоиг и зесопд. Элементы объе-
динения содержат данные:
элемент Ьоиг — целое число типа ш1, обозначающее время в
часах;
элемент зесопЛ — целое число типа 1оп& обозначающее время
в секундах.
Под элементы объединения будет отведено 4 ба йта памяти,
так как наибольший элемент (яесопд) имеет тип 1оп& (см.
табл. 15).
Переменная объединения может быть объявлена вне описа-
ния объединения, например:
ип!оп Ыте
{
±пЬ Ьоиг;
1опд зесопс!;
};
Мте Ь;
При обращении к элементу объединения нужно указать имя
переменной и имя элемент а объединения, разделив их точкой:
Ъ.Ьоиг=10;
Пример
#1пс1иде<1озЪгеат.Ь>
иптоп Ыте
{
1пЪ Ьоиг;
1опд зесопд;
}Ь;
\ю1с1 талп ^о±с!)
{
Ъ.Ьоиг=720;
соиЬ«“В месяце ”«Ъ.Ьоиг«“ часов.“«епс11;
Ъ. зесопсЬ=2 592000;
соиИ«“В месяце” «В. зесопй«а секунд . ”«епй1;
}
В этой программе первоначально присваивается и выводится
на экран значение элемента 1юиг. Затем происходят присваива-
ние и вывод на экран значения элемента яесопб, при этом значе-
ние, присвоенное элементу Ьоиг, уничтожается. Очевидно, что ис-
пользование объединений в программах позволяет экономить
память компьютера. Еще большей экономии памяти в програм-
мах на языке С++ можно достичь, если использовать анонимные
объединения. В анонимных объединениях нет имени, переменная
объединения не объявляется:
иптоп
{ тип! имя_элемента!;
типы имя_элементаЫ; };
К элементам анонимного объединения обращаются по имени
(без точки), как к обычным переменным в программе.
Пример
#1пс1ийе<1оз Ьгеат.И>
уо1с1 та1п
{
ипГоп
{
тпЪ Воиг;
1опд весопс!;
};
1юиг=720;
соиЬ<<“В месяце ’<<Иоиг« часов. ”<<епс11;
зесопс!=2592 ООО;
соиК<“В месяце чЧ<зесопс1<<“ секунд. "’<<еп сП;
}
В этой программе значение элемента Конг анонимного обье-
динения будет уничтожено в момент присваивания значения эле-
менту зссопб.
4.5.3. Файлы и работа с ними
Файл представляет собой последовательность элементов од-
ного и того же типа, имеющих общее имя. Число элементов (дли-
на файла) не ограничено. Файлы создаются на магнитной ленте,
на магни гном диске, на других внешних устройствах, а также в
оперативной памяти ЭВМ (см. подразд. 3.7.3).
Для того чтобы программа на языке С++ могла работать с
файлами, необходимо в начало программы включить заголовоч-
ный файл Г81геат.й:
#1пс] ис!е<1зСгеат.Ъ>
Вывод (запись) данных в файл. Запись данных в файл воз-
можна в двух режимах:
1) создание нового файла (перезапись существующего, ранее
созданного файла);
2) добавление данных в существующий файл.
Для открытия файла в режиме создания используется оператор
оЕзРгеат оп1:_Р11е (‘4имя_файла .расширение”) ;
В круглых скобках оператора оГзГгеат можно указать второй
параметр из списка:
Ю8::ои1 — открыть файл для вывода;
ю$::1гипс — перезаписать содержимое существующего файла;
1О8::погер1асе — если файл сущесч вует, не открывать файл;
1о$::посгеа1е — если файл существует, не создавать файл;
Ю8::а1е — расположить файловый указатель в конце файла.
Например, оператор
оРзСгеат оиД_^11е С‘Гх1е1.ЪхЪ”, хоз: :оиС|хоз: :погер!асе) ;
открывает файл для вывода с именем П1е1Лх1 без перезаписи су-
ществующего файла в текущем каталоге на диске.
Вывод в файл осуществляется с помощью оператора вставки
(«). Для закрытия файла используется функция с1о8е().
Пример
# 1пс1пс1е<^зРгеап1. И>
уохс1 тахп(уохс1)
{
оРз!:геат оп1:__Гх1е (“Ёх1е1 . ЪхЪ’ ) ; //открытие файла
оиТ__1: х!е«и3апись в файл .”<<епс!1;
ои11 ^11 е<<“Режим создания. ;
оиЪ_Р11е.,с1озе () ; //закрытие файла
}
В результате работы этой программы в текущем каталоге на
диске будет открыт файл Й1е1.1х1, в который будут записаны две
строки:
Запись в файл.
Режим создания.
Посмотреть содержимое файла Ше 1.1x1 можно с помощью
команды Гуре в системе М8-О08.
Для открытия файла в режиме добавления используется опе-
ратор
оЗгзЪгеат опЪ_ Г11е (“имя_файла .расширение”, 1оз::арр);
Параметр Ю8::арр предписывает открыть файл в режиме до-
бавления, располагая файловый указатель в конце файла.
Пример
#1пс1и^е<1з1.геат. И>
люлс! тахп (уо1с1)
{
оРз^геат опТ_Р±1е (“Г11е1. ДхЪ”, тоз: : арр) ;
оиЪ_1:11е«“Режим добавления. ”<<епс!1;
оиГ_Р11е.с1озе();
}
В результате выполнения этой программы в текущем катало-
ге на диске будет открыт файл Ые 1.1x1, в который будет добавле-
на строка: ‘ Режим добавления.” Таким образом, в файле Я1е1.Ш
окажутся три строки:
Запись в файл.
Режим создания.
Режим добавления.
Ввод (чтение) данных из файла. Ввести данные в программу
на языке С++ можно не только с клавиатуры, но и из файла. Для
открытия файла в режиме ввода используется оператор
зТз^геат ±п_Р11е (“имя_файла .расширение’ ) ;
В операторе 1Г81геаш можно указать второй параметр:
1оз::1п — открыть файл для ввода.
Ввод из файла осуществляется с помощью оператора извлече-
ния (»).
Пример
#1пс1ис1е<1 оз^геат.Ь>
#1пс1ис1е<^з1:геат.И>
УО1(3 та1п(уо1с1)
{
сЪаг а[64],Ь[64],с[64];
лТзЬгеат 1п_Т11е (кТ11е1. Гхг”) ;
1п_Ше»а>>Ь>>с; ' ]
соиТ«“Первая строка файла Ше1. Ъх'Ь : ”«а
«“ ”«Ь«“ ”«с«епс11;
1П_Г±1е.с1озе ();
} ]
Допустим, что в текущем каталоге на диске заранее создан
файл Г11е1Лх1, в котором записаны три строки:
Запись в файл.
Режим создания.
Режим добавления.
Тогда в результате решения программы на экран дисплея бу-
дет выведено:
Первая строка файла Гх1е1.ЪхС: Запись в файл.
— будет прочитана и выведена на экран дисплея первая строка
из файла П1е1Дх1. Пробелы между словами “Запись в файл/’ бу-
дут восприняты компилятором С++ как символы конца строки,
а переменные а, Ь и с получат значения: Запись5’, “в” и “файл.’'
соответственно.
Для того чтобы прочитать из файла Й1е1.1х1 все три строки,
можно воспользоваться функцией ^е1Нпе.
Пример
#д_пс1ис1е<1о8Дгеат. Ь>
#1пс1ис1е<Рз‘11геат. И>
\гогс1 тахп ^о5_с1)
{
сЪаг а [64] ,Ь[64], с [ 64] ;
тРэДгеат 1п_РИе (а^±1е1. ДхД”) ;
1.п_Ше.де'ТИпе (а, з! геоГ (а) ) ;
1п_Ше. деДХтпе (Ь, еггео^ (Ь)) ;
±п_Г11е.деДИпе (с,51геоГ (с) );
соиТ<<а<<еп61;
сои-Ь<<Ь<<епс11 ;
сои11<<с<<епб1;
±п 1е,с!озе();
В результате решения этой программы на экран дисплея бу-
дет выведено:
Запись в файл.
Режим создания.
Режим добавления.
В том случае, когда не известно, сколько строк содержится в
файле, можно обеспечить чтение информации до тех пор, пока не
ветрен ится конец файла.
Достижение конца файла проверяется с помощью функции еоГ,
которая возвращает значение 0 (ложь), пока не ветрен ится конец
файла, и значение 1 (истина), если встретился конец файла.
Пример. Чтение содержимого файла й1еЫх( до тех пор, пока не
встретится конец файла.
#1пс1иде<1О5‘Ьгеап1, Ь>
#1пс1иде<^зЪгеат.Ь>
уо1с1 тан1(У(лд)
{
сЬаг а [64];
тГз'Ьгеат ±п_Г1Ее .ЪхЪ”) ;
мЫ1е (! ±п_Г±1е .еоГ () )
{
±п_Г11е. деЪИпе (а, зтхео! (а)) ;
сои Ь«а«епс!1;
}
1п_Ше. с1озе () ;
}
Пример. Чтение содержимого файла й1е1.Ш по одному слову до
тех пор, пока не встретится конец файла.
#1пс1иде<±о81:геат. И>
#1пс1иде<ГзЪгеат. И>
\го1с1 татп ^охс!)
I
сЬаг а[64];
тГзЦгеат 1п_Ше(‘‘Ше1ЛхС ) ;
ю!и1е (! 1п__П1е . еоД () )
{
1п_^11е>>а;
соиЦ<<а«епс11;
}
1п_Ше. с1озе ();
} • 1
Пример. Чтение содержимого файла Ше1.Ш по одному символу
до тех пор, пока не встретится конец файла.
#хпс1ис1е<1,О8Ъгеа1п. й>
#1пс1ис1е<Г5Цгеагг .Н>
\го1с1 татп ^О1с1)
(
сйаг а;
ИзЦгеат ("^Ие1. ЦхЦ”);
етРп 1е (! 1п_Г11е. ео^ ())
{
1П_Г11е>>а;
соис<<а<<епс!1;
}
1п__Г 11е.с!озе () ;
}
4.5.4. Файловые операции над массивами
и структурами
Иногда требуется записывать в файл и читать из файла не
символьные строки (см. подразд. 4.5 3), а сложные типы данных,
такие, как массивы и структуры. Для этих целей в С++ использу-
ются функции (запись) и геад (чтение).
В приводимых ниже примерах функции \уп1е и геад в качестве
одного из параметров используют оператор при ведения типов
(сЬаг *), представляющий собой указатель на символьную строку.
Пример. Запись массива в файл:
#1пс1ис1е<^зСгеат. к>
хготс! та1п(уо1с1)
{
хпЪ 1,х[3]={10,20,30};
сГзЬгеат оиГ_Г11е (“Г11е2.йаГ”) ;
Гог(1-0;1<3;1++)
оиТ_ГЫе . тегхЪе ( (сЪаг *) &х[1]г8±хеоГ(х[1])) ;
оиГ_ГН е. с!озе () ;
}
Пример. Чтение массива из файла и вывод на экран:
#1Пс1ис1е<1О8Ъгеап. Ъ>
#1пс1ис1е<Г8Ггеа.гп. Ъ>
хгохс! та1п^о.1с1)
{
тпГ 1,х[3;;
ГГзГгеат 1п_ГИе (“Г±1е2 . йаГ”) ;
Гог(1=0;1<3;1++)
{
1п Ше.геаК (сйаг *) &х[1], 812еоГ (х [1])) ;
соиГ«х [1 «“
}
1п_ГИе.с1о8е () ;
}
В результате последовательного выполнения этих двух прд-
грамм на экран дисплея будет выведено:
10 20 30
Пример. Запись структуры в файл:
#1пс1ис1е<^зЪгеат. Ъ>
'\ло1<1 та1_п(\ю1с1)
{
51:гис11 с!а!1е
{
1пИ с!ау;
сИаг топ!1И[9];
1П11 уеаг;
}{2 5 ,“ноября” ,1958);
о€з Ьгеат оиЪ _Ше (“ШеЗ. йаг”);
ои1_Ше. ыгтЪе ( (сИа г *) &с1, зхгео^ (даЪе));
оиЪ_Ше. с1озе ();
}
Пример. Чтение структуры из файла и вывод на экран:
# 1пс1ис1е<1о8 Ьг еат. Ъ>
#1пс1и6е<Гз1:геат. И>
Vо^д татп ^отс!)
{
зЪгис!: 6аГе
{
1П1 йау;
сЬаг топ1:Ь[9];
хпЪ уеаг;
1(1;
хГзЪгеат 1п_^Ие (“^ИеЗ. с1аЪ”);
1п_Г11е.геад{(сИаг *) зхгеоГ(йаЪе));
со舫с!.с}ау<<“ ”«<1.топЪЬ«“ ”«с1-уеаг«епс11;
а п_ТИе . с1озе [) ;
}
В результате последовательного выполнения этих двух про-
грамм на экран дисплея будет выведено: 25 ноября 1958.
4.6. Классы языка С++
В основе объектно-ориентированного программирования ле-
жит понятие объекта — структуры, обладающей определенными
свойствами, над которой выполняются действия (см. подразд.
3 9.4). С++ позволяет программно определять все атрибуты
объектов с помощью сложных структур, называемых классами.
4.6.1. Понятие класса
Класс (с1а88) похож на структуру (см. подразд. 4.5.1), но, кро-
ме описания данных (элементов), в отличие от структуры вклю-
чает в себя описание функций. Функции класса часто называют
методами класса.
Описание типа с1а§8 имеет следующий вид:
с! а58 имя^класса
(
тип1 имя__элемента!;
типы имя_элементам;
описание_функции1;
описаниефункцииМ;
};
Объект является представителем класса и объявляется после
определения класса следующим образом:
имя_класса имя_объекта1, ...г имя_объектаК;
Пример
#1пс1ис1е<1О5бгеат ,Ъ>
#1пс1и6е<8 Ьгхпд.й>
с1а88 даГе
{
риЬИс: сИзг пате[641;
тпЪ с!ау;
сЪаг топ11Ъ[9 ;
1П1: уеаг;
уотб ейом ЬтгЪйдау (VО^с1)
{ соиГ«“Имя: ”«пате«епс11;
со‘зЪ«“День рождения: ”<<с!ау<< ’Чстоп^Г!
, «“ ”«уеаг«епй];
тахп ^о!с1)
{
с1аге €а ЬИег,тобЪег, (ЗаидЪбе; //объявление объектов
Зегеру(ГабИег.пате,“Юрий”) ;
ГабИе г. с1ау=2 5 ;
збгеру(ЁабИег.топЬИ,“ноября") ;
ГаТйег.уеаг=1958;
збгеру(тоТйег.пате,“Лидия”) ;
тобЬег. с!ау=14;
зГгсру(тосЬег.топбЬ,“ноября’ ) ;
тобИег.уеаг=195 6;
з^геру(даидИге.пате,“Юлия”) ;
(ЗаидЬбе. с!ау=4 ;
збгеру(ЗаидИбе.топбЪ,“мая”) ;
(ЗаидИбе . уеа г=1982;
* абИег. зИо^_ЫгбИс1ау () ; / / вывод информации
тоЪЬег . зЬои_ЫгбЪс1ау () ;
(ЗаидЫ:е . зИом_ЫгбМау () ;
}
В этой программе создаются три объекта типа с1а1е. Элемен-
ты объектов, объявленные внутри класса как риЬИс (общие, дос-
тупны всей программе), получают значения с помощью операто-
ра-точки и функции $1гсру в главной функции таш. После этого
происходит вывод информации (имен и дат рождения) с помо-
щью функции (метода класса) Мюи_ ЫгШдау.
Функции могут быть определены вне класса. В этом случае
внутри описания класса нужно поместить прототип (см. подразд.
4.4.1) функции, а в заголовке функции использовать оператор гло-
бального разрешения (::), указывающий на принадлежность фун-
кции к заданному классу.
Пример
... с1азз даЬе
{риЬИс: сИаг пате [64];
гпб с!ау;
ейаг топ11Ъ[9];
тпГ уеаг;
'У'оэ с! зИоМ—ЬхгбМау ^01(3) ; //прототип функции
};
хлохс! <ЗаТе : : зйом ЬтгТМау ^отс!)
//определение функции
//вне класса
{
сои1з«“Имя: ”<<пате<<епс31;
соиТ<<“День рождения: ”<<с1ау<<“ ”<<поп1зИ<<‘
<<уеаг<<епс11; }...
4.6.2. Инкапсуляция данных
Важной чертой объектно-ориентированного программирова-
ния является инкапсуляция данных — сокрытие части информа-
ции путем объявления элементов класса частными (рпуа1е).
В отличие от общих (риЬНс) элементов, к которым можно обра-
титься из любого места программы, используя оператор-точку,
к частным элементам можно обратиться только через функции
(методы) класса.
В том случае, когда значения элементов используются только
внутри класса и обращаться к ним из основной программы не
нужно, а также с целью сокращения количества ошибок в про-
грамме целесообразно объявить эти элемен гы частными (рпуа1е).
Если при описании класса опущена метка риЬНс. то элементы клас-
са также считаются частными.
В приведенной ниже программе элементы пате и за! класса гр
объявлены как частные. Функции (методы) класса объявлены как
общие:
1п_ба1 — функция, используемая основной программой для
ввода исходных данных (имени служащего и оклада);
зйо\у_за1 — функция, обеспечивающая вывод на экран част-
ных элементов данных (пате и за!);
скап§е_за! — функция, позволяющая обратиться и скоррек-
тировать частный элемент данных (за!).
Пример
#1пс1ис1е< гоэЪгеат ,Ъ>
#1пс1ис1е сз^гтпд ,Ъ>
с1аэз хр
{
ргд^абе: //объявление частных элементов
сйаг паше 164];
Г1оаЪ за1;
риЬНс: //объявление общих элементов
"УО±с1 хП-даЪ (сЪаг *,^1оаб); //прототипы функций
уохс! зЪом_8а1 ^о5с1);
^ХоаХ скапде_за1 (ГХоаб) ;
};
’\тоХб гр::1п_баХ(скаг * пей пате, Ооа I оХб_за!)
(
збгсру(пате,пею_пате);
за!=оХб_заХ;
}
уо±с1 гр:: зко^_за1 (уоХб)
{
сопб«“оклад ”«пате«“: ”«заХ«“ рублей. ”«епдХ;
}
ГХоаб гр: :скапде__заХ (ГХоаб пе^_заХ)
{
1Г(пеи_заХ<2000)
{
соиХ«“Новый оклад ”«пате
«“ недопустимо мал’ ”«епс!1;
геХигп(0) ;
}
за!=пе^_заХ;
ге^игп(X);
}
VО^д тахп ^о±д)
{ ' ;
Г1 оаЪ пею__з аХ;
гр ГаХИег; //объявление объекта ГабЪег
1а1:йег. 1п_да11 (“Худанина Н.М.”, 2000.0);
соиб<<кСтарый
1аппег. зИо^_заХ () ;
соиб«“Введите новый оклад: ” ;
с±п»пем_за X;
±Г(ГабЪег.сЪапде заХ(пем_заХ)’=С)
{
соиб<<“Новый
ГабИег. зЪоъГ—ЗаХ () ;
}
В результате решения этой программы на экран дисплея бу-
дет выведено:
Старый оклад Худанина Н.М, : 2000 рублей.
Введите новый оклад: 3000
Новый оклад Худанина Н.М.: 3000 рублей.
При вводе значения оклада <2000 третья строка будет выгля-
деть так:
Новый оклад Худанина Н.М. недопустимо мал!
Таким образом, главной программе (таги) известны лишь
методы (1п_с1а1, §Ьо\у_8а1, сйап§е_8а1), позволяющие работать с
объектом (Гагйег). Элементы данных (пате, 8а1) и способы обра-
ботки этих элементов скрыты от главной программы.
4.6.3. Конструкторы и деструкторы
Для того чтобы упростить процесс присваивания исходных
данных при работе с классами, в С++ часто используется специ-
альная функция, называемая конструктором. Конструктор име-
ет такое же имя, как и класс, и описывается в программе так же,
как и любая другая функция (метод) класса. После того как в про-
грамме описан конструктор, в операт оре объявления объекта
допускается присваивание начальных значений.
Деструктор — это специальная функция С++ без парамет-
ров, обеспечивающая уничтожение объекта в процессе выполне-
ния программы. Деструктор имеет такое же имя, как и класс, на-
чинающееся с символа тильда (~). Деструктор описывается в про-
грамме так же. как и любая другая функция (метод) класса.
Применение деструкторов целесообразно при создании динами-
ческих списков [7], которые увеличиваются или уменьшаются в
процессе выполнения программы.
Пример
#1пс1ибе<1о8бгеат.И>
#гпс1ис1е<8бг±пд. Ь>
с!азз гр
{
ргд^абе:
сИаг пате[64];
Ыоаб за1;
риЬНс:
гр(сИаг *,^1оаб); //конструктор
(\ло1с!) ; //деструктор
Vо^(^ зИом_8а1 (^ло1с!) ;
};
хр::гр(сИаг *пеи_пате, 11оа I: О1с1_за1) //описание
//конструктора
{
збгсру(пате,пем_пате);
за1=о!с1_за] ;
}
гр: :-гр ^оЫ) ; //описание деструктора
{
соиб«“Деструктор уничтожил объект”«епс!1;
}
VО^с^ гр: : зИом_за1 ^016)
{
соиЪ«кьоклад ”<<пате«‘": ”«за1«" рублей. ”<<еп Л;
}
хю1с1 тахп^отф
{
гр ГабЬег("Худанина Н,М.”, 2000.0); //присваивание
//начальных значений
ГаГпег.зЬоЮ—За! ();
В результате решения этой программы на экран дисплея бу-
дет выведено:
Оклад Худанина Н.М. : 2000 рублей.
Деструктор уничтожил объект.
Таким образом, присваивание начальных значений в програм-
ме осуществлено с помощью конструктора гр, а уничтожение
объекта выполнено с помощью деструктора ~гр.
4.6.4. Перегрузка операторов
Перегрузка операторов заключается в изменении смысла дей-
ствия операторов при работе их с определенными классами.
Например, в некотором классе можно описать функцию сложе-
ния двух символьных строк, которую компилятор С++ будет
вызывать из этого класса для выполнения соответствующей опе-
рации. Если в программе используются, кроме того, операции
сложения переменных типа ш1 или Поа1, то над ними будет
выполнена стандартная операция сложения. Другими словами,
смысл оператора сложения изменится только для элементов
указанного класса.
Для перегрузки операторов в прототипе и в заголовке функ-
ции (метода) класса используется ключевое слово орега1ог, после
которого указывается символ перегружаемого оператора.
Пример
#1пс1ийе<1озДгеат>й>
#1пс1ис1е<51.г±пд. Н>
с1азз 5ШП
{
ргг^аЬе:
сЪаг юогб[25б];
риШс:
зит(скаг *); //конструктор
\^о±с! орегаЪог +(сЬаг *); //перегружаемый оператор (+)
зИою зит^отй);
};
зит::зит(сЪаг *1тпе)
{
Зегеру (могф Ипе) ;
}
хюгс! зит::орегабог + (сИаг *1з пе}
{
збгеаб (юогй, Ипе) ; //“присоединение” Ипе к ъгогй
}
Vо^с^ зит::зЪом_зит^огб)
{
соиб<<ыог6«епд1 ;
}
VО^_д та±п (готе!)
{
зит зба’Ьетеп!: (“С<-+’ ); //объект зГ:абетепЬ
зба Ьетепб. зИом_зи1П () ;
зЪаЬетепб + “ — удобный язык!”;
збабетеп^.зЪотс_зит();
}
В результате выполнения данной программы на экран дисп-
лея будет выведено:
С++
С++ — удобный язык!
В языке С++ можно перегрузить практически все операторы,
за исключением четырех:
. — оператор выбора элемента (оператор-точка);
.* — указатель на элемент;
:: — оператор разрешения области видимости;
?: — условный оператор сравнения.
Применение перегрузки операторов позволяет в некоторых
случаях улучшить удобочитаемость програ мм и упростить их
понимание.
4.6.5. Статические элементы класса
Статические элементы класса (функции или элементы дан-
ных) являются общими для всех объектов данного класса. Из-
менение значения статического элемента в одном объекте
приводит к изменению значения этого элемента во всех осталь-
ных объектах данного класса. При объявлении статического эле-
мента (функции) класса используется служебное слово 81аНс,
например:
...риЬИс:
зСа11±с Г1оаЪ ргтхе;...
После того как статический элемент объявлен внутри класса,
этот элемент объявляется вне класса с помощью оператора гло-
бального разрешения (::), например:
...^1оаЪ имя класса: : ргтге;...
Статические элементы можно использовать в программе до
объявления объекта.
Пример
тпсХидеСтоз^геат.И>
с1азз гр
{
ргДхла^е:
сИаг пате]64];
^1оаЪ за1;
риЬИс:
81:аТ1с Г1саТ ргтге; //статический элемент
};
^1оаЪ гр::рг1ге;
уотс! тал п ^отс!)
{
гр::рг±2е=500.5;
соиЪ«“Премия: ”«гр: :рк!ге«“ рублей. ”«еп<3: ;
}
Из примера видно, что при обращении к статическому эле-
менту в программе нужно указать имя класса, оператор глобаль-
ного разрешения и имя статического элемента (в нашем случае
2р::рпхе).
4.7. Наследование и полиморфизм
Важной чертой объектно-ориен тированного программирова-
ния является наследование — возможность использования эле-
ментов класса, созданного для одной программы, в другой про-
грамме. Исходный, ранее созданный класс обычно называют ба-
зовым, или родительским, классом. Класс, который построен из
существующего, ранее созданного класса, часто называют произ-
водный.
4.7.1. Простое наследование
Под простым наследованием понимается процесс создания
одного производного класса, наследующего элементы базового
класса.
Допустим, что базовый класс имеет вид:
с!азз гр
{
ргдл^аТе:
сИаг паше[64];
€1оаЪ за1;
риЬИс:
гр(сИаг *,Х1оа!);
л/о1с1 2Пом_за! (\7О1с1) ;
};
Предположим, что в программе требуется использовать но-
вый класс хрр, включающий в себя все элементы класса хр и, кро-
ме того, элемент:
Г1оаЪ ргтге;
Для создания нового, производного класса нужно указать
ключевое слово с1а§$, имя производного класса, двоеточие, ре-
жим доступа к элементам базового класса и имя базово] о клас-
са. После этого надо определить элементы нового, производного
класса, например, так:
с!азз грр:риЫ1с гр
{
ргй^аГе: //определение элементов
^1оаЬ ргтге;
риЬИс:
грр (сИаг ★, Г1оа^, Г1оа11) ;
хлотсЗ хНо«_за1р (Vо^с^) ;
};
Здесь частные (рпуа1е) элементы базового класса (гр) доступ-
ны производному классу (грр) только через функции базового
класса. Общие элементы базового класса (гр) являются общими в
в производном классе (грр), поскольку объявлены при определе-
нии класса-наследника как риЪНс.
В качестве иллюстрации использования в программе наследо-
вания классов рассмотрим пример:
#1пс1ис1е<1озбгеат. И>
#1пс1ис1е<з1:г гпд. Ъ>
с1азз гр //определение базового класса
I
рг^аГе:
сЬаг пате[64];
Г1оаЁ за1;
риЬИс:
гр(сЬаг *гГ1оаЬ.);
\7О1<1 зЬом_за1 ^отд) ;
);
2р::гр(сЬаг *пеет_пате, ^1оа1: о1б_за1)
з^гсру(пате,пем_пате) ;
за1=о!д_за1;
}
\го1с1 гр::зИом за1(уо1с!)
{ 1
соиР<<“Оклад "«пате«“: ”«за1«“ рублей. ’ «епс11;
]
с!азз 2рр:риЪ1±с гр //определение производного классе
ргтуаТе:
Г!оа! ргтге;
риЬНс:
грр(скаг *г±1оаТ,Г1оаЪ);
лло1с! гИом_за!р (л7О1с!) ;
};
2рр: :грр ( сИаг ★ пе^г.аше , Т1оаб о!д_за1,
зит ргтге) : гр (пем__пате, о!с1_за1) //конструктор
//производного класса
{
рг12е=зит_рг±ге;
}
уоз д грр : : зИом_за!р (VО^с^)
{
зИои за!(); //вызов функции базового класса
соиг«“ (премия: ”«рг1 ге«“ рублей) ”«епс11;
}
х/отс! тал п ^огс!)
{
гр ГаЪЪег(“Худанина Н.М.”,2000.0);
грр ГаЪкеГ—рггге (“Худанина Н.М.”, 2500.0,500.0) ;
Габпег.зИом_за1 ();
Габпег рггге.зЪо^_за!рО;
}
В результате решения данной программы на экран дисплея
будет выведено:
Оклад Худанина Н.М.: 2000 рублей.
Оклад Худанина Н.М.: 2500 рублей.
(премия 500 рублей)
В рассмотренном примере элементы базового класса разделе-
ны на общие (риЬПс) и частные (рпуа!е). К общим элементам ба-
зового класса можно обратиться из производного класса, как
будто эти элементы определены внутри производного класса. Для
обращения к частным элементам базового класса использовалась
интерфейсная функция базового класса 8Йо\у_8а1. Если объявить
частные элементы базового класса защищенными (рго1ес!ес1), то
к ним можно обращаться из класса-наследника напрямую, как
будто они являются общими. Для остальной част и программы
защищенные элементы базового класса ост анутся частными, до-
ступными только через интерфейсные функции.
Допустим, что определение базового класса в предыдущем
примере выполнено следующим образом:
с1азз гр
{
ргоЪесЪед:
сИаг пате[64];
Г1оаЬ за1;
риЫ 5 с:
хр(сЪаг *,Б1оаТ);
ллотд зГюъ7_за1 (уотд) ;
};
Теперь к элементам паше и за! можно обратиться из произ-
водного класса напрямую, например, так:
...грр: : тп_даБ ^отд)
{
соиБ«“Введите имя и зарплату’ «епд1;
с!п>>паше>>за1;
и
Таким образом, если нужно обратиться из производного клас-
са напрямую к частным элементам базового класса, то целесооб-
разно объявить эти элементы в базовом классе защищенными
(рго1ес1е<1).
4.7.2. Множественное наследование
Под множественным наследованием понимается процесс со-
здания производно] о класса из нескольких ранее созданных ба-
зовых классов.
Предположим, что в программе созданы два базовых класса
да1е и гр:
с!азз да Ее
{
ргхллаЪе:
сЬаг пате[64];
сЛтаг дас_ЫгЪИ [ 64 ] ;
риЫ 1с:
даЪе(сЪаг *,сИаг *);
Vолд зЬоМ—ЫгБЬ ^О1д) ;
с1азз гр
{
рпллаЪе:
Г1оаЬ за1;
риЬИс:
гр (Г1оаЪ) ;
\ю1с1 зксМ—за1 ^о±с!) ;
};
На основе этих классов можно создать производный класс
<1а1е_$а1. При определении производного класса нужно указать
ключевое слово с1а$8, имя производного класса, двоеточие, пере-
числить через запятую режимы доступа и имена базовых классов,
а затем объявить элементы производного класса:
сГазз с1аЪе__за1 :риЫ±с с1аЪе,рир1±с гр
{
ргхх^аТе:
^1оаЪ ргтге;
риЬИс:
с!а!:е заЦсИаг *,сЬаг *, Г1оаЪ) ;
VО^с^ зЪо«_с1а1:е_8а1 ^о±с1) ;
};
Пример
#1пс1ис1е<1о8Ъгеат. И>
#±пс1иНе<8Ъг1пд.Ъ>
с1а8Б (ЗаЪе //базовый класс с!абе
{
ргд^абе:
сЪаг пате[64];
сЪаг даб_ЫгбЪ [ 64 ];
риЬИс:
да(:е (сЪаг *, сЪаг *);
Vо^сI 5Иою_Ь±гЬЬ (ллоз с!) ;
};
Пабе: : (Забе (сИаг *пею_пате, сЪаг *пеи_ИаЪ_Ыг11Ъ)
{
з^гсру(пате,пе^ пате) ;
8бгсру (сЗаТ_ЫгТЪЛ пем_даТ_ЫгбЪ) ;
}
57О±с1 (1абе : : зЪом Ъз гЪЪ
соиб«4'Сотрудник: ”«пате<<епсЗ 1;
соиб«“Дата рождения: >’«с!а11_ЫгбЪ«епс11;
}
с!азз гр //базовый класс гр
{
риЫ±с:
гр (!1оа!) ;
уотс! зИо1лг_за1 ^о1<3) ;
} 9
гр::гр(Г1оа! пеъ-г_за1)
{
8а1=пем_за1;
)
VО^сА гр: :зЪоы_за1 (уоИ)
{
сои11«“0клад: ”<<за1«“ рублей . ”«епс11;
}
с1а88 сАа1:е_гр:риЫ1с баЪегриЬИс гр //производный класс
дабе гр
{
ргд^абе:
Г1оаЪ ргхге;
риЫлс:
сАа1:е_гр (сИаг *,сИаг *, !1оаб, оаЪ) ;
Vо^с^ зИоъг_сАаЪе_за1 ^огсА) ;
};
//конструктор производного класса
сАа!.е_2р : :сАа!е_гр(сЬаг *пею_пате, сЪаг
*пею_сАа1:_Ь1г{:И, Ё1оа11 пеи_за1 , Г1оа11 пею_ргд.ге) :
сАабе (пем пате, пе^_с!а11_ЫгДЪ), гр (пею_за!)
{
р г 1 ге==пе^__р г 1 ге ;
}
\7О±с1 с!а Ье_гр: : зНомсАа Ье_8а! {VО^с^)
8Иою__Ь1гбИ(); //вызов функции базового класса сАаЪе
8Ио™_за1(); //вызов функции базового класса гр
соиЪ«“Премия : ’'«рг12е<<“ рублей«”«епШ ;
)
уотс! татп (уо1<1)
{
да!е_2р ГаСЬег (“Зубарев А.Л.”,
“23 октября 1960 года.. 4000 . 0,1000.0) ;
ГабЬег. зЬом с1зТе_за1 () ;
}
В результате решения данной программы на экран дисплея
будет выведено:
Сотрудник: Зубарев А.Л.
Дата рождения: 23 октября 1960 года.
Оклад: 4000 рублей.
Премия: 1000 рублей.
С++ позволяет создавать в программах производные классы
не только из имеющихся базовых, но и из классов, которые, в
свою очередь, являются производными от некоторых других ба-
зовых классов. В этом случае речь идет об иерархии классов.
В таких программах при вызове конструктора производного пос-
ледовательно вызываются конструкторы наследуемых классов.
4.7.3. Друзья класса
Обращаться к частным элементам одного класса из другого
можно не только через интерфейсные функции, но и напрямую,
путем объявления дружественных (Гпепд) классов. В отличие от
производных классов, которые позволяют обращаться к частным
элементам базового класса, объявляя эти элементы защищенны-
ми (рго!ес1ес1, см. подразд. 4.7.1), классы-друзья не связаны друг с
другом через аппарат наследования.
Для объявления класса-друга нужно в определении класса ука-
зать ключевое слово Гпепд и имя дружественного класса, например:
с1азз 2р
{
рг 1уабе:
сЬаг пате[64];
П1оаб за1;
риб11с:
гр(сЬаг *,Ыоаб);
уотсЗ зЬои за! (уо16) ;
Ггхепс! грр;
};
При таком определении объекты класса грр могут напрямую
обращаться к частным элементам класса гр.
Пример
#1Пс1ис1е<1озЪгеат* Ъ>
#1пс1ис1е<з1:г тпд. 1т>
с1азз гр
{
рг1\/аТе:
сИаг пате[64];
^1оаЬ за1;
риЬЫс:
гр(сИаг *,^1оаЪ);
'\ло±с1 зЪоы_за1 ^о!с1) ;
^гхепс! грр;
};
гр: : гр (сЬаг *пем_пате, ^1оа1: пе*>_за1)
{
з Ьгсру (пате, пеъг_пате) ;
за1=пеи_за1;
} --о . 3 X 1
УО1С1 гр:: зИом за! ^о1с!)
Ь
сои!.«“Сотрудник: ”«пате«епс11;
сои1<<“0клад: ”«за1«“ рублей.”«епс11г
}
с!азз грр
{
риЬПс:
Л7О1(^ сЬапде_за1 (гр *,Г1оаС);
^1оа+. 1П за! (гр);
};
\ю!с1 грр: :сЬапде_за! (гр *п_гр,^1оаЪ пем_за1)
{
п_гр->за1=пем_за];
}
Г1оа1: грр : : 1п_за1 (гр п__гр)
{
зЬаГ1±с ^1оаЬ за1;
за1=п_гр.за!;
гебигп(за!);
}
Vо^с1 тахп ^охб)
гр !а!Ьег! (“Бобынин С . А.’\ 3000.0) ;
хрр Га!Нег2;
!абЬег!.з!юю_за1();
^а!Ъег2 . сИапде за! (&!абйег1,4000.0) ;
ЕаЪЬег1.зИо^_за1();
}
В результате решения данной программы на экран дисплея
будет выведено:
Сотрудник: Бобынин С. А.
Оклад: 3000 рублей.
Сотрудник: Бобынин С. А.
Оклад: 4000 рублей.
В этой программе объект гр передается в функцию сйап^е_$а1
класса грр по адресу. Так как функция сйап§е_8а1 изменяет эле-
мент §а! класса гр, программа должна передать параметр по адре-
су, а затем использовать указатель для обращения к элементу этого
класса.
4.7.4. Понятие о полиморфизме
и виртуальных функциях
Полиморфизм — это способность объекта изменять форму
(поли — много, морфизм — изменение формы), возможность ис-
пользовать одинаковые имена для методов, входящих в различ-
ные классы (см. подразд. 3.9.4).
Перегрузка функций (см. подразд. 4.4.3) и перегрузка опера-
торов (см. подразд. 4.6.4) — это не что иное, как проявление по-
лиморфизма во время компиляции программы на языке С++.
Полиморфизм во время выполнения программы обеспечива-
ется использованием виртуальных функций базовых классов и
применением указателей на объекты базовых классов. Для созда-
ния полиморфного объекта первоначально определяются вирту-
альные функции базовых классов при помощи ключевого слова
У1Пиа1, размещаемого перед прототипами функций. В зависимос-
ти о г того, на объекч какого класса будет указывать указатель,
определяется, какая виртуальная функция будет вызвана во вре-
мя выполнения программы.
Создание указателя на объект базового класса выполняется в
программе следующим образом:
имя_базового класса *указатель;
Для того чтобы изменить форму объекта, указателю присва-
ивается адрес объекта производного класса:
указатель=(имя базового_ктасса *)&имя объект а_производного_класса;
Кроме перечисленных выше, в языке С++ существует еще один
способ реализации полиморфизма — использование шаблонов
функций и шаблонов классов.
Шаблон функции позволяет определить функции, возвращаю-
щие значения разных типов. Например, шаблон функции $дг,
возвращающей значение переменной х, возведенное в квадрат,
выглядит так:
Ъетр1аб.е<с1а5Б Т>Т здг(Т х)
{гебигп(х*х);};
После определения шаблона в программе можно использо-
вать функцию едг с различными типами параметров.
Шаблоны классов позволяют строить классы аналогично шаб-
лонам функций.
Более подробно вопросы создания полиморфных объектов
рассмотрены в [4; 7].
ГЛАВА 5
Основы программирования
на У18иа1 Ваыс
Материал этой части предполагает наличие у пользователя
минимальных знаний языка программирования рВаыс и навы-
ков работы в системе АУтсктъ. На компьютере должна быть ус-
тановлена интегрированная инструментальная оболочка Уюиа!
Ваыс 5.0 (УВ 5.0) Еп1егрп$е Ес1шоп или РгоГе$мопа1 ЕбШоп.
Методика разработки \Уш<1о\уь-приложений и шюстрирусгся
двумя примерами:
• разработка программы преобразования температурных
шкал (см. подразд 3.9.2);
• разработка программного комплекса контроля знаний.
5.1. Визуальное программирование
в У|5иа! Ваз1С 5.0
Появление в 1997 г. на рынке программных продуктов ИИО
УВ 5.0 позволило во многом облегчить создание программ, ра-
ботающих в среде У 1пс1о\У8 (ул илит для повседневных нужд, обо-
лочек для существующих или разрабатываемых программных
продуктов и т.д.). С точки зрения пользователя У В 5.0 отличает-
ся от ранее созданных версий программного продукта большей
комфортностью, надежностью и удобством в работе 114]
5.1.1. Пользовательская оболочка \Л$иа1
Ва81С 5.0
После запуска УВ 5.0 на экране появляется окно создания про-
екта Уем’ Ргсцесл (рис. 43). Щелкните левой кнопкой мыши по
пиктограмме УВ Епгегрпзе ЕШйоп Соп1го1з, расположенной па
вкладке а затем по клавише [Открыть]: появятся четыре
прикладных окна УВ 5.0 (рис. 44):
Мею Ргонхд
4
Открыть
Отмена
Г ОопЧ Иж йз!од |п 1Ъе Миге
Рис. 43. Окно Кеи Рго]ес1
Рис. 44. Интегрированная инструментальная оболочка
У1$иа! Ва<йс 5.0
• основное окно (в верхней части экрана);
• панель компонентов Сепега! (в левой части экрана!;
• окно проекта Рго]ес1 (в правой средней части экрана):
• окно свойств РгорегИех (в правой нижней части экрана).
В основном окне располагаются меню команд и панель инст-
рументов, которые используются в режимах проектирования и
выполнения программы.
Панель компонентов содержит элементы управ тения и объек-
ты, которые можно разместить в окне формы во время создания
проекта.
Окно проекта позволяет получить быстрый доступ к формам
и кодам проекта.
Окно свойств позволяет получить доступ к свойствам всех
объектов в текущей форме проекта.
Для открытия окна формы проекта (пятого окна ИИО) до-
статочно в окне Рго]ес1 выполнить двойной щелчок по пикто-
грамме Гоппе, а затем — по пиктограмме ГопнЦЕогш!). ИИО
после открытия формы проекта будет иметь вид, показанный на
рис. 45.
Г* «дп| Пчм®1
4
Т11 |1|Т11|ГГпгт'1ТГГ№0
Рго|есП (Рго|есМ)
- < >' Гоп 1$
ЕЗ Реетп! (Ротт!)
Рто|есН - Мйс
(3- РЗе Еай. Уяам Рго^есг Реппа* Оеоиа Не1г
х
% РоляТ
115 И
* '-«V
□
и
|роггп1 Ролл
А1рЬаЬеЬ< | |
Арреагапсе 1 - 30
и>
□Об
26
&•“ у
ХХ' «
Я3=:
ВаскСсДо?
Вогд<5Ые
СарЪоп
Рабе
□ &Н800СЮ001
2 51гаЬ1е
Рогт!
Тгие
15-
ОрСс'Ъоб
ьЬе патче «п соде *о
И155151111Н
Рис. 45. ИИО после открытия формы проекта Еогт 1
Шестое прикладное окно может быть открыто, если выпол-
нить двойной щелчок на левой пиктограмме (Угс\у Соде) в окне
Рго]ес1. В этом случае на месте окна формы проекта (в средней
части И ИО) появится окно для записи кода формы (пользова-
тельской программы). Вернуть на экран окно формы проекта
можно, выполнив двойной щелчок на средней пикто] раммс (У1ем
ОЬ)есГ) в окне Рго]вс1.
Расположение окон на экране можно изменить с помощью
мыши. Прикладные окна ИИО УВ5.0 можно переместить, изме-
нить их размер, закрыть и вновь открыть. Перед тем, как присту-
пить к разработке проекта, разместите окна на экране по вашему
вкусу.
Среда программирования УВ 5.0 имеет в своем составе раз-
витую справочную подсистему Не1р, дающую программисту от-
веты на многие вопросы, — активно используйте эти возможно-
сти при разработке АУтдоте-приложений.
Разработку приложения в УВ 5.0 можно разделить на три
основных этапа.
1. Создание стартовой формы проекта — выбор и расположе-
ние объектов в окне формы проекта.
2. Написание кода (текста программы) в окне кода формы,
состоящего из процедур обработки событий, происходящих с
объектами.
3. Подготовка приложения для инсталляции с гибких дисков
на дру] их компьютерах.
Отладку приложения (запуск на решение и уст ранение оши-
бок) лучше проводить по мере написания кода обработки оче-
редного события, не забывая периодически сохранять результа-
ты своей работы в памяти компьютера.
5.1.2. Создание стартовой формы проекта
Для практической иллюстрации возможностей УВ 5.0 и
технологии визуального программирования рассмотрим процесс
создания программы преобразования температурных шкал
(см. подразд. 3.9.2).
Начнем разработку проекта с создания стартовой формы —
окна, которое появится на экране при запуске \Ушс!ом^-прило-
жения.
Установка свойств формы.
1. Изменение названия формы:
• в окне Ргорег Нех-Ротт I найди те свойство Сарйоп (зат оло-
вок):
• выполните двойной щелчок по полю Сарпон левой кноп-
кой мыши (в правой колонке появится курсор);
• удалите текст «Еогт1» (клавишей [Васкзрасс]);
• введите текст: «Температурные шкалы».
2. Изменение размеров формы:
• подведите указатель мыши к границе формы (указатель при-
мет вид стрелки «<->» или « ф»);
• нажмите левую кнопку мыши и, не отпуская ее. передвинь-
те мышь для изменения ширины или высоты формы (заметьте,
что свойства УЛсИй и Не^Ы в окне РгорегИез изменят свои значе-
ния).
3. Изменение значка приложения:
• в окне РгорегИез найдите свойство коп (значок).
• щелкните по полю коп левой кнопкой мыши (в правой ко-
лонке появится кнопка с многоточием):
• щелкните по кнопке с многоточием раскроется окно Ьоас1
1соп\
• укажите путь: ...УЬ/ОгарЫс^/1соп$/ГЛетеп1$/С1ои(1лсо и на-
жмите на кнопку Открыть (значок с «облаком» будет помещен в
заголовок формы проекта).
Размещение объектов в форме проекта. В подготовленной фор-
ме разместим объекты, которые понадобят ся для решения по-
ставленной задачи (см. подразд. 3.9,2). Нам потребуется создать
четыре объекта типа 1 ,аЬе! (метка, поле надписи), в которых бу-
дут размещаться поясняющие надписи: «Цельсий», «Фаренгейт»,
«Кельвин» и надпись с выполняемым преобразованием (Цель-
сий — Фаренгейт — Кельвин...). Кроме того, в стартовой форме
должны быть созданы три объекта типа Тех1Вох (ноле редакти-
рования). в которых будут размещаться значения температуры.
1. Создание полей надписи (ЬаЬе1)\
• выполните двойной щелчок левой кнопкой мыши по кноп-
ке А в панели компонентов. В форме появится поле ЬаЬеП. окру-
женное восемью квадратиками — маркерами. Одновременно с
этим в окне Ргорегйех появится имя: 1_аЪс11 ЬаЬе1. Положение и
размеры поля надписи в форме могут быть легко изменены тра-
диционными для \У1пдои-8 способами с помощью мыши:
• поместите текстовый курсор в правую половину поля СарНоп
окна РгорегНех и замените текст «ЬаЬеП» в этом месте на «Цельсий»;
• воспользовавшись возможностями поля Рот окна РгорегНеь,
можно установись понравившийся тип и размер шрифта, кото-
рым будет отображен текст «Цельсий» в форме (например, шрифт
8ка7.каЕог8ег§е, размер 26). Для автоматической установки раз-
мера поля надписи в форме свойство Аи1оЖхе в окне РгорегНез
должно иметь значение Тгие.
Повторите указанные действия для размещения в форме по-
лей надписей ЬаЬе12 («Фаренгейт») и ЬаЬс13 («Кельвин»).
Создайте поле надписи РаЬе14 и поместите его вверху формы.
Установите тип и размер шрифта (шрифт 8кахкаЕог8ег^е, раз-
мер 16). В правой половине поля СарНоп окна РгореШез удалите
текст «ЬаЬе14». Значение свойства Аий&ше установите в Тгие, а
значение свойства АП^пшепТ (выравнивание) установите в 2
Ссгйсг (по цент ру). В это поле будет выводиться надпись с выпол-
няемым преобразованием (Цельсий — Фаренгейт — Кельвин...).
Для удаления объекта из формы нужно выделить удаляемый
объект, а затем воспользоваться командой Си1 в меню ЕДй в ос-
новном окне У В 5.0.
2. Создание полей редактирования (Тех!Вох)\
• выполните двойной щелчок левой кнопкой мыши по кноп-
ке аЫ в панели компонентов. В форме появится поле Тех1Ц ок-
руженное восемью маркерами. Одновременно с этим в окне
РгорегНез появится имя: Тех11 ТехгВох;
• поместите поле ТехГ1 в форме напротив поля надписи ЬаЬеН
(«Цельсий»), установите нужные размеры поля редактирования;
• удалите «Тех11» в правой половине поля Тех! в окне РгорегНег,
• в поле РоШ установите тип и размер шрифта, которым бу-
дут отображаться числовые значения температуры в форме (шрифт
8кахкаЕог8ег^е, размер 26).
Повторите указанные действия для размещения в форме по-
лей редактирования Тех!2 (напротив надписи «Фаренгейт») и
Тех13 (напротив надписи «Кельвин»).
Если все инструкции выполнены правильно, то внешний вид
формы будет примерно таким, как показано на рис. 46.
Для того чтобы посмотреть, как будет выглядеть форма на
экране в процессе работы ХУтбоиъ-приложения, .можно восполь-
зоваться командой 8(ай в меню команд Кип основного окна УВ
5.0 или функциональной клавишей | Г5].
1>аЪе14
ЬлЬе11
ЬаЪе!2
ЬаЪеВ
Тех11
ТехЛ
ТехкЗ
Рис. 46. Стартовая форма проекта
Чтобы остановить работу программы, воспользуйтесь коман-
дой Еп(1 в меню Кип.
Созданную стартовую форму рекомендуется сохранить в па-
мяти компьютера. При сохранении проекта УВ 5.0 создаст не-
сколько файлов, в которых содержится описание проек та, форм
и модулей. Рекомендуется создать на диске отдельный каталог, в
который будут записываться эти файлы
Для сохранения проекта воспользуйтесь командой 8а^е Рго]ес1
... в меню Еай. Если вы хотите записать исполняемый файл
(файл с расширением .ехе), выберите в меню Ейе команду Маке
Рго]есН.ехе.. раскроется окно Маке Рго]ес1. В этом окне ука-
жите путь к каталогу на диске, в который нужно помести гь ис-
полняемый файл, имя файла, и нажмите кнопку ОК — исполня-
емый файл будет создан и записав на диск.
5.1.3. Написание кода (текста программы)
Проектируемое приложение должно работать следующим
образом:
• пользователь вводит числовое значение температуры в одно
из полей редактирования, например в поле редактирования, пред-
назначенное для записи числовых значений температуры по шка-
ле Цельсия (поле Тех{1, см. рис. 46);
• двойной щелчок кнопкой мыши в поле редактирования
Тех11 должен привести к появлению числовых значений в нолях
Тех12 и Тех13, пересчитанных по шкалам Фаренгейта и Кельви-
на соответственно:
• в поле ЬаЬе14 должно появиться сообщение «Цельсий
Фаренгейт — Кельвин».
При вводе числовых значений в поля редактирования Тех12
или Тех13 и двойном щелчке кнопкой мыши пересчитанные зна-
чения температуры должны появиться в соседних полях редакти-
рования, а в ЬаЬе14 должно появиться соответствующее сообще-
ние.
Рассмотрим процедуру обработки события двойного щелчка
кнопкой мыши по полю редактирования Те.х11.
Выполните следующие подготовительные операции:
• выделите поле редактирования ТехН в окне формы (щелчок
кнопкой мыши по этому полю):
• выполните двойной щелчок кнопкой мыши по полю редак-
тирования Тех?1. В результате этого в середине экрана раскроет-
ся окно кодов. В верхней части окна кодов находятся два рас-
крывающихся списка: слева — список объектов, справа — спи-
сок событий, на которые может реагировать выделенный объект.
В центральной части окна кодов записан шаблон процедуры
обработки события (заготовка программы):
• раскройте правый список в окне кодов и выделите щелчком
мыши процедуру ОЫСМск, в резуль тате этого в средней части окна
кодов появится (рис. 47) шаблон процедуры обработки события
ВЫСИск (двойного щелчка кнопкой мыши по полю редактиро-
вания Тех11). '
В заголовке процедуры записано имя Тех11 ВЫСПск. кото-
рое можно расшифровать так: обработка события ВЫСНск для
объекта Тех11. Курсор выставлен на место (см. рис. 47), с кото-
рого можно записывать текст процедуры (операторы языка
Вамс).
Очевидно, что для написания процедуры обработки события
нам потребуются переменные: Тетр — для хранения введенного
числового значения в поле редактирования Тех1Г9 ТГ, Тк для
хранения пересчитанных значений температуры по шкалам Фа-
ренгейта и Кельвина соответственно.
Преобразование числовых значений температурных шкал не
вызывает особых затруднений. Эти вычисления (см. подразд. 3.9.2)
выполняются с помощью обычных операторов присваивания язы-
ка Ваыс.
. г Мкл « Ц Уш-ДЕ
«м Ра-п^ &ип 1^5 &М-1п5 ИЫо** (М
|г-о?тТ Рот
ШгаЬес: । с<Я%ххее^}
мХмООоМеы
=Роп1
ЕйеЬжгд а Р'Хй сЛуесе.
ГсэтпТ
-1 -30
Раке
□ шгаагз?
2-512ЛЙ
Гемлерат^риьк
Псе
|.Нал>с)
Ад авга^
Ац*о₽.еЛа<*
ажКокг
тогдегБ^й
СхфкСЛ
СЬрСосЛгоЬ
Сог*го1Во
С*аиЛ1ой5
13- Сор-?'Рег
Рис. 47, Шаблон обработки события ЭЫСПск
Для ввода-вывода значений температуры следует воспользовать-
ся свойством Тех1 поля редактирования Тех11. Это свойство опре-
деляет содержимое поля редакч ировапия в виде символьной стро-
ки. К любому доступному свойству объек га в УВ 5.0 можно обра-
титься, указав через точку имя объекта и выбранное свойство,
например: ГехН.ТехЬ Но свойство Тех! содержит строку символов
из поля редактирования Тех11, а нам нужно, ч гобы значения темпе-
ратуры для их последующей обработки были представлены в чис-
ловом виде. Для преобразования символьной строки в число и за-
писи это! о числа в переменную Тетр воспользуемся функцией Уа1.
Обратное преобразование из числа в символьную строку
можно выполнить с помощью функции Еогта1$.
Вывод сообщения о преобразовании температурных шкал
осуществляется присваиванием свойству СарНоп поля надписи
ЬаЬе14 значения символьной строки: «Цельсий — Фарею ейт —
Кельвин».
Окно кодов, содержащее текст процедуры обработки собы-
тия ВЫСНск для объекта Тех11. показано на рис. 48.
Процедуры обработки события ЮЫСНск для объектов Техй
и Тех13 отличаются от процедуры, показанной на рис. 48. вычис-
лительной частью.
ЙУхйзм
л
9
Х7
ч «
4Я5
Рис. 48. Окно кодов с процедурой Тех11 ГЭЫСПск
1П ^5 && ₽«>«« РйтЯ Рйхлэ Вип 1°оЬ 6ЛМП5 ЗДгхЫ Нар
7] |СЫСВск
•Л'.*.
<>елега1
Техъ1 РЫС11ск(|
V»! (ТелМ .Тех!)
екв->» ретуглтат*
" СарЬси
<•
;1 0 .- : ТехгЗ_Г>ЫС 1 хек')
₽жкл» .
Рис. 49. ИИО У18иа1 Ва<йс 5.0, содержащая полный текст программы
й»5
80
Тетр » V»!(ТехрЗ-Техр)
Тс » Тетр - 273.15
П “ 32 + (Тетр - 273.15]
Те хг1.Техг » ГсгайЛ$(Тс)
Техс2.Техь « Еоггоаг$(ТС)
Т ие
13-СоруР
О'ЗДи
и_од теипйраэур^
ьагчися^ия
ей® тешигратуры
вкч>‘-сзе?4мя
/5*9
»^аг-й ре»у.’'*&т«!г’8
......»...............''
С(ххго1Вс>
!>г"*Аоде
Ргаи51у)е
Огай’чЬжЙЬ
. ЕгчЫеН
+ 273.15
вьгвсд
‘ Еопп1 д
гагкс ] -30
гжч Рай*
Той
И^яхю..
! Тг&7>тсым
Тек»
ГЕ1’*аг»:
Тетр °
И - 32 + Тетер /5*9
Тк « 273.15 ♦ Тетер
Тех^2.Техс = Еогхпаг $ (ТГ}
ТехсЗ.Техс » ЕоглаеЗ(Тк)
ьаЬе1^.Сарс1сп « "Цельсии-Фаренгейт-Кельвин
«>гё ;ы*-
Р1г ггекх; Техс2_РЬ К1 хек [)
РтожсН (РЙОЗЕСГ
Тетр » УаЦТель2 .Текс)
Тс • (Тетер ~ 32) * & / 9
Пс • 5 * (Тетер - 32) / 9
ТехЧ.Техс <= Гоггт-$(Тс)
ТехЪЗ.Техг = Еогтеас$(Тк]
гивЬеН.Сарсюп - "Фаренгейт-Цельсий-Кельвин
пЛ ЗйЬ
ЬаЬе14.Сарс1оп лКельвик-Цельсий-Фареирейт'
|еогш1 Еолп
АфЬаЬеЪ |окедспге41
ОоСсШгой Гие
Полный текст программы разрабагываехмого приложения
приведен на рис. 49.
После отладки программы, сохранения проекта и создания
исполняемого файла (см. подразд. 5.1.2) можно выйти из УВ 5.0
(команда Ехй в меню Гйе) и запустить на решение исполняемый
файл из оболочки АУ1пс1оиг8. О правильности работы прило-
жения можно судить, если провести сравнение результатов рабо-
ты приложения с данными, приведенными в табл. 13 (см. под-
разд. 3.9.3).
5.1.4. Подготовка приложения
для инсталляции с гибких дисков
Для того чтобы протестированное и отлаженное приложение
исправно работало на другом компьютере, в программном обес-
печении которого могут отсутствовать и, наверное, отсутст вуют
некоторые «нужные» для работ ы приложения файлы, содержа-
щиеся в УВ 5.0, необходимо подготовить так называемый дист-
рибутив (ё181г1Ьи1е — распространение) вашего программного
продукта. Эта задача легко разрешается с помощью средства,
имеющегося в УВ 5.0, 8сшр \У1гагс1:
• перед началом работы с 8е1ир ХУггагс! проверьте, чтобы все
файлы приложения были сохранены на диске и закрыты;
• запустите на решение файл 8е1ир\У1/.ехе, находящийся в ка-
тало) с ...УЬ/$с1иркй/кйП132/;
• в раскрывшемся окне выбора проекта (рис. 50) воспользуй-
тесь кнопкой Вгоотзе для указания пути к файлу проекта
РпуесН.уЬр, после чего нажмите кнопку Кех1;
• в окне выбора способа создания дистрибутива (рис. 51) ак-
тивизируйте переключатель Р1орру сИзк и нажмите кнопку №хС
• в окне выбора диска (рис. 52) укажите в раскрывающихся
списках имя диска и его формат, после чего нажмите кнопку
х\ехС;
• пропуст ите следующие два окна: АсПгеХ 8егчег Сотропепш
и Соп/Ъ'т йерепдепаез (просто нажимайте кнопку Мех$);
• в открывшемся затем окне РУогкт^ вы сможете проследить
за созданием списка файлов, необходимых для работы приложе-
ния: процессами поиска файлов проекта; определения объектов
и ссылок; формирования списка УВ-файлов, которые требуются
во время работ ы приложения;
Ргодгаш
[ • .<*'-ОеМеХп1»гпе10о«п!ойс1 5еСар
Л /Г® ^врея^егиу РЙе Оп1у
•:- « "> -$ г’ЛЛ
>^1ДЦи-ЯЛЛЛ1ЦУЦ-ЛЯЛ^ГГ>МВ|>ГлЯДЯЯЯЯЯЯЯЯ1'ЯЯЯЯЯЯ>ЯЯЯЯГЯ>ЯП тяг гл.- . . -Х..уЛ. . , ,. --!
•_ _ .. ...
Рис. 50. Окно выбора проск га и опций
Рис. 51. Окно выбора способа создания дистрибутива
- Рю|ес11 5е<им ШмиГ -
X
Есг а Йорру <Изк 1п5^1аво^Ше Уягагб М ЫЛ л! о?
0^ лесе$$агу 615Ь *сг уом.
&тасп зп*е уюиЙ уои Ьке 1о и$е апй лЬа^ Е ?Ье *1орру
»<йге?
Рис. 52. Окно выбора диска
• в следующем окне (рис. 53) приводится список файлов, необ-
ходимых для создания дистрибутива. Чтобы определить, как файл
используется в программе, выделите его и посмотрите на окно
Оерепс1епсу О/. С помощью кнопки Зшшпагу ОеГагк можно уви-
деть, какой объем занимают файлы дистрибутива. Нажми ге кноп-
ку №х( — в последнем диалоговом окне 8ешр \У1~агс1 (рис. 54)
у вас появляется возможность сохранить созданный в этом сеансе
работы шаблон для его дальнейшего использования при созда-
нии дистрибутива этого же или аналогичного проекта. Щелкните
по кнопке 8ате ТетрЫе — раскроется диалоговое окно, в котором
вы можете указать имя и выбрать каталог диска для записи шаб-
лона. Файлу шаблона автоматически присваивается расширение
.8^1. Для того чтобы использовать файл шаблона при повторном
создании дистрибутива, укажите путь к этому файлу в окне выбо-
ра проекта и опций (см. рис. 50);
• нажмите кнопку Г1П1$И — после этого все выбранные файлы
будут упакованы в каталог дистрибутива и записаны на дискет ы.
Петр ]У1гагс1 подскажет вам, когда вставлять в дисковод очеред-
ную пустую дискету;
• на заключительном этапе работы Зегир Шзагс! проинформи-
рует вас об окончании процесса создания дистрибутива (рис. 55).
Р< <*сг1 $е1ир МЛ1аг<П
ТЬе шгагд На$ дебешипед ТоНо^пд Гй$
зЬоЫд Ье $Ырред апд/ог гедв^егед иятИ уоиг
арркайоги
То юсЫе Ое$ $исЬ а$ а КеадМе ог да1а
скк $На’ ДскЗ тма I? уоо до гю* у„агй
д&спЬи&аТй. шкНёскл:
Н1е ОеиЙБ...
5ипипагуОе*ай$...
5У51ШМ5.УВ?М5а;ай
/ С:\Ргодгат Не5\Оеу51идю\УВ\5ЕТиРК1Т\К1ТРП
СДРгодгат Е|1е$\Оеу51идю^В\5ЕТиРКП\К1ТН1
>/ СДРгодгат Р|1е5\Оеу51идю\УВ\5ЕТиРК1Т\К1ТП1
у< С ДРгодгагп Н1е$\Оеу51:идю\7В\5ЕТиРК1Т\К1ТЯ1
ОерепЗепсуОГ:
м$иа1Гв-агйсЯ&гйкпе
Сапсе!
МИМММ4МММ44*)*Ч«4ММ40Н44М««^
ИИМШС1ЖШШЙН*)*
<В.аск
.»<»
Рис, 53. Окно со списком файлов для создания дистрибу гива
- РгсдесН 5е(|ф АА/иам! - Рт1$Ье<Р
.....* * ~
ТЬе 5е^ф х^загд б Ьп1$^д со^сйпд «пЬэггпаГюР1
5<&уе№ И^оппаиЬп !п а 1етркйе 1Г уоил^$Ь.
ТОО'зап ц&нп? еетр^е *Ье пех1 Йгё уои гмп
:Шагд^.<Ы5ргд|есН . ' ♦?’ 'у. <
5аув Тетр1а{:е...
То ЬьЙд ^оиг ргодгат ог дерепдепсу ГЙе, рге$5
Ро$Ы
>
♦
Сапсе!
ПГ1ИИ1 1*П Г —.....ПГ11Г1П1Г~ ЦЦ..........
Рис. 54. Последнее диалоговое окно 8е1ир ФУ&агд
|Ье ЗеЬир МЛзагй Ьа$ ЙпюЬес! сгеайпд уоуг
$е^цр ргодгат апд/ог <3ерепс!епсу й!е.
Г* |^с поЬзИо’А’ 1Н5д|а1эд1П ^НеКЯиге.
А$ а рпзсж|Ш^ ^ап-Же й ^пЬАсп тесйа ^ог
чги$е$«
№шМшйШЛжЛади11И1*((* *й Гм »«№
Рис. 55. Информационное окно 8еШр \У1/аг<1
Убедитесь, что дискеты с дистрибутивом не содержат виру-
сов. проведите тестирование приложения на компьютерах с раз-
ной конфигурацией и уст раните возможные ошибки. После это-
го приложение будет готово к изготовлению копий и распрост-
ранению.
5.2. Разработка программного
комплекса контроля знаний
Рассмотрим пример разработки в среде УВ 5.0 более сложно-
го и объемного ДУ1пдо\У8-приложения.
5.2.1. Постановка задачи
Требуется разработать комплекс программ (назовем его
р1е$1), состоящий из программ, которые обеспечивают быст-
рую и эффективную подготовку контрольных заданий (вопро-
сов или задач) преподавателем и контроль за правильностью
решения этих заданий обучаемым. Комплекс программ должен
быть универсальным в использовании при изучении различ-
ных дисциплин и адаптированным к уровню непрофессиональ-
ного пользователя.
Во время проведения контроля знаний (для определенности
отведем на это 10 мин.) обучаемому предлагаются 5 вопросов,
задаваемых по возраст ающей степени сложности. От ветом на
поставленный вопрос может быть либо указание номера (вари-
анта) из перечисленных ответов, либо запись правильного отве-
та. После ответа на очередной поставленный вопрос обучаемый
должен увидеть результат — правильно или неправильно выб-
ран (введен) ответ. Результат контроля может быть оценен по
пятибалльной шкале:
• пять правильных ответов — оценка 5;
• четыре правильных ответа — оценка 4;
• три правильных ответа оценка 3;
• два и менее правильных ответа — оценка 2.
Выполнение контрольной работы должно завершаться ав] о-
матической печатью ее результатов на сетевом принт ере с указа-
нием фамилии обучаемого и полученной им оценки.
5.2.2. Создание стартовой формы
приложения для подготовки контрольных
заданий
Стартовая форма приложения Кесо1х1-Са11 для подготовки
контрольных заданий с указанием имен, которые присвоены раз-
мещенным на ней объект ам, показана на рис. 56.
Стартовая форма состоит из трех панелей:
• в верхней части расположена панель для ввода имени фай-
ла, в который будут записываться (из которого будут вызывать-
ся для исправления) вопросы контрольной работы:
• в средней части (панель записи-редак тирования) располо-
жены два табло (заключенные в рамки):
♦ табло ввода номера (ввод номера вопроса поле Воп-
рос №. подтверждение номера с помощью переключателя
«№ введен» и запись вопроса в файл с помощью кнопки За-
пись);
♦ табло ввода текста (ввод вопроса — поле Вопрос'., ввод воз-
можных вариантов ответов — поле Ответы:, ввод номера
правильно] о ответа из приведенных в поле Ответы: вариан-
тов или текста ответа, если в поле ответов нет вариантов —
поле Правильный ответ:);
Еогт!
ЬсГЧ' 1
1ЫТехН
ор12
сшйХар
ТлпеЗ
Ш1Яу2
1ЫТех12
орЖ.
ст Оу г
Рис. 56. Стартовая форма приложения Кесог<1-Са11
1ЫУ1
€х11еху!
1Ы01
ШТехо!
1ЫКро1
Ь±№ро1
1ЫУ2
шТсху2
1ЫО2
ЫТехоЗ
1Ы№ро2
ШКроЗ
• в нижней части (панель просмотра) расположены два табло
(заключенные в рамки):
♦ табло ввода номера (ввод номера вопроса поле Вопрос №,
вызов вопроса из файла для редактирования с помощью пе-
реключателя «Редактор», вызов вопроса из файла для про-
смотра с помощью кнопки Вызов);
♦ табло ввода текста (просмотр вопроса поле Вопрос:. про-
смотр возможных вариантов ответов поле Ответы:, про-
смотр номера правильного ответа из приведенных в поле От-
веты: вариантов или текста ответа, если в поле ответов нет
вариантов — поле Правильный ответ).
Основные свойства стартовой формы (Еогп11) приведены в
приложении 9 (см. табл. 1).
Имена объектов в форме начинаются с сокращенного назва-
ния объекта, за которым следует смысловая мнемоническая часть.
Поля меток (ЬаЬе! в панели компонентов Сспега!, см. рис. 44):
• 1Ы1Ч1е1 надпись “Имя контрольной работы'’;
• 1ЫТех11 (1ЫТех12) — надпись “Вопрос №”;
• 1Ы VI (1ЫУ2) надпись “Вопрос:”;
• 1ЫО1 (1ЫО2) — надпись “Ответы:";
• 1Ы\’ро1 (1ЬПЧро2) — надпись «Правильный ответ:».
С полями меток (надписей) мы уже встречались при разра-
ботке предыдущего проекта. Свойства полей меток приведены в
приложении 9 (табл. 2 — табл. 10).
Поля редактирования (Тех1Вох в панели компонентов):
• 1х11У1е1 — поле для ввода имени файла с вопросами конт-
рольной работы (составляющая К1е1 — «номер летучки»);
• и/ЛМ — поле для ввода номера вопроса, кото-
рый должен быть записан в файл вопросов контрольной работы
(вызван на редактирование, исправление);
• (хГГехг! (шТехг2) поле для записи вопроса (поле для
просмотра вызванного на редактирование вопроса):
• 1х1Техо1 (шТехо2) — поле для записи возможных вариан-
тов ответов на поставленный вопрос (поле для просмотра выз-
ванных на редак гирование вариантов ответов);
• 1х?Мро1 (1х1.№ро2) поле для записи номера правильного
ответа из перечисленных в поле 1х1Техо1 или текста ответа, если
в поле ответов нет вариантов (поле для просмотра правильного
ответа).
Работа с полями редактирования (текстовыми полями) была
также рассмотрена при разработке предыдущего проекта. Свой-
ства полей редактирования приведены в приложении 9 (табл. 11 —
табл. 19).
Рамки (Ггате в панели компонентов):
• Егате! (РгатеЗ) — рамка, образующая табло ввода номе-
ра в панели записи-редактирования (в панели просмотра):
• Ргате2 (Ргате4) — рамка, образующая табло ввода текста
в панели записи -редакл ирования (в панели просмотра).
Рамки служат для объединения элементов (объектов) в груп-
пы. Для создания рамки нужно выполнить щелчок по элементу
Ьгате в панели компонентов, установить графический курсор в
форме, нажать левую кнопку мыши и, не отпуская ее, передви-
нуть мышь. Положение и размеры рамки в форме могут быть
легко изменены традиционными для \Ушс1о\у8 способами. Если
сначала создать рамку, а затем расположить внутри нее объек-
ты, то переместить эти объекты за пределы рамки нельзя. В этом
случае получается своего рода контейнер, подобно форме, со-
держащей объекты внутри своих границ. Свойства рамок приве-
дены в приложении 9 (табл. 20 табл. 23).
Линии {Ыпе в панели компонентов):
Ьше1, 1лпе2 — линии, разделяющие панели в форме.
Выполни ге щелчок по элементу Ыпе в панели компонентов,
установите графический курсор в форме, нажмите левую кнопку
мыши и, не отпуская ее, передвиньте мышь — в форме появится
линия. Свойства линий приведены в приложении 9 (табл. 24 —
табл. 25).
Переключатели (ОрйопВиНоп в панели компонентов):
• ор12 — переключатель, служащий для подтверждения пра-
вильности ввода номера вопроса, который будет записан в файл;
• ор1К переключатель, служащий для подтверждения пра-
вильности ввода номера вопроса, вызываемою на редактирова-
ние из файла.
Для создания переключателя нужно выполнить щелчок по
элементу ОрНопВиНоп в панели компонентов, установить графи-
ческий курсор в рамке, нажать левую кнопку мыши и, не отпус-
кая ее, передвинуть мышь. Свойства переключателей приведены
в приложении 9 (табл. 26 — табл. 27).
Командные кнопки (Сотгпап^ВиНоп в панели компонентов):
• стбХар — кнопка записи вопроса в файл;
• стбУуг кнопка вызова вопроса из файла для просмот ра.
Выполните щелчок по элементу Соттапс1ВиЦоп в панели ком-
понентов, установите графический курсор в рамке, нажмите ле-
вую кнопку мыши и, не отпуская ее, передвиньте мышь — в
рамке появится кнопка. Свойства кнопок приведены в приложе-
нии 9 (табл. 28 — табл. 29).
Элементы управления мультимедиа (ММСогПго1 в панели
компонентов):
• ММСопй'оП воспроизведение звукового сигнала при за-
писи вопроса в файл;
• ММСогНго12 — воспроизведение звукового сш пала при
вызове вопроса из файла для редактирования или просмотра:
• ММСоп1го13 — воспроизведение звукового сигнала при от-
крытии формы;
• ММСоп1го14 — воспроизведение звукового сигнала при зак-
рытии формы;
• ММСоп1го15 воспроизведение звукового сигнала при
ошибочных действиях пользователя (например, не введено имя
кон грольной работы):
• ММСоп1то16 воспроизведение звукового сш нала при за-
писи вопроса в файл без подтверждения правильности его номе-
ра. Для того чтобы поместить элемент управления мульт имедиа
в форму, выполните двойной щелчок по элементу ММСопТго! в
панели управления.
Чтобы объект ММСопТго! не был виден на стартовой форме
во время работы приложения, найдите в окне Ргорегиех ИИО УВ
5.0 свойство У1мЫе и установите для него значение Раке.
В окне РгорегИез укажите на свойство СиМот и нажмите на
кнопку с многоточием откроется диалоговое окно Ргорепу
Ра$е$ (рис. 57). В поле ОехчсеТуре введите тип устройства, при
помощи которого будет воспроизводиться звуковой сигнал. Для
воспроизведения .ууаг'-файлов таким устройством должно быть
X
|слл1гсй | РгсЪлге ]
• *
п Г. 11111 и М1НМ1М >11
ОК
Отмена
При^гнйть
юмймомммомАОД
Рис. 57. Вкладка Сенега! диалогового окна Ргорепу Рауез
АУауеАисНо (для воспроизведения .шкЬфайлов — устройст во
8едиепсег, для воспроизведения .ауьфайлов — устройство
АУТУкЗео). С помощью кнопки с многоточием в поле ГИеНате
укажите путь к каталогу на диске, в котором размещен понра-
вившийся вам .5Уау-файл.
Откройте вкладку СопТгок в окне РгореНу Ра%е$ и уберите все
флажки в полях напротив кнопок управления, за исключением
полей Р1ауЕпаЫе(1 и Р1ауУшЫе напротив кнопки Воспроизведе-
ние (рис. 58).
Рюрейу Радез
Сепега! Согйгок I Рк^ите |
. ИО^^ЕпэЫЙ.
1я и ’’ I * **»**вж**|ЛЛ^
Ри^паЬЫ
I РгеМЫЫе
макшмм
Г Мех1ЕпаЪ1ед
3
"I
| Г Аесс сЖпаЫей
-я —
Г ВесокШ^е
\Л Г
Справка
-1
Отмена
ОК
КИШЙИЙIIIIII И«< I
1 Г Нес1ЕпаЫй
Е|есМ$|Ые
РаизеЕпаЫео
| ‘Г РаизеУйЫе
Рис. 58. Вкладка СогДгоЬ диалогового окна РгореНу Ра&еь
Основные свойства элементов управления мультимедиа при-
ведены в приложении 9 (табл. 30 — табл. 35).
Если вы внимательно посмотрите на стартовую форму Рогт1
(см. рис. 56), то, кроме перечисленных выше объектов, вверху
формы увидите две надписи: «Помощь» и «Выход». Это раскры-
вающееся меню (рис. 59).
Рис. 59. Раскрывающееся меню
Для создания меню нужно выполнить следующие действия.
1. К основной форме проекта Рот! добавить форму/гтНе1р1пМ:
• в меню команд ИИО УВ 5.0 выберите команд* Рго]есС а в
раскрывшемся затем списке команду Айй Рогт. В диалоговом
окне Аск! Рот укажите на пикто> рамму Гопи (вкладка КеуП и
нажмите кнопку Открыть новая форма (Рот2) будет добав-
лена в список форм основного проекта (обрати ге внимание на
изменения, произошедшие в окне проекта Рго}ес1)\
• в поле свойства Мате (в окне РгореШех) вмссз о Рогт2 запи-
шите /гтНе1р!п8Ц а в поле свойства Сарпоп — «Порядок работы
с программой Весогй-СаП». Основные свойства формы
/гтНе1р1пз1 приведены в приложении 9 (табл. 36);
• поместите в форму (/ггпНе1р1пз? ) объект ТехТВох, ему будет
присвоено имя Тех11. Установите свойства этого объекта по таб-
лице. которая приведена в приложении 9 (табл. 37). В поле свой-
ства Тех1 запишите текст инструкции (рис. 60).
2. К основной форме проекта Рогт! добавить форму
/гт!1е1рА ЬоиН
• в меню команд выберите команду Рго|е<Л, а затем команду
Айй Готт. В диалоговом окне Аск! Рогт укажи ге на пиктограмму
Гогш (вкладка Ме^г) и нажмите кнопку Открыть новая форма
(Гогт2) будет добавлена в список форм основного проекта;
• в поле свойства Мате (в окне РгорегМех) вместо Рогт2 запи-
шите /гт!!е!рАЬои1, а в поле свойства Сарйоп — «АЬоШ КесогсР
СаИ», Основные свойст ва формы /тНе!р А Ьош приведены в при-
ложении 9 (табл. 38):
• разместите в форме {/гтНе1рАЬош} объекты ЬаЬе! и запи-
шите в них информацию об авторе и времени создания проекта,
о защите авторских прав и т.п. Информационное окно проекта
показано на рис. 61.
3. После того как в проект добавлены формы /гтНе1р!пм и
/гтНе1рАЬош, можно приступить к созданию меню с помощью
редактора Мепи Еййог УВ 5.0:
Программа Кесог4-Са11 предназначена для подготовки вопросов к
контрольным работам, генерируемым программой ОнезНоп.
ОБЩИЕ ЗАМЕЧАНИЯ
• Для рабозы программы риезНоп необходимо создать 19 записей, каждая
из которых представляет собой вопрос, варианты 01ветов (могут
отсутствовать) и правильный ответ.
• Записи следует группировать но возражающей степени сложности:
1-3 записи - первая группа:
4-6 записи - вторая группа;
7-10 записи - трехья группа;
11-14 записи — че1вертая группа;
15-19 записи - пятая группа.
• ОпейНоп предложи г каждому обучаемому 5 вопросов — по одному из
каждой группы записей. Вопрос в группе выбирается случайным образом.
• При совпадении ответа, выбранного обучаемым, с правильным ответом
в соответствующей записи рейтинг обучаемого повышается на один балл.
А ТЕПЕРЬ ПО СУЩЕСТВУ...
Рабочая область Кесогд-Са11 разделена на три часз и:
- в первой части Вы записываете имя контрольной работы - это позволит
сохранить Ваши записи в каталоге С:\Ье1\<имя> (каталог С;\Ье1 должен
быть создан на диске заранее);
- во второй части последовательно формируются записи: номер вопроса,
вопрос, варианты ответов, правильный ответ. Если Вы не хотите приводить
варианты ответов (например, обучаемый должен решить задачу и сравнить
полученный результат с Вашим ответом в записи), поставьте “пробел” в поле
записи ответов.
Не забудьте проверить. все ли Вы правильно записали, после чего
подтвердите номер вопроса, щелкнув левой клавишей мыши на
переключателе, и смело жмите кнопку "Запись'1;
- в третьей части можно посмотреть, все ли Вы записали, как хотели:
введите номер вопроса и нажмите кнопку Вызов’.
Рис. 60. Инструкция по работе с программой Кесогс1-Са11
• выполните щелчок левой кнопкой мыши по форме РогтР
чтобы убедит ься в том. что форма является выделенным объек-
том:
• в меню команд ИИО УВ 5.0 выберите команду Тоок, а в
раскрывшемся затем списке — команду Мели Еййог. От кроется
диалоговое окно редактора меню, показанное на рис. 62;
• в поле СарИоп редактора меню набери ге «Помощь», в поле
Нате «тпиНе1р», затем нажмите кнопку Команда По-
мощь будет включена в строку меню;
ч АЬшя Весок! С-М1
Кесогй-СаП
(Запись и вызов вопросов для контрольных работ)
'ЛЯ*
М&&18Г о! зеленее (ТесЬп ) Восен!
СоруидН © МоуетЬег. 1997
Х^аггнпд. ТН$ сотрите- ргодгат к рго1ес1е^ Ьу сорупдЫ 1а^ апд
Негпайопа! 1гезЙе§. 1к1аи1Иой2её герюдисГюп о? «йиЪ Ног о! (НЬ
ргодгат, от апу ройюп о! й. тау гезик п $еуеге сМ апд спита!
репа!ие$, агд Ье рго$еси^ ю гИе таитит ех1еп! ро$$<Ые
ипс&г 1ам.
ПЙЖЙГГ»^1™Г1Г|Г1*Т^^ |>Т» ГГГГГ111 Лй»|1111II
Рис. 61. Информационное окно проекта
епи
Са^юп; ||
ОК
......
|Г<1С11ГН1НЛ№1ШНМ<
П СЬескед Р Р М®Ь1е Г МпсЬМий
• в поле СарНоп наберите «&Инструкция». Знак & определяет
клавишу доступа к команде меню, в данном случае это буква И.
В поле Мате наберите «тпиНс1рТп§1», в поле §Ьог1си1 («горя-
чая» клавиша) выберите из раскрывающегося списка |Ог1|+[1].
Нажмите кнопку Стрелка вправо: пункт «&Инструкция» в поле
списка меню сместится вправо, и перед ним появится многото-
чие. С таким смещением пункт «Инструкция» будет появляться в
меню «Помощь». Нажмите кнопку Кех<;
• в поле Сарйоп наберите «&О программе», в поле №ате —
«тпиНе1рАЬои1», в поле ЗНоПси! выбери те из раскрывающегося
списка |С<Г11+[О], нажмите кнопку Стрелка вправо, а затем
кнопку \ехй
• в поле Сарйоп наберите «Выход», в поле Мате «тпиЕхп».
Нажмите кнопку Стрелка влево: пункт «Выход» в поле списка
меню сместится влево, и многоточие перед ним пропадет. Ко-
манда «Выход» будет включена в строку меню;
• в результате описанных действий редактор меню примет фор-
му, показанную на рис. 63. Нажмите кнопку ОК — строка меню
кснГн11
НфСопГехСЮ:
Нех(:
|*|1ГГ|>1Г>1Г|М»Г»М<1И1М
1п5еЛ
Ое1е&
Помощь
1 —^Инструкция
: —Сопрограмме
Выход
СЫЯ
СЫ+О
Рис. 63. Окно редактора пос ле создания меню
появится в форме проекта. Запустите проект на решение и попро-
буйте поработать с командами меню. Меню должно раскрываться,
команды без кода обработки событий выполняться нс будут.
Для оформления глобальных (общих, доступных всем объек-
там приложения) переменных, которые понадобятся при напи-
сании кода (текста программы), необходимо к проекту добавить
модуль формы, в котором эти переменные будут объявлены.
Добавление к проекту модуля формы осуществляется следу-
ющим образом:
• в меню команд ИИО УВ 5.0 выберите команду Рго)ес1:
• в раскрывшемся списке выполните команду Айй Мойи1е.
Модуль (Мос1и1е1) будет добавлен в список модулей проекта
(обратите внимание на изменения, произошедшие в окне проек-
та Ргсуес!).
5.2.3. Код проекта КесогсЬСаП
При написании кода обработки событий в проекте Кесогд-
Са11 использованы следующие обозначения:
• 2 — запись типа уор, состоящая из трех полей, в которых
размещены символьные строки для хранения: у — вопроса, о —
ответов, п — правильного ответа:
• ПУ2 переменная для хранения номера вопроса (записи) в
файле прямого доступа;
• пуу — переменная, в которой содержится номер вопроса (за-
писи), вызываемого из файла прямого доступа, для просмотра
или редактирования.
Текст программы Кесогй-СаП приведен в приложении 10.
5.2.4. Создание стартовой формы
приложения для контроля знаний
Стартовая форма приложения ОиезНоп для контроля знаний
обучаемых с указанием имен, которые присвоены размешенным
на ней объектам, показана на рис. 64.
Стартовая форма состоит из грех частей:
• в верхней части расположены окно для ввода фамилии обу-
чаемого и окно для ввода имени файла, из которого будут вызы-
ваться вопросы контрольной работы;
Копи!
1ЫГят
ЬОЕат
]ЫМ1е(
Егат-*4
1ЫУ2
1ЬШу2
Т1тег1
1ЪЮ2
БТате2
1Ы11ше
Вопрет. И*
Л
; 600
броня
12 3 4
шМеГ
ШТ₽ху2
1х(Техв2
1х(Д’уой
оргХуосЗ
1ЬНЧахпеТхте .
ПЯРосЬкахка р
Ггаше!
“I стам
стйТ
спНО
Лпмо#». з;.?
Рис. 64. Стартовая форма приложения ОиезСюп
• в средней части формы находятся окно вопроса и окне ва-
риантов ответов. Порядковый номер очередного вопроса будет
отображаться в окне, расположенном слева от окна вопроса;
• в нижней част и расположены два табло (заключенные в рамки):
♦ табло для вывода времени (в секундах), которое осталось
для ответа на поставленные вопросы (всего будет задано пят ь
вопросов);
♦ табло для ввода ответа, состоящее из блока кнопок с цифра-
ми и знаками пунктуации, окна для ввода текстовой инфор-
мации и переключателя «Ввод».
Основные свойства стартовой формы (Рогт!) приведены в
приложении 11 (табл. 1).
Имена объектов в форме начинаю гея с сокращенного назва-
ния объекта, за которым следует смысловая мнемоническая часть.
Поля меток (ЬаЬеГ):
• 1ЫРат — надпись «Введите фамилию:»;
• — надпись «Контрольная работа:»;
• 1ЫУ2 надпись «Вопрос №»;
• 1Ы№?2 — надпись без названия для вывода номера вопроса;
• 1ЫО2 надпись «Варианты ответов:»;
• 1ЫТ1те надпись «600»;
• 1Ы№атеПте — надпись «Время»;
• 1ЫРосккавка — надпись без названия для вывода подсказки
«Нажмите кнопку с номером ответа» или «Введите ответ».
Свойства полей меток приведены в приложении 11 (табл. 2 —
табл. 9).
Поля редактирования (ТехгВох):
• 1х1Рат — ноле для ввода фамилии обучаемого;
• 1x1 Ме1 поле для ввода имени файла с вопросами конт-
рольной работы:
• 1x1 Техх2 — поле для просмотра вопроса;
• м Техо2 — поле для просмотра возможных вариантов от-
ветов на поставленный вопрос;
• 1x1 У\>ос1 поле для записи ответа.
Свойства полей редактирования приведены в приложении 11
(табл. 10 — табл. 14).
Рамки (Ргате)\
• Ргате! — рамка, образующая табло ввода ответа;
• Ргате2 — рамка, образующая табло вывода времени;
• Ргате4 — рамка, объединяющая среднюю и нижнюю части
формы.
Свойства рамок приведены в приложении 11 (табл. 15 — табл.
17).
Переключатель (ОрИопВиНоп):
• орЛ’уос! — переключатель, служащий для ввода правиль-
ного ответа.
Свойства переключателя ор1Ууо<1 приведены в приложении
11 (табл. 18).
Командные кнопки (Соттапс1ВиПоп)\
• спкП — стс19, стдО — кнопки с цифрами для набора ответа;
• стсГГ кнопка с «точкой»;
• стс1М кнопка со знаком «минус».
Свойства кнопок (на примере свойств для кнопки 1) приведе-
ны в приложении 11 (табл. 19).
Элементы управления мультимедиа (ММСопТго!) показаны
в форме на рис. 64, но не обозначены. Поскольку эти элементы
не видны во время работы приложения, вы можете расположить
их в форме по своему усмот рению. Имена и назначение этих эле-
ментов:
• ММСоп1го11 — воспроизведение звукового сигнала при от-
крытии формы;
• ММСоп1го12 — воспроизведение звукового сигнала об окон-
чании времени, отведенного для от ветов на поставленные вопросы:
• ММСоп!го13 — воспроизведение звукового сигнала при зак-
рытии формы;
• ММСопГго14 воспроизведение звукового сигнала об
ошибке во время работы обучаемого с приложением (например,
не введена фамилия).
Таймер (Тттег в панели компонентов):
• Птег! — для отсчета времени, ост авшегося на выполнение
контрольной работы (Тлтег не виден на форме во время выпол-
нения проекта).
Для того чтобы поместить элемент «Таймер» в форму, выпол-
ните двойной щелчок по элементу Тлтег в панели управления.
Свойства таймера приведены в приложении 11 (табл. 20).
Кроме перечисленных выше объектов вверху формы Еогт1
(см. рис. 64) находится раскрывающееся меню «Помощь» (рис. 65).
Инсэд&ций СШ+1
О программе СШ*О
Рис. 65. Раскрывающееся меню
Для создания меню предварительно выполните следующие
действия:
• к основной форме проекта Еогт1 добавьте форму /гтНе1р1пх1
(см. подразд. 3.4.2). В поле свойства Сарйоп для этой формы запи-
шите: «Порядок работы с программой Риезйоп». Основные свой-
ства формы /пп11е1р1пМ приведены в приложении 11 (табл. 21);
• поместите в форму {/гтНе1р1пЬ1) объект ТехГВох, ему будет
присвоено имя Тех11. Установите свойства этого объекта по таб-
лице, которая приведена в приложении 11 (табл. 22). В поле свой-
ства Тех! запишите текст инструкции (рис. 66);
• к основной форме проекта Еогт! добавьте форму /гтИе/р-
АЬоШ (см. подразд. 3.4.2). В поле свойства Сарйоп для этой фор-
мы запишите: «АЬоиТ ОиезНоп». Основные свойства формы
/гтНе1рАЬои1 приведены в приложении 11 (табл. 23);
Программа ОнеьНоп предназначена для контроля знаний обучаемых.
ПОРЯДОК РАБОТЫ
Оие^Ноп предложи! Вам 5 вопросов, выбираемых из заранее
подготовленных преподавателем записей.
Чтобы программа начала работать, напишите свою фамилию (поле в верху
рабочей области) и нажмите клавишу "Егйег".
Для ответа на поставленный вопрос достаточно нажать на кнопку в
наборном поле с номером ответа, который Вы считаете правильным. В
случае, если вариантов ответов нет, введите с помощью кнопок наборного
поля полученный Вами результат в поле ввода, расположенное в
правом нижнем углу рабочей области, и нажмите на переключатель
"Ввод**.
При совпадении ответа, выбранного Вами, с правильным
ответом в соответствующей записи Ваш рейтинг повышается на один
балл.
Помните, что в Вашем распоряжении не так много времени - всего 10
минут!
Рис. 66. Инструкция по работе с программой Рие§иоп
• разместите в форме (/гтНе1рАЬош) объекты ЬаЬе1 и запи-
шите в них информацию об авторе и времени создания проекта,
о защите авторских прав и т.п. Информационное окно проекта
ОиехИоп должно иметь примерно такой же вид, как информаци-
онное окно проекта Кесог&Са11 (см. рис. 61).
После того как в проект добавлены формы /гтНе}р1пм и
/гтНе1рАЬоиЦ можно создать меню с помощью редактора Мепи
Едйог УВ 5.0. Процесс создания меню был подробно рассмот-
рен в подразд. 3.4.2.
Для того чтобы после выполнения контрольной работ ы обу-
чаемый видел полученную им оценку, добавьте к проекту еще
четыре формы:
• /гтМагк.5 опенка «5»;
• /гтМагк4 опенка «4»;
• /гтМагкЗ — оценка «3»;
• /гтМагк2 — оценка «2».
Внешний вид одной из этих форм показан на рис. 67.
В форме /гтМагк5 размещены:
• ЬаЬе11 — поле метки, содержащее надпись «Ваша оценка»;
• ЬаЪе12 поле метки, содержащее надпись «5»;
Рис. 67. Форма ГгтНе1рМагк5
• ММСоп1го11 элемент управления мультимедиа для вос-
произведения звукового сигнала, свидетельствующего об отлич-
ной оценке, полученной в результате проведенного контроля.
Основные свойства формы/гтНе1рМагк5, элементов ЬаЬеИ и
ЬаЪе12 приведены в приложении 11 (табл. 24 — табл. 26).
Для оформления глобальных (общих, доступных всем объек-
там приложения) переменных, которые понадобятся при напи-
сании кода (текста программы), необходимо к проекту добавит ь
модуль формы, в котором эти переменные будут объявлены.
Процесс добавления модуля к форме проекта был рассмотрен в
подразд. 3.4.2.
5.2.5. Код проекта ОиееНоп
При написании кода обработки событий в проекте ОиезИоп
использованы следующие обозначения:
• 2 — запись типа уор, состоящая из трех полей, в которых
размещены символьные строки для хранения: у — вопроса, о
ответов, п — правильного ответа;
• п§% — переменная, в которой хранится номер вопроса (за-
писи), выбираемый случайным образом из очередной группы
вопросов;
• $Ь счетчик баллов (правильных ответов);
• бу — счетчик количества заданных вопросов;
• по номер (цифра) одного из вариантов ответов, который
выбирает обучаемый при ответе на поставленный вопрос;
9—987
• про — номер правильного ответ а (строка правильного от-
вета), записанного в файле с вопросами;
• Рат — переменная для хранения фамилии обучаемого;
• 1 — переменная для хранения времени (в секундах);
• пеЮ1у — фла] состояния переключателя «Ввод».
В программе Риезйоп используется обшая процедура Эой.
Для создания общей процедуры в меню команд ИИО УВ 5.0
выберите команду Тоок, а в раскрывшемся затем списке — ко-
манду АдД Ргосейиге. В поле 1Уате диалогового окна АсШ РгосеАиге
(рис. 68) запишите имя процедуры, после чего нажми ге кнопку
ОК. Общая процедура с указанным вами именем будет добавле-
на к кодам проекта.
Текст программы риезНоп приведен в приложении 12.
Туре
5иЬ
Г Еипссюп
Г* АН Ьоса! уапаЫе* а$
Шатле' 13о*
Айй Ргосес1иг«
РгорегЬу
-
Рис. 68. Окно добавления общей процедуры
ПРИЛОЖЕНИЯ
1. Коды сообщений об ошибках
в программе на языке
Турбо Паскаль
Ниже приводятся коды и соответствующие им сообщения об основ-
ных ошибках, которые можно обнаружить на этапах компиляции и
выполнения программы на Паскале [18].
Сообшекшя об ошибках компиляции
I ОШ оГшелюгу (Выход за пределы памяти). Данная ошибка появ 1я-
стся, если компиля тор израсходовал всю доступную ему память. Для
решения этой проблемы измените значение области Эешпайоп с
Метогу па О1$к. Разместите в начале программы директиву
удалите из памяти резидентные программы, в использовании кото-
рых пет крайней необходимости. Если ни одна из рекомендаций не
помогает, то, возможно, программа или программный модуль слиш-
ком велики, чтобы компилировать их в таком объеме памяти. В этом
случае программу или программный модуль необходимо разбить на
два или более программных модуля.
2 НспНЯег ехрес€сс1 (Ожидается идентификатор). — В этом месте дол-
жен находиться идентификатор.
3 Цпкпфуп Шепййег (Неизвестный идентификатор). — Этот идентифи-
катор нс был описан.
4 Г>ир11са1е ШепбЯег (Повторение идентифика гора).
5 ЗупСах еггог (Синтаксическая ошибка). — В исходном тексте найден
недопустимый символ Возможно, не заключена в кавычки строко-
вая константа.
6 Еггог 1п геа! соп^апС (Ошибка в константе вещественного типа). -
Ошибка в синтаксисе константы вещественного типа.
7 Еггог ш тк^сг соп$(ап< (Ошибка в константе целого типа). — Ошиб-
ка в синтаксисе константы целого т ипа (учтите, что после чисел, пре-
вышающих диапазон представления целых чисел, должны ставиться
точка и нуль, например: 12345678912.0).
8 ЗСппд соп$1ап1 ехсеейз 1ше (Строковая константа превышает разме-
ры строки). Вероятно, после строковой конс тан 1 ы от су гствует сим-
вол кавычка.
9 Тоо тапу пезСей 111е8 (Слишком много вложенных файлов). - - Компи-
лятор допускает не более 15 вложенных исходных файлов и не более
4 включаемых файлов.
10 Спехрес1е<1 спй оГН1е (Неожиданный конец файла). Данное сооб-
щение может появиться по одной из следующих причин:
> в программе, вероятнее всего, неодинаковое количество операто-
ров ВЕСИМ и ЕМЕ):
> включаемый файл заканчивается в середине раздела операторов
(каждый раздел операторов должен целиком помещаться в одном
файле);
> в файле нс закрыты скобки комментария.
11 Етс (оо 1оп$ (Строка слишком длинная). Максимальная длина
строки нс может превышать 127 символов.
12 Туре МепНПег ехрес^ей (Ожидается идентификатор типа). В опре-
деленном месте не указан тип идентификатора.
13 Тоо тапу ореп 1Пе8 (Слишком много открытых файлов). В файле
СОМЕЮ.8У8 не установлен параметр Е1ЕЕ$=М, где М представля -
ет собой целое число без знака. Установите в файле СО1МЕЮ.8У8
значение параметра Е1ЬЕ8=Ь’>= 30.
14 1пуа!й1 П1е пате (Недопустимое имя файла). Имя файла неверно
или указан несуществующий путь.
15 ЕПе по! Гоипй (Файл нс найден). - Файл не найден ни в одном из
каталогов, предназначенных для храпения файлов данного типа.
16 Бкк ГиП (Диск заполнен). Удалите с диска ненужные файлы (на-
пример, файлы с расширением .ВАК или .ТМР) или попробуйте со-
хранить текст программы на другом диске, который имеет достаточ-
ный объем свободной памят и.
17 1пуя1к1 сошрйег (йгеейте (11едопустимая директива компилятора). —
Неверная буква в директиве компилятора, один из параметров дирек-
тивы компилятора неверный или вы пользуетесь глобальной директи-
вой компилятора, когда компиляция тела нрофаммы уже началась.
18 Тоо тапу П1е8 (Слишком много файлов). — В компиляции програм-
мы или программного модуля участвует слишком много файлов.
Попытайтесь не использовать так много файлов, например, объеди-
няя включаемые файлы.
19 ЕпДеПпсй 1уре т рот1ег ЛеНпШоп (Неопределенный тип в описании
указателя). — Вы пытаетесь объяви гь типизированный указатель,
связанный с ранее необъявленным типом данных.
20 УапаЫе Мепййег ехрес!еЛ (Ожидается идентификатор переменной). —
В указанном курсором месте ожидается идент ификатор переменной.
21 Еггог т 1уре (Ошибка в определении типа). — Определение типа не
может начинаться с этого символа.
22 81гис€игс 1оо 1агце (Слишком длинная ст рук гура). Максимально
допустимый размер любого структурированного типа 65520 байт.
23 8е1 Базе 1уре оГ гап<*е (Количество элементов в множестве превыша-
ет допустимое значение). Ба ювый тин множества должен пред-
ставлять собой перечисляемый । ип данных не более чем с 256 значе-
ниями.
24 ЕПе сотропеп!з тау по! Ье П1ез ог оБ|ес<з (Компоненты файла нс
могут быть файлами или объектами). —Тип компонентов файла не
может быть объектным типом, файловым ч ипом или любым другим
структурированным типом, содержащим компоненты типа файла или
объекта.
25 1пуа11(1 з(ппЕ 1еп^1Ь (Неверная длина строки). - Длина описывае-
мой строки должна находиться в пределах от I до 255.
26 Туре ш1зта<сЬ (Несоответствие типов). — Причины, вызвавшие
появление данного сообщения, могут быть следующими:
> несовместимы типы переменной и выражения в операторе при-
сваивания;
> несовместимы типы фактического и формально! о параметров в
обращении к процедуре или функции;
> тип выражения несовместим с типом индекса при индексирова-
нии массива;
> несовместимы типы операндов в выражении.
27ГптаБй зиЬгап&е Базе 1уре ( Неправильный базовый тип для интервала).
28 Ьожт Бомий ^гса(ег 1Бап мррег Боппе! (I !ижняя граница превышает
верхнюю). При описании интервального типа данных вы объявили
нижнюю границу7 диапазона больше верхней.
29 ОпНпа! 1уреехрес1сй (Ожидается перечисляемый тип). — Веществен-
ные, строковые, структурные и ссылочные типы в данном случае не
допускаются.
30 ХпСс^ег сопз1ап! ехресСей (Ожидается константа целого типа).
31 Сопз1ап€ ехрес1е<1 (Ожидается константа).
32 ТЩс^ег от геа! сопз{ап< ехресКй (Ожидается константа целого или
вещественного типа).
33 Рот€ег <уре МепйЛег ехрссЩс! (Ожидается идентификатор типа ука-
затель). —Указанный курсором идет ифика гор нс является указате-
лем.
34 1пуа1к1 ГипсНоп гезик Туре (Недопустимый тип результата функ-
ции). — Правильными типами резулы ата функции являются все про-
стые, строковые и ссылочные типы.
35 I.аЬе! ШеппЛег ехрескй (Ожидается идентификатор метки). Об-
наружена ссылка на метку, нс описанную в разделе ЬАВЕЬ.
36 ВЕСПЫ ехресСес! (Ожидается оператор ВЕСПЫ).
37 ЕМ) ехрес1е<1 (Ожидается оператор Е\О).
38 1п1е^сг ехргеззюп ехрес!ед (Ожидается выражение целого типа).
39 Огдша! ехргез&юп ехресГед (Ожидается выражение । (срсчис шемого типа)
40 ВооДеап ехрге$$юп ехресСед (Ожидается выражение логического типа)
41 Орегапд 1урез с!о по! гпа1сЬ орегаЮг (Несоот ветствие типов операн-
ду). Данная операция нс может применяться к операндам этого
типа. Такое сообщение будет вызвано, например, при попытке вы-
полнить следующую операцию: ’9’ В1У ’С\
42 Еггог 1и ехрге$81оп (Ошибка в выражении). — Данный идентифика-
тор не может участвовать в выражении указанным образом. Возмож-
но. вы забыли указать операцию между двумя операндами.
43 П1е^а1 а^ы^птеп! (Запрещенное присваивание). — Это сообщение
может появиться последующим причинам:
> файлам и нетипизированным переменным нельзя присваи-
вать значения;
> идентификатору функции можно присваивать значения толь-
ко внутри раздела операторов данной функции.
44 ЕвеШ кдепНПег ехресСед (Ожидается идентификатор поля). — Дан-
ный идентификатор не соответствует полю предшествующей пере-
менной типа КЕ( ХЖО или ОВД ЕСТ.
45 ОЬ|ес! П1е 1оо 1аг|>е (Объектный файл слишком большой). —Турбо
Паскаль не может компоновать ОВД-файлы размером более чем 64
Кбайта.
46 СпдеПпед ехГегпа! (Не определена внешняя процедура). — Внешняя
процедура или функция не имес! соответствующего определения
Р13ВЫС в объектном файле. Убеди гссь, что вы указали все объект-
ные файлы в директивах {$Ь <имя ОВЗ-файла>|, и проверьте напи-
сание иден тификаторов процедуры или функции в файле .А8М.
47 1птаНд оЬ|сс1 П1е гесогд (Недопустимая запись объектного файла).
Файл .ОВД содержит неверную объектную запись Убедитесь в том,
что данный файл является действительно ОВД-файлом.
48 Соде $е”теп( 1оо 1аг^е (Сегмент кода слишком большой). - Макси-
мально допустимый размер кода программы или про раммного мо-
дуля равен 65520 байтам. Разбейте программу или программный
модуль на несколько частей.
49 Ва(а йю 1аг^е (Сегмент данных слишком большой). Мак-
симальный размер сегмента данных программы равен 65520 байтам,
включая данные, описываемые используемыми программными мо-
дулями. Если нужно большее количество глобальных данных, опи-
шите большие структуры с помощью указателей и выделяйте для них
память динамически с помощью процедуры
50 ВО ехрсс!ед (Ожидается оператор ЕЮ).
51 1пуа11(1 РЫВЫС деНпШоп (Недопустимое определение РОВЫС). —
Появление этого сообщения возможно по следующим причинам:
> данный идентификатор получил тип РОВЫС с помощью соот-
ветствующей директивы языка Ассемблер, но не соответствует
описанию ЕХТЕКХАЕ в программе или программном модуле;
> две или более директивы РЁ ВИС на языке Ассемблер определя-
ют один и тог же идентификатор:
> ОВД-файл определяет идентификатор РНВЫС вне сегмента
СООЕ.
52 1пуа11й ЕХТКХ ДеЛпШоп (Неправильное определение ЕХ КХ).
Появление этого сообщения возможно по следующим причинам:
> из Ассемблера была осуществлена ссылка с помощью директивы
ЕХТКХ на идет ификатор. который не был описан в тексте програм-
мы на Паскале;
> идентификатор обозначает абсолютную переменную;
> идентификатор обозначает процедуру или функцию г ина IX-
ЫХЕ.
53 Тоо тапу ЕХТКХ ЛеЛпШоп (Слишком много определений типа
ЕХТКХ). —Турбо Паскаль не может обрабатывать файлы .ОВЗ при
более чем 256 определениях ЕХТКХ
54 ОЕ ехресТей (Ожидается оператор ОЕ).
551ХТЕКГАСЕ ехреНес! (Ожидается оператор 1ХТЕКЕАСЕ).
56 1п\а1Ш ге1оса!аЫе геГегспсе (Недопустимая перемещаемая ссылка). —
Появление этого сообщения возможно по следующим причинам:
> ОВД-файл содержит данные и перемещаемые ссылки в сегментах,
отличных от СОБЕ, например, при попы । ке описать инициализиро-
ванные переменные в сегмен ге О АТ А;
> ОВТфайл содержит ссылки с размерами в байтах на перемещае-
мые символы. Такая ошибка происходит в случае использования опе-
раторов Н1СН и Е)О\УХ с перемещаемыми символами или тогда,
когда вы ссылаетесь в директивах О В на перемещаемые символы;
> операнд ссылается на перемещаемый символ, который не был оп-
ределен в сегментах СООЕ или БАТА:
> операнд ссылается на процедуру ЕХТКХ или функцию ЕХТКХ
со смещением, например С А ЕЕ 8оггРгос+8.
57 ТНЕ\ ехресГей (Ожидается оператор IН ЕХ).
58 ТО ог ПОХУХТО ехрес*е(1 (Ожидается зарезервированное слово ТО
или ЕЮ\УХ ГО).
59 ЕпдеЛпес! Гогиагй (Неопределенное опережающее описание). —
Появление этого сообщения возможно по следующим причинам:
> была описана процедура или функция в интерфейсной секции про-
граммного модуля, но их определение отсутствует в секции реализации;
> процедуры или функции были описаны с помощью опережаю-
щего описания, но их определение не найдено.
61 I ну а! 1(11уреса§1 (Недопустимое преобразование 1 инов). — Появле-
ние этого сообщения возможно по следующим причинам:
> размер переменной и тип результата отличаю тся друг от друга;
> вы пытаетесь осуществит ь приведение типа выражения, когда раз-
решается только ссылка па переменную, процедуру или функцию.
62 Оптмоп Ьу гего (Деление нгг нуль). Предшествующая операция
пытается выполнить деление на нуль.
63 1та1М Л1е <уре (Недопустимый тип файлов). Данный файловый
тип не обслуживается процедурой обработки файлов. Например, про-
цедура Исай! л используется для типизированно! о файла или проце-
дура 8еек — для текстового файла
64 Саппо! Кеай ог ХУгйе тапаЫе$ оГ СЬк Ь ре (11ет возможности считать
или записать переменные данного типа). — Эта ошибка может по-
явиться из-за попытки ввести или вывести переменную несоответству-
ющего типа:
> процедуры Реаб и КсабЬп могут счи гывать переменные символь-
ного, целого, вещественного и строкового типов;
г процедуры \Уп1с и ХУгйеЕп могут выводить переменные символь-
ного, целого, действительного, булевого и строкового типов.
65 РотГег гапаЫе ехрес1ей (Ожидается переменная типа указатель).
11редыдущая переменная должна иметь тип указатель.
66 тапаЫс ехрссСей (Ожидается строковая переменная). Пред-
шествующая переменная должна иметь строковый 1 ип.
67 81пп^ ехрге$моп ехресГей (Ожидается выражение типа строка). —
Предшествующее выражение должно иметь строковый тин.
68 Слгси1аг шШ геГегепсе (Циклическая зависимость модулей).
69 Ъпй паше ш18та(сЬ (I Тссоответствие имен программных модулей).
Имя программного модуля, найденное в файле .ТРО, не соответс! вует
имени, указанному в онера горе Е18Е8.
70 ЪпИ тегыоп шыпаГсЬ (1^соответствие версий программных моду-
лей). Один или несколько программных модулей, используемых
данной программой, были изменены после их компиляции. Восполь-
зуйтесь командой Сотрйе/Маке (Компиляция/Формирование) или
Сотрйе/Вийс! (Компиляция/Построение) в интегрированной инте-
рактивной среде программирования и параметрами /М или /В
в компиляторе ТРС, ч го позволит автоматически скомпилиро-
вать программные модули, нуждающиеся в перекомпиляции.
71 1)ир11са€е ппй паше (Повторное имя программного модуля). — Имя
этого программного модуля уже указано в операторе П8Е8.
72 Ъпк И1с Гогта! еггог (Ошибка формата файла программного моду-
ля). — ТРЦ-файл является недействительным. Убедитесь, что это лей •
ствительно ТРЕТ-файл соответствующей версии языка.
73 1пф1еп1епШюп ехресСес! (Ожидается оператор 1МРЕЕМЕМА-
I ЮИ). В модуле отсутствует раздел реализации.
74 Соп8Гап1 апс! сазе1уре$ йо по! та(сЬ (Несовпадение типов константы
и оператора СА8Е). — Тип константы опера гора С АЗЕ несовместим
с выражением в операторе варианта.
75 Кесон! гапаЫе ехрес1е<1 (Нужна переменная типа запись). — Пред-
шествующая переменная должна иметь тип запись.
76 Сопз<ап1 ои1 оГ гагще (Константа вне диапазона). Эта ошибка
может появиться по следующим причинам:
> при попытке указать массив с консгантами, нарушающими гра-
ницы;
> при попытке присвоить переменной значение константы, выходя-
щее за диапазон переменной;
> при попытке передать конеганту вне диапазона в качестве пара-
метра процедуре или функции.
77 КИе тапаЫе ехрес№1 (Ожидается файловая переменная) Пред-
шествующая переменная должна иметь файловый тип.
78 Ронйег ехргеччоп ехресСей (Ожидается выражение типа указатель).
Предшествующее выражение должно иметь тип указатель.
791п1е§ег ог геа! ехрге&лоп ехреейч! (Ожидается выражение целого или
вещест венного типа).— Предшествующее выражение должно иметь
тип ГМТЕ6ЕК иди КЕА Е.
80 ЬаЬс! по! иШнп сиггеп! Ыоск (Метка вне пределов текущего бло-
ка). —'Оператор СОТО не может осуществить переход на метку,
находящуюся вне текущего блока.
81 ЬаЬс! а!геас1у Цейпе<1 (Метка уже определена). —Данная метка уже
помечает точку перехода.
82 Ппйейпсй 1аЬе11п ргосез^п" $1а1етеп1 раг< (Неопределенная метка в
предыдущей части оператора).
83 1пуаП(1 @ аг^шпеп! (Недействительный аргумент оператора —
Правильными аргументами являются имена переменных, процедур
или функций.
84 ЕпИ ехрсНес! (Ожидается оператор I11Ч1Т).
85 ехресСей (Ожидается символ
86 ехрес1ес! (Ожидается символ
87 , ехрес1е<1 (Ожидается символ
88 (' ехрес(е<1 (Ожидает ся символ ”(”)•
89 )' ехрес^ей (Ожидается символ ") ’).
90 ’=" ехрес^ед (Ожидается символ *'=”).
91 ’:= ехресГей (Ожидается символ ”:=").
92 ’ ( ог ( ехрес!ей (Ожидается символ ”| или ”(’).
93 "] ог ')' ехресСей (Ожидается символ или ’)’).
94 ехрес^ед (Ожидается символ
95 схрес!ес1 (Ожидается символ ).
96 Тоо тапу тапаЫе$ (Слишком много переменных). Эта ошибка
может появиться по следующим причинам:
> объем памяти, занимаемый всеми описанными в программе или
программном модуле глобальными переменными, не может превы-
шать 64 Кбайт;
> объем памяти, занимаемый описанными в программе или функ-
ции локальными ! геременными, нс может превышать 64 Кбайт.
97 1та(к1 РОК сопГго! уапаЫе (Недопустимая переменная управления
циклом РОВ). — Параметр цикла оператора РОВ должен быть пере-
менной перечисляемого типа.
98 1пТеуег гапаЫе ехресШй (Ожидается переменная целого типа). —
Предшествующая переменная должна иметь целый тип.
10081ппе 1епуЙ1 пп^пшкй (Несовпадение длины строки). —Длина стро-
ковой константы не соответствует количеству элементов символьно-
го массива.
101 1пуа1к1 ог<1епп§ оГ Пекк (Недопустимый порядок полей). — Поля в
константе липа КЕСОКО должны записываться в порядке их описания.
102 солдат ехрссГеЛ (Ожидается константа сорокового типа)
103 I Шеце г ог геа! уапаЫе ехресСес! (Ожидается переменная целого или
вещественного типа). Предшествующая переменная должна иметь
целый или вещественный тип.
104 ОпНпа! тапаЫе схрес!е(1 (Ожидается переменная перечисляемого
типа). — Предшествующая переменная должна иметь перечисляе-
мый тип.
105 1ХТ1№Е еггог (Ошибка в операторе 1ЫЫМЕ). — Оператор < не
допускается в сочетании с перемещаемыми ссылками на перемен-
ные. Такие ссылки всегда имеют размер в слово.
106 СЬагасГег ехргезздоп ехрес1ед (Ожидается выражение символьного
типа).
108 ОусгПои ш агКЬтейс орегаНоп Переполнение при выполнении
математических операций). — Значение результата последней вы-
полненной математической операции превышает допустимые разме-
ры типа Ьоп§1п1 (-2147483648 ... 2147483647). В этом случае реко-
мендуется использовать вещественные типы вместо целочисленных.
1091\о епс1о81п§ ГОК. УУН1ЕЕ ог КЕРЕА1 $1а1етеп( (Не найдены опе-
раторы цикла). — Эта ошибка возникает в том случае, когда стан-
дартные процедуры Вгеак и СопЪпие используются вне операторов
цикла ЕОК, \№Н1ЬЕ или ВЕРЕАТ.
112 СА8Е соп$1апС оп! оГ гап^е (Константа в операторе САБЕ вне диа-
пазона допустимых границ). — Значение целочисленных констан!
оператора САБЕ должно находиться в пределе от -32768 до 32767.
113 Еггог 1п 8(а(етеп1 (Ошибка в операторе). - Символ, на который
указывает курсор, не может быть первым символом в операторе.
117 Таг^сС а(Мге88 по! Гошм! (Указанный адрес не найден). — Команда
ЗеагсЬ/Ппс! Еггог (Компиляция/Поиск ошибки) в интегрированной
интерактивной среде или опция /Е в командной строке компиля 1 ора
не позволяет обнаружить оператор, соответствующий указанному
адресу.
118 1пс1и<1е Ше8 аге по! аПо^ей Неге (В данном месте про!раммы под-
ключение файла невозможно). — Раздел операторов должен целиком
размещаться в одном файле.
120 МЬ ехресСей (Ожидается операт ор 141Ь). — Типизированные кон-
станты или указатели могут инициализироваться только значением
МЬ.
121 1пуа1Ш циаКЛег (Неверный квалификатор). Зга ошибка может
появиться по следующим причинам:
> при попытке индексировать переменную, которая нс является мас-
сивом;
> при попытке указат ь поля в переменной, которая не является
записью;
> при попытке применить оператор л к переменной, которая не
является указателем.
122 !п\ а!к! уапаЫе геГегепсе (Недопустимая ссылка на переменную). -
Предыдущая конструкция удовлетворяет синтаксису ссылки па пере-
менную, по не указывает адрес памяти. Наиболее вероятно, что вызва-
на функция-указатель, но отсутствует ссылка на результат.
123 Тоо тапу 8утЬо18 (Слишком много символов). Программа или
программный модуль описывает более 64 Кбайт символов. Если вы
компилируете программу с помощью дирек гивы {$Э+ }, то попробуй-
те отключить эт у дйрект иву или попытайтесь разбить про] рам му на
несколько модулей.
124 Ма1етеп1 раг< 1оо 1аг^е (Слишком большой раздел операторов). —
Турбо Паскаль ограничивает размер раздела операторов до величи-
ны примерно 24 Кбайта. Если вы обнаружили эту ошибку, поместите
части разделов операторов в одну или несколько процедур. В любом
случае при наличии раздела операторов такого размера не стоил' жа-
леть усилий, чтобы сделать более ясной и понятной структуру своей
программы.
126 ЕНе$ шиМ Ье уаг рагате!ег8 (Файлы должны иметь переменные в
качестве параметров). — Попытка передать процедуре или функции
параметр-значение файлового типа. Укажите ключевое слово УДК
перед переменными.
127 Тоо тапу сопйШопа! 8утЬо18 (Слишком много символов в услов-
ном выражении). Отсутствует место для определения условных
символов. Попы таитесь удалить некоторые идентификаторы или со-
кратить некоторые из ключевых имен компиляции.
128 М18р1асе(1 сопсНпопа! (Нгесйге (Пропущена условная директива). —
Компилятор обнаружил директиву {$ЕЬ$Е} или {$ЕЛМЕ)1Е} без соот-
ветствующих директив {$1ЕОЕЕ}, {51ЕЫОЕЕ} или {51ЕОР1}.
129 ЕЛП1Е ШгесНге пнзыпц (Пропущена дирекл ива Е\Г)1 Е). Исход-
ный файл закончился внутри конструкции условной компиляции. В
исходном файле должно быть равное количество директив {$1Гххх}
и '$ЕМЖ}.
130 Еггог 1п 1П1(1а1 сопсШюпа! ДеГтеа (Ошибка в определениях началь-
ных условных выражений). — Исходные условные идентификаторы,
указанные в опции Орйопз/СотрПсг/Сопбйюпа! Е)еГ1пе$ (Парамет-
ры/Компилятор/Условные определения) или в параметре/О компиля-
тора командной строки, являются недопустимыми.
131 Неайег (1ое8 по! шаСсЬ ргетвоиз (кНшпоп (Заголовок не соответ-
ствует предыдущему определению). Эта ошибка может появиться
по следующим причинам:
> заголовок процедуры или функции, указанный в интерфейсной
секции, нс соответствует заголовку исполняемой части процедуры
или функции;
> заголовок процедуры или функции, указанный с помощью опере-
жающего описания ЕОВЛУ АВЕ), не соответствует заголовку найден-
ной одноименной процедуры или функции
133 Саппо! ега1иа1е 1Ь18 ехргс88юп (Невозможно вычислить данное вы-
ражение). В выражении-константе или в отладочном выражении
используются неподдерживаемые средства, например, в описании
константы используется функция или в отладочном выражении
вызывается определенная пользователем функция.
137 §1гис!игес1 уапаЫе аге по! аПонес! Неге (В данном месте использова-
ние структурной переменной нс допускается). — Предпринята попыт-
ка выполнения над сгрук турной переменной неподдерживаемой опе-
рации, например попытка перемножить две записи.
140 1пуа!1(1 ПоаНп^-рот! орегаНоп Недопустимая операция с веще-
ственным числом). — При операции с двумя действительными значе-
ниями было получено переполнение или деление на нуль.
142 Ргосейиге ог Еипсйоп уапаЫе ехресГес! (Ожидается процедура или
функция). В этом контексте оператор получения адреса @ может
использоваться только с переменной-процедурой или функцией.
143 1иуа1к1 ргосейше ог Гипсйоп геГегспсе (Недопустимый указатель на
процедуру или функцию).—Эта ошибка может появиться но следую-
щим причинам:
г вы пытались вызвать процедуру в выражении;
> если конкретную реализацию процедуры или функции нужно
присвоить переменной -процедуре, го она должна компилироваться
с использованием ключа {$Е +} и не может описываться с помощью
ключевых слов 1ХЫКЕ или Ш ГЕКЬШРТ.
147 ОЬ]ес€ 1уре ехресГед (Ожидается объектный тип). — Идентифика-
тор не определяет объектный тип или данный тип упущен.
148 Ьоса! оЬ]ес! <уре$по! аПоотес! (Локальные объектные типы не ра фс-
шены). — Объекгпыетипы могут быть определены только в глобаль-
ном блоке про1 раммы или модуля. Объявление типа объекта внутри
процедур (функций) и модулей не допускается.
149 УИГГС АЬ ехресГед (Ожидается У1КТП АЬ). — В описании объекта
отсутствует ключевое слово УТКГПАЕ.
150 Ме1Ьос1 йепШтег ехресГей (Ожидается идеи гификатор метода)
Указанный идент ифнкатор не является идентификаторам метода.
151 У1Г1иа1 соп^гисСог аге по! аПоми! (Консг руктор нельзя объявлять
виртуальным). — Правило конструктора должно быть статическим.
152 Соп$1гис€ог ккпйЯег ехрее€ей (Ожидается идентификатор конструкто-
ра).— Данный идентификатор нс является конструктором объекта.
153 Ое$(гшДог ШепНЯег ехрссГес! (Ожидается идентификатор деструк-
тора). — Данный идент ификатор нс является идеи гифнка тором дест-
руктора.
154 ЕаП оп!у аПо^ед тйнп соп81гис1ог$ (Вызов ЕА1Е допускается т оль-
ко внутри конструктора). Стандартная процедура I А1Е может быт ь
вызвана только из конструктора объекта.
155 1пуа11(1 сотЫпаНоп оГ орсоде ат! орегапсЬ» (Недопустимая комби-
нация кода операции и операндов). — Код ассемблерной команды не
воспринимает данное сочетание операндов. Появление э того сооб-
щения возможно последующим причинам:
> внутри операторов Ассемблера использованы комментарии,
например МОУ {начальное значение} АХ 1;
> указано слишком много или слишком мало операндов для дан-
ной команды, например 1МС АХ, ВХ или М )У АХ;
> количество операндов правильное, но их тип и порядок не соот-
ветствует коду операции, например ОЕС1. МОУ АХ. СЕ или МОУ I.
АХ.
156 Метогу геГегепсе схрес1е<1 (Ожидается ссылка на область памяти).
Операнд ассемблерной инструкции не является требуемым указателем
на область памя 1 и. Скорее всего, в указании индексных регистров опе-
ранда отсутствуют квадратные скобки, например МОУ АХ.ВХн 81
вместо МОУ АХ,[ВХ+81].
157 Сапно! ас!(1 ог зиЬкСгас! ге1оса!аЫе $утЬо1$ (Сложение или вычита-
ние перемещаемых символов невозможно). — С перемещаемыми
идентификаторами в операнде Ассемблера допускается выполнение
единственной операции это сложение с константой или вычита-
ние константы. Переменные, процедуры, функции и метки предел ав-
ляют собой перемещаемые идентификаторы. Предположим, что
Уаг — это переменная, а Совы — константа. Тогда инструкции
МОУ АХ,Соп81+Соп8( и МОУ АХ,Уаг+Соп81 являются допустимы-
ми, а МОУ АХ,Уаг+Уаг нет.
158 1таП(1 гещ<Дег сотЫпайоп (Недопустимая регистровая комбина-
ция). — Допустимыми комбинациями индексных регистров являют-
ся [ВХ]. [ВР|, [81], [О1], [ВХ+81], [ВХ+О1], [ВР^81] и [ВР+О1]. Дру-
гие комбинации индексных регистров, например [АХ], [ВР+ВК] и
[81+ОХ\ не допускаются. Заметим, что локальные переменные (пе-
ременные. описанные в процедуре или функции) размещаются в сте-
ке и доступ к ним организуется через регистр ВР. При ссылках на
такие переменные Ассемблер автоматически добавляет [ВР] поэто-
му хотя конструкция 1 ипа ЬосаЦВХ) (где Ьоса! локальная пе-
ременная) и выглядит допустимой, операндом в итоге будет
ЕосаЦВР+ВХ].
1601пуа1й1 $утЬо! геГегепсе ( Недопустимая ссылка на идентификатор).
Данный идентификатор в операнде Ассемблера недоступен. Эта
ошибка может появиться по следующим причинам:
> вы пытались обратит ься к стандартной процедуре, стандартной
функции или специальным массивам: Мет. МетXV. МетЕ, Рог1,
РогЛУ;
> вы обратились к строковой, вещественной константе в операторе
ассемблерной команды;
> в операнде Ассемблера вы пытались обратиться к процедуре или
функции типа 118 Е) МЕ:
> вы пытались получить с помощью операции @Ке$иЙ доступ к ре-
зультату, возвращаемому функцией:
> вы пытались использовать короткую инструкцию команды 1МР.
которая выполняет переход не на метку, а на что-то другое.
161 Соде ^епега!1оп еггог (Ошибка генерации кода). - Ошибка возни-
кает, в частности, при компиляции ассемблерных фрагмен гов. содер-
жащих команды 1ЛЮР1ЧЕ, ЬООРЕ, ЬООР или .1СХ/, если команда
ссылается на недоступную метку.
162 А8М ехрес1ес1 (Ожидается ключевое слово А8М).
163 БпрКсаСе йупагтнс тейюй тйех (Дублирование индекса динами-
ческого метода). — Индекс динамического метода уже использован
другим динамическим методом. Возможно, вы пытались переопреде-
лить динамический метод, но ошиблись в имени, введя, таким обра-
зом, новый метод.
Сообщения об ошибках выполнения
Если ошибка возникла на этапе выполнения программы, на экран
выдается диагностическое сообщение:
Кип-Ите еггог <ппп> аЬ <хххх:уууу>,
где ппп — номер ошибки выполнения, ххххгуууу адрес ошибки
выполнения. Ошибки выполнения делятся на четыре категории:
> ошибки на уровне 008 (коды ошибок с 1 до 99);
> ошибки ввода-вывода (коды ошибок с 100 до 149):
> критические ошибки (коды ошибок со 150 до 199);
> фатальные ошибки (коды ошибок с 200 до 255).
Ошибки на уровне ИО8
11пта!к1 Гипсйоп пшпЬег (Ошибочный номер функции). - - Обращение к
несуществующей функции ОО8.
2 ГИе по! Гонги! (Не найден файл). - - Ошибка генерируется процедура-
ми Кс8С1, Аррепё, Кепагпе или Егазе, если физический файл, связан-
ный с файловой переменной, не найден или нс существует.
3 РаГЬ по! Гоши! (Путь не найден). - Ошибка генерируется процеду-
рами Кезег, Аррепд, Кепате или Егазс, если имя, присвоенное фай-
ловой переменной, является недействительным или указывает на
несуществующий подка галог. Ошибка генерируется процедурами
СИО1Г, МкО1г или КтО1г, если маршрут является недействительным
или указывает на несуществующий подкатало!.
4 Тоо тапу ореп П1е$ (Слишком много открытых файлов). Ошибка
генерируется процедурами Ксзст, КсигДе или Аррепд, если программа
имеет слишком много открытых файлов. Операционная сис 1 ема 008
не позволяет использовать более 15 открытых файлов для каждого про-
цесса. Если вы получили эту ошибку при наличии менее 15 открытых
файлов, увеличьте число в параметре Г 1ЬЕ$=хх файла СОКЕ1О.5Т8
до какого-либо подходящего значения, например до 30.
5 ГИе ассе$$ Детей (Отказано в доступе к файлу). - Появление этого
сообщения возможно по следующим причинам:
> ошибка генерируется процедурой Кезе! или Аррспд, если пере-
менная ЬПеМодс допускает запись. в то время как физический файл
является каталогом ияи файлом, доступным только для чтения:
> ошибка генерируется процедурой КегугНе, если каталог заполнен
или если имя, присвоенное файловой переменной, задает каталог или
существующий файл, доступный только для чтения;
> ошибка генерируется процедурой Кспагпе, если имя. присвоен-
ное файловой переменной, совпадает с именем каталога или если
новое имя указывает на уже существующий файл:
> ошибка генерируется процедурой Егазе при попытке сп ереть
каталог или файл, доступный только для чтения;
> ошибка генерируется процедурой МкОгг, если файл с тем же име-
нем уже существует в порождающем каталоге, если нет места в по-
рождающем каталоге или если заданное имя является именем устрой-
ства,
> ошибка генерируется процедурой КтОгг, если каталог нс явля-
ется пустым, если указанный путь не определяет ка галог или если
путь задает корневой каталог;
> ошибка генерируется процедурой Кеаб или В1оскКеад при по-
пытке считать данные из файла, коз орый еще не открыт для ч гения;
> ошибка генерируется процедурой \^гйе или В1оск\Угпе при по-
пытке записать данные в файл, который еще нс открыт для записи;
61та1к1 П1е ЬапШе (IТедопустимый описатель файла). Данная ошиб-
ка генерируется, если системному вызову 008 передается недопус-
тимый описатель файла. Появление данной ошибки является свиде-
тельством того, что файловая переменная испорчена.
121пуа1й1 Шс ассе§8 сойе (Неверный код доступа к файлам). Ошибка
генерируется процедурами КезсС или Аррепд при попытке открыть
файл (з ипизированный или петипизированный), если значение пере-
менной ЕПеМоде в момент открытия файла было недействительным.
151таН(1 дпуе пшпЬег (Недопустимый номер диска). Ошибка генери-
руется процедурой ОеЮгг или СЪОй, если номер диска недопустим.
16 Саппо! геиюте сиггеШ (11гес1огу (Нельзя удалить текущий каталог).
Ошибка генерируется процедурой Кт Ой при попытке удалить теку-
щий катало!.
17 Саппо! гепате асгозд дпуе§ (Нельзя при переименовании указывать
разные диски). — Ошибка генерируется процедурой Кепате, если
оба файла нс находятся на одном и том же диске.
18 Мо тоге Ше$ (Больше нет файлов). - Эта ошибка передается в пере-
менную 008Еггог модулей 008 и \Мг Эо8, если при вызове проце-
дур РшбЕггзС и ЕгпсПЧех! не найдено файлов с заданным именем и
набором атрибутов.
Ошибки ввода-вывода
100 Оввк геай еггог (Ошибка чтения диска). Ошибке! генерируется
процедурой Веад при попытке осуществить считывание после конца
типизированного файла.
101 В1§к ттгйе еггог (Ошибка записи на диск). - Ошибка генерируется
процедурами С1о$е, \\тйе, \\ гйЬги Е1и§Ь, если на диске нет свободно-
го места.
102 Ейе по! а881§пей (Файл не связан). — Ошибка генерируется проце-
дурами Кезе!. Веи п!е, Аррепд, Вепаше и Егаье, если с файловой пе-
ременной не было связано имя физического файла посредством обра-
щения к процедуре А88П1§.
103 Б11е по! ореп (Файл не открыт). — Ошибка генерируется процеду-
рами С1о§е, Веад, ХУгйе, 8еек. ЕоГ, ГйсРоз, Ейе&ге, Ышк, В1оскВеад
или В1оск\\гйе при попытке осуществить операции ввода-вывода с
файлом, который еще нс открыт.
104 Гйе по! ореп Гог три! (Файл не открыт для ввода). — Ошибка гене-
рируется процедурами Всад, ВеадЬп, ЕоГ, Ео1п, БеекЕоГили 8ескЕо1п,
если текстовый файл нс открыт для чт ения.
105 Гйе по! ореп Гог оиСрп! (Файл не открыт для вывода). — Ошибка
генерируется процедурами \Сгйе, \УгйеЬи, если текстовый файл не
открыт для записи.
1061вта11й пшпепс Готта! (Недопустимый числовой формат). - Ошиб-
ка генерируется процедурами Всад или ВеадЕп, если числовое зна-
чение, считанное из текстового файла, не соответствует числовому
формату соответст вующе! о типа данных.
Критические ошибки
150 В18к 18 мтке-ргоГесГей (Диск защищен от записи).
151 Вад йг1те гедиезС зГгнсТнге 1еп§!Ь (Неправильная длина структуры
запроса дисковода).
152 Опте по! геайу (Дисковод не готов).
153 Ьпкпоип соттапй (Неизвестная команда).
154 СКС еггог т йа!а (Ошибка контроля данных).
155 Вай йпте годнее! 8!гис!пге кп^ГЬ (При обращении к диску указана
неверная длина структуры).
156 В18к зеек еггог (Ошибка при поиске дорожки диска).
157Опкпоип шей1а Гуре (Неизвестный тип носителя).
158 8есЮг пог Гоипй (Сектор не найден).
159 Рппгег оп! оГ рарег (Принтер без бумаги).
160 Ветке итйе Гайк (Неисправное устройство записи).
161 Вейсе гсай Гайк (Неисправное устройство чтения;.
162 Нагйотаге ГаПиге (Сбой аппаратных средств).
Фатальные ошибки
200 В1У1<йоп Ьу гсго (Делетте на нуль). — В программе при операции деле-
ния МОЕ) или ЭТУ предпринимается попытка разделить число на 0.
201 Кап^е сЬеск еггог (Ошибка при проверке границ). - - Ошибка гене-
рируется процедурами-операторами, скомпилированными в режиме
{8К.+}. при возникновении одной из следующих ситуаций:
г индексное выражение квалификатора массива находилось вне
допустимого интервала значений;
г была осуществлена попытка присвоить переменной значение,
находящееся вне допустимого интервала;
> была осуществлена попытка передать значение, находящееся вне
допустимого интервала, в качестве параметра процедуре или функ-
ции.
202 81аск слегГкж еггог (Переполнение стека). — Эта ошибка генери-
руется на входе в процедуру или функцию, скомпилированную в ре-
жиме {$$+}, если нет достаточной области для размещения локаль-
ных переменных подпрограммы. Увеличьте размер стека, используя
директиву компи 1я гора $М. Данная ошибка может также вызыва ть-
ся циклической рекурсией или процедурой на Ассемблере, которая
нс поддерживает стек.
203 Неар оусгПоуу еггог (Переполнение динамически распределяемой
области памяти). — Эта ошибка генерируется процедурами Нем1
или СЗетМеш. если пет достаточного свободного объема динамичес-
кой области памяти, чтобы выделить память для блока требуемого
размера.
204 ропйег орегаНоп (Недействительная операция с указате-
лем). — Эта ошибка генерируется процедурой Вкро§е или ЕгееМепъ
если их аргумент имеет значение или указывает на адрес,
лежащий за пределами динамически распределяемой области, или
если список свободных блоков переполнен.
205 Е1оа(шз рот! оутгПои (Переполнение при операции с плавающей
точкой). — Выполнение операции с плавающей э очкой привело к пе-
реполнению.
206 НоаНп^ рот! шШегЛои' (Исчезновение порядка при операции с
плавающей точкой). — Операция с плавающей точкой привела к ис-
чезновению порядка (потеря значимости). Эта ошибка генерируется,
если вы используете математический сопроцессор 8087 с управляю-
щим словом, которое демаскирует ошибки, возникающие при исчез-
новении порядка. По умолчанию исчезновение порядка приводи! к
возвращению резулы ата, равного нулю.
2071пуа1к1 Лоайп^ рот! орегаНоп (11едопустимая операция с веществен-
ным числом). Эта ошибка может появиться по следующим причи-
нам:
> вещественное значение, передаваемое функции Тгипс или Коипб.
нс может быть преобразовано в целое число, находящееся внутри до-
пустимого предела типа ЬошцгП (от -2147483648 до 2147483647):
> аргумент, передаваемый функции отрицательный;
> аргумент, передаваемый функции Ьп. равен нулю или имеет
отрицательное значение;
> произошло переполнение стека сопроцессора 80x87.
210 ОЬ]ес1 по! йнбаПгес! (Объект нс инициализирован). Попытка
обратиться к виртуальному методу объекта до того, как он инициали-
зируется с помощью вызова конструктора.
211 СаП 1о аЬМтас! те1Ьо<1 (Вызов неопределенного метода). —Данная
ошибка генерируется процедурой АЬыгас! и указывает на то, что про-
грамма пьп ается выполнить ранее не определенный (абстрактный)
виртуальный метод. Когда объектный гип содержит один или более
абстрактных методов, он называется абстрактным об ьск тным т ином.
Инициализация объектов абстрактного типа считается ошибкой.
Объекты абстрактного типа можно только наследовать и перекры-
вать.
212 81геат ге^йДгайоп еггог (Ошибка регистрации по тока). — Данная
ошибка генерируется процедурой Ве^ЬЮтТурс и указывает, что про-
изошла одна из следующих ошибок:
> запись регистрации по тока не находится в текущем сегменте дан-
ных;
> поле ОВ.1 типа записи регистрации потока является нулевым;
> т ип уже зарегистрирован;
> уже зарегистрирован другой тип с тем же ОВ1-типом.
213 СоПесНоп нк1ех оиС оГгап^е (Индекс коллекции вне диапазона).
Индекс, передаваемый методу ТСоПесПоп, выходит за 1 раницы до-
пустимого диапазона.
214 СоПеспоп отегПст еггог (Ошибка переполнения коллекции).
Данная ошибка выдается ТСоПесйоп при попытке добавить элемсн т,
когда набор переполнен.
215 АгйЬтеНс оуегПон еггог (Ошибка при выполнении математичес-
кой операции). — Ошибка возникает при использовании директивы
{8<2+}. если при операции с целочисленными типами данных произош-
ло переполнение, например, результат операции превысил допусти-
мый диапазон значений.
2. Зарезервированные слова
в Турбо
Паскале 7.0
АВ8ОЕИТЕ РОКХУАКО РКОСЕБОКЕ
АКО РСКСТЮК РКООКАМ
АККАУ СОТО ривис
А8М 1Р КЕСОКО
А88ЕМВЕЕК 1МРЕЕМЕКТАТЮК К ЕРЕ АТ
ВЕС1К тк 8ЕТ
САЗЕ 1КНЕК1ТЕО 8НЕ
СОК8Т 1КЕ1КЕ 8НК
СОК8ТКЕ1СГОК 1КТЕКРАСЕ 8ТК1КО
ОЕ8ТКИСГОК тктеккегрт ТНЕК
И1У ЬАВЕЕ ТО
ОО МОП ТУРЕ
ЕЮХУМТО КЕАК ЦК1Т
ЕЬ8Е К1Е ЕКТИ.
ЕКИ КОТ И8Е8
РХТЕККАЕ ОВ.ТЕСТ УАК
ГАК ОР У1КТИАЕ
Р1ЕЕ ОК ХУН1ЕЕ
РОК РАСКЕО ХУ1ТН
РК1УАТЕ ХОК
3. Перечень операций языка
Турбо Паскаль
Операция Действие Тип операнда Тип результата
Арифметические операции
Сложение Целый или Целый или
— Вычитание вещесз венный вещественный
* Умножение — —
/ Деление — Вещественный
Г>1у Целочисленное Целый Целый
деление
Мод Остаток от деления —
Операции сравнения
— Равенство Любой Логический
о Неравенство — —
<2 Меньше Простой —
Больше —
Меньше или равно — —
2>— Больше или равно —
1п Присутствие 1-й операнд —
в множестве простой, 2-й
множество
Логические операции
Мо1 Отрицание Логический Логический
От Дизъюнкция — —
Апд Конъюнкция — —
Хог Исключающее ИЛИ —
Операции со множествами
Объединение Множество Множество
— Разность — —
♦ Пересечение — —
4. Таблица перевода основных
алгоритмических конструкций
в конструкции языка
Турбо Паскаль 7.0
Обозначения на блок-схеме Запись в псевдокодах Запись на языке Паскаль
Начало Начало; Рго^гат имя:
I Список данных: Метки: 10, М1; Константы: г=2.15; 4=1.5; Переменные: а, Ъ — целый; х, у — вещ.; с — символ.; е — строковый; с1 —логический; х(2,3) — массив, вещественный; 8(16) — массив, символьный; Не переводится ЬаЬс! 10, М1; Соп81 г=2 15; ч=1.5; Уаг а, ЬлпГе^ег; х, у:геа1; с:сйаг; е:81гт§; <1:Ъоо1еап; х:аггау[1..2, 1 ..3]оГ геа1; к: аггау[1..16]оГ ейаг;
Список данных
Метки: 10, М1; Константы: г=2.15; д=1.5; Переменные: а, Ь — целый; х, у—вещ.; с — символ.; е — строковый; й — логический; <г(2,3) — массив, вещественный; 8(16) — массив, символьный;
! / Ввод (а, Ь) / 1 Ввод(а,Ь); Кеад(а,Ь);
" ~ 1 / Вывод(а, Ь) / / ! V Вывод(а,Ь); \Уп1еЕп(‘а=\а,‘ Ъ=’,Ь);
(*>* Перейти к оператору, строке, метке Оою метка;
Обозначения
на блок-схеме
Запись
в псевдокодах
Запись на языке Паскаль
1:=25;
|:=здп(яЛ);
1:=25;
]:=81п(7С/1);
Ё=Ехр(5*Ьп(2));
]:=8ш(Р1Л);
оператор 2
Если условие То
оператор 1
Иначе
оператор 2;
оператор 3;
Конец-Если;
Ё=выражение;
Если 1=1 То
оператор 1;
Если 1=2 То
оператор 2;
Если 1=3 То
оператор 3;
Иначе
оператор 4;
Конец-Если;
Конец-Если;
Конец-Если;
1Г условие ТЪеп
оператор 1
Еке
Ве^п
оператор 2;
оператор 3;
Епс1;
Не переводится
Сазе 1 ОГ
коператор 1;
2:оператор 2;
Згоператор 3;
Еке
оператор 4;
Епс1;
Цикл-ПОКА
(условие);
операторы тела
цикла;
Конец-цикла;
\УЫ1е (условие) Е>о
Ве^п
операторы тела цикла;
Епб;
Не переводится
Обозначения
на блок-схеме
Запись
в псевдокодах
Запись на языке Паскаль
Цикл-ДО
(условие);
операторы тела
цикла;
Конец-цикла;
Цикл по 1
от 1п до >к;
операторы тела
цикла;
Конец-цикла;
Конец;
КереаГ
операторы тела цикла;
ИпП1 (условие);
Не переводится
Цикл по возрастающему
параметру (ш<1к):
Рог г=ш То 1к Эо
Ве^т
операторы тела цикла;
Епё;
Не переводится
Цикл по убывающему
параметру (т>1к):
Рог 1:=т ПомглТо 1к По
Ве$т
операторы тела цикла;
Епд;
Епд.
5. Встроенные функции языка
Турбо Паскаль 7.0
Запись функции на Паскале Обычная математическая запись функции или ее назначение
Математические функции
АЬз(х) Ехр(х) Ьп(х) Р1 8дг(х) $яп(х) 81п(х) Соб(х) Агс1ап(х) Тгипс(х) Коипд(х) 1п1(х) Егас(х) Капс1оп1(х) Капдот Ойд(х) । I х | — абсолютное значение величины х ех или ехр(х) 1п х — значение натурального логарифма я — число Пи х2 । 7х,х > 0 81П х, х — в радианах со» х, х — в радианах агс1& х» х — в радианах Целая часть числа х, получаемая путем отбрасывания дробной части (например: Тгипс(-3.6)= -3) Целая часть числа х, получаемая путем округления до ближайшего большею целого по абсолютной величине числа (например: Коипй(-3.6)= -4) Целая часть числа х, получаемая путем округления до ближайшего меньшего целого (например: 1п1(-3.6)= -4.0) Дробная часть числа х Случайное число от 0 до к (например: Капдош(4)+1 — выдает случайное число из интервала от 1 до 4) Случайное число от 0 до 1 Выдает значение Тгне, если целое число х нечетно
Запись функции на Паскале Обычная математическая запись функции или ее назначение
Символьные и строковые функции
СЬг(х) Символ, соответствующий А8СП-коду числа х (х — тип Вуте)
Огд(х) А8СИ-код, соответствующий символу х (х — тип СЬаг)
Ргед(х) Символ, предшествующий по А8СП-коду символу х (х — тип СЬаг)
8исс(х) Символ, следующий по А8С11-коду за символом х (х — тип СЬаг)
15рСа§е(х) Преобразование символа х из строчных букв латинского алфавита в прописные (х — тип СЬаг)
Ьеп§1:Ь(х) Определение длины текстовой строки х (х — тип 81ппё)
Сору(х,п,т) Копирование фрагмента, выделяемого из строки х, начиная с позиции п, длиной ш символов (х — тип 81ПП&)
Ро§(х,у) Номер позиции в строке у, с которого начинается текстовый фрагмент х (х, у — тип 81пп^). Если фрагмент не найден, функция возвращает нуль
+ & Зарезервированные слова в С++
&С14Х—ЖО'ЕЧС — ,
ЙНПЦр'л С >
аят
йоиЫе
айю
Ьгеак
са$е
ецит
(\у
ех1егп
са1ск
сЬаг
Йоа1
Гог
с1а$$
Гпепд
ПСХУ
.«пОл^Ц >/.
орегаЮг
рпУа1е
с, рго1ес1е<1
риЫгс
ге§]81ег
ге1ит
8\УЙС11
1етр1а1е
ййз
тИгои
*’ .
шмон
соп$1
сопйпие
<1еГаи11
1п1те
<к1е1е
11Й
йо
1оп§
81^пеё
Г,11 :
812еоГ
8Ш1С
..ц- • ..
зйисС
шш^пей
уЫиа!
уок!
уо1а1не
иЫ1е
^о1о
.
I
'V
7
»>»ц
• 4? ьлоЕ
Г
г
•.:^К;’ГКГГ<-5
• . д«112 I
МНЗДКрЦГ
доз;
I
К ИМ •" >. и> /Н ,
Ч ШКни&'.Г»
Ь' «иГидоГТ
€Г»Л
; • ’ *; \ . • -О?' ’ЛН ’
' 1И8Г/.Э}
?
I
7. Перечень операций языка С++
Операция Действие Пример
Арифметические операции
4- Сложение х+у
— Вычитание х-у
* Умножение х*у
/ Деление х/у
% Деление по модулю х%у
4-+ Приращение после Х"И"
++ Приращение до 4 +Х
— Уменьшение после X
— Уменьшение до -X
Операции сравнения
— — Равенство х==у
1= * Неравенство х!=у
Меньше х<у
> Больше х>у
<С — Меньше или равно х<=у
Больше или равно х>=у
Логические операции
। Отрицание !х
II Дизъюнкция х||у
&& Конъюнкция Х&&У
Поразрядные (побитовые) операции
^г- Дополнение (инверти- ~х
рует биты значений)
1 Побитовое ИЛИ х|у
& Побитовое И х&у
л Побитовое хлу
исключающее ИЛИ
« Сдвиг влево х«3
>>> Сдвиг вправо х»3
8. Таблица перевода основных
алгоритмических конструкций
в конструкции языка С++
Обозначения на блок-схеме Запись в псевдокодах Запись на языке С+т
Начало I Начало; #1пс1ийе<ю8(геат.й> уоИ та1п(уок1) {
I Список данных: Метки: 10, М1; Константы г=2.15; ч=1.5; Переменные: а, Ъ целый; х, у вещ; с — символьный; е — строковый; х(2,3) — массив, вещественный; 5(16) — массив, символьный; Нс переводится Не объявляются Поа1 г=2.15,4=1.5; а,Ь; Поа1 х,у; ейаг с; сЬаг е[64]; Поа1 г[2][3); сЬаг $[17];
Список данных
Метки: 10, М1; Константы: г=2.15; 4=1.5; Переменные: а, Ь — целый; х,у—вещ; с — символ.; е — строковый: с! — логический; 2(2,3) — массив, вещественный; 8(16) — массив, СИМВОЛЬНЫЙ:
/ Ввод(а, Ь) / 1 Ввод(а, Ь); сш»а»Ъ;
/Вывод(а, Ь) / 1 Вывод(а, Ь); соиГ<<“а=~<<а<<?Ъ=” «Ь«епс11;
- - -- - Перейти к оператору, строке, метке ^ою метка;
Обозначения
на блок-схеме
Запись
в псевдокодах
Запись на языке С++
Цикл-ПОКА
(условие);
операз оры тела
цикла;
Конец-цикла;
\уЪПе (условие)
операторы тела цикла,
Не переводится
Цикл-ДО до
(условие); {
операторы тела операторы тела цикла;
цикла; }
Конец-цикла; \уЫ1е (условие);
Цикл по 1
от 1П до 1к;
операторы тела
цикла;
Конец-цикла;
Цикл по возрастающему
параметру (1П<1к):
Гог (1=ш;1<=1к;1++)
{
операторы тела цикла
Не переводится
Цикл по убывающему
параметру (т>1к):
Гог б=1п;1>=1к;1—)
операторы тела цикла;
}
___
Конец
Конец;
9. Таблицы основных свойств
объектов проекта КесогсЬСаП
Таблица 1
Свойства Еопп!
Свойство Значение
Мате (имя формы) Рогт1
Арреагапсе (внешний вид) 1—ЗЛ (3-мерная графика)
АиЮКеёгачу (графическое изображение) Тгие (доступно)
Вогдег$1у1е (рамка) 3 — Рххед Л1а1о$ (нельзя изменить размер)
Сарйоп (заголовок формы) Весогд-СаП
Роп1 (тип шрифта) М8 8апз 8епГ(81ге — 10)
Не1§Ь1 (высота) 6540
МахВиПоп (кнопка "распахнуть” форму) Раке (недоступно)
8(агШрРо§Шоп (положение на экране) 2 — Сеп1ег8сгееп (по центру)
(ширина) 8310
1ЫТЧ1еГ
Свойство Значение
Аи1о812е (автоматичес- кие изменения размера) Тгие
Сарйоп Имя контрольной работы
Не1^Ь1 240
ЬеП 2400
ТаЫпдех (индекс фоку- сировки) 1
Гор (расстояние от верхнего края формы (рамки) до верхнего края поля) 120
2880
1ЫТехГ1
Свойство Значение
Аи*о81хе Тгие
Сарйоп Вопрос №
Не1§Ы 240
ЬеЙ 120
ТаЫпдех 5
Тор 480
УИдгЬ 1110
Таблица 4
1ЫТех<2
Свойство Значение
Аи1о<м2е Тгие
Сарйоп Вопрос №
Не1^Ы 240
ЬеЙ 120
ТаЫпдех 15
Тор 480
1110
Таблица 5
1ЫУ1
Свойство Значение
Аи1о81ге Тгие
Сарйоп Вопрос:
Не1§И1 240
Тей 120
ТаЫпдех 10
Тор 480
АУМЙг 885
10—987
1ЫУ2
1ЫО1
Свойство Значение
Аи1о812е Тгие
Сариоп Вопрос:
НС1&Н 240
Ьсй 120
ГаЫпйсх 19
Тор 480
ши 885
Свойство Значение
Аи1о81ге Тгие
Сариоп Ответы:
Не^Ы 240
ЬеЛ 120
ТаЫпдех 11
Тор 1320
900
Таблица 8
1ЫО2
Свойство Значение
Аиго8кс Тгие
Сариоп Ответы:
Не1§111 240
ЬсП 120
ТаЫпОех 20
Тор 1200
МсНЬ 900
Таблица 9
1Ы^ро1
Свойство Значение
Аи1о81хе Тгие
Сарйоп Правильный ответ:
Не1§111 240
ЬеП 1800
ТаЫп<1ех 13
Тор 1920
\У1скй 2160
Таблица 10
1Ы1\ро2
Свойство Значение
Аи1о81хе Тгие
Сариоп Правильный ответ:
Не1§1т1 240
Ьей 1800
ТаЫпдсх 23 '
Тор 1920
ХУиЙк 2160
Таблица 11
Свойство Значение
Арреагапсе 1—ЗО
Вогдег81:у1е 1 — Ггхес! 8п)₽1е
Не1§Ь1: 285
Еей 5400
ТаЫпдех 0
Тор 120
735
ШТЧт!
1хЙЧу2
Свойство Значение
Арреагапсе 1—30
Вогёег81у1е 1 — Г1хед 8ш^1е
285
ЬеП 1320
ТаЫпс!ех 4
Тор 480
\УкШ1 375
Таблица 14
ШТеху!
Свойство Значение
Арреагапсе 1—30
Вогдег81у1е 1 — Р1хес! 8т^1е
Не1$Ы 285
ЬеП 1320
ТаЫпдех 16
Тор 480
375
Таблица 15
ШТеху2
Свойство Значение
Арреагапсе 1~ЗО
ВогдегЗйук 1 — Р1хес! 8ш$1е
Не1$Ы 735
ЬеП 1080
МиЖПпе (запись в несколько строк) Тгие (доступно)
8сго11Ваг8 (поло- сы прокрутки) 2 — Усгйса! (вертикальная)
ТаЫпйех 8
Тор 240
\У1с1Й1 4815
Свойство Значение
Арреагапсе 1—ЗО
Вогс1ег8Гу1е 1 — Р1хеН 81п^1е
735
Ьей 1080
МикШпе Тгие
ЗсгоПВагз 2 — Уегйса!
ТаЫпдех 21
Тор 240
4815
ЬЛТехо!
Свойство Значение
Арреагапсе 1—30
Вогдег8гу1с 1 — Пхед 8тё1е
Не1з1и: 735
ЬеЛ 1080
МикИлпе Тгие
8сго11Ваг§ 2 — Ует11са1
ТаЫпдех 9
Тор 1080
У/14Ш 4815
СхПехо2
Свойство Значение ।
Арреагапсе 1—ЗО ।
Вогдег81у1е 1 — Г1хе<1 $1п$1е
Не1^Ъ1 735
ЬеП 1080
МиЖЫпе Тгие
8сго11Ваг8 2 — Уегйса!
ТаЫпдех 22
Тор 1080
\У1скЬ 4815
Табл ица 18
(хГЧро!
Свойство Значение
Арреагапсе 1-ЗО
Вогёег81у1е 1 — Р1хес1 8т^1е
Не^й1 285
Ьей 4560
ТаЫпдех 12
Тор 1920
\УМИ1 375
Таблица 19
1хЯЧро2
Свойство Значение
Арреагапсе 1—ЗО
Вогдет8гу1е 1 — Пхеб 81п$1е
Нет^к! 285
ЬеП 4560
ТаЫпс1ех 24
Тор 1920
ХУкИй 375
Таблица 20
Ггате!
Свойство Значение
Арреагапсе 1 -30
Вогдег81у1е 1 — Р1хед 8ш&1е
Не^Ь! 2295
ЬеП 120
ТаЫпдех 2
I ор 720
УУгсПЬ 1815
Таблица 21
ГгатеЗ
Свойство Значение
Арреагапсе 1—ЗО
Вогдег81у1е 1 — Пхед 8т^1е
Не1§й! 2295
ЬеН 120
ТаЫпдех 14
Тор 3360
УУ1сИЬ 1815
Ггате2
ГгатеД
Свойство Значение
Арреагапсе 1-30
Вог4ег81у1е 1 — Ртхес! $т$1е
2295
ЬеП 2040
ГаЫпбех 7
Тор 720
\\ 1(1111 6015
Свойство Значение
Арреагапсе 1-ЗО
Вог6ег$1у1е 1 — Пхеб 8шё1е
Не1§Ь1 2295
ЬеП 2040
ТаЫпбех 18
Тор 3360
^16гЬ 6015
Таблица 24
Ь1пе1
Свойство Значение
Вог6ег$1у1е 1 — $оШ (сплошная)
XI 120
Х2 8040
У1 600
У2 600
Таблица 25
Ыпе2
Свойство Значение
Вог6ег$1у1е 1 — $0116
XI 120
Х2 8040
VI 3240
У2 3240
Таблица 26
ор(7
Свойство Значение
СарНоп № введен
Нс1^Ы 195
ЬеГ1 120
ТаЫпбех 6
Тор 1080
\У161Ъ 1455
Таблица 27
ор1К
Свойство Значение
Сарбоп Редактор
Не^Ь! 225
ЬеП 120
ТаЫпбех 31
Тор 1080
\УШ11 1455
сш(12ар
Свойст во Значение
Сарнов Запись
Не1^к( 495
ЬеП 240
ТаЫпйех 3
Тор 1560
1215
Таблица 30
ММСоп€го11
Таблица 29
сшдУуг
Свойство Значение
Сар1юп Вызов
Нец41‘ 495
ЬеП 240
ТаЫпдех 17
Тор 1560
\УккЬ 1215
Таблица 31
ММСоп<го12
Свойство Значение
ЕПеКате САХУтдоиъХ МесНаХ Звук "корзина” схемы "Роботы”
Не1&111 330
Ьей 240
ТаЫпйсх 26
Тор 1680
Ук1Ые Гаке
420
Таблица 32
ММСогПгоВ
Свойство Значение
ЕйеКате СЛХУшйотеХ МесЙаХ Звук Н 11 свертывание схемы ' Роботы"
Не1₽Ы 330
ЬеГ1 240
ТаЫпдех 25
Тор 1680
Ук1Ые Баке
УуЧсИЪ 420
Таблица 33
ММСопСгоИ
Свойство Значение
ЕйеКаше САУЛпйоиъХ ОНакапТАуду
Не1^Ы 330
ЬеП 120
ТаЫпбех 27
Тор 120
У1ыЫе Баке
\У1Л11 ... 420
Свойство Значение
Гйекате С:\\УтскпУ8\ Тттрх.и’ау
Не^й! 330
Бей 720
ТаЫпёех 28
Тор 120
У1Я1Ые Раке
420 .
Таблица 34
ММСо1йго15
Таблица 35
ММСоп(го16
Свойство | Значение
РПеКате С:\'У1пдои^\ \Угоп$3.иау
Не^Ьх 330
ЬеП 1320
ТаЫпдех 29
Тор 120
У181Ые Раке
Х^1с!гЬ 420
Свойство Значение
Е11с№те С:\\Унккиу$> \^гопё1
330
ЬсЛ 1920
ТаЫпдех 30
Тор 120
У181Ые Раке
ХУкИЬ 420
Таблица 37
ТехН
Таблица 36
БТтНе1р1п$г
Свойство Значение
Вогдег8гу1е 3 — Р1хес1 ГНа1о$
Не1^Ь1: 6870
ЬеП 15
МахВипоп Раке
МтВиИоп Раке
МоуеаЫе Еаке
Тор 15
9600
Свойство Значение
Вогдег81у1е 1 — Р1хед 8ш^1е
Не^Ы 6495
ЬеЙ 0
МиШЫпе Тгие
8сго11Вагз 2 — Уегйса1
ТаЫпдех 0
Тор 0
\УмШ1 9495
Таблица 38
ЕгтНе1рАЬои1
Свойство Значение
Вогдег81у1е 3 — Р1хед В1а1о^
Не1§111 4440
ЬеГ1 0
МахВиНоп Раке
МтВиНоп Ра1зе
МоуеаЫе Раке
Тор 0
\УкИ11 5355
10. Коды (текст программы) проекта
Несогб-СаП
Коды для Гогт!
(бепега!) -> (0ес1ага1:1опз)
РиЬИс т/г Аз ТггЬедег, ггулг Аз ТпЪедег
Ргз^а1:е ЗиЬ стдУуг_С11ск ()
01т 2 Аз \/ор
ют-'Уа1 . Тех!:)
Ъx^ТеxV2.ТехЪ=""
^x^:ТеxV2 .Ке^гезк
1:хГ:Техо2. Тех1=" "
пх!Техс2.Ке^гезк
гх1зКро2. Тех^=""
ЬхЪЫро2.КеГгезИд
Ореп ”с:\1е1:\” + ^хМ'Пе^.Тех'Ь + ".ЪЛ" Гог Капсклп Аз #1_
Ьеп-204
IГ 1:х11Ы1е11. Тех1:= " "ТИеп
ММСоп11го 15. Соттапс1= " Ореп ”
ММСоп1:го15 .Соттапс1=”8оипсЗ"
МздВох ("Где имя работы?")
СоТо гп1
Епа 11:
ТГ тпл=0 Ткеп
ММСопЬго15.Соттапа="Ореп"
ММСоп 11ГО15. Со1шпапа="3оипаи
МздВох ("Где номер вопроса?")
СоТо т!
Епа 1Г
СеЁ #1, п-улг, х
ММСоп1_го12. Со1шпапа="0реп"
ММСопСго12.Соттапа-"5оипа"
стах^ух«Сар^топ-’1 Готово! "
Еог 1=1 То 1000000
ИехЪ 1
ста\7ух . СарИ1оп="Вызов11
^x^ТеxV2 . Тех1=х .V
^x^ТеxV2яКеЕгезИ
Ъх^Техо2 . Тех^=2.о
ЕхЕТехо2.КеЕгезИ
ЕхЕИро2 . ТехЕ=2 . п
ЕхЕИро2.КеЕгезЪ
т1: СТозе 1
2 .57="”
2 . О=’“ ”
2.П="”
ЕхШу2 - ЗепЕосиз
т2: ЕМ 8иЬ
РгтуаЕе 5иЬ стййар СИск ()
Е1гп 2 Аз "уор
г .уЧх^Тех?!.ТехЕ
г. о=ЕхЕТехо1 - Тех!:
г•п=рхЪПро1.ТехЪ
ТЕ орЕХ.Уа1ие=Га1зе ТИеп
ММСо п Ъ г о 16. Сопппа п ск ” Ор еп "
ММСспрго16. Сопппап(3=”5с апс!"
МздВох (’’Подтвердите № записи 1")
Ъх^№^1.Зе^Госиз
ОоТс гп2
ЕМ
Среп "сгМе^Х" + ЪхШ1е^<ТехП + ”.ЪхЪ” Еог Капскэгс Аз_
#1 Ъеп=2048
ТЕ 2^=”епд" ТИеп ЕМ
ТЕ 2^=’’”ТЬеп
ММ0опЕго15 .СоттаМ=”Ореп ”
ММСопЕго15. СопипаМ="5оиМ”
МздВох ("Где вопрос?")
СоТо т!
ЕМ ТЕ
ТЕ 2рО-””ТИеп
ММСопЕгоТБ«С опина М=” Орел"
ММСопЕгоТБ. Со1ГШ1аМ==’т8оиМ?’
МздВох ("Где ответы?”)
боТо гп1
ЕМ ТЕ
ТЕ 2>п^”,’Т11еп
ММС о п Е г о Т 5. С огшпаМ-” Ор еп "
ММСопбго15. Соттапс=" 5оипс1"
МздВох ("Где правильный ответ?")
СоТо ш1
Епс1 1Е
II: тг2=0 ТИеп
ММСоп€го15 - Соттапд=’,Ореп,,
ММСоп1:го15. Со1шпапс1="5оипб"
МздВох ("Где номер вопроса?’1)
СоТо т!
Епб 1Г
II ЪхЪШ.еЪ. Тех€=’г"Ткеп
ММСоп Ьго15. СоIШI^апс^=пОреп’,
ММСоп Ьго15. Со1шпапс1“’г8оипс1"
МздВох ("Где имя работы?")
СоТо ш1
Епс1 II
РиЪ #1,тлг,2
ММСопЬгоП. Соттапс1="0реп"
ММСопёгоП . Согш1апб=,г8оипс1”
сшс12ар.СарМоп="Готово’ "
Гог 1=1 То 1000000
Ыехр 1
спк!2ар. Сар-с1оп=" Запись "
т1: С1озе 1
орЪ2 .Уа 1ие=Еа] зе’сброс флажка
1^x^ТеxV1. ВаскСо1ог=&Н80000005
ЪхЪТехо!.ВаскСо1ог=&Н80000005
рхРГфо!.ВаскСо1ог=&Н80000005
1:x^:ТеxV1. Зе1:Госиз
гп2: Епд ЗиЬ
Рг^а1:е 8иЬ Еогт_Ьоас1 ()
1=0
ММСоп^тоГЗ. Со1шпапс1=,,Ореп"
ММСопЪгоХЗ. Соттапб=’’ЗоипсГ’
Епс1 8иЬ
Рг±\7аРе ЗиЬ Гогт Уп1оас1 (СапсеЗ Аз 1п1:едег)
ММСопЪто14. Со1шпап<1=’г0реп"
ММСопЫо14. Соттапб=,’ЗоипсГ
Епб ЗиЬ
Ргэ^аЬе ЗиЬ гппиЕх±Ъ_С] о ск ()
ММСоп Ьго14 . Соттапб="Ореп"
ММСопЬго14. Соттапб^’Зоипб”
Епб
Епб ЗиЬ
РгхтаЬе ЗиЬ тпиНе1рАЬоиЬ_С11ск{)
Е гтНе!рАЬоик.ЗЬом 1
Епб ЗиЬ
РгттаЬе ЗиЬ тпиНе1р1пзЬ__С11ск ()
ЕгтНе1р1пзк.ЗИо™ 1
Епб ЗиЬ
Ргг^аЕв ЗиЬ оркК_СИск()
Б1т г Аз Vор
плл7=Уа1 . ТехЬ)
1Е ЬхЬИ1еЬ-ТехЬ=""ТНеп
ММСопЬго15. Соттапб="Ореп”
ММСопЬго15. Со1шпапб=”3оипб”
МздВох (”Где имя работы?’1)
СоТо т1
Епб 1Е
ЬхЬТех\’1. Т<^х1:.=”очистка полей записи
ЬxЬТеxV1 .Ке^гезЬ. *
ЬхЬТехо!•ТехЬ=и”
ЬхЬТехо! .Р.е^гезк
ЬхЬЫро!. ТехЪ=’т”
ЬхЬЫро1.Ке^гезИ
Ъх«Кг1.ТехЪ=""
ЬхЬ^1«КеГгезЪ
Ореп ”с:\1еЬ\” + ЪхЬ№1.еЬ.ТехЬ + ".Ьх^” Еог Рапбот Аз #1_
Ьеп=2048
1Е плп7—0 ТЬеп
ММСопЫо15. Сотта пб-” Ореп”
ММСопЬго15 .Ссттапб=”5оипс1"
МздВох ("Где номер вопроса?”)
СоТо ш1
Епб 1Г
Се11
ММСопЪго12. Сопигапа=”Ореп”
ММСопЪго12. СопигагкН"БоигкГ’
^1xЪТеxV1. Тех11=2 . V
Ъх11Тех\И .КеГгезЪ
ЪхЪТехо! -Тех11=2.о
Ъх^ТехоЗ .Ке€гезЪ
1:х12Ыро1. Тех1з=2 . п
СхЪЫрО1.Ве^гезИ
СхЪЫу1 . ТехЪ=11хЪ№у2 . Тех!:
11хС№у1 .Ве^гезЪ
^xЪТеxV2.ТехЪ=””’очистка полей записи
^x11ТеxV2. КеГгезИ
Ьх^Техо2-ТехЪ=””
(1X1176X02 .Ке^гезЪ
11х11Кро2 . ТехЪ=” "
ЪхЪМро2. КеГгезИ
ЪхЪ№у2 <ТехТ^” ”
СхЪ^2 .КеГгезИ
11x11ТеxV1.8е11Еосиз
ш1: С1озе 1
2^=” ”
2.0=””
2 .И—О
ор!1Е. Уа1ие=Га1зе' сброс флажка
Ьх11Теху2 .ВаскСо1ог=&Н80000005
11хГ1Техо2.ВаскСо1ог=&Н80000005
11х11Кро2.ВаскСо1ог=&Н80000005
гп2: Епб 8иЬ
Ргл^аЪе 8иЬ ор^Е СИск ()
т72=Уа1 ( (1х^у1 . ТехЪ)
11x11ТеxV1. ВаскСо1ог=С>ВСс1ог (15)
ЪхЪТехо1.ВаскСс1ог=0ВСо1ог(15)
Ъх11Кро1. ВаскСо1ог=0ВСо1ог (15)
Епа 8иЬ
Рг 1л7аке 8иЬ Ъх11М1е11 КеуРгезз {КеуАзс±1 Аз 1п1:едег)
1Г КеуАзс5.1=13 ТИеп
гхЪ№у1.КеЕгезИ
ЕхЕШт!.ЗеЕЕосиз
Епс! ГЕ
Епд 8иЬ
Ргдллаке ЗиЬ ЕхЕН\^1_ВЫС1хск ()
ЕxЕТеxV1 .Техк=’,м
ЕxЕТеxV1.КеЕгезЪ
ЕхЕТехо!.Техк-””
ЕхЕТехо!.КеЕгезЪ
ЕхЕЫро1.ТехЕ-"”
ЕхЕИро1.КеЕгезк
ЕxЕТеxV1.ЗеЕЕосиз
Епб ЗиЬ
Рг ГтаЕе ЗиЬ ЕхЕ1№2_ВЫС1эск ()
^x^ТеxV2 . ТехЕ=’’ ”
^x{1ТеxV2. КеЕгезЪ
ЪхЕТехо2 - ТехЕ~”,т
Ьх^Техо2. КеЕгезЪ
Ех‘кЫро2 .Техк=” "
СхкЫро2.ВеЕгезЪ
Епд 8иЪ
Коды для 1гтНе1р1пв1;
Рг^аге 8иЬ ТехЕ1_СИапде ()
ТехЕ1 .ЕпаЫесЗ-ГаХзе’запрет записи е поле текста
Епс! 8иЪ
Коды для Мос1и1е1
(Сепега!) (0ес1агаЕ1опз)
Туре Vор'определение записи
V Аз ЗЕгхпд
о Аз Згппд
п Аз 81“г±пд
Епд Туре
Охт 2 Аз Vор
11. Таблицы основных свойств
объектов проекта Оиезбоп
Таблица I
Свойства Рогт!
Свойство Значение
№те Рогт!
Арреагапсе 1—30
Аи1оКедга\у Раке
Воп1ег81у1е 1 — Р1хес1 8т&1е
СарНоп (Зиеяйоп
Роп1 М8 8ап§ 8епГ (81хе — 10)
Нецф! 6660
МахВиНоп Раке
МтВиИоп Гаке
МоуеаЫе Раке
81аг1С1рРо81иоп 2 — Сепгег8сгееп
8310
Таблица 3
1ЫМе1
Свойство Значение
Аи1о81ге Тгие
СарНоп Контрольная работа:
Не^Ы 480
ЬеЙ 6000
ТаЪ1ш1ех 1
Тор 0
1515
Таблица 2
1ЫГат
Свойство Значение
Аи1о81ге Тгие
СарНоп Введите фамилию:
Не1$Ъ1 240
ЬеГ1 240
ТаЫпдех 13
Тор 120
2115
1ЫУ2
Свойство Значение
Аи1о81ге Тгие
СарНоп Вопрос №
Не^й! 240
ЬеЙ 240
ТаЫпдех 10
Тор 360
ХУнПЬ 1125
Таблица 6
1ЫО2
1Ы1Чу2
Свойство Значение
АиГо81ге Ра1&е
Вогдег81у1е 1 — Г1хес1 8т§1е
Не^йг 555
ЬеП 480
ТаЫпдех 12
Тор 720
УЛсКИ 645
Таблица 7
1ЫТ'те
Свойство Значение
АиГоЗтхе Тгие
СарПоп Варианты ответов:
Не1^й1 480
ЬеЙ 240
ТаЫпс1ех 3
Тор 2400
УУ131й 1125
Таблица 8
ЬЫМатеЛте
Свойство Значение
Аи1о812е Тгие
СарНоп 600
Не1^й1 555
ЬеП 120
ТаЫпсЗех 23
Тор 240
МсМ 870
Свойство Значение
Аи1о812е Тгие
Сарбоп Время
Не^йг 240
ЬеП 240
ТаЫпНех 18
Тор 840
У/хИк 705
Таблица 9
1ЫРоЛ$кахка
Свойство Значение
АиГо812е Тгие
Воп1е181у1е 0 — Ыопе
Не1^к1 240
ЬеП 720
Т аЫпдех 15
Тор 840
У/хШ1 75
ШГат
1хСМ1е1
Свойство Значение
Не1^Ы 510
ЬеЙ 2400
ТаЫпдех 11
Тор 0
У/1ЛИ 3255
Свойство Значение
Не^Ы 285
ЬеГ1 6960
ТаЫпдех 0
Тор 240
У/1(ИЬ 975
Табл ица 12
ШТех\2
Таб лиц а 13
ШТехо2
Свойство Значение
ЕпаЫед Еаке (нет доступа)
Нецф! 1935
ЬеГг 1440
МикИЛпе Тгие
ТаЫпдех 4
Тор 240
\У1ЛЬ 6855
Свойство Значение
ЕпаЫед Раке
Не^Ы 1575
Ьей 1440
МиШЫпе Тгие
ТаЫпдех 6
Тор 2280
ХУтдЖ 6855
Табл ица 14
ШУуой
Свойство Значение
Не^Ы 360
ЬсЙ 5520
ТаЫпдех 22
Тех! «»
Тор 360
855
Таблица 15
Егате!
Свойство Значение
Не1$111 1335
ЬеП 1440
ТаЫпдех 14
Тор 3840
ХУЙЙИ 6855
ГгашеЗ
Ггате4
Свойство Значение
Не1§Ъ( 1335
Ьей 120
ТаЫпдех 16
Тор 3840
ДУкНк 1215
Свойст во Значение
5295
ЬеЙ 120
ТаЫпдех 2
Тор 600
Ш.скк 8415
Таблица 18
орГУуод
Свойство Значение
Сарйоп Ввод
Нефн 255
ЬеЙ 5520
ТаЫпНех 24
Тор 840
ЛУкНй 975
Таблица 19
спмП
Свойстве Значение
Сарйоп 1
Не1§1и 375
ЬеП 480
ТаЫпдех 5
Тор 360
\УкШ1 375
Табл и ца 21
ГгтНе1р1п^
Таблица 20
Типег!
Свойство Значение
1п1егуа1 1000
ЬеП 1080
Тор 2400
Свойство Значение
Вогдег81у1е 3 — Пхед В1а1о§
Не1^М 7200
Ьей Л5
МахВийоп Раке
МтВийоп Раке
МоуеаЫе Раке
$1агЮрРо$Июп 2 — СеШегЗсгееп
Тор 15
\У1Л11 9555
Таблица 22
Тех11
Свойство Значение
ВогёегБгук 1 — Пхед 81п$1е
ЕпаЫед Раке
Не^Ы 6855
ЬеЯ 0
МиШЬте Тгие
ТаЫпдех 0
Тор 0
май! 9495
Таблица 24
(гтМагкб
Свойство Значение
Вогдег$1у1е 3 — Г1хе<1 О1а1о$
Сарйоп Магк
3570
Ьей 0
МахВиНоп Раке
МшВиНоп - Раке
МоуеаЫе Раке
81агЩрРо8П1оп 2 — СепГег 8сгееп
Тор 0
ХУккИ 4770
1 аблица 23
ГгтНе1рАЬои(
Свойство Значение
Вог<1ег$1у1е 3 — Р1хеё О1а1о§
Нет^Нг 4440
ЕсЙ 0
МахВиПоп Раке
МшВийоп Раке
МоУеаЫе Раке
Тор 0
У/кИй 5370
Таблица 25
ЬаЪеП
Свойство Значение
Вог6ег81у1е 0 — Ыопе
СарНоп Ваша оценка
Не^Ы 2100
Ьей 240
Тор 480
XV ккй 2175
Таблица 26
ЬаЬе12
Свойство Значение
Вогдег81у1е 0 — Ыопе
СарНоп 5
Р1е1$1П 2970
Ьей 2880
Тор 0
ХУкИИ 1545
12. Коды (текст программы)
проекта Оиеайоп
Коды для Еогт!
(СепегаТ) -> (ВесТага^топз)
РиЬИс зЬ Аб ТпЕедег, б^л Аб Тп^едег
РиЬИс по Аз ЗЕгхпд, про Аз 8Ъг1пд
РиЬИс Еат Аз ЗЬгхпд, Ъ Аз ] пЪедег
РиЬИс пеЬо1гу Аз ТпЪедег
РиЬИс ЗиЬ Бо1Ъ()
Бхт х Аз Vор
ТЕ стс11 . ЕпаЫес1=Еа1 зе Ог ст<12 . ЕпаЫес1=Еа1 зе
Ог стб.З,ЕпаЬ1ед==Еа1зе Ог стс!4 .ЕпаЫе6=Еа1зе ТИеп
ММСоп Ьго14. Соттапс1=’10реп"
ММСопЬго14.Соттапд="8ои_пд"
МздВох (' Введите фамилию! ’*)
ЕхЕГат. ЗеЕЕосиз
СоТо ткзиЬ ‘запрет- вызова вопросов,
’пока не введена фамилия
Епа 1Е
е=0 тиеп
^x^ТеxV2.ТехЬ=""
Ъx1:ТеxV2. КеЕгезЬ
11х11Техо2. ТехЪ=" "
11х^Техо2 .РеЕгезЪ
СоТо тб
Епб II
ТЕ ЬхЕЫТеЬ.ТехЬ=и "Ог 1_.хЖ 1еТ..Тех!:-" "Ог Ъх1:М1.еЕ.ТехЕ»"11
Ог ЬхЕМТеЕ.ТехЪ=""ТИеп
ММСопЪго14. Согшпапд-^Ореп"
ММСопЪго14.Соттап6="8оип6"
МздВох ("Введите имя работы1.")
ЕхЬЫТеЪ. ЕпаЫед=Тгие
Ех^НТеЕ. $е11Еосиз
СоТо ткзиЬ
Епд 1Е
II: ЕхЕЕат.ТехЕ=""Ог ЕхЕЕат.ТехЕ=" "Ог ЕхЕГат.ТехЕ="
Ог ЕхЕЕат.ТехЕ=" "Ог ЕхЕЕат ,.ТехЕ=" "Ог ЕхЕЕат.Тех!,
=" "Ог ЕхЕЕат.ТехЕ=" "Ог ЕхЕЕат'. ТехЕ=" "
Ог ЕхЕЕат.ТехЕ =" "Ог ЕхЕЕат.ТехЕ=" "
Ог ЕхЕЕат.ТехЕ=" "ТЪеп
ММСопЕго14 . Сотта 113== "Ореп’' Хл
ММСопЕго14.СоттапЛ="$оип6”
МздВох ("Введите фамилию!")
ЕхЕЕат. ЕпаЫес1=Тгие
ЕхЕЕат.ЗеГЕосиз
СоТо ткзиЪ
Епа ТЕ
11x111 еxV2 . ТехЕ -" "
ЕхЕТеху2.КеЕгезЪ
11х11Техо2. ТехЕ=""
ЕхЕТехо2. КеЕгезИ
ТЕ 8У=0 Ткеп СоТо т1
ТЕ ^=1 ТЪеп СоТо т2
ТЕ 5V=2 ТИеп СоТо тЗ
ТЕ 5V=3 ТИеп СоТо т4
ТЕ ^=4 ТИеп СоТо т5
ТЕ > 4 Ткеп СоТо тб
т1: 1ЫЬКл2. СарЕТоп - 5Е^(зV + 1) ’номер вопроса
ВапдотТге Т1тег
пд% = Кпд(1)*2+1 1 номер из первой группы записей 1-3
СоЗиЬ 100
СоТо тк
т2: 1ЫЫу2 .СарЕхоп = 8Е^(зV + 1)
КапботТхе Толпе г
пд% = Кпд(1)*2+4 ’номер из второй группы записей 4—6
Со8иЬ 100
СоТо тк
тЗ: 1Ь]-^V2 ,СарЕ1оп=8Ег (8V + 1)
КапдотТге Тгтег
пд% = КпсЦ1)*3*-7 ’номер из третьей группы записей 7—1С
СоЗиЬ 100
СоТо тк
т4 : 1Ы^V2 . СарЕ1оп=5Ег (ЗV + 1)
Еапскжйге ТЕтег
пд% = ВгкЕ(1)*3+11 ’номер из четвертой группы записей
111-14
Со8иЬ 100
СоТо шк^л-
т5: 1Ы1^2. СарМоп=5€г (з'У + 1)
Капботхге Типег
пд%^Кпб (]) *4+15 'номер из пятой группы записей 15—19
Со5иЬ 100
СоТо шк
11 I * л I - >
г» н .
! ' * г
тб: II зЬ <= 2 ТИеп бЬ=2 'коррекция двойки
II бЬ=2 ТЬ.еп
0=0
1Ы1п/2 . Сарк1оп=” " * &
1ггаМагк2.8Иом 1
Епд 1Е
1€ зЬ=3 Ткеп
(_=С
1ЫКу2 . Саркхоп-”"
Т гтМах кЗ. 81тои 1
Епс! I?
II зЬ—4 Ткеп
1-0
1ЫЬКг2. СарИоп-’’ ’’
1ппМагк4.8Иою 1
Епб II
II зЬ=5 Ткеп
1=0
1ЫЫу2 • СарЪЗ оп=” ”
1гл1Магк5,5кою 1
Епб II
'Вывод результата на сетевой принтер
Ореп и\\зе^ег\1рМ" Гог Оикрик Аз #2 Ьеп=2048
РгхпЪ #2, Гат; " бЬ
С1озе 2
’ Ргхпкег .ГопкЫате=чТ:йпез Нем Котап Сух” 'Вывод на
'личный принтер с установкой типа и размера шрифта
’Рг1П1ег.ГопкЗл ге=14
’Ргхпкег•Ргхи! Еаш, зЬ
'Ргхпкег .ЕпбСос - г- --
кхкЕаш..ЕпаЫеа=Тгие . ‘ л_ .. . .. 7; ‘:
схкЕ ап.. Тех к- •-ваа . .лэ а эс
кхкЕат.ЕеЪЕосиз у . .. .. .. . .. •
СоТо ткзиЬ
Епд
100 Ореп ”с:\1е!:\” + ЪхЪЫ1еЪ.ТехЪ + ".ЬхЬ" Гог Рап6от_
Аз #1 Ьеп=2048
Сек #], пд%, х
11XкТеxV2. Техк=г . V
11X^ТеxV2 -Рекгезк
Ъх11Техо2. Техк=г . о
Ьх1:Техо2 .Рекгезк
ПрО=2.П
С1озе 1
IЕ кхкТехо2. Техк=" "Ог ЪхкТехо2 . Техк=" "
Ог кхЬТехо2.ТехЬ=" "Ог кхЬТехо2 .Тех^" "
Ог кхкТехо2.Техк=" "Ог кхЬТехо2.Техк=" "
Ог кхкТехо2 .Техк=" "Ог Ьх11Техо2 .Тех11=" "
Ог ЬхЬТехо2.Техк=" "Ог Ьх11Техо2 .Техк=" "
Ог Ъх11Техо2 .Техк=" "Ткеп
пекоклр»!
ТЫРойзкагка. Сарк1оп= "Введите ответ"
1ЫРос1зкагка.РекгезЪ
11X11 ХА7Ос1 . Тех11=" "
1: х 11’^ос!. Ре ± г е з И
Ъх11\7\7ос1 # ЕпаЫес1=Тгие
ор11 \Лто(3. ЕпаЫес1=Тгие
СоТо гпкзиЪ
Е1зе
пе 1ю^=0
1ЫРос1зка2ка.СарЪ1оп="Нажмите кнопку с номером
ответа1
1Ы РосЬв ка г ка • Ре Г гез к
Епс! 1Г
Рекигп
тк: 2«V=’”,
2.0=""
2.П=""
ткзиЪ: Епс! 8иЬ
---------------------------
Ргдлтаке ЗиЬ стс10 С11ск()
1€ ЬхкГат. ЕпаЫес1=Тгие Ткеп стбО . Еп аЫей=Еа1зе
’ запрет стф пока не введена фамилия
1€ Ьх11П1е11 .ТехЬ=’г"0г Ьх^Тек. Тех11=" "Ог ИхкЫ1е11. Техк="
"Ог ЪхЪКГее. Техе="
"ТЪеп
ММСопего14.Соттапй="Ореп"
ММСопего14. Соттап6=и5оипс1”
МздВох ("Введите имя работы!")
ехеы1ее.ЕпаЫес1=Тгие
ехеИХее.. ЗееРосиз
СоТо ткзиЬ
Епб 1Г
ЪхеРат. Техе=" "Ог? ехеРапьТехе=" "
Ог ехеРат.Техе=" "Ог ехеРат.Техе=" "
Ог ЪхеГатп. Тех€^" "Ог ЪхЪРат.Техе=” "
Ог ехЬРат. Техе=" "Ог ехеРат,Техе=" " •
Ог ехГЕат. Техе=" "Ог х±Гат.ТехЪ=" ”
Ог ехеРат. Техе=" "ТИеп
ММСопёго14 . Сопппапс1="0реп"
ММСопе го 14 . СогшпапД^ "ЗоипсЗ"
МздВох ("Введите фамилию!")
ехеРаш.ЕпаЫеа=Тгие
ехеРат.ЗеГРосиз
СоТо ткзиЬ . !**• ЬЬь г г: * ’
Епй 1Г Л»:-,] !-
1± (ор1Л^осЕ7а1ие=Га15е) Апс! (пе!ю^=0) ТИеп
ЗV-ЗV + 1 тсчетчик вопросов
по="0" "нажата кнопка
про=по Ткеп
зЬ=зЬ + 1
^х11Ух7ос1. ТехЪ-"Да! ”
11х1/^Ллос1.Ке1:гезЬ
Рог 1=Т То 3000000
Нехе 1
ех1^ос!.Техе=" "
ехе^ос!. ВеегезЬ
Е1зе
ех1Л^ос1. ТехЪ="Нет! "
ехехЛгос!. Ре^гезИ
Рог 1=1 То 3000000
Нехе 1
СхелЛгос!. ТехЪ=" "
ехе\Лло<5. Ке^гезЪ
Епб
Е1зе
ехелЛгос!. Техе=Ъхе\^гос1. Техе
+ " 0 "
к хк\^о с!. Не Г г е з к
СоТо ткзиЬ
Епс! II
1ЫРоазкагка.Сарк±оп=" "
1ЫРоазка2ка.Ке1гезЬ
ОоН
ткзиЬ: Епа ЗиЬ
Рг1^аЬе ЗиЬ стс11 СИск() — Ргз^аке ЗиЬ стс19 СИск()
Эти процедуры отличаются от стаО__С1 з ск () в строке,
помеченной "*****", и здесь не приводятся.
Ргдлгаке ЗиЬ стам СИск ()
II ЬхЬГат. ЕпаЫеЗ^Тгие ТЬеп стам. ЕпаЫеа=Еа1зе
’ запрет ста, пока не введена фамилия
II ЬхЫЯХек.ТехЬ=""Ог ЬхЬШеЬ .Техк=" "
Ог ЬхЬЫХеЬ.ТехЬ=" "Ог ХхЬКХеЬ.Тех11=" "ТЬеп
ММСопЬгоХ4.Соттапа=”Ореп"
ММСопЬго14. Соттапа="5оипа"
МздВох ("Введите имя работы!")
ЬхЬЫХеЬ. ЕпаЫеа=Тгие
ЬхЬПХеЬ.ЗеЬЕосиз
СоТо ткзиЬ
Епа II
II ЬхЬГат.ТехЬ="мОг ЬхЬЕат.Тех11=" "
Ог ЬхЬГат.ТехЬ=" "Ог ЬхЬГат.ТехЬ=" "
Ог 1хЬГат.ТехЬ=" "Ог ЬхЬЕат.Тех1=" "
Ог ЬхЬЕат. ТехЬ=" "Ог ЬхЬЕат. ТехЬ=" ’’
Ог ЬхЬРат. ТехЬ=" "Ог ЬхЬН’ат. ТехЬ=" "
Ог ЬхЬЕат.ТехЬ=" "ТЬеп
ММСоп Ьго14.Соттапа="Ореп"
ММСоп1:го14 .Сопипапа="Зоила"
МздВох ("Введите фамилию!")
ЬхЬРат. ЕпаЫеа=Тгие
ЬхЬЕат.ЗеЬГосиз
СоТо ткзиЬ
Епа II
II (ор^ЛЛгоа. 7а1ие=Га1зе) Апа (пеЬо1л7=1) ТЬеп
ЬхЬ\ЛлосЗ •ТехЬ=Ьх1ЛЛгоа .Тех! +
ЬхЬХЛюа. КеГгезЬ
СоТо ткзиЬ
Епб ТЕ
ткзиЬ: Епб ЗиЬ
Рг1\7аие ЗиЬ стбТ_С] тек ()
ТЕ Ех ЕЕат. ЕпаЫеб=Тгие Ткеп стбТ. ЕпаЫеб=Еа1зе
’ запрет сгиб, пока не введена фамилия
ТЕ ЕхЕЫТеЬ,ТехЬ=" "Ог ЪхЪЫ1еЪ. ТехЕ=" "Ог ЪхЬЫТеЬ.ТехЕ=""
Ог ЕхЬМДеЪ.ТехЬ=" "Ткеп
ММСопЕго14. Соттапб="Ореп"
ММСопкго14 .Соттапб="3оипб"
МздВох ("Введите имя работы!")
ехЬИТеЕ .ЕпаЫеб==Тгие
ЬхЕШеЕ .ЗеЬЕосиз
ОоТо ткзиЬ
Епб ТЕ
ТЕ ЬхЕЕапиТехЕ=""Ог ЬхЕЕат-ТехЕ—" "Ог ЬхЬЕатп.ТехЬ—" "
Ог ЕхЕЕат.ТехЪ=" "Ог ЬхЕЕат.Тех1:=" "
Ог ЬхЕЕат.ТехЬ="
О г ЕхЕЕат.ТехЬ~"
Ог ЕхЬЕат.ТехЕ="
" Ог ЕхЬЕапи ТехЕ=" ”
"Ог ЕхЬЕат.ТехЬ—" "
"Ог ЕхЕЕат.ТехЕ=" "Ткеп
ММСопЕгоТ4 .Сопипапб="Ореп"
ММСоп11го14. Соттап<1=чт5оип6"
МздВох ("Введите фамилию!")
€х11Еат. ЕпаЫеД-Тгие
{.х-ЬЕат. Зе^Еосиз
Со То ткзиЬ
Епс! ТЕ
ТЕ (ор1ЛЛгос1. Уа1ие=Еа1зе) Апс! (пеЕоЕлг=1) Ткеп
ЬхЬ^ос!. Теxг=Ьx11VVосI. ТехЬ + " ."
Ех1:ЧЛло<Т.КеЕгезк
Со То ткзиЬ
Епй ТЕ
ткзиЬ: Епб 5иЬ
Рг-^аЬе ЗиЬ Еогт_Ьоаб ()
1-0
ЕхЬ\Лгос1. ЕпаЫеб=Еа1зе
ор Ь V V© б. ЕпаЫ е б=Еа 1 з е
ММСопЬгоИ.Соттапб="Ореп"
ММСопЬгоИ.Соттапб="5оипб"
Епб ЗиЬ
Ргз^аЬе ЗиЬ Рогт_0п1оаб(Сапсе! Аз ТпЬедег)
ММСоп I г о 13. С оттапб= " Оре п "
ММСопЬго13 .Сопппапс!="8оипс1"
Епс! 8иЬ
РгдлгаЬе 5иЬ тпиНе1рАЬоиЬ_СИск()
ГгтНеТрАЬоиЬ.ЗИом 1
Епс! 8иЬ
Ргл^аЬе 8иЬ тпиНе1р1пз! СЫск ()
ЕгтНе1р1пзI.ЗЬом 1
Епс! 8иЬ
Ргз^аЬе 8иЬ орЬ^Ллос!_С11ск ()
II ЬхЬЕат. ЕпаЫес!=Тгие ТЬеп стс!1 . ЕпаЫес!=Еа1 зе
1 запрет ста, пока не введена фамилия
II ЬхЬЫЬеЬ. ТехЬ=""Ог ЬхЬЫЬе!.ТехЬ=" "
Ог Ьх!1Ы1еЬ.Тех1:=" "Ог ЬхЬШе!.ТехЬ=" "ТЬеп
ММСопЬгс14. Соттапс!="Ореп,г
ММСопЬго14. Сотгпап<!~"5оипс!"
МздВох ("Введите имя работы*”)
Ьх-ЬЫ1е1:. ЕпаЫес1=Тгие
ИхЪЫХеЪ. 8е11Еосиз
СоТо ткзиЬ
Еп<1 1Г
II ЬхЬГат.ТехЬ=””Ог Ьх11Еат.ТехД=” ”
Ог ЬхЬРатфТехЬ=" "0г ЬхЬРагги ТехЬ^" "
Ог ЬхЬЕагп. ТехЬ=" "Ог ЬхЬГаки ТехЬ=" "
Ог ЬхЬГат. ТехЬ==,г "Ог Ьх11ЕапиТех11=" ’
Ог СхЬЕапиТехЬ=" "Ог ЬхЬГапи ТехЬ=" "
Ог ЬхЬЕапи ТехЪ=" "ТЪеп
ММСопЪгс14.Соттапд="Ореп"
ММСопЬго14. Соттапс1=" Боипс!"
МздВох ("Введите фамилию!")
ЬхЬГат.ЕпаЫ еб=Тгие
1хЬГат.ЗеЬГосиз
СоТо ткзиЬ
Епс! II
ЗV=ЗV + 1 1 счетчик вопросов
I Л
I Я
—
II про=Ьх1ЛАгод. ТехХ ТЬеп
I
К
е
Ъх^ЛЛгод. ТехЬ="Да! "
ЬхЪААлод. КеЁгезк г.
Рог 1 = 1 То 3000000
Ыех!: 1
сЗ. ТехЬ = ””
ЬхЬУтод.КеГгезЬ
**1 ор1:'\Люс1.Д/а1ие = Еа1зе ‘
Е1зе
Ьх^ЛЛлод > Тех11 = "Нет! "
гх^Х^од.Ке^гезЪ
Гог 1 = 1 То 3000000
ИехЬ 1
ЪхЬХ^од. ТехЪ = ” "
11 х 1^703. Ке^гезЪ
орЬ\Лгод.Уа1ие = ЕаХзе
Епа тг
1Ы Рода ка г ка. С арЬ 1 оп =
1ЫРодзкагка. Ке Ггезк
ЬхЬУЛгод-ЕпаЫед = Га1зе
орЫЛтод. ЕпаЬЛ ед
Бо1Ъ
ткзиЬ: ЕпЦ 5и_Ь
ГаД.З’е
1
4
I» и
" ' * Фх*
Рг1та€ё §иЬ ’Тхйёг!^ТГтёг ()
IГ 1Ы1<Кг2. СарМоп О
1ЫТ1те. СарЫоп
Епд II
""Шэй ^ч
5Ы(±)
ЛЪ1-
"Г
д.
Г
Ь = 1 ТЬеп I. г 4 • < .
Ь = 0
1ЫТ1тё.СарМоп = ЗЬгХЪ)
г* ММСопЫо12 .Соштапд = "Ореп”
ММСопЬго12.Соттапд = "Зоипд”
МздВох ("Извините, время вышло!")
БоТЬ
Епд
Ь = 0 ТЬеп Ь = 600
Епд 8иЬ
л
и. ’
Ь ХАМ'4яф *
Тб
.
.
7
з _
Л
.
• । ?Л€
< I’
РглллаЬе ЗиЬ ЬхЬЕат_С11ск ()
Гат = ЬхЬГат.Тех!: 'фамилия
ЬхЬГат.ЕпаЫес! = Га1зе 'недоступность поля текста
1: = 600 1 установка времени
зЬ = 0 'счетчик баллов
зхг = 0 'счетчик вопросов
про = "0”
сшс11 .ЕпаЫей = Тгие 'разрешение стб — введена
'фамилия
стс!2 ,ЕпаЫес1 = Тгие
стсЗЗ .ЕпаЫей = Тгие
стс!4 .ЕпаЫес! = Тгие
спк15.ЕпаЫес! = Тгие
стс!6 .ЕпаЫей = Тгие
стб7. ЕпаЫеб = Тгие
стс!8 •ЕпаЫес! = Тгие
стс19 .ЕпаЫеб. = Тгие
СШС10 .ЕпаЫед. = Тгие
стсИМ. ЕпаЫес! = Тгие
стсГГ .ЕпаЫеё. = Тгие
ЮоТЬ 'вызов общей процедуры
Епс! ЗиЬ
Рги^аЪе ЗиЬ ЬхЬЕагй_КеуРгезз (КеуАзсИ Аз 1пЬедег)
КеуАзстд = 13 ТЪеп
Гат = ДхЬГат.Тех!: 'фамилия
ЬхЬГат.ЕпаЫес! = Га1зе 'недоступность поля текста
Ь = 600 'установка времени
зЬ = 0 'счетчик баллов
з\? = 0 ’ счетчик вопросов
про = ”0"
спк11.ЕпаЫеб = Тгие 'разрешение сшб — введена фа-
милия
стб.2 .ЕпаЫей = Тгие
стс13 .ЕпаЫеб = Тгие
спкИ.ЕпаЫес! = Тгие
стс15.ЕпаЫед = Тгие
сш(16 .ЕпаЫей = Тгие
спк!7 .ЕпаЫед ~ Тгие
спк!8 . ЕпаЫей = Тгие
сш69, ЕпаЫед = Тгие
стс!Э. ЕпаЫес! = Тгие
спи!М. ЕпаЫес! = Тгие
стс!Т. ЕпаЫес! = Тгие
Оо]Е 'вызов общей процедуры
Епс! ТЕ
Епс! 8иЬ
Ргд^аЕе 8иЬ ЕхЕЫеЕ СИск ()
ЕхЕШеЕ.ЕпаЫес! = ЕаТзе 'недоступность поля текста
ТЕ ЕхЕЕат. ЕпаЫес! = Га1зе ТЪеп ЕхЕЕат. ЕпаЫес! = Тгие
ЕхЕЕат. ЗеЕЕосиз
Епс! 5иЬ
РггтаЕе 8иЬ ЕхЕЫ1еЕ_КеуРгёзз (КеуАзсИ Аз ТпЕедег)
ТЕ КеуАзсИ = 13 ТИеп
ЕхЕШ еЕ.ЕпаЫеб = Га1зе 'недоступность поля текста
ТЕ ЕхЕЕат. ЕпаЫеб = ЕаТзе ТЬеп ЕхЕЕат»ЕпаЫеб = Тгие
ЕхЕВат.ЗеЕГосиз
Епс! ТЕ
Епс! 8иЬ
Кода для ^гтМагк2 — ГгтМагкБ
Рг^аЕе 8иЬ Еогт_Ьоаб()
ММСопЕго12. Соттапс! = "Ореп”
ММСопЕго12. Соттапс! = "Зоипс!"
Епс! ЗиЬ
Кода для Мос!и1е1
(6епега1) -> (Бес1агаЕ1опз)
Туре 'У'ор ’ определение записи
V Аз 8Ег!пд
о Аз ЗЕгхпд
п Аз ЗЕгхпд
Епс! Туре
В1т 2 Аз \лор
Литература
1. Аляев Ю.А. Прикладное программирование. Сборник задач
(Алгоритмы. Разса!, С++). — Пермь: МО, 2001. 90 с.
2. Аляев Ю.А., Козлов О. А. Алгоритмизация и программирова-
ние: Конспект лекций по дисциплине «Основы устройства и примене-
ния вычислительной техники». 4.1. — Пермь: МО. 1990. — 210 с.
3. Бабушкин ИА. и др. Практикум по Турбо Паскалю. — М.:
АБФ, 1998. - 216 с.
4. Березин Б.И., Березин С.Б. Начальный курс С и С++. — М.:
Диалог-МИФИ, 1996. — 364 с.
5. Варфоломеев В.И. Алгоритмическое моделирование элементов
экономических систем: Практикум: Учеб, пособие. — М.: Финансы и
статистика, 2000. — 208 с.
6. Вендров А.М. 11роек гирование программного обеспечения эко-
номических информационных систем: Учебник. — М.: Финансы и ста-
тистика. 2000. — 352 с.
7. Джамса К. Учимся программировать на языке С++: Пер. с англ.
М.: Мир, 1997. 328 с.
8. Заморин А.П.. Марков А.С. Толковый словарь по вычислитель-
ной технике и программированию. — М.: Русский язык, 1988. —426 с.
9. Ершов А.П. Школьная информатика в СССР: от грамотности к
культуре // Информатика и образование. — 1987. №6. С. 3—11.
10. Информатика: Энциклопедический словарь/Сост. Д.А. Поспе-
лов. М.: Педагогика Пресс, 1994. — 468 с.
11. Козлов 0.4. Методологические проблемы обеспечения инфор-
мационной культуры специалистов современных Вооруженных сил //
Педагогическая информатика. — 1999. — №1. — С. 56 - 64.
12. Козлов О.А. Теоретико-методологические основы информацион-
ной подготовки курсантов военно-учебных заведений: Монография.
М.: МО, 1999. — 328 с.
«
* 3. Культин Н.Б. Программирование в ТигЬо Рааса] 7 .0 и Ое1рЫ. —
СПб.: ВНУ, 1997. — 288 с.
14. Назаров С.В., Мельников П.П. Программирование на М8 Уь
8иа! Вазгс: Учеб, пособие. — М.: Финансы и статистика, 2001. — 320 с.
15. Подбельский В.В. Язык Си++: Учебник. — М.: Финансы и
статистика, 2001. — 560 с.
16, Попов Э.В. ТЪ’НВО РАЗСАЬддя школьников: Учеб, пособие. —
М.: Финансы и статистика, 2001. — 528 с.
17. Семашко ГЛ,, Салтыков АЛ, Программирование на языке
Паскаль. — М,: Наука, 1988. — 286 с,
18. Турбо Паскаль 7,0.— Киев: Торгово-издательское бюро ВНУ,
1995. — 448 с.
19. Язык компьютера: Пер. с англ. / Под ред. и с предисл. В.М. Ку-
рочкина. — М.: Мир, 1989. — 264 с.
И
*» г : V «
V у /М
’ - . "йог. ' с ..ч<- •
_________ .. . г.лг . ,лэсххП Л.О видоИ .,
, *
- ..I> ; мЭДш х><г!^Т!>»*Ч-'япгкм шлижхтул ;»»яотои.а«1 ^ои Я
И'Л лм?1 .от./ М |
•<!}' ' , <.П*>ч;ЧоН'шТяэ| . -... т’. ,-Ч И.НшпдглЯ
.о 88$ - .?<*(?{ , УН Я (Г)
V еЛ/ м »• н. м! ;Н .Н .0 я тлят. > •.• ' ЮятрикН (
' ::. 1. Д>1 • • 1. ' . -. !
Учебно-справочное издание
Аляев Юрий Александрович
Козлов Олег Александрович
- 1
АЛГОРИТМИЗАЦИЯ И ЯЗЫКИ
ПРОГРАММИРОВАНИЯ
РАБСЩ С++, V18БАЬ ВА81С
° ' г' *'
Заведующая редакцией Л А. Табакова
Ведущий редак рор Л.Д. Григорьева
Младший редактор Н.А. Федорова
Художественный редактор Ю.И. Арпиохов
Технический редактор В Ю Фотиева
Корректор Т. М. Колпакова
Художник обложки О В Толмачев
ИБ№419]
Подписано в печать 08.05.2002. Формат 60x88/16 Печать офсетная
Гарнитура « Таймс» Усл.п.л. 19,6. Уч.-изд.л. 18,36
Тираж 4000 экз. Заказ 987. «С» 070
Издательство «Финансы и статистика?'
101000, Москва, ул Покровка, 7
Телефон (0)5) 925-35-02. факс (095) 925-09-57
Е-таЛ: таЙ'а^йпзШ.ги Ь11р:/й»^т.(т81а1.ги
ОАО «Типография «Новости»
107005, Москва, ул ф. Энгельса. 46
Внимание!
В Пермском региональном институте
педагогических информационных
технологий разработаны
программные продукты
для образовательных учреждений:
♦ программный комплекс для текущего
контроля знаний ОТез! (тексты программ
представлены в данной книге):
♦ программный комплекс для бланкового
тестирования ВТез1;
♦ система тестового контроля утомляемости
обучаемых ТТез1;
♦ методические материал ы, поддерживающие
изучение разделов "Алгоритмизация"
и "Программирование на языке Паскаль".
СО-диск с этими и другими
интересными программами Вы можете
заказать по адресу:
614060, г.Пермь. бульвар Гагарина,, 37-а.
Тел. (факс): (3422) 66-09-96.
Е-таИ: рпрИ@регт.га1с1.ги