«С.В. Краснов ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ TURBO PASCAL Учебное пособие Ульяновск 2004 2 УДК 681.3.06 (075) ББК 32.973-01я7 К78 Рецензенты: кандидат технических наук Вагин Э. Д.; кафедра сетей связи и систем ...»
Федеральное агентство по образованию
Ульяновский государственный технический университет
Кафедра «Информационные системы»
С.В. Краснов
ПРОГРАММИРОВАНИЕ
НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ
TURBO PASCAL
Учебное пособие
Ульяновск 2004
2 УДК 681.3.06 (075) ББК 32.973-01я7 К78 Рецензенты: кандидат технических наук Вагин Э. Д.;
кафедра сетей связи и систем коммутации Военного университета связи (филиал, г. Ульяновск) Утверждено редакционно-издательским советом университета в качестве учебного пособия Краснов, С. В.
К78 Программирование на языке высокого уровня TURBO PASCAL :
учебное пособие / С. В. Краснов. – Ульяновск : УлГТУ, 2004. – 75 с.
ISBN 5-89146-500- Рассматриваются вопросы разработки программ в среде TURBO PASCAL.
Уделено внимание основным понятиям, операторам ввода и вывода данных, составлению программ, реализующих ветвление, циклические процессы, работе с массивами, процедурами, файлами и записями. Ко всем изучаемым темам прилагаются контрольные вопросы для самопроверки и задания для самостоятельной работы по рассматриваемым темам.
Учебное пособие предназначено для студентов, обучающихся по специальности «Прикладная информатика (в экономике)» по дисциплине «Информатика и программирование», а также может использоваться в качестве учебного материала по аналогичным дисциплинам других высших учебных заведений.
Подготовлено на кафедре «Информационные системы».
УДК 681.3.06 (075) ББК 32.973-01я © Краснов, С. В., © Оформление. УлГТУ. ISBN 5-89146-500- Содержание ВВЕДЕНИЕ ……………………………………………………. …..............…...
1. ОСНОВЫ РАБОТЫ В СРЕДЕ ПРОГРАММИРОВАНИЯ TURBO
PASCAL…...1.1. Язык программирования PASCAL
1.2. Главное меню TURBO PASCAL
1.3. Порядок работы с меню
1.4. Порядок ввода и редактирования программ
1.5. Отладка и выполнение программ
1.6. Завершение работы с TURBO PASCAL
1.7. Команды редактора текста
1.8. Структура программы на языке TURBO PASCAL
1.9. Рекомендации по стилю программирования
1.10. Пример простейшей программы
2. РАЗРАБОТКА ПРОГРАММ НА ЯЗЫКЕ TURBO PASCAL.............……… 2.1. Операторы ввода вывода ……………………………...………………......... 2.2. Программирование разветвляющихся процессов
2.3. Программирование циклов…………………………………………............. 2.4. Массивы…………………………………………………………………….. 2.5. Подпрограммы……………………………………………………................. 2.6. Файлы……………………………………………………………………….... 2.7. Записи……………………………………………………….………………... 3. СПРАВОЧНАЯ СИСТЕМА TURBO PASCAL…………………..………….. Заключение………………………………………………………….….................. ПРИЛОЖЕНИЕ 1. Сообщение компилятора об ошибках
Ошибки на уровне DOS
Ошибки ввода-вывода
ПРИЛОЖЕНИЕ 2. Назначение функциональных клавиш
ПРИЛОЖЕНИЕ 3. Зарезервированные слова
ПРИЛОЖЕНИЕ 4. Стандартные библиотечные модули, встроенные функции и процедуры …………......……………………………………………. СПИСОК ЛИТЕРАТУРЫ………………………...…………………
ВВЕДЕНИЕ
Язык программирования TURBO PASCAL с 1985 года применяется в общеобразовательных и высших учебных заведениях в качестве основного языка программирования и предназначен для овладения практическими навыками в программировании в соответствии с требованиями государственного образовательного стандарта и квалификационных требований.В учебном пособии рассмотрены практические вопросы работы на ПЭВМ с программой TURBO PASCAL, которые позволяют в сжатые сроки овладеть навыками программирования. Материал пособия включает следующие разделы – оболочка программы TURBO PASCAL, работа с редактором, операторы ввода-вывода, циклы, массивы, подпрограммы, файлы, записи и сообщения об ошибках. Теоретический материал сопровождается контрольными вопросами и заданиями, позволяющими закрепить полученные знания.
Для овладения данным материалом необходимо использовать ПЭВМ, с целью составления программ на языке TURBO PASCAL, получения практических навыков и опыта работы с меню программы. В конце каждого раздела приведены практические вопросы.
Пособие предназначено для пользователей персональной ЭВМ, изучающих основы программирования по дисциплине «Информатика и программирование». Использование учебного пособия поможет освоить язык TURBO PASCAL в объеме программы и применить полученные знания для выполнения лабораторных и курсовых работ.
1. ОСНОВЫ РАБОТЫ В СРЕДЕ ПРОГРАММИРОВАНИЯ TURBO
PASCAL
Язык программирования Pascal (назван в честь выдающегося французского математика и философа Блеза Паскаля (1623—1662), разработан в 1968— гг. Никлаусом Виртом, профессором, директором Института информатики Швейцарской высшей политехнической школы. Язык Pascal, созданный первоначально для обучения программированию как систематической дисциплине, скоро стал широко использоваться для разработки программных средств в профессиональном программировании.Широкой популярности Pascal среди программистов способствовали следующие причины:
• Благодаря своей компактности, удачному первоначальному описанию Pascal оказался достаточно легким для изучения.
• Язык программирования Pascal отражает фундаментальные и наиболее важные концепции (идеи) алгоритмов в очевидной и легко воспринимаемой форме, что предоставляет программисту средства, помогающие проектировать программы.
• Язык Pascal позволяет четко реализовать идеи структурного программирования и структурной организации данных.
• Язык Pascal сыграл большую роль в развитии методов аналитического доказательства правильности программ и позволил реально перейти от методов отладки программ к системам автоматической проверки правильности программ.
• Применение языка Pascal значительно подняло «планку» надежности разрабатываемых программ за счет требований Pascal к описанию используемых в программе переменных, проверки согласованности программы при компиляции без ее выполнения.
• Использование в Pascal простых и гибких структур управления:
ветвлений, циклов.
Для повышения качества и скорости разработки программ в середине 80-х гг. была создана система программирования Turbo Pascal. Слово Turbo в названии системы программирования — это отражение торговой марки фирмыразработчика Borland International, Inc. (США).
Первая строка содержит все команды главного меню. В последней строке экрана приведены основные доступные в каждый текущий момент функциональные клавиши с указанием их назначения. Рабочее поле (окно редактирования) предназначено для вывода на экран и редактирования программы. Окно редактирования имеет по периметру рамку. На рамке окна указывается:
- сверху слева закрывающая кнопка;
- сверху в средине путь и имя файла;
- внизу слева указывается местоположение курсора в редактируемой программе (первая цифра – номер строки, вторая – номер колонки текста).
Закрытие окна осуществляется щелчком левой кнопки мыши по закрывающей кнопке. Переход между программами, расположенными в различных окнах, осуществляется левым щелчком мыши выбором команды WINDOW и команды Next. Синоним [F6].
Строка меню TURBO PASCAL Строка меню TURBO PASCAL (TP) активизируется нажатием функциональной клавиши [F10] или левым щелчком мыши. Строка меню содержит имена следующих меню:
File (файл): позволяет выполнять все основные операции с файлами (создавать новые, загружать имеющиеся, сохранять созданные и отредактированные файлы, выводить на печатающее устройство содержимое этих файлов);
Edit (редактирование): позволяет выполнять все основные операции редактирования текста (копировать, вставлять, удалять фрагменты текста, а также восстанавливать первоначальный вариант редактируемого текста);
Search (поиск/замена): позволяет осуществлять поиск фрагментов текста и при необходимости производить замену найденного фрагмента новым;
Run (выполнение): позволяет запускать программу, находящуюся в рабочей зоне, а также при необходимости пошагово выполнять данную программу или её часть;
Compile (компилирование): позволяет осуществить компиляцию программы, которая находится в рабочей зоне;
Debug (отладка): содержит команды, облегчающие процесс поиска ошибок в программе (Breakpoints – точки остановки, окно отладки Watch, окно используемых программ, окно регистров, окно выходных результатов и некоторые другие);
Tools (сервис): позволяет выполнять некоторые программы, не выходя из TP;
Options (параметры): позволяет установить необходимые для работы параметры компилятора и TP;
Window (окно): позволяет выполнить все основные операции с окнами (открывать, закрывать, перемещать, изменять размер);
Help (справка): позволяет получить имеющуюся в системе справочную информацию.
Необходимое подчиненное меню активизируется (открывается) при помощи комбинации клавиш [Alt + клавиша первой буквы имени подчиненного меню], а также путем последовательной активизации клавиш [F10] и первой буквы имени подчиненного меню. Выйти из подчиненного меню можно, нажав клавишу [ESC].
Рассмотрим некоторые пункты меню, обеспечивающие решение задачи в
TURBO PASCAL.
Команда File содержит функции, управляющие работой с файлами.New – удаление текущей программы из памяти и очистка экрана;
Open – загрузка файла с диска и переход в режим экранного редактирования;
Save - сохранение на диске текущего редактируемого файла и продолжение редактирования. Синоним команды – [F2];
Save as – запись текущего файла на диск под новым именем (можно задать также другие диск и каталог). После этой команды файл с новым именем становится текущим (это отражается соответствующей информацией в правом верхнем углу окна редактирования);
Save all – запись всех файлов;
Change dir – команда для изменения текущего каталога (здесь указывается имя диска или каталога, который до следующего изменения будет считаться текущим);
Print, Print setup – для работы с принтером;
DOS shell – временный выход в операционную систему, использовался ранее в ЭВМ, имеющих небольшую оперативную память (например, для выполнения команд удаления или переименования файлов). Возврат в Turboсреду происходит после ввода команды Exit. Содержимое редактируемого файла не изменяется:
Exit – выход из Turbo-среды. Синоним [Alt+X].
Команда Edit активизирует встроенный редактор.
трассировкой и выполнением программы.
Run – запуск программы на выполнение (при необходимости выполняется трансляция программы). По завершении работы программы происходит возврат в интегрированную Turbo-среду. Синоним [Ctrl+F9];
Step over – пооператорное выполнение программы. В отличие от Trace при обращении к процедуре или функции вход в них не производится, а они рассматриваются как один оператор. Синоним [F8];
Trace into – покомандное выполнение (трассировка) программы. Синоним [F7];
Go to cursor – выполнение программы (без трассировки) от текущей строки;
Program reset – выход из режима отладки: все точки прерывания и переменные в окне просмотра сохраняются, но по командам Run, Trace или Step выполнение начинается с начала программы. Синоним [Ctrl+F2];
User screen – показ результатов выполнения программы, выведенных на экран. Для возврата достаточно нажать любую клавишу. Синоним – [Alt+F5].
Команда Compile (компиляция) – перевод программы с языка Pascal, например fist.pas, в исполняемую программу в машинных кодах fist.exe. В этом пункте меню можно определить место записи откомпилированной программы или в оперативную память, или на магнитный диск. Например: для записи на магнитный диск выбрать Destination Memory (Disk) – Disk.
Все команды имеют собственные подменю, а некоторые - и несколько вложенных подменю. Для входа в главное меню следует нажать клавишу [F10], для выхода из него – [Esc] (СБРОС).
Вызов функций подменю осуществляется одним из трех вариантов:
- с клавиатуры с помощью клавиш управления указателем мыши: влево, вправо, вверх или вниз, и нажатием клавиши [Enter] для выполнения команды;
- с клавиатуры нажатием соответствующих горячих клавиш (в данном пособии они названы синонимами);
- с помощью мыши путем левого щелчка по соответствующему пункту меню.
1. Начальная настройка среды программирования:
Создать на диске С: каталог для файлов программ с именем по номеру группы.
Выполнить начальную настройку среды программирования.
Выбрать команду Directories (Каталоги) в меню Options (Параметры) главного окна, в поле ввода EXE & TPU directories окна Directories ввести имя каталога с указанием пути к созданному каталогу, например С:\132 или A:\132.
2. Создание новой программы.
Выбрать пункты меню File, New.
3. Загрузка имеющейся на диске программы.
Выбрать пункты меню File, Open (синоним [F3]), затем в появившемся окне (Files) выбрать папку, где находится нужный файл, затем щелкнуть по кнопке Open.
4. Выбор диска.
Выбрать пункты меню File, Change Dir в появившемся окне Change Directory щелкнуть двойным левым щелчком по надписи Driver и выбрать соответствующий диск, нужную папку, а затем щелкнуть левым щелчком мыши по кнопке [Ok].
5. Сохранение файла.
Выбрать пункты меню File, Save, синоним [F2], в появившемся окне задать имя файла, выбрать соответствующую папку, где сохранить файл, а затем щелкнуть левым щелчком мыши по кнопке [Ok].
6. Компилирование имеющейся в окне программы.
Выбрать команду Compile, затем выбрать пункт меню Compile и нажать клавишу [Enter]. Синоним – [Alt+F9].
7. Выполнение имеющейся в окне программы.
Выбрать команду Run, затем выбрать пункт меню Run и нажать клавишу [Enter]. Синоним – [Ctrl+F9].
1.4. Порядок ввода и редактирования программ Набор строки заканчивается нажатием клавиши [Enter] для перехода указателя на новую строку.
Вставка символа – подвести указатель на нужное место и набрать недостающие символы.
Удаление символа. Подвести указатель на удаляемый символ:
- нажатием клавиши [Del] удаляется выбранный символ, а строка сжимается справа к указателю мыши;
- нажатием клавиши [Back Space] удаляется символ, стоящий слева от указателя, а строка сдвигается влево от указателя мыши.
Вставка строки. Маркер установить на конец строки, после которой вставить пустую (или на начало, перед которой вставить пустую), и нажать Enter.
Удаление строки. Маркер установить на нужную строку и нажать клавишу [CTRL + Y].
Работа с блоком (фрагментом) программы:
- установить указатель на начало выделяемого блока, пометить начало блока нажатием клавиш [Ctrl + KB];
- установить указатель на конец выделяемого блока, пометить конец блока нажатием клавиш [Ctrl + KK];
- перенос блока: установить указатель на место, куда необходимо перенести выделенный фрагмент, перенести выделенный фрагмент нажатием клавиш [Ctrl + KV];
- копирование блока: установить указатель на место, куда необходимо скопировать выделенный фрагмент, скопировать фрагмент нажатием клавиш [Ctrl + KC];
- удаление выделенного блока (фрагмента) нажатием клавиш [Ctrl + KY];
- сохранение выделенного блока на магнитном диске нажатием клавиш [Ctrl + KW], затем ввести имя сохраняемого блока;
- чтение сохраненного блока нажатием клавиш [Ctrl + KR], ввести имя вставляемого в программу файла;
Сохранение файла. Для сохранения файла нажать [F2] (при первом сохранении ввести имя файла, в котором будет сохранена программа).
1. Вызовите компилятор языка Turbo Pascal нажатием клавиши [Alt + F9] и откомпилируйте набранную программу (из меню выбрать команду Compile, затем пункт подменю Compile).
При отсутствии ошибок в программе после компиляции высвечивается сообщение Compile Successful. Press any key. Компилирование завершено успешно. Для продолжения нажмите любую клавишу.
При наличии ошибок высвечивается строка, где допущена синтаксическая ошибка, номер ошибки и краткое ее пояснение. После устранения ошибок компиляцию повторить.
2. Выполнение программы. Для запуска программы на выполнение выбрать команду Run, затем выбрать пункт меню Run и нажать клавишу [Enter].
Синоним – [Ctrl+F9].
3. Просмотр результатов выполнения программы [Alt+F5].
4. Возврат в редакционное окно осуществляется нажатием любой клавиши.
Завершить работу с TP можно с помощью комбинации клавиш [Alt + X] или команды Quit меню File (кратко – [Alt + F], [Q]).
Если возникла необходимость временно выйти из TP, например, для ввода команд в ответ на подсказку MS-DOS, вызовите команду File/DOS Shell. При этом TP останется в памяти, но управление будет передано DOS. После выхода из TP Вы можете ввести команды DOS или запустить другие программы. Когда Вы будете готовы вновь вернуться в TP, наберите в командной строке команду EXIT и нажмите клавишу [Enter]. При этом TP появится в том же состоянии, в котором была, когда Вы выходили из нее.
В табл. 1.1 перечислены клавиши и комбинации клавиш для управления курсором, вставки и удаления символа и строки, операций с блоками, поиска и замены.
[Ноmе] Курсор переводится на начало строки [End] Курсор переводится на конец строки [Ctrl+Home] Курсор переводится на первую строку экрана [Ctrl+End] Курсор переводится на последнюю строку экрана [PgUp] Продвижение по файлу на одну страницу назад [PgDn] Продвижение по файлу на одну страницу вперед [Ctrl+PgUp] Курсор переводится в начало файла [Ctrl+PgDn] Курсор переводится в конец файла Экран сдвигается «вверх» по тексту (при этом курсор [Ctrl+W] Экран сдвигается «вниз» по тексту (при этом курсор [Ctrl+Z] [Ctrl+Q]+[B] Курсор переводится в начало блока [Ctrl+Q]+[K] Курсор переводится в конец блока [Ctrl+Q]+[P] Курсор перемещается на исходную позицию после поиска [Ctrl+P] Ввод специального символа [Del] Удаление символа, указываемого курсором [Ins] Переключение между режимами вставки и замены [Backspace] Удаление символа слева от курсора [Ctrl+T] Удаление слова справа от курсора [Ctrl+Q]+[Y] Удаление части строки от курсора до конца строки [Ctrl+Y] Удаление строки, указываемой курсором Восстановление строки, удаленной комбинацией клавиш [Ctrl+Q]+[L] [Ctrl+Y], в том месте текста, где она была расположена [Ctrl+N] Вставка строки [Shift+стрелки] Расширение маркируемого блока [Ctrl+K]+[B] Указание начала маркируемого блока [Ctrl+K]+[K] Указание конца маркируемого блока [Ctrl+K]+[T] Маркирование слова [CtrI+K]+[H] Снятие/восстановление маркировки [Ctrl+K]+[I] Сдвиг маркированного блока вправо [Ctrl+K]+[U] Сдвиг маркированного блока влево [Ctrl+K]+[C] Копирование блока в то место, где установлен курсор Перенос маркированного блока в то место, где установлен [Ctrl+K]+[V] [Ctrl+Ins] Перенос блока в буфер промежуточного хранения (Edit/ [Shift+Del] [Shift+Ins] промежуточного хранения в то место, где установлен [Ctrl+K]+[Y] Удаление маркированного блока [Ctrl+K]+[P] Печать маркированного блока (File/Print) [Ctrl+K]+[R] Вставка текста из файла в позицию, указываемую [Ctrl+K]+[W] Запись блока в файл (Write) оптимизировать заполнение интервалов между словами [Ctrl+O]+[F] /табуляциями)(Орtions/Еnv. /Editor/Optimal Fill) Поиск указанной строки (Search/Find). Для указания опций [Ctrl+Q]+[F] Поиск указанной строки и замена (Search/Replace). Для [Ctrl+Q]+[A] указания опций открывается специальное окно [Ctrl+Q]+[ [ ] указываемому курсором (удобно искать границы [Ctrl+Q]+[] ] указываемому курсором (удобно искать границы [Ctrl+K]+[n] Установка отметки в тексте, 0 — цифра от 0 до [Ctrl+Q]+[n] Перевод курсора на отметку в тексте, и — цифра от 0 до [Ctrl+Q]+[W] Перевод курсора на позицию, где дано сообщение об ошибке [Ctrl+L] Продолжение поиска/замены с установленными ранее опциями [Ctrl+U] Прерывание поиска/замены 1.8. Структура программы на языке TURBO PASCAL Программа реализует алгоритм решения задачи. В ней программист записывает последовательность действий, выполняемых над определенными данными с помощью определенных операций для реализации заданной цели.
Основные характеристики программы: точность полученного результата, время выполнения и объем требуемой памяти.
Программа на языке Pascal состоит из строк. Набор текста программы осуществляется с помощью встроенного редактора текстов системы программирования Turbo Pascal или любого другого редактора формата DOS.
Максимальный размер программы ограничен. Компилятор позволяет обрабатывать программы и библиотечные модули, в которых объем данных и генерируемый машинный код не превышают 64 Кбайт каждый. Если программа требует большего количества памяти, следует использовать библиотечные модули (;TPU-файлы) или оверлейные структуры.
Блочная структура обеспечивает структуризацию программ на уровне исходных текстов. В идеальном случае программа на языке Pascal состоит из процедур и функций, которые вызываются для выполнения из раздела операторов основной программы.
определение констант описание переменных описание процедуры Синтаксическая диаграмма блока:
Исходя из этого можно записать структуру программы следующим образом:
program ;
procedure ;
Заголовок программы несет чисто смысловую нагрузку и может отсутствовать, однако, рекомендуется всегда его записывать (на латинском регистре) для быстрого распознавания нужной программы среди листингов других программ. После заголовка следует программный блок, состоящий в общем случае из семи разделов:
• списка имен подключаемых библиотечных модулей (он определяется зарезервированным словом uses);
• описания меток;
• описания констант;
• определения типов данных;
• описания переменных;
• описания процедур и функций;
• операторов.
Любой раздел, кроме раздела операторов, может отсутствовать. Разделы описаний (кроме uses, который всегда расположен после заголовка программы) могут встречаться в программе любое количество раз и следовать в произвольном порядке. Главное, чтобы все описания объектов программы были сделаны до того, как они будут использованы.
РАЗДЕЛ USES
Этот раздел состоит из зарезервированного слова uses и списка имен подключаемых стандартных и пользовательских библиотечных модулей.Формат:
uses,,... ;
Пример.
uses Crt;
РАЗДЕЛ ОПИСАНИЯ МЕТОК
Перед любым оператором языка Pascal можно поставить метку, что позволяет выполнить прямой переход на этот оператор с помощью оператора перехода go to из любого места программы.Примечание. Нельзя выполнять переход на оператор в теле цикла, внутрь составного оператора.
Метка состоит из имени и следующего за ним двоеточия. Именем может служить идентификатор или цифра. Максимальная длина имени метки ограничена 127 символами. Перед употреблением метка должна быть описана.
Раздел описания меток начинается зарезервированным словом label (метка), за которым следуют имена меток, разделенные запятыми. За последним именем ставится точка с запятой.
Формат:
Пример.
Metka1, Metka2;
После записи метки в разделе операторов следует двоеточие, показывающее компилятору, что идентификатор используется как метка:
Ml: {Использование Ml в разделе операторов} M2: {Использование M2 в разделе операторов} Если метка описана, но в разделе операторов не используется, то ошибки при этом не возникает, т. е. метки можно описывать и применять по мере расширения программы.
РАЗДЕЛ ОПИСАНИЯ КОНСТАНТ
В разделе описания констант производится присваивание идентификаторам констант постоянных значений. Раздел начинается зарезервированным словом const, за которым следует ряд выражений, присваивающих идентификаторам постоянные числовые или строковые значения. Выражения присваивания отделяются друг от друга точкой с запятой.Формат:
Пример.
Maxind: word = 100; {Типизированная константа} Name = 'Петя'; {Строковая константа} Code = $124; {Константа — шестнадцатеричное значение}
РАЗДЕЛ ОПИСАНИЯ ТИПОВ ДАННЫХ
Тип данных может быть либо описан непосредственно в разделе описания переменных, либо определяться идентификатором типа. Стандартные типы не требуют описания в отличие от типов, образованных пользователем. Строго говоря, синтаксис языка Pascal не требует обязательного определения идентификатора типа и в последнем случае, так как тип можно задать перечислением в разделе описания переменных. Выбор описания типа зависит, таким образом, только от программиста и специфики программы.Раздел описания типов данных начинается зарезервированным словом type, за которым следуют одно или несколько определений типов, разделенных точкой с запятой.
Формат записи:
Пример.
LatLetter = ('А'..'z');
Days = 1..31;
Matr = array[1..10] of integer;
Каждое описание задает множество значений и связывает с этим множеством некоторое имя типа. Например, в данном описании тип LatLetter определяет множество букв латинского алфавита. Days — множество целых чисел от 1 до 31, Matr — массив из 10 целых чисел.
РАЗДЕЛ ОПИСАНИЯ ПЕРЕМЕННЫХ
Каждая встречающаяся в программе переменная должна быть описана.Описание обязательно предшествует использованию переменной. Раздел описания переменных начинается зарезервированным словом var (variable — переменная), затем через запятую перечисляются имена переменных и через двоеточие следуют их тип и точка с запятой. Формат:
В рассматриваемом примере программы три переменных А, В и Proizved могут принимать целочисленные значения, описаны следующим образом:
А,В, Proizved : integer;
РАЗДЕЛ ОПИСАНИЯ ПРОЦЕДУР И ФУНКЦИЙ
В общем случае подпрограмма имеет ту же структуру, что и программа.Для описания подпрограмм используются зарезервированные слова procedure и function, которые записываются в начале подпрограммы. Формат процедуры:
procedure {} ;
Формат функции:
РАЗДЕЛ ОПЕРАТОРОВ
В программе на языке Pascal раздел операторов является основным, так как именно в нем с предварительно описанными переменными, константами, значениями функций выполняются действия, позволяющие получить результат, ради которого создавалась программа.Раздел операторов начинается зарезервированным словом begin (начало), далее следуют операторы языка, отделенные друг от друга точкой с запятой.
Завершает раздел зарезервированное слово end (конец) с точкой.
Например:
Write ('Введите значение целого числа А >');{Вывод запроса на экран} Readln (A); {Ввод значения А с клавиатуры} Write ('Введите значение целого числа В >');
Readln (В);
Proizved := А * В; {Вычисление переменной Proizved} Write ('Произведение чисел ',А,' и ',В,' = ',Proizved); {Вывод ответа} Операторы выполняются строго последовательно в том порядке, в котором они записаны в тексте программы в соответствии с синтаксисом и правилами пунктуации.
Слова begin и end являются аналогом открывающей и закрывающей скобки в обычных арифметических выражениях.
КОММЕНТАРИИ
Для лучшего понимания программы в ней записывается пояснительный текст — комментарий. Комментарий можно записать в любом месте программы, где разрешен пробел. Текст комментария ограничен символами { } или (* *) и может содержать любые комбинации латинских и русских букв, цифр и других символов алфавита языка Pascal. Ограничений на длину комментария нет, он может занимать несколько строк.Примеры.
{Начало программы} или (*Начало программы*) {Вывод запроса на экран} {Ввод значения А с клавиатуры} В ограничителях (* *) пробелы между скобкой и звездочкой запрещены. В тексте не должны находиться знаки ограничителей, с которых комментарий начинается. Например, текст комментария {Пример {1} задания {4}} вызовет ошибку при компиляции. Однако ограничители { } можно вложить в (* *) и наоборот: (*Пример{1} задания {4} *) или {Пример (* 1 *) задания (* 4 *)}.
Комментарий игнорируется компилятором и поэтому никакого влияния на программу не оказывает. По месту положения в программе комментарии можно подразделить на четыре класса: объясняющие назначение программы, поясняющие смысл идентификаторов переменных и констант, описывающие логически обособленные части программы, объясняющие трудно понимаемые элементы алгоритма. В удачно прокомментированной программе легко найти ошибку, проанализировав различие между замыслом автора (в комментариях) и реализацией (в тексте программы).
Ограничители { } и (* *) удобно использовать при отладке программ. В процессе отладки часто требуется временно исключить выполнение какой-либо части программы. Конечно, этого можно добиться, уничтожив временно ненужные операторы или обойдя их с помощью оператора go to. Однако оба этих способа неприемлемы по ряду совершенно понятных причин: повторный набор вновь понадобившихся операторов, путаница с операторами go to и т. д.
Гораздо удобнее просто заключить временно ненужную часть программы в {} или (* *), которая будет восприниматься компилятором как комментарий.
Например:
Write ('Введите значение целого числа А >'); {Вывод запроса на экран} Readln (A); {Ввод значения А с клавиатуры} C:= А * В; {Вычисление переменной C} {Временно невыполняемая часть программы При необходимости { } или (* *) можно убрать, и программа будет выполняться в полном объеме.
БИБЛИОТЕЧНЫЕ МОДУЛИ ПОЛЬЗОВАТЕЛЯ
Понятие библиотечного модуля является одним из основных в идеологии программных систем на языке Turbo Pascal. Именно они служат средством создания библиотек подпрограмм (процедур и функций). Библиотечный модуль — это результат компиляции в режиме Compile с установленной директивой Destination = Disk одной или нескольких процедур и функций.Модуль имеет имя, при упоминании которого в разделе uses любой программы можно получить доступ к каждой из находящихся в нем процедур или функций.
Создание библиотечного модуля требует определенной организации с применением зарезервированных слов unit, interface, implementation, begin, end. Система сама определяет структуру компилируемого файла и создает соответственно.TPU-файл (при обнаружении unit и т. д.) или.ЕХЕ-файл (при отсутствии unit, implementation и т. д.). В первом случае формируется библиотечный модуль, во втором — готовый к выполнению по вызову из DOS загрузочный модуль.
1.9. Рекомендации по стилю программирования Накопленный опыт программирования привел к формированию следующих рекомендаций по составлению наглядных и легко читаемых программ.
1. Стандартизация стиля программирования заключается в том, что необходимо всегда придерживаться одного способа программирования, записи программы.
2. С целью рационального размещения текста не следует операторы программы писать сплошным текстом.
Для четкого выявления вложенности управляющих структур требуется особым образом располагать операторы в тексте, так что служебные слова, которыми начинается и заканчивается тот или иной оператор, записываются на одной вертикали, а все вложенные в него операторы записываются с некоторым отступом вправо. При записи конструкций языка более глубоких уровней вложенности следует сдвигать их от начала строки вправо. Каждое описание и каждый оператор следует писать с новой строки. Продолжение описаний и операторов на новые строки надо сдвигать вправо. Следует избегать длинных строк.
3. Рекомендуется любую программу сопровождать комментариями, поясняющими назначение всей программы и отдельных ее блоков, процедур, функций.
4. Имена для объектов программы надо выбирать так, чтобы они наилучшим образом соответствовали этим объектам, отражали их назначение.
5. Списки идентификаторов в блоках описания следует упорядочивать — это облегчает поиск в них нужных элементов.
6. Программирование сверху вниз. В процессе разработки алгоритма и программы следует начинать с самой общей модели решения, постепенно уточняя ее до уровня отдельного блока и затем детально прорабатывая каждый блок.
Пример простейшей программы и выполняемые действия представлены в таблицах 1.2.1. и 1.2.2.
№ Составны часть программы Описательная часть программы PROGRAM – служебное слово начала программы KRUG – имя программы (набирать на латинском регистре) 2 CONST – начало раздела описания констант 3 PI=3.14; – запись в ОП значение константы PI 4 VAR – начало раздела описания переменных R:INTEGER; – Выделение в ОП места для размещения переменной R – целого типа S:REAL; – Выделение в ОП места для размещения переменной S – вещественного типа 7 BEGIN – начало операторной части программы 8 WRITE (‘введи R ’); – вывод на экран комментария – введи R 9 READLN (R); – ввод значения переменной R с клавиатуры в ОП 10 S := PI * R * R; – вычисление значения S и занесения его в ОП 11 WRITELN (‘радиус круга’); – вывод на экран комментария 12 WRITELN (‘ R = ’,R:5:2 ); – вывод на экран R = и значение R 13 WRITELN (‘площадь круга’); – вывод на экран комментария 14 WRITELN (‘S = ‘, S : 5 : 1); – вывод на экран S = и значение S 15 END. – конец программы 1. Что включают в себя имена данных?
2. Сколько в следующем списке зарезервированных слов:
X, Program, Y, Summa, MyMoney, Произведение, Vova, begin, end, if, repeat, Read?
3. Из каких разделов состоит программа?
4. Какие действия производятся при выполнении раздела VAR?
5. В каких случаях надо использовать переменные:
1) если в программе используется какое-то число?
2) если в вычислениях какой-то операнд постоянно меняет свое значение?
3) если операнд в выражении хотя бы один раз меняет значение?
6. Какие заголовки программ правильны:
1) program Zarplata?
3) program Summa Nalogov?
4) программа Teach_Kurs?
5) program 12Kurs2?
6) program Summa_Elementov?
7. Какая структура программы правильная?
7. Какой из перечисленных разделов обязателен в программе:
4) раздел begin.. end.?
8. Какие из комментариев неправильны:
1) { Программа вычисляет логарифм введенного числа};
2) (* Это тоже комментарий *);
3) {{ Комментарий в комментарии }};
4) (* { И это комментарий в комментарии } *).
2. РАЗРАБОТКА ПРОГРАММ НА ЯЗЫКЕ TURBO PASCAL
2.1.1. Оператор присваивания ‘S’ – имя переменной, ‘:=’ – знак присваивания, ‘A+B’ – выражение.После выполнения такой строки в памяти ЭВМ будет записано значение или вычисленное выражение, указанное после знака присваивания.
2.1.2. Операторы ввода клавиатура После набора на клавиатуре цифры 7 и нажатия клавиши [Enter], значение переменной указанной в скобках будет занесено в ОП (более одного значения вводится через пробел или после каждого операнда нажимают клавишу [Enter]).
2.1.3. Оператор вывода Пусть в ОП будут записаны значения переменных в ячейках:
S : = 12; – целое число K: = 35.64758; – вещественное число Вывод из ОП на экран сообщения и (или) значение переменной.
Примечание:
После выполнения операторов Read или Write указатель остается на месте вывода (ввода) данных, а после выполнения операторов Readln или Writeln указатель перемещается на новую строку. Пример: что будет выведено на экран после выполнения фрагмента программы ?
A:=5; b:=7; c:=10; d:=17; e:=6;
Write(a);
Writeln(c,d);
Writeln(e);
Форматированный вывод Для целого числа после имени переменной через двоеточие указывается количество позиций, отводимых для вывода числа, например:
WRITE ( ‘S = ‘,S : 4 ).
Для вещественного числа после имени переменной через двоеточие указывается количество позиций, отводимых для вывода числа, вторая цифра указывает на количество позиций после запятой, например:
Вопросы:
1. Какие процедуры служат в Pascal для выполнения операций вводавывода?
2. Напишите оператор ввода переменной К с клавиатуры?
3. Для каких целей служит оператор присваивания.
4. Чем отличаются операторы ввода Read и Readln?
5. Для каких целей служит оператор Write?
6. Чем отличаются операторы вывода Write и Writeln?
7. Для чего в процедурах вывода определяется ширина поля вывода?
8. Какие обозначения используются в форматах вывода?
1. Составить программу для вычисления высот треугольника со сторонами а, b, c по формулам:
где p=(a+b+c)/2.
2. Составьте программу вычисления площади прямоугольника по введенным в диалоге двум сторонам. Запишите текст программы на диск под именем okr.pas, откомпилируйте и проверьте ее действие.
3. Составьте программу вычисления длин высот треугольника, у которого длины сторон А, В, С.
4. Составьте программу вычисления величины силы тока на участке электрической цепи сопротивлением R Ом при напряжении U В.
5. Составьте программу вычисления напряжения на каждом из последовательно соединенных участков электрической цепи сопротивлением R1, R2, R3 Ом, если сила тока при напряжении U В составляет I А.
6. Напишите программу, которая вводит значения трех переменных А, В, С типа Real и выводит их сумму. Ввод каждого значения произвести с отдельной строки. Результат также помещается на отдельную строку. При составлении программы обеспечьте приглашение к вводу данных.
7. Составьте программу, которая выводит на экран компьютера заставку, аналогичную следующей:
8. Напишите программу, которая вводит значения четырех переменных А, В, С, D типа integer и выводит их сумму. Ввод пары значений А и В произвести на одной строке, С и D — на другой. Результат вывести на отдельную строку и курсор оставить на той же строке.
2.2. Программирование разветвляющихся процессов Условный оператор IF используется для изменения естественного порядка выполнения операторов программы. Если условие истина, то выполняется первая ветвь, иначе – вторая. Таким образом, условный оператор – это средство ветвления вычислительного процесса.
Составной оператор IF имеет 2 формы: полное ветвление и сокращенное.
2.2.1. Ветвление полное:
Примечание:
1. В операторе IF перед ELSE точка с запятой не ставится.
2. Условный оператор управляет только одним оператором, поэтому, если после ключевых слов Then и ELSE требуется произвести более одного действия, то необходимо использовать операторные скобки Begin End.
3. Внутри операторных скобок после каждого оператора точка с запятой ставится.
Пример выполнения задачи на полное ветвление Задача № 1. Вычислить корни квадратного уравнения общего вида ax + bx + c = 0 в области действительных чисел.
Программа имеет вид :
(* ОПРЕДЕЛЕНИЕ КОРНЕЙ КВАДРАТНОГО УРАВНЕНИЯ *)
BEGIN WRITE('ВВЕДИТЕ КОЭФФИЦ. А,В,С '); {Вывод сообщения} WRITELN ('A=',A,'B=',B,'C=',C); {Эхо-печать ввода исходных данных} WRITELN ('X1=',X1,'X2=',X2); {Вывод результата } условия} Если вторая ветвь отсутствует, тогда имеет место сокращенное ветвление.Фрагмент программы представлен ниже.
2.2.2. Ветвление сокращенное:
2.2.3. Оператор выбора:
Оператор case работает следующим образом. Сначала вычисляется значение выражения-селектора, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора.
Если ни одна из констант не равна текущему значению селектора, выполняется оператор, стоящий за словом ELSE, при его отсутствии выполняется оператор, стоящий за словом end.
CASE I OF
Пример выполнения задачи на использование оператора выбора Задача № 2. Составить программу для ввода на экран монитора номера дня недели и вывода соответствующего ему дня недели на русском языке.Программа решения задачи имеет вид:
N:INTEGER, WRITELN ('ВЫВЕДИТЕ НОМЕР ДНЯ НЕДЕЛИ');{Вывод сообщения} 1:WRITELN('понедельник'); { Выполняемые операторы} 2:WRITELN('вторник'); {в зависимости от значения селектора} 3:WRITELN('среда');
4:WRITELN('четверг');
5:WRITELN('пятница');
6:WRITELN('суббота');
7:WRITELN('воскресенье');
Вопросы:
1. Что представляет собой составной оператор? Как ограничиваются операторы, объединенные в составной оператор?
2. Назначение, формы записи и порядок выполнения оператора условия if.
3. Особенности использования вложенных условных операторов.
4. Каковы отличия оператора выбора case от оператора условия if?
5. Для чего служит ключ выбора и какого он может быть типа?
6. Сколько меток может быть перед оператором в списке выбора?
Задания:
1. Составьте программу, реализующую эпизод применения компьютера в книжном магазине. Компьютер запрашивает стоимость книг, сумму денег, внесенную покупателем; если сдачи не требуется, печатает на экране «спасибо»; если денег внесено больше, то печатает «возьмите сдачу» и указывает сумму сдачи; если денег недостаточно, то печатает об этом сообщение, указывающее размер недостающей суммы.
2. В ЭВМ поступают результаты соревнований по плаванию для трех спортсменов. Составьте программу, которая выбирает лучший результат и выводит его на экран с сообщением, что это результат победителя заплыва.
3. Ввести два числа. Меньшее заменить полусуммой, а большее – удвоенным произведением.
Здесь WHILE (Пока), DO (выполнить) – служебные слова.
До начала циклов с предусловием и постусловием необходимо указывать начальное значение управляющей переменной.
Задача № 4. Составить программу для вычисления значения функции y = ax. Переменная х изменяется от 5 до 25 с шагом 1, полученный результат вывести на экран.
Программа решения задачи имеет вид:
x:integer;
a,y:real;
begin writeln ('Введи параметр a '); {Вывод комментария} суммы} Пример использования цикла с постусловием Задача № 5. Составить программу для вычисления значения функции y = ax. Переменная х изменяется от 5 до 25 с шагом 1, полученный результат вывести на экран.
Программа решения задачи имеет вид:
x:integer;
a,y:real;
begin writeln ('Вводи параметр a '); {Вывод сообщения} суммы} writeln ('Функция равна ',y); {Вывод результата} Вопросы:
1. Что такое цикл, управляющая переменная цикла?
2. Оператор цикла с параметром.
3. Оператор цикла с предусловием.
4. Оператор цикла с постусловием.
5. Отличия цикла с параметром от других операторов цикла.
6. Отличия цикла с постусловием от других операторов цикла.
Задания:
1. Составить программу для вычисления суммы ряда:
2. Составить логическую схему алгоритма и для вычисления значения функции: y=2*x*x; при переменной x, изменяющейся от 1 до 3 с шагом 0.1.
3. Составьте программу, которая вычисляет сумму чисел от 1 до N.
Значение N (N должно быть меньше 100) вводится с клавиатуры.
4. Напишите программу печати таблицы перевода расстояний из дюймов в сантиметры (1 дюйм = 2,5 см) для значений длин от 1 до 20 дюймов.
5. С помощью while напишите программу вывода всех четных чисел в диапазоне от 2 до 100 включительно.
6. Составьте и отладьте программу, вычисляющую сумму квадратов чисел от 1 до введенного вами целого числа n.
7. C помощью while напишите программу определения суммы всех нечетных чисел в диапазоне от 1 до 99 включительно.
8. С помощью цикла while напишите программу определения идеального веса для взрослых людей по формуле: Ид. вес = рост—100. Выход из цикла:
значение роста = 250.
9. C помощью repeat напишите программу-фильтр, которая вводит любые символы, но комментирует только буквы русского алфавита. Завершение работы программы — по нажатии буквы «Я».
10. С помощью repeat напишите программу, которая требует у вас пароль, например 111, и если пароль правильный, то заполняет все строки экрана сообщением «Молодец!!!». Если после пятой попытки пароль все равно неверен, выйти из программы.
11. Составьте и отладьте программу, определяющую максимальное из всех введенных вами чисел. (Пусть признаком конца ввода чисел является введенное число 0.) При использовании больших объемов данных требуется как-то их структурировать или объединить данные в отдельные группы. Решить такую задачу можно путем использования массивов. Массив – это упорядоченная совокупность значений одинакового типа. Например, в программе можно описать и обрабатывать массивы целых чисел, логических и символьных значений. Массивы могут быть одномерными, двумерными и многомерными.
2.4.1. Одномерный массив 1. VAR < имя >; ARRAY [тип индекса] OF < тип элемента > 2. TYPE < имя типа> = ARRAY [1..5] OF < тип элемента > VAR < имя массива > < имя типа> TYPE М = ARRAY [1..5] OF INTEGER;
РАЗМЕРНОСТЬ
ТИП ЭЛЕМЕНТА И ЕГО ЗНАЧЕНИЕ
ВВОД ЗНАЧЕНИЙ ВЫВОД ЗНАЧЕНИЙ
ЭЛЕМЕНТА МАССИВА ЭЛЕМЕНТА МАССИВА
2.4.2. Двумерный массив 1. VAR < имя >; ARRAY [тип индекса строк, тип индекса столбцов] < тип элемента > Пример:МА2: ARRAY [1..3,1..5] OF REAL;
2. TYPE М = ARRAY [1..3,1..5] OF REAL;
VAR МА2:M:
BEGIN READ (МА2[1,3]);
WRITE (МА2[3,5]);
ВВОД ЗНАЧЕНИЙ ВЫВОД ЗНАЧЕНИЙ
ЭЛЕМЕНТА МАССИВА ЭЛЕМЕНТА МАССИВА
Пример использования одномерного массива Задача № 6. Составить программу вычисления суммы действительных чисел, записанных в одномерный массив a, размером 7 элементов и вывода на экран содержимого введенного массива и полученной суммы.Программа решения задачи имеет вид:
s:real;
i:integer;
begin writeln('Введите ',x,' чисел'); {Вывод сообщения} writeln('Введенный массив');
for i:=1 to x do {Начало цикла для вывода элементов массива} write(a[i]:5:1,’ ‘); {вывод значений массива на экран} writeln('Сумма элементов массива s= ',s:5:1);
Задача № 7. Набрать, отредактировать, отладить и выполнить программу формирования единичной матрицы M2(10*10).
Программа решения задачи имеет вид:
var i,j:integer;
M2:array[1..10,1..10] of integer; {описание массива} begin if i=j Then M2[i,j]:=1 Else M2[i,j]:=0; {ввод значений элементов массива} writeln ('Единичный массив');
for i:=1 to 10 do {Цикл для вывода элементов массива по строкам} for j:=1 to 10 do{Цикл для вывода элементов массива по элементам строки} экран} Вопросы:
1. Что такое массив?
2. Как определить местоположение элемента в массиве?
3. Что такое индекс? Каким требованиям он должен удовлетворять?
4. Особенности расположения элементов массива в памяти ЭВМ.
5. Каким образом задается описание массива, что в нем указывается?
6. Общие и отличительные черты одномерных, двумерных и n-мерных массивов.
7. В каких операциях могут участвовать массивы и какие к ним при этом предъявляются требования?
8. Каким образом в Pascal задается обращение к элементу массива?
Задания:
1. Введите с клавиатуры в массив Х пять целочисленных значений, выведите их в одну строку через запятую; получите для массива среднюю арифметическую.
2. Введите с клавиатуры пять целочисленных элементов массива X.
Выведите на экран значения корней и квадратов каждого из элементов массива.
3. Создайте массив из пяти фамилий и выведите их на экран столбиком, начиная с последней.
4. Создайте массив из пяти фамилий и выведите на экран те из них, которые начинаются с определенной буквы, которая вводится с клавиатуры.
5. Дан одномерный массив. Вставьте в него элемент L в позицию К.
6. Введите с клавиатуры целочисленные элементы матрицы 3*3, выведите исходную матрицу на экран. Умножьте каждый элемент матрицы на 3 и выведите результат на экран.
7. Создайте двумерный массив (3*4) целых чисел и найдите сумму всех его элементов.
8. Введите с клавиатуры целочисленные элементы матрицы 3*3 и вычислите сумму элементов каждого столбца.
10. Создайте массив из 15 целочисленных элементов и определите среди них минимальное значение.
11. Создайте двумерный массив X, имеющий четыре строки и три столбца, и найдите в нем максимальный по абсолютному значению элемент, а также укажите номер строки и столбца, содержащие этот элемент. Например, в массиве максимальный по абсолютному значению элемент = 8, находится он во второй строке третьего столбца.
12. Введите массив (не более 20) и определите, есть ли в нем элементы с одинаковыми значениями.
При разработке программ иногда требуется одни и те же последовательности действий выполнять на различных этапах обработки информации. В таких задачах в различных местах встречаются фрагменты, одинаковые по выполняемым действиями, различающихся только в значениях исходных данных. Повторяющаяся группа операторов оформляется в виде самостоятельной программной единицы – подпрограммы. Подпрограмма – это самостоятельная часть программы, реализующая определенный алгоритм и допускающая обращение к ней из различных частей основной программы.
В языке Pascal подпрограммы реализуются в виде процедур и функций, которые вводятся в программу с помощью своего описания.
2.5.1. Процедуры Процедуры описываются в специальном разделе описательной части программы вслед за разделом переменных. Любая процедура состоит, аналогично программе, из заголовка процедуры и тела процедуры.
Заголовок процедуры представляет собой:
PROCEDURE < и м я> (список параметров), где PROCEDURE – служебное слово;
имя – имя процедуры, определяемое в соответствии с правилами построения идентификаторов;
список параметров – перечень имен для обозначения исходных данных и результатов работы процедуры с указанием их типов.
1. ЗАГОЛОВОК ПРОЦЕДУРЫ
PROCEDURE PRIM_PR (N: INTEGER; X: REAL; VAR Y: REAL);2. ВЫЗОВ ПРОЦЕДУРЫ Рассмотрим задачу с использованием процедуры Задача № 8. Составить программу вычисления степени Z=am, где m – любое целое (положительное или отрицательное) число и ‘a’ не равно нулю.
Для решения использовать процедуру с параметром.
1/(a)m, если m0 then step1(m,a,z) {иначе проверка условия, выполнение оператора} writeln (a:4:2,' в степени ',m:3,' равно ',z:4:2); {вывод результата} 2.5.2. Функции Функция – это подпрограмма, результат выполнения которой есть единственное скалярное значение, присваиваемое имени этой функции.
Функция является частным случаем процедур. Отличия процедуры от функции:
- результат выполнения функции – одно значение, а процедуры – одно или несколько;
- результат выполнения функции передается в основную программу как значение имени этой функции, а результаты выполнения процедуры – как значение ее параметров.
Заголовок функции представляет собой:
FUNCTION < и м я> : тип, где FUNCTION – служебное слово;
имя – имя функции;
тип – тип результата значения, которое должно приобретать имя функции.
ПРИМЕР
1. ЗАГОЛОВОК ФУНКЦИИ
FUNCTION F ( N: REAL): REAL;2. ВЫЗОВ ФУНКЦИИ Пример решения задачи с использованием функции Задача № 9. Составьте программу вычисления факториалов Fn=n!, Fm=m!, Fnm=(n-m)!. Вычисление факториала оформить в виде функции с параметрами.
Факториал n! представляет собой произведение n чисел натурального ряда: 1*2*3*...*n.
Программа решения задачи имеет вид:
PROGRAM FUNC;
FN,FM,FNM:INTEGER;N,M:INTEGER;
(* ФУНКЦИЯ FAKT *) FUNCTION FACT(K:INTEGER):INTEGER; {начало описания функции} P,I:INTEGER; {Раздел описания локальных переменных} (* ОСНОВНАЯ ПРОГРАММА *) BEGIN WRITE('ВВЕДИТЕ ЗНАЧЕНИЯ N,M: ');
FN:=FACT(N); {обращение к функции} FM:=FACT(M); {обращение к функции} FNM:=FACT(N-M); {обращение к функции} WRITELN('FN=',FN:5); {Вывод результата} WRITELN('FM=',FM:5); {Вывод результата} WRITELN('FNM=',FNM:5); {Вывод результата} При использовании подпрограмм без параметров:
1. Глобальные переменные, объявленные в основной части программы, доступны во всех процедурах программы.
2. Локальные переменные, объявленные в подпрограммах, доступны только в данной подпрограмме и внутренних подпрограммах, но не доступны в основной части программы.
Вопросы:
1. Что называется подпрограммой? В чем состоит сходство и различие подпрограмм-процедур и подпрограмм-функций в языке TURBO PASCAL ?
2. В чем различие между стандартными и определенными пользователем подпрограммами? Приведите примеры.
3. Опишите последовательность событий при вызове процедуры или функции.
4. Что называется параметром, и каково его назначение? Формальные, фактические параметры, их взаимосвязь.
5. Каковы отличия параметров-значений от параметров-переменных, особенности их описания и применения?
6. Каковы особенности параметров-процедур и параметров-функций?
7. Чем отличаются локальные и глобальные параметры? Какова область их действия?
Задания:
1. Напишите программу вычисления выражения y=(tg(X)+sin(X))*ecos(x) пpи X=3.7. Результат вывести в формате 5:2.
2. Напишите программу, которая с помощью функции Chr выведет на экран кодовую таблицу ПЭВМ (ASCII-таблицу). Задержите выведенную информацию на 5 с и очистите экран.
3. Напишите программу, которая выведет на экран 10 строк по случайных чисел в диапазоне 0..36.
4. Напишите программу, которая по значениям двух катетов вычисляет гипотенузу и площадь треугольника.
5. Напишите функцию возведения в степень по формуле:
Exp(Ln(A)*B) и используйте ее в программе для возведения в 4-ю степень вещественного числа 2,87.
6. Оформите процедуру Proverka пользователя на право работы с программой. Используйте для этого пароль = SCHOO1. Если пароль неправильный, выйти из программы по Halt.
7. Напишите программу, состоящую из трех процедур и основной программы. Первая процедура организует ввод двух целых чисел Х и Y, вторая вычисляет их сумму, третья выводит результат. Используйте эти процедуры в основной программе. Используйте X, Y как глобальные переменные. Эта программа послужит прообразом всех ваших будущих программ, т. к. в ней реализуется принцип работы любой системы: логически выделенные ввод, обработка и вывод результата.
8. Напишите программу вычисления площади поверхности и длины экватора на основе известного радиуса планет солнечной системы. Форму планет будем считать шаром. Вычисление площади и длины экватора оформите отдельными функциями.
9. Составить программу поиска большего из четырех чисел с использованием подпрограммы поиска большего из двух.
10. Даны координаты вершин многоугольника (х1,у1, х2,у2,..., х10,у10).
Определить его периметр (вычисление расстояния между вершинами оформить подпрограммой).
11. Вычислить сумму: 1! + 2! + 3! +...+ n!, используя функцию вычисления факториала числа k!
12. Составьте программу вычисления числа сочетаний из N по М. Число сочетаний определяется по формуле N!/(M!*(N—М)!), где N — количество элементов перебора. Используйте подпрограмму вычисления факториала.
13. Определить наименьший общий делитель трех натуральных чисел.
14. Даны действительные числа s,t. Составить программу вычисления выражения f(t,—2s,1.17) + f(2.2,t, s—t), где f(a,b,c) = (2a—b—sin(c))/(5+|c|).
15. Составьте программу вычисления суммы квадратов простых чисел, лежащих в интервале (M,N).
Большие совокупности данных, например: телефонный справочник, удобно иметь записанными во внешней памяти в виде последовательности сигналов. В ТР для этих целей предусмотрены специальные объекты — файлы.
Файлом называется совокупность данных, записанная во внешней памяти под определенным именем.
Целесообразность применения файлов диктуется следующими причинами.
1. Ввод больших объемов данных, подлежащих обработке, утомителен и требуeт большого времени. Гораздо удобнее создать отдельный файл данных, который может быть подготовлен заранее и, самое главное, применяться неоднократно.
2. Файл данных может быть подготовлен другой программой, становясь, таким образом, связующим звеном между двумя разными задачами, а также средством связи программы с внешней средой.
3. Программа, использующая данные из файла, не требует присутствия пользователя в момент фактического исполнения.
Файл можно представить как потенциально бесконечный список значений одного и того же (базового) типа. Все элементы файла считаются пронумерованными, начальный элемент имеет нулевой номер.
В любой момент времени программе доступен только один элемент файла, на который ссылается текущий указатель (указатель обработки). Часто позицию размещения доступного элемента называют текущей позицией.
Как правило, все действия с файлом (чтение из файла, запись в файл) производятся поэлементно, причем в этих действиях участвует тот элемент файла, который обозначается текущим указателем. В результате совершения операций текущий указатель может перемещаться, настраиваясь на тот или иной элемент файла.
По способу доступа к элементам различают файлы последовательного и прямого доступа. Файлом последовательного доступа называется файл, к элементам которого обеспечивается доступ в такой же последовательности, в какой они записывались.
Файлом прямого доступа называется файл, доступ к элементам которого осуществляется по адресу элемента. Например, для поиска нужного элемента в последовательном файле необходимо, начиная с нулевого, перемещать указатель обработки до тех пор, пока он не будет указывать на искомый элемент, а при поиске нужного элемента в файле прямого доступа достаточно указать номер его позиции. При организации данных в файл последовательного доступа нельзя одновременно читать данные из файла и записывать данные в файл, так как для чтения некоторого элемента последовательного файла указатель обработки помещен на данный элемент, а для записи нового элемента этот указатель одновременно должен быть в конце файла.
Компилятор TP поддерживает три типа файлов: текстовые, типизированные, нетипизированные.
При работе с файлами выполняется следующая цепочка команд:
а) при записи файла ASSIGN (F1, TXT, DAN);
REWRITE (F1);
WRITELN (F1, N);
CLOSE (F1);
а) при чтении файла ASSIGN (F1, TXT, DAN);
RESET (F1);
WRITELN (F1, N);
CLOSE (F1);
F1 – Вспомогательная файловая переменная.
N – Вспомогательная переменная для записи (чтение текста из файла).
ASSIGN – Логическое подключение из файла TXT, DAN к F1.
REWRITE (F1) {RESET (F1):} – Открытие файла для записи {чтения} текста.
WRITE (F1, N) {READ (F1, N):} – Запись(чтение) текста в файл на магнитный диск.
CLOSE (F1) – Закрытие файла.
Пример записи данных с клавиатуры во вспомогательную переменную, затем сохранение на магнитный диск показан на левой стороне диаграммы.
Пример чтения данных с магнитного диска во вспомогательную переменную, затем вывод из нее на экран показан на правой стороне диаграммы.
чтение с клавиатуры READ(N) запись на магнитный диск Задача № 10. Постановка задачи: Составить программу формирования файла F, состоящего из целых чисел. Программа показывает работу с файловой переменной F и внешним файлом DAT.TXT. В файл заносятся N= 6 записей, каждая из которых представляет собой целое число.
Программа решения задачи имеет вид:
F:FILE OF INTEGER;
X,I:INTEGER;
begin ASSIGN(F,'DAT.TXT');{подключение файла 'DAT.TXT' к файловой переменной F} WRITELN(' ВВЕДИТЕ 6 ЦЕЛЫХ ЧИСЕЛ '); {Вывод сообщения} FOR I:=1 TO 6 DO {цикл для ввода данных} Задача № 11. Постановка задачи: Составить программу чтения файла F, состоящего из целых чисел. Программа выполняет работу с файловой переменной F и внешним файлом DAT.TXT. Из файла выводятся целые числа.
Программа решения задачи имеет вид:
program CTEN_TIP; {Имя программы} F:FILE OF INTEGER;
X,I:INTEGER;
WRITELN('ЧТЕНИЕ ТИПИЗИРОВАННОГО ФАЙЛА'); {Вывод сообщения} ASSIGN(F,'DAT.TXT'); {подключение файла 'DAT.TXT' к файловой переменной F} WHILE NOT EOF (F) DO {цикл для чтения данных с магнитного диска на экран} WRITE(X,' '); {вывод данных из переменной на экран} Задача № 12. Постановка задачи: Составить программу ввода текстового файла с именем 'TEX.TXT', представляющий собой список необходимой техники. Сделать так, чтобы в каждой строке файла записывалось одно наименование. При вводе каждого наименования начинать с новой строки. На экран вывести из файла 'TEX.TXT' список техники. Каждое наименование вывести с новой строки.
Программа решения задачи имеет вид:
SP:TEXT;
I,N:INTEGER;
BEGIN ASSIGN(SP,'TEX.TXT'); {подключение файла 'TEX.TXT' к файловой переменной F} REWRITE(SP); {открытие файла на запись} WRITE('ВВЕДИТЕ КОЛИЧЕСТВО СТРОК В СПИСКЕ:'); {Вывод сообщения} READLN(N); {вод значений переменной N с клавиатуры} WRITELN('ВВЕДИТЕ НАИМЕНОВАНИЕ ТЕХНИКИ ',N:1,' НАИМЕНОВАНИЙ');
FOR I:=1 TO N DO {цикл для ввода строк текста с клавиатуры в файл} WHILE NOT EOLN DO {цикл для ввода одной строки текста в файл} WRITE(SP,C); {запись текста из переменной в файл} WRITELN('СПИСОК ТЕХНИКИ'); {Вывод сообщения} WHILE NOT EOF (SP) DO {внешний цикл чтения строк} WHILE NOT EOLN(SP) DO {Внутренний цикл чтения одной строки} READ(SP,C); {чтение во вспомогательную переменную} Вопросы:
1. Что такое файл?
2. Какие типы файлов применяются в TP?
3. Основные функции для работы с файлами.
4. Основные правила использования файлов в программах.
5. Назовите общие и отличительные черты типизированного и текстового файла.
6. Зачем используется специальная файловая переменная? Как устанавливается соответствие файловой переменной файлу во внешней памяти?
7. Что общего у процедуры Reset и Rewrite и чем они отличаются?
8. Какие отличия существуют в использовании процедуры Reset при открытии различных типов файлов (текстовых, типизированных)?
9. Зачем применяется процедура Close?
Задания:
1. Составьте программу, которая создает файл, состоящий из 10 значений типа integer. Прочитайте файл и вычислите сумму его элементов.
2. Составьте программу, которая создает файл, состоящий из неопределенного количества значений типа integer. Для ввода используйте цикл, выход из цикла — значение 999. После записи выведите файл на экран.
3. Составьте программу, которая создает файл из элементов типа Char с помощью цикла while. Признак выхода из цикла — буква 'z'. Скопируйте созданный файл в другой файл и выведите его на экран.
4. Составьте программу, которая создает файл, состоящий из пяти значений типа real. Выведите файл на экран.
5. Составьте программу, которая создает файл, состоящий из N значений типа integer. Прочитайте файл и выведите только четные элементы. Тип record не используйте.
6. Составьте программу, которая создает файл из элементов типа Char с помощью цикла while. Признак выхода из цикла — буква 'z'. Выведите его содержимое на экран.
7. Составьте программу, которая построчно выводит содержимое текстового файла на экран, печатает на бумаге.
Для хранения в одном файле данных различного типа в PASCAL применяется комбинированный тип данных – записи.
Запись — это структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов.
Определение типа записи начинается идентификатором record и заканчивается зарезервированным словом end. Между ними заключен список компонентов, называемых полями, с указанием идентификаторов полей и типа каждого поля.
Формат:
Number : integer; {Номер} Marka : string[20]; {Марка автомобиля} FIO : string[40]; {Фамилия, инициалы владельца} Address ; string[60] {Адрес владельца} В данном примере запись Car содержит четыре компонента: номер, название марки машины, фамилию владельца и его адрес. Доступ к полям записи осуществляется через переменную типа «запись». В нашем случае это переменные М и V типа Car.
Значения полей записи могут быть использованы в выражениях. Имена отдельных полей не применяются по аналогии с идентификаторами переменных, поскольку может быть несколько записей одинакового типа.
Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, разделенных точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи Car, надо записать:
М.Number, M.Marka, M.FIO, М.Address Составное имя можно использовать везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваивания.
М.Number := 1678;
M.Marka := 'ГАЗ - 24';
M.FIO := 'Демьяшкин В.А. ';
Пример ввода записей с клавиатуры в файл и чтение записей из файла на экран схематично показан на диаграмме.
Ввод данных READ(B.FIO);
N FIO GR
клавиатура Вывод данных Магнитный дискМОНИТОР
Spis_gr.doc Для ввода и вывода данных используются следующие операторы:f_zap – вспомогательная файловая переменная;
B – вспомогательная переменная типа записи (для ввода-вывода записей из файла);
Assign (fizap,'sp.doc'); – логическое подключение файла 'spis.dok' на магнитном диске к вспомогательной файловой переменной fizap;
Rewrite(f_zap) - открытие файла на МД с именем 'spis.dok' через вспомогательную файловую переменную fizap для ввода данных;
Reset(f_zap) - Открытие файла на МД с именем 'spis.dok' через вспомогательную файловую переменную fizap для вывода данных;
write(f_zap,b); – запись данных из вспомогательной переменной типа записи b в файл 'spis.dok' на магнитном диске;
read(f_zap,b); - чтение данных из файла 'spis.doc' на магнитном диске во вспомогательную переменную типа записи;
CLOSE (f_zap) – закрытие файла.
Задача № 13. Составить программу ввода списка курсантов группы с указанием фамилии курсанта и года рождения в файл и вывода содержимого файла на экран дисплея.
Исходные данные:
-----------------------------------------------------------Фамилия и инициалы | Год рождения ----------------------------------------------------------Иванов С.А. | Программа решения задачи имеет вид:
Assign(f_zap,'sp.doc'); {подключение файловой переменной к файлу 'sp.doc’} запись} Write('Введите фам и год рожд курсантов'); {вывод сообщения} write(f_zap,b); {сохранение записи в файле 'sp.doc' на магнитном диске} {ВЫВОД ИЗ ФАЙЛА} WRITELN('-------------------------------'); {вывод сообщения} WRITELN(' № | ФАМИЛИЯ | ГОД РОЖДЕНИЯ'); {вывод сообщения} WRITELN('-------------------------------'); {вывод сообщения} While not eof(f_zap) do {цикл для чтения записей из файла и вывода на экран} read(f_zap,b); {чтение записи с магнитного диска в переменную типа записи} writeln(I:2,' |', b.fio:10,' | ',b.gr); {вывод полей записи на экран} I:=I+1; {увеличение значения счетчика для вывода номера строки} WRITELN('-------------------------------'); {вывод сообщения} Вопросы:
1. Почему запись называют комбинированным типом данных?
2. Как определяется тип записи? Что называется полем записи?
3. Какие требования предъявляются к идентификаторам поля в записи?
4. Чем определяется объем памяти, требуемый для размещения записи?
5. Что такое составное имя поля записи? Из каких частей оно состоит и как записывается?
6. Зачем при обращении к полю записи используется предложение with?
7. Как вы понимаете вложение записей? Каков максимально допустимый уровень вложения? Приведите примеры вложения записей.
Задания:
1. Опишите запись с именем типа Karta, содержащую следующие поля:
• номер измерения (тип integer);
• значение (тип real).
Переменную, определяющую запись, назовите Z.
2. Опишите запись с именем типа Doc, содержащую следующие поля:
• номер строки документа (тип integer);
• текст строки (тип string).
Переменную, определяющую запись, назовите S.
3. Опишите запись с именем texn, содержащую информацию о хранящемся на складе техники:
• код техники (тип integer);
• наименование техники (тип string);
• цену (тип real).
Переменную, определяющую запись, назовите Tov.
4. Опишите запись с именем типа Graf, содержащую данные, необходимые для построения графика из 40 точек:
• название графика (тип string);
• 40 значений (тип integer).
Переменную, определяющую запись, назовите X.
5. Опишите запись с именем типа Вата, содержащую информацию для базы данных:
• личный номер обучаемого (тип integer);
• ФИО (тип string);
• год рождения (тип integer);
• адрес (тип string).
Переменную, определяющую запись, назовите Inf.
6. Опишите запись с именем типа Systema, содержащую информацию о планетах солнечной системы:
• номер планеты по удалению от Солнца (тип integer);
• название планеты (тип string);
• объем (real);
• диаметр (real);
• удаленность от Земли (real).
Переменную, определяющую запись, назовите Planeta.
7. Опишите запись с именем типа Sport, содержащую информацию о лучших спортивных достижениях школы по легкой атлетике:
• название вида (тип string);
• фамилия рекордсмена (тип string);
• дата установления рекорда (запись Dat, состоящая из полей Day, Month, Year);
• сообщение о результате (real).
Переменную, определяющую запись, назовите Rec.
8. Опишите запись с именем типа Geometr, содержащую информацию об оценках студентов вашей группы по ОБЖ:
• ФИО (тип string);
• оценки за девять месяцев max по 20 оценок в месяц.
Переменную, определяющую запись, назовите Dig.
9. Опишите запись с именем типа Rasp, содержащую информацию о движении электропоездов из вашего города:
• направление (тип string);
• время отправления электропоездов (тип real).
Переменную, определяющую запись, назовите R.
3. СПРАВОЧНАЯ СИСТЕМА TURBO PASCAL
Интегрированная среда программирования Тurbo Рascal отличается расширенными возможностями встроенной справочной системы, которая позволяет программисту не только получить контекстно-ориентированную справочную информацию, но и делать вырезки и вставки кода примеров для каждой библиотечной процедуры и функции в текст своей программы, возвратиться назад к другим экранам подсказки (клавиши [Alt + Fl]), воспользоваться подсказкой по справочной информации (клавиша [F1], если вы уже находитесь в системе справочной информации).Примечание. Название «контекстно-ориентированная» справочная система Тurbo Рascal получила за возможность получения справочной информации, связанной с текущим состоянием среды программирования, по указанному элементу языка программирования. Например, для получения справочной информации о любом пункте меню интегрированной среды программирования активизируйте этот пункт и нажмите клавишу [F1]; для получения справки по элементу языка в окне редактирования (оператору, функции и т.п.) установите курсор на нужном элементе и нажмите клавиши [Ctrl + F1].
Для получения справочной информации (за исключением случаев, когда управление переходит к вашей программе) нужно нажать клавишу [F1] или отметить мышью нужный пункт меню Help. Меню Help (клавиша [Alt+H] ) обеспечивает вас таблицей содержания системы справочной информации, подробным оглавлением, способностями поиска [Ctrl + F1]. Любой экран справочной информации может содержать одно ключевое слово или несколько ключевых слов (высвеченных элементов), по которым можно получить дополнительную справочную информацию.
Использование клавиш для получения справочной информации отражает таблица.
Shift + F1 Help/Index Help/Previous Показывает предыдущий экран справочной Help/Topic Вызывает специфическую информацию по Ctrl + F
ПОЛУЧЕНИЕ СПРАВОЧНОЙ ИНФОРМАЦИИ ПО РЕДАКТОРУ
Для получения справочной информации по операциям редактирования клавишей [F1] вызовите экран подсказки; нажимая клавишу [Page Down], перейдите к перечню подсказок о функциях редактирования.
ЗАКЛЮЧЕНИЕ
Существует большое количество языков алгоритмического программирования и, если понятен принцип работы, имеются навыки практической работы одного из них, освоить другой обычно несложно.Рассмотренный в данном пособии материал позволяет достаточно твердо освоить один из популярнейших языков программирования Тurbo Pascal. Язык программирования Тurbo Pascal последних версий имеет многооконный режим работы, возможность создавать объектно-ориентированные программы, возможность использовать типизированный адресный оператор, а так же улучшенный интерфейс для пользователя.
Автор не ставил перед собой цель рассмотреть полностью все аспекты программирования и управления данными, а старался представить материал в легко усваиваемом и доступном для восприятия стиле, с целью получения первых практических навыков по программированию на языке Тurbo Pascal.
Направлением дальнейшей работы автора является разработка 2 и частей пособия в которых более подробно будут рассмотрены стандартные библиотечные модули языка Тurbo Pascal, управление динамическими данными и основы объектно-ориентированного программирования.
Если ошибка возникает при компиляции внутри TP, Тurbo Pascal активизирует окно редактирования и помещает курсор на место ошибки в исходной программе.
Если ошибка возникает при использовании командно-строчного компилятора, Тurbo Pascal выдает сообщение об ошибке, выводит на экран исходную строку программы с ошибкой и ее номер; символ ^ в выдаваемой исходной строке указывает местоположение ошибки. Ошибки подразделяются на:
- ошибки при компилировании программы;
- ошибки на уровне DOS;
- ошибки ввода-вывода.
1 Out of memory (Выход за пределы памяти) Данная ошибка появляется, если компилятор израсходовал всю доступную ему память. Возможно, ваша программа или программный модуль слишком велики, чтобы компилировать их в таком объеме памяти. В этом случае программу или программный модуль необходимо разбить на два или более программных модуля.
2 Identifier expected (Ожидается идентификатор) В этом месте должен находиться идентификатор.
3 Unknown Identifier (Неизвестный идентификатор) Этот идентификатор не был описан.
4 Duplicate Identifier (Повторение идентификатора) 5 Syntax error (Синтаксическая ошибка) В исходном тексте найден недопустимый символ. Возможно, не заключена в кавычки строковая константа.
6 Error in real constant (Ошибка в константе вещественного типа) Ошибка в синтаксисе константы вещественного типа.
7 Error In Integer constant (Ошибка в константе целого типа) Ошибка в синтаксисе константы целого типа. (Учтите, что после чисел, превышающих диапазон представления целых чисел, должны ставиться точка и нуль, например 12345678912.0.) 8 String constant exceeds line (Строковая константа превышает размеры строки) Вероятно, после строковой константы отсутствует символ кавычка.
9 Too many nested files (Слишком много вложенных файлов) Компилятор допускает не более 15 вложенных исходных файлов и не более 4 включаемых файлов.
10 Unexpected end of file (Неожиданный конец файла) Данное сообщение может появиться по одной из следующих причин:
В Вашей программе, вероятнее всего, неодинаковое количество операторов BEGIN и END.
Включаемый файл заканчивается в середине раздела операторов.
(Каждый раздел операторов должен целиком помещаться в одном файле) В Вашем файле не закрыты скобки комментария.
11 Line too long (Строка слишком длинная) Максимальная длина строки не может превышать 127 символов.
12 Type Identifier expected (Ожидается идентификатор типа) В определенном месте не указан тип идентификатора.
13 Too many open files (Слишком много открытых файлов) В файле CONFIG.SYS не установлен параметр FILES = N, где N — представляет собой целое число без знака.
Установите в файле CONFIG.SYS значение параметра FILES = N >= 30.
14 Invalid file name (Недопустимое имя файла) Имя файла неверно или указан несуществующий путь.
15 File not found (Файл не найден) Файл не найден ни в одном из каталогов, предназначенных для хранения файлов данного типа.
16 Disk full (Диск заполнен) Удалите с диска ненужные Вам файлы (например, файлы с расширением.ВАК или.ТМР) или попробуйте сохранить текст программы на другом диске, который имеет достаточный объем свободной памяти.
17 Invalid compiler directive (Недопустимая директива компилятора) Неверная буква в директиве компилятора, один из параметров директивы компилятора неверный или Вы пользуетесь глобальной директивой компилятора, когда компиляция тела программы уже началась.
18 Too many files (Слишком много файлов) В компиляции программы или программного модуля участвует слишком много файлов. Попытайтесь не использовать так много файлов, например, объединяя включаемые файлы.
19 Undefined type a pointer definition (Неопределенный тип в описании указателя) Вы пытаетесь объявить типизированный указатель, связанный с ранее необъявленным типом данных.
20 Variable Identifier expected (Ожидается идентификатор переменной) В указанном курсором месте ожидается идентификатор переменной.
21 Error in type (Ошибка определении типа) Определение типа не может начинаться с этого символа.
22 Structure too large (Слишком длинная структура) Максимально допустимый размер любого структурированного типа — 65520 байтов.
23 Set base type of range (Количество элементов в множестве превышает допустимое значение) Базовый тип множества должен представлять собой интервальный или перечисляемый тип данных с не более чем 256 значениями.
24 File components may not be files or objects (Компоненты файла не могут быть файлами или объектами) Тип компонентов файла не может быть объектным типом, файловым типом или любым другим структурированным типом, содержащим компоненты типа файла или объекта.
25 Invalid string length (Неверная длина строки) Длина описываемой строки должна находиться в пределах от 1 до 255.
26 Type mismatch (Несоответствие типов) Причины, вызвавшие появление данного сообщения, могут быть следующими:
Несовместимы типы переменной и выражения в операторе присваивания.
Несовместимые типы фактического и формального параметров в обращении к процедуре или функции.
Тип выражения несовместимый с типом индекса при индексировании Несовместимые типы операндов в выражении.
27 Invalid subrange base type (Неправильный базовый тип для интервала) 28 Lower bound greater than upper bound (Нижняя граница превышает верхнюю) При описании интервального типа данных Вы объявили нижнюю границу диапазона больше верхней.
29 Ordinal type expected (Ожидается перечисляемый тип) Вещественные, строковые, структурные и ссылочные типы в данном случае не допускаются.
30 Integer constant expected (Ожидается константа целого типа) 31 Constant expected (Ожидается константа) 32 Integer or real constant expected (Ожидается константа целого или вещественного типа) 33 Pointer type Identifier expected (Ожидается идентификатор типа указатель) Указанный курсором идентификатор не является указателем.
34 Invalid function result type (Недопустимый тип результата функция) Правильными типами результата функции являются все простые, строковые и ссылочные типы.
35 Label Identifier expected (Ожидается идентификатор метки) Обнаружена ссылка на метку, не описанную в разделе LABEL.
36 BEGIN expected (Ожидается оператор BEGIN) 37 END expected (Ожидается оператор END) 38 Integer expression expected (Ожидается выражение целого типа) 39 Ordinal expression expected (Ожидается выражение перечисляемого типа) 40 Boolean expression expected (Ожидается выражение логического типа) 41 Operand types do not match operator (Несоответствие типов операнду) Данная операция не может применяться к операндам этого типа. Такое сообщение будет вызвано, например, при попытке выполнить следующую операцию:' 9' DIV 'G'.
42 Error in expression (Ошибка в выражении) Данный идентификатор не может участвовать в выражении указанным Возможно, вы забыли указать операцию между двумя операндами.
43 Illegal assignment (Запрещенное присваивание) Это сообщение может появиться по следующим причинам:
файлам и нетипизированным переменным нельзя присваивать идентификатору функции можно присваивать значения только внутри раздела операторов данной функции.
44 Field Identifier expected (Ожидается идентификатор поля) Данный идентификатор не соответствует полю предшествующей переменной типа RECORD или OBJECT.
45 Object file too large (Объектный файл слишком большой) Turbo Pascal не может компоновать OBJ-файлы размером больше чем 46 Undefined external (Не определена внешняя процедура) Внешняя процедура или функция не имеет соответствующего определения PUBLIC в объектном файле. Убедитесь, что Вы указали все объектные файлы в директивах {$L ), и проверьте написание идентификаторов процедуры или функции в файле.ASM.
47 Invalid object file record (Недопустимая запись объектного файла) Файл.OBJ содержит неверную объектную запись. Убедитесь в том, что данный файл является действительно OBJ-файлом.
48 Code segment too large (Сегмент кода слишком большой) Максимально допустимый размер кода программы или программного модуля ранен 65520 байтам. Разбейте Вашу программу или программный модуль на несколько частей.
49 Data segment too large (Сегмент данных слишком большой) Максимальный размер сегмента данных программы равен 65520 байтам, включая данные, описываемые используемыми программными модулями.
Если нужно большее количество глобальных данных, опишите большие структуры с помощью указателей и выделяйте для них память динамически с помощью процедуры New.
50 DO expected (Ожидается оператор DO) 51 Invalid PUBLIC definition (Недопустимое определение PUBLIC) Появление этого сообщения возможно по следующим причинам:
Данный идентификатор получил тип PUBLIC с помощью соответствующей директивы языка ассемблер, но не соответствует описанию EXTERNAL в программе или программном модуле.
Две или более директивы PUBLIC на языке ассемблера определяют один и тот же идентификатор.
OBJ-файл определяет идентификатор PUBLIC вне сегмента CODE.
52 Invalid EXTRN definition (Неправильное определение EXTRN) Появление этого сообщения возможно по следующим причинам:
- Из Ассемблера была осуществлена ссылка с помощью директивы EXTRN на идентификатор, который не был описан в тексте Pascal -программы.
- Идентификатор обозначает абсолютную переменную.
- Идентификатор обозначает процедуру или функцию типа INLINE.
53 Too many EXTRN definition (Слишком много определений типа EXTRN) Тurbo Pascal не может обрабатывать файлы.OBJ при более чем определениях EXTRN.
54 OF expected (Ожидается оператор OF) 55 INTERFACE expected (Ожидается оператор INTERFACE) 56 Invalid relocatable reference (Недопустимая перемещаемая ссылка) Появление этого сообщения возможно по следующим причинам:
OBJ-файл содержит данные и перемещаемые ссылки в сегментах, инициализированные переменные в сегменте DATA.
ORJ-файл содержит ссылки с размерами в байтах на перемещаемые символы. Такая ошибка происходит в случае использования операторов HIGH и DOWN с перемещаемыми символами или, если Вы ссылаетесь в директивах DB на перемещаемые символы.
Операнд ссылается на перемещаемый символ, который не был определен в сегментах CODE или DATA.
Операнд ссылается на процедуру EXTRN или функцию EXTRN со смещением, например CALL SortProc+8.
57 THEN expected (Ожидается оператор THEN) 58 ТО or DOWNTO expected (Ожидается зарезервированное слово ТО или DOWNTO) 59 Undefined forward (Неопределенное опережающее описание) Появление этого сообщения возможно по следующим причинам:
Была описана процедура или функция в интерфейсной секции программного модуля, но их определение отсутствует в секции реализации.
Процедуры или функции были описаны с помощью опережающего описания, но их определение не найдено.
61 Invalid typecast (Недопустимое преобразование типов) Размер переменной и тип результата отличаются друг от друга при приведении типа переменной.
Вы пытаетесь осуществить приведение типа выражения, когда разрешается только ссылка на переменную, процедуру или функцию.
62 Division by zero (Деление на нуль) Предшествующая операция пытается выполнить деление на нуль.
63 Invalid file type (Недопустимый тип файлов) Данный файловый тип не обслуживается процедурой обработки типизированного файла или процедура Seek — для текстового файла.
64 Cannot Read or Write variables of this type (Нет возможности считать или записать переменные данного типа) Эта ошибка может появиться из-за попытки ввести или вывести переменную несоответствующего типа:
Процедуры Read и ReadLn могут считывать переменные символьного, целого, вещественного и строкового типов.
Процедуры Write и WriteLn могут выводить переменные символьного, целого, действительного, булевого и строкового типов.
65 Pointer variable expected (Ожидается переменная типа указатель) Предыдущая переменная должна иметь тип указатель.
66 String variable expected (Ожидается строковая переменная) Предшествующая переменная должна иметь строковый тип.
67 String expression expected (Ожидается выражение типа строка) Предшествующее выражение должно иметь строковый тип.
68 Circular unit reference (Циклическая зависимость модулей) 69 Unit name mismatch (Несоответствие имен программных модулей) Имя программного модуля, найденное в файле.TPU, не соответствует имени, указанному в операторе USES.
70 Unit version mismatch (Несоответствие версий программных модулей) Один или несколько программных модулей, используемых данной программой, были изменены после их компиляции. Воспользуйтесь командой Compile/Make (Компиляция/Формирование) или Compile/Build (Компиляция/Построение) в интегрированной интерактивной среде программирования и параметрами/М или/В в компиляторе ТР, что позволит автоматически скомпилировать программные модули, нуждающиеся в перекомпиляции.
71 Duplicate unit name (Повторное имя программного модуля) Имя этого программного модуля уже указано в операторе USES.
72 Unit file format error (Ошибка формата файла программного модуля) TPU-файл является недействительным.
Убедитесь, что это действительно TPU-файл соответствующей версии 73 Implementation expected (Ожидается оператор IMPLEMENTATION) В модуле отсутствует раздел реализации.
74 Constant and саsе types do not match (Несовпадение типов константы и оператора CASE) Тип константы оператора CASE несовместим с выражением в операторе 75 Record variable expected (Нужна переменная типа запись) Предшествующая переменная должна иметь тип запись.
76 Constant out of range (Константа вне диапазона) Эта ошибка может появиться по следующим причинам:
При попытке указать массив с константами, нарушающими границы.
При попытке присвоить переменной значение константы, выходящее за диапазон переменной.
При попытке передать константу вне диапазона в качестве параметра процедуре или функции.
77 File variable expected (Ожидается файловая переменная) Предшествующая переменная должна иметь файловый тип.
78 Pointer expression expected (Ожидается выражение типа указатель) Предшествующее выражение должно иметь тип указателя.
79 Integer or real expression expected (Ожидается выражение целого или вещественного типа) Предшествующее выражение должно иметь тип INTEGER или REAL.
80 Label not within current block (Метка вне пределов текущего блока) Оператор GOTO не может осуществить переход на метку, находящуюся вне текущего блока.
81 Label already defined (Метка уже определена) Данная метка уже помечает точку перехода.
82 Undefined label in processing statement part (Неопределенная метка в предыдущей части оператора) 83 Invalid @ argument (Недействительный аргумент оператора @ ) Правильными аргументами являются имена переменных, процедур или 84 Unit expected (Ожидается оператор UNIT) 85 ";" expected (Ожидается символ ";") 86 ":" expected (Ожидается символ ":") 87 "," expected (Ожидается символ ",") 88 "(" expected (Ожидается символ "(") 89 ")" expected (Ожидается символ ")") 90 "=" expected (Ожидается символ "=") 91 ":=" expected (Ожидается символ ":=") 92 "[" or "(." expected (Ожидается символ "[" или "(.") 93 "]" or ".)" expected (Ожидается символ "]" или ".)") 94 "." expected (Ожидается символ ".") 95 ".." expected (Ожидается символ "..") 96 Too many variables (Слишком много переменных) Эта ошибка может появиться по следующим причинам:
Объем памяти, занимаемый всеми описанными в программе или программном модуле глобальными переменными, не может превышать Кбайтов.
Объем памяти, занимаемый описанными в программе или функции локальными переменными, не может превышать 64 Кбайтов.
97 Invalid FOR control variable (Недопустимая переменная управления циклом FOR) Параметр цикла оператора FOR должен быть переменной перечисляемого 98 Integer variable expected (Ожидается переменная целого типа) Предшествующая переменная должна иметь целый тип.
99 File: are not allowed here (Файлы и типы процедур здесь не разрешены) Типизированная константа не может иметь файловый тип.
100 String length mismatch (Несовпадение длины строки) Длина строковой константы не соответствует количеству элементов символьного массива.