лабораторные работы паскаль. Практикум по программированию на языке Паскаль Учебное пособие
Скачать 0.89 Mb.
|
16.1. Основы структурного программирования Структурное программирование - это емкое понятие, отражающее современный общепринятый стиль программирования. Для программ, написанных в структурной форме, характерно: широкое использование комментариев, тщательный выбор осмысленных имен, аккуратная организация текста, продуманные форматы отображаемых выходных данных, наконец, программная документация в полном объеме. Комментарии следует отнести к наиболее существенным атрибутам хорошего стиля программирования. Их назначение - помогать читать и понимать программу. При чтении тщательно продуманных комментариев пользователь может позволить себе не погружаться в детали программной части текста; с другой стороны, комментарии не должны становиться помехой В программе рекомендуется использовать не абстрактные имена переменных типа А, В и тому подобные, а смысловые или мнемонические имена. Мнемонические имена наиболее информативны и повышают понимаемость программы. Например, RecStud - запись данных по студенту, MaxNumStud максимальное количество студентов и т.п. Существует еще несколько рекомендаций по оформлению текста программы: 1. Не следует на одной строке располагать несколько предложений. 2. Рекомендуется включать пустые строки. С помощью пустых строк можно выделить ту или иную часть текста (группу операторов) - они помогут привлечь к ней внимание. Для компилятора пустые строки безразличны, он их игнорирует. 3. Предложения программы следует располагать, имея в виду следующие правила: а) ключевые слова, такие как const, type, var, begin, end, в главной программе должны быть выравнены по левому краю текста; б) предложения внутри цикла for (или цикла while) должны быть набраны с отступом; 120 в) если в программе имеется конструкция if-then-else, то ключевые слова then и else следует выравнить относительно друг друга; г) предложения внутри программы нужно набирать с отступом и так далее. Следующим важным фактором, на который необходимо обратить внимание при разработке программы, является наглядный вывод результатов. Это обусловлено тем, что основной целью разработки программы является получение результатов решения проблемы или задачи. Принципы и средства создания наглядного вывода и ввода рассмотрены в лабораторной работе N12. При отладке программы полезно в текст вставлять отладочную печать, предназначенную для вывода промежуточных результатов вычислений. Всякая профессионально разработанная программа должна сопровождаться поясняющей ее документацией . В комплект документов обычно включают: исходное описание задачи; схему алгоритма или описание логики программы; листинг программы ; тестовые наборы данных; инструкции по эксплуатации программы; результаты ее испытаний на некоторых тестовых наборах данных. 16.2. Средства Паскаля для разработки программ модульной структуры Модуль - это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующей части. По организации модули в Турбо-Паскале (TP) характеризуются следующим: 1) явным образом выделяется некоторая "видимая" интерфейсная часть, в которой сконцентрированы описания глобальных типов, констант и переменных; 2) в них приводятся заголовки глобальных процедур и функций. Тела процедур и функций располагаются в исполняемой части модуля, которая может быть скрыта от пользователя. Важной особенностью модулей является то обстоятельство, что компилятор ТР размещает их программный код в отдельном сегменте памяти. Максимальная длина сегмента не может превышать 64 Кбайта, однако количество одновременно используемых модулей ограничивается лишь доступной памятью, что дает возможность создавать весьма крупные программы. 16.2.1. Структура модулей Модуль имеет следующую структуру: UNIT<имя> секция реализации В этом описании: UNIT - ключевое слово, начинающее заголовок модуля (с англ. модуль); <имя> - имя модуля (идентификатор); INTERFACE - ключевое слово, начинающее интерфейсную часть модуля; IMPLEMENTATION - ключевое слово, начинающее исполняемую часть (с англ. исполнение); BEGIN - ключевое слово, начинающее инициирующую часть. Эта часть модуля, заключенная в [ ], необязательна. IMPLEMENTATION <исполняемая часть> [BEGIN <инициирующая часть> END INTERFACE <интерфейсная часть> секция интерфейса 121 END - признак конца модуля. Таким образом, модуль состоит из заголовка и трех составных частей, любая из которых может быть пустой. 16.2.2. Заголовок модуля и связь модулей друг с другом Заголовок модуля состоит из служебного слова UNIT и имени модуля. Для правильной работы среды ТР и возможности подключения средств, облегчающих разработку больших программ, имя модуля должно совпадать с именем дискового файла, в которой помещается исходный текст модуля. Например, если имя модуля имеет следующий заголовок: UNIT global; то исходный текст соответствующего модуля должен размещаться в дисковом файле global.pas. Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается специальной конструкцией языка: USES <список модулей> где USES -ключевое слово (с англ. использует) <список модулей> - список модулей, с которыми устанавливается связь. Элементами списка являются имена модулей, отделенные запятой. Например : USES crt, graph, global; Если в программе используется предложение USES ... , то оно должно открывать раздел описаний основной программы или может следовать за служебным словом INTERFACE в модуле. Тогда структура модуля имеет вид: UNIT<имя>; INTERFACE [USES <список модулей>;] <интерфейсная часть> IMPLEMENTATION <исполняемая часть> [BЕGIN <инициирующая часть>;] END. Примечание. Если модуль, имя которого указано в предложении USES, использует другие модули, то имена этих модулей также должны быть указаны в предложении USES, причем до того, как они будут использоваться. 16.2.3. Интерфейсная часть модуля Интерфейсная часть модуля открывается служебным словом INTERFACE. В этой части содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и блоков). Эти объекты модуля становятся видимыми для любой программы или модуля, использующих данный модуль. Любая программа, использующая этот модуль имеет доступ к "видимым" элементам. Процедуры и функции, "видимые" для любой программы, использующей данный модуль, описываются в разделе INTERFACE, а их действительные тела находятся в части IMPLEMENTATION. Если процедура или функция является внешней, то в интерфейсной части необходимо указать служебное слово ЕXTERNAL, а в части IMРLEMENTATION не нужно повторно указывать описание процедуры. Пример : UNIT Cmplx; Interface type complex=record re,im=real; end; Procedure Addc (x,y:complex; var z:complex); 122 Procedure Mulc (x,y:complex; var z:complex); End. Теперь, если в основной программе использовать предложение USES Cmplx; то в программе станут доступными тип Comрlex и две процедуры Addc и Mulc из описанного выше модуля. Примечание: 1. Константы и переменные, объявленные в интерфейсной части модуля, также как и глобальные объекты основной программы, помещаются в общий сегмент данных, максимальная длина которого 65621 байт. 2. Если в интерфейсной части объявляются внешние блоки (EXTERNAL) или блоки в машинных кодах (INLINE), то их тела должны следовать сразу за их заголовками. 16.2.4. Исполняемая часть модуля Исполняемая часть модуля начинается словом IMPLEMENTATION и содержит тела процедур и функций, объявленных в интерфейсной части. В этой части также могут объявляться локальные для модуля объекты: вспомогательные типы, константы, переменные и блоки, а также метки, если они используются в инициирующей части. Локальные объекты являются невидимыми для программ, использующих данный модуль. Объявленные в интерфейсной части глобальные процедуры и функции должны описываться в той же последовательности, в какой появляются их заголовки в интерфейсной части. Заголовки процедур и функций в исполняемой части должны быть идентичны тем, которые указаны в интерфейсной части, или могут иметь краткую форму: ключевое слово и имя процедуры или функции. Пример: Unit Cmplx; Interface type complex = record re, im : real; end; Procedure Addc (x, y: complex; var z: complex); Implementation Procedure Addc; begin z.re := x.re + y.re; z.im := x.im + y.im; end; end. Примечание: процедуры и функции, локальные для исполняемой части модуля, т.е. не описанные в интерфейсной части, должны иметь полный, несокращенный заголовок. 16.2.5. Инициирующая часть модуля Инициирующая часть завершает модуль. Она может отсутствовать вместе с начинающим ее словом Begin или быть пустой - тогда за Begin сразу следует признак конца модуля End. Такой случай возникает при создании модуля, содержащего данные, используемые несколькими модулями. В этой части модуля помещаются исполняемые операторы, содержащие некоторый фрагмент программы. Они выполняются до передачи управления основной программе и предназначены для следующих целей: 123 - инициируются переменные, которые использует программный модуль или которые он делает доступными программе; - открываются файлы, которые будут использоваться основной программой; - устанавливается связь с другими ПЭВМ по коммуникационным каналам. 16.2.6. Компиляция модулей В среде ТР имеются средства, управляющие способами компиляции модулей и облегчающие разработку крупных программных продуктов. В частности, определены три режима компиляции: COMPILE, MAKE, BUILD. Эти режимы отличаются способом связи компилируемого модуля или компилируемой основной программы с другими модулями , объявленными в предложении USES. При компиляции модуля или основной программы в режиме Compile все модули из предложения USES должны быть предварительно откомпилированы и результаты их компиляции должны быть помещены в одноименные файлы с расширением tpu. Например , если в программе или модуле имеется предложение USES global, то на диске в каталоге, объявленном опцией UNIT DIRECTORIES, уже должен находиться файл Global.tpu, который создается в результате компиляции модуля. В режиме MAKE компилятор проверяет наличие TPU-файлов для каждого объявленного модуля. Если какой-либо из файлов не обнаружен, система пытается отыскать одноименный файл с расширением pas, т.е. файл с исходным текстом модуля. Если внесены какие-либо изменения в pas-файл, то независимо от наличия в каталоге соответствующего tpu-файла, система осуществляет его компиляцию перед компиляцией основной программы. Более того, если изменения внесены в интерфейсную часть модуля, то будут перекомпилированы и все другие модули, обращающиеся к нему. Таким образом, режим MAKE существенно облегчает процесс разработки крупных программ с множеством модулей: программист избавляется от необходимости следить за соответствием tpu-файлов и их исходного текста, поскольку система выполняет его автоматически. В режиме BUILD существующие tpu-файлы игнорируются, и система пытается отыскать и откомпилировать существующий pas-файл для каждого объявленного в USES модуля. После компиляции в этом режиме программист может быть уверен в том, что учтены все сделанные им изменения в любом из модулей. Подключение модулей к основной программе осуществляется в порядке их объявления в предложении USES. При переходе к очередному модулю система предварительно отыскивает все модули, на которые он ссылается. В списке модулей данный модуль должен быть указан после всех тех модулей, которые он использует. Если в программе не указано предложение USES, ТР в любом случае присоединит стандартный модуль SYSTEM, который обеспечивает выполнение стандартных программ и подпрограмм, специфических для ТР. Контрольные вопросы 1. В чем заключается метод пошаговой детализации? 2. Перечислите правила структурного программирования. 3. Чем отличаются внешние ПП от внутренних? 4. Нарисуйте схему программы модульной структуры? 5. Каковы характерные особенности организации модуля в языке Паскаль? 6. Какую структуру имеет модуль в языке Паскаль? 7. В каких случаях можно отсутствовать раздел IMPLEMENTATION? 8. Какое расширение имеет имя файла с исходным текстом модуля? 9. Охарактеризуйте три режима компиляции модулей и основной программы. 10. Для чего предназначена интерфейсная часть модуля? 11. Можно ли в программе переопределить объекты, объявленные в интерфейсной части модуля? 12. Как получить доступ к "закрытому" объекту, значение которого вычисляется в модуле, но не используется в программе? 124 Задание к работе Разработайте программу модульной структуры. За основу возьмите задание из лабораторной работы N 12. Методические указания 1. Изучите постановку главной задачи с точки зрения теории модульного программирования и выделите основные цели задачи. 2. Выделите основные задачи, соответствующие различным целям ее решения, например: − ввод и контроль данных; − обработка данных; − сервисная работа с файлами; − отображение данных; − сервисная работа по созданию удобного интерфейса. 3. Каждая задача должна быть реализована в виде модуля. 4. Выделите цели по каждой задаче. Например, целями задачи "сервисная работа по созданию удобного интерфейса" являются: − создание меню по работе с программой; − выбор отдельных элементов меню и их распознавание; − отображение HELPa при необходимости и так далее. 5. 5. В каждой задаче выделите подзадачи. Например, задача "ввод и − формирование окна (окон) ввода данных; − контроль корректности ввода данных; − вывод диагностических сообщений; − другие подзадачи. 6. Каждая подзадача должна быть реализована в виде функции (функций) или процедуры (процедур). 7. При написании программы можно пользоваться ранее созданными Вами процедурами и функциями. 8. Выполните отладку программы, используя схему "снизу-вверх": процедура, модуль, программа. 9. Напишите отчет по работе и представьте его к защите. Содержание отчета 1. Титульный лист. 2. Словесная постановка задачи. 3. Текстуальное или графическое описание алгоритма решения задачи. 4. Листинг программы. 5. Результаты тестирования программы (твердая копия структуры данных). 6. Анализ допущенных ошибок. 7. Инструкция к использованию программы. 8. Ответы на контрольные вопросы по согласованию с преподавателем. 125 ЗАКЛЮЧЕНИЕ При преподавании дисциплины "Программирование и алгоритмические языки" кафедрой "Системы информатики" в качестве базового принят язык Паскаль. Выбор языка программирования обусловлен тем, что он создан специально для обучения дисциплине программирования. Он быстро приобрел широкую популярность во всем мире, и в настоящее время реализован практически на всех вычислительных машинах от микроЭВМ до СуперЭВМ. Язык Паскаль обладает многими достоинствами в плане обучения, среди которых можно выделить следующие: простота и ясность конструкций; высокая типизация данных; контроль типов; возможность построения новых типов данных; возможность достаточно полного контроля правильности программы на этапе компиляции и во время ее выполнения; наличие набора структурных типов данных: массивов, записей, записей с вариантами, множеств, файлов; возможность удовлетворения требованиям структурного программирования; гибкость и надежность; возможность программирования задач различного профиля. К положительным качествам пособия, разработанного для изучения вопросов программирования на языке Паскаль, следует отнести: продуманную структуру; возможность эффективно проводить лабораторные занятия; акцентирование внимания на особенностях использования отдельных операторов и приемов программирования; повышение возможности систематизации знаний по программированию на языке Паскаль; обеспечение приобретения базы общих знаний по программированию, которая в будущем позволит использовать их при изучении других систем программирования. Как и любое издание, пособие не лишено недостатков: не все контрольные вопросы представляют собой вопросы качественного характера; не предусмотрены сквозные индивидуальные задания, охватывающие темы всех лабораторных работ. 126 ЛИТЕРАТУРА 1. Грехем Р. Практический курс языка Паскаль для микроЭВМ: Пер. с англ. - М.: Радио и связь, 1986. - 268 с. 2. Грогоно П. Программирование на языке Паскаль: Пер. с англ.- М.: Мир, 1982. - 382 с. 3. Перминов О.Н. Язык программирования Паскаль. - М.: Радио и связь, 1983. - 119 с. 4. Прайс Д. Программирование на языке Паскаль: Пер. с англ. - М.: Мир, 1987. - 232 с. 5. Фаронов В.В. Программирование на персональных ЭВМ в среде Турбо-Паскаль. - М.: Изд-во МГТУ, 1990. - 580 с. 6. Зуев Е.А. Язык программирования Турбо-Паскаль 6.0. - М.:Унитех, 1992. - 304 с. 127 СОДЕРЖАНИЕ ПРЕДИСЛОВИЕ ................................................................................................................................3 ЛАБОРАТОРНАЯ РАБОТА N1 ....................................................................................................5 Тема: "Стандартные типы данных и выражения".......................................................................5 ЛАБОРАТОРНАЯ РАБОТА N2 ...................................................................................................12 Тема: "Алгоритмизация линейных вычислительных процессов "..........................................12 ЛАБОРАТОРНАЯ РАБОТА N 3 .................................................................................................23 Тема: "Разветвляющиеся вычислительные процессы".............................................................23 ЛАБОРАТОРНАЯ РАБОТА N4 ...................................................................................................31 Тема: " Перечислимые и ограниченные типы данных " ..........................................................31 ЛАБОРАТОРНАЯ РАБОТА N 5 ....................................................................................................36 Тема: "Организация итерационных циклических процессов" ................................................36 ЛАБОРАТОРНАЯ РАБОТА N 6 ....................................................................................................44 Тема: "Организация арифметических циклических процессов с известным числом повторений" ..................................................................................................................................44 ЛАБОРАТОРНАЯ РАБОТА N 7 ....................................................................................................50 Тема: "Структурные циклические процессы"...........................................................................50 ЛАБОРАТОРНАЯ РАБОТА N 8 ...................................................................................................60 Тема : " Строковые данные " ......................................................................................................60 ЛАБОРАТОРНАЯ РАБОТА N 9 ...................................................................................................65 Тема: “Сложный тип данных – множества”..............................................................................65 ЛАБОРАТОРНАЯ РАБОТА N 10 ..................................................................................................70 Тема: "Комбинированный тип данных - записи".....................................................................70 ЛАБОРАТОРНАЯ РАБОТА N 11 ..................................................................................................76 Тема: "Процедуры и функции"...................................................................................................76 ЛАБОРАТОРНАЯ РАБОТА N 12 ..................................................................................................82 Тема: " Работа с файлами" ..........................................................................................................82 ЛАБОРАТОРНАЯ РАБОТА N 13 ..................................................................................................94 Тема: Ссылочный тип данных ....................................................................................................94 ЛАБОРАТОРНАЯ РАБОТА N 14 ..............................................................................................102 Тема: "Введение в машинную графику"..................................................................................102 ЛАБОРАТОРНАЯ РАБОТА N 15 ...............................................................................................110 Тема: "Введение в построение человеко-машинного интерфейса" .....................................110 ЛАБОРАТОРНАЯ РАБОТА N 16 ...............................................................................................118 Тема: "Модульное программирование"...................................................................................118 ЗАКЛЮЧЕНИЕ ..............................................................................................................................125 ЛИТЕРАТУРА................................................................................................................................126 |