WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 | 5 |   ...   | 8 |
Федеральное агентство морского и речного транспорта Федеральное государственное образовательное учреждение высшего профессионального образования Волжская государственная академия водного транспорта Кафедра информатики, систем управления и телекоммуникаций Серия «Информационные технологии в системах управления и телекоммуникации» Выпуск 1 Р.Н. Гурьяшова, А.В. Шеянов Информатика Сегментация программ Учебно-методическое пособие для студентов очного и заочного обучения технических специальностей Рекомендовано государственным образовательным учреждением высшего профессионального образования "Московский государственный технический университет имени Н.Э.Баумана" в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению подготовки 180400 "Эксплуатация водного транспорта и транспортного оборудования", по специальности высшего профессионального образования 180404 "Эксплуатация судового электрооборудования и средств автоматики" Нижний Новгород Издательство ФГОУ ВПО «ВГАВТ» 2009 УДК 517.2:681.3 Г95 Редакционная коллегия серии «Информационные технологии в системах управления и телекоммуникаций»:

д. т. н., профессор Ю.С. Федосенко (отв. редактор), д. т. н., профессор М.М. Чиркова, к. т. н., доцент В.И. Логинов, к. т. н., доцент А.В. Преображенский Гурьяшова, Р.Н.

Информатика : Сегментация программ : учеб.-метод. пособие для студ. оч. и заоч. обуч. технич. специальностей / Р.Н. Гурьяшова, А.В. Шеянов. – Н. Новгород : Изд-во ФГОУ ВПО «ВГАВТ», 2009. – 108 с.

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

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

При написании пособия использован многолетний опыт преподавания авторами дисциплины «Информатика».

Авторы выражают благодарность за ценные замечания доценту, к.т.н. Т.И. Гавриловой.

Работа рекомендована к изданию кафедрой информатики, систем управления и телекоммуникации (протокол № 2 от 10.09.2008 г.).

© ФГОУ ВПО «ВГАВТ», Введение Сегментация программ – разбиение программ на подпрограммы – является одним из средств, позволяющих упростить разработку, тестирование и сопровождение больших программ.

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

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

Приводятся семь лабораторных работ и таблиц заданий к ним по следующим темам:

• Функция.

o Вычисление значения выражения.

o Вычисление значения величины, заданной в форме ветвления.

o Вычисление значения выражения (обработка массива).

• Процедура.

o Исследование функции одной переменной, зависящей от параметра.

o Вычисление координат искомой точки.

o Анализ итогов сдачи сессии.

o Анализ итогов работы предприятия.

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

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

Приведенные программы тестировались в средах QBasic 1.(1.1), GNU g95 Fortran compiler и Intel Fortran. Программы легко могут быть адаптированы для других используемых версий Фортрана и Бейсика. Общие сведения по организации подпрограмм будут полезны при написании программ на любом поддерживающем их языке.

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

1. Теоретические сведения 1.1. Определение Подпрограмма – поименованная часть компьютерной программы (кода), содержащая описание определённого набора действий.

Подпрограмма может быть многократно вызвана из разных частей основной (главной) программы и других подпрограмм.

Имя подпрограммы образуется по правилам образования идентификаторов в языке (имена переменных образуются по тем же правилам).

В некоторых языках различают подпрограммы:

– функции, возвращающие значение (результат) в основную программу;

– процедуры, не обязательно возвращающие значения.

Бейсик и Фортран имеют такое разделение. Их названия в конкретных языках могут отличаться. Так, на Фортране официально используются термины: процедура-функция и процедура-подпрограмма, но суть от этого не меняется. В некоторых языках есть только функции (например, язык С).

1.2. Назначение Изначально подпрограммы появились как средство оптимизации программ по объёму занимаемой памяти – они позволили не повторять в программе идентичные блоки кода, а описывать их однократно и вызывать по мере необходимости.

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

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



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

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

Параметризация Оформление кода в виде подпрограммы с параметрами позволяет обобщить решение и, таким образом, использовать его для решения целого класса задач.

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

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

Библиотеки Набор таких подпрограмм может быть объединен в библиотеку.

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

Концепция «черного ящика» Готовую (отлаженную) подпрограмму можно использовать как «черный ящик» – знать что «подается на вход» и что «получается на выходе», не вдаваясь в подробности происходящего внутри.

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

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

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

Фактические параметры Фактические параметры используются при вызове подпрограммы. Они указываются в команде вызова после имени подпрограммы. Фактическими параметрами могут быть переменные, элементы массива, массивы, константы, выражения. Имена формальных и фактических параметров могут совпадать. Значения фактических параметров подставляются вместо формальных (передача данных в подпрограмму), и все вычисления выполняются с ними.

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

Несоблюдение этих правил приводит к ошибкам.

1.4. Описание и вызов подпрограмм В языках высокого уровня описание подпрограммы состоит по меньшей мере из двух частей – заголовка и тела. Заголовок подпрограммы описывает её имя и, возможно, параметры, то есть содержит информацию, необходимую для вызова подпрограммы. Тело – набор операторов, который выполняется при каждом вызове подпрограммы. В Фортране и Бейсике имеется специальный оператор, обозначающий конец подпрограммы.

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

На QBasic это сделать нельзя (подпрограмму не удается записать). На Фортране подпрограмму записать можно, однако:

• при вызове будет выполняться стандартная подпрограмма;

• для того, чтобы выполнялась своя подпрограмма, ее необходимо описать с помощью оператора EXTERNAL.

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

INTERFACE тело_интерфейса END INTERFACE Здесь тело_интерфейса – это копии заголовков подпрограмм, описание параметров и завершающий оператор END.

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

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

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

Процедура (подпрограмма, процедура-подпрограмма) Процедура вызывается отдельным оператором. В зависимости от языка программирования, это может быть просто имя процедуры, и возможно – параметры.

При вызове процедуры выполняются следующие действия:

• вычисление фактических параметров (если они являются выражениями);

• формальные параметры заменяются на значения соответствующих фактических параметров;

• выполняются операторы тела процедуры;

• управление передается оператору основной программы следующему за оператором вызова.

Описание на Бейсике Общеупотребительные названия – подпрограмма, процедура, процедура SUB.

SUB имя_процедуры [(параметр[, параметр,...])] [операторы описания] [исполняемые операторы] END SUB Примечание. Текст, приведенный в квадратных скобках, не является обязательным. В данном случае это означает, что процедура может быть как вообще без параметров (в этом случае не нужны и скобки), так и с одним параметром (в скобках) или несколькими (в скобках, через запятую).





Бейсик поддерживает две формы вызова:

• с помощью ключевого слова CALL:

CALL имя_процедуры [(параметр[, параметр,...])] • и без ключевого слова. В этом случае скобки не ставятся:

имя_процедуры [параметр[, параметр,...]] Оболочка QBasic «прячет» подпрограммы. Вывод списка имен подпрограмм и переключение между ними осуществляется по клавише F2. На самом деле подпрограммы находятся в одном файле с основной программой, после нее.

Пример Создадим две подпрограммы с именами:

• SAYHELLO – без параметров;

• TEST(N, K) – с параметрами N, K.

Вызовем их различными способами.

CALL SAYHELLO SAYHELLO CALL TEST(1, 2) TEST 3, END SUB SAYHELLO PRINT "HELLO" END SUB SUB TEST (N, K) PRINT "N + K = "; N + K END SUB Результаты работы:

HELLO HELLO N + K = N + K = Описание на Фортране Общеупотребительные названия – подпрограмма, процедура- подпрограмма, процедура SUBROUTINE.

Фортран поддерживает несколько типов подпрограмм, мы рассмотрим только так называемые внешние подпрограммы. Они располагаются после головной программы (после оператора END) в том же файле (или в отдельном программном файле).

SUBROUTINE имя_процедуры ([парам1[, парам2,...]]) [операторы описания] [исполняемые операторы] END [SUBROUTINE] Использование скобок обязательно даже при пустом списке параметров (аналогично и при вызове процедуры).

Поддерживается только одна форма вызова – с помощью ключевого слова CALL:

CALL имя_процедуры ([параметр[, параметр,...]]) Пример Создадим и вызовем две подпрограммы с именами:

• SAYHELLO( ) – без параметров;

• TEST(N, K) – с параметрами N, K.

CALL SAYHELLO() CALL TEST(1, 2) END SUBROUTINE SAYHELLO() PRINT *,'HELLO' END SUBROUTINE TEST (N, K) PRINT *,'N + K =', N + K END SUBROUTINE Результаты работы:

HELLO N + K = Функция (процедура-функция) Подпрограмма оформляется в виде функции, если в результате ее выполнения получается одно значение.

Функция вызывается по имени и возвращает значение, которое можно использовать в выражении, например:

y = sin(x) (возвращаемое значение присваивается переменной y);

y = 1 – sin2(x) (возвращаемое значение используется в выражении).

В случае функции дополнительно нужно выполнить передачу результата в вызывающую программу. На Фортране и Бейсике это делается присвоением вычисленного значения переменной, имя которой совпадает с именем функции. Если этого не сделать, то результатом функции будет неопределенное значение (в используемых реализациях на Бейсике получается 0, а на Фортране – произвольное значение).

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

При вызове функции выполняются следующие действия:

• вычисление фактических параметров (если они являются выражениями);

• формальные параметры заменяются на значения соответствующих фактических параметров;

• выполняются операторы тела функции (вычисляется результат);

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

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

Описание на Бейсике Общеупотребительное название – функция.

FUNCTION имя_функции [(параметр[, параметр,...])] [операторы описания] [исполняемые операторы] имя_функции = возвращаемое_значение END FUNCTION При отсутствии параметров скобки в заголовке функции не ставятся (аналогично и при ее вызове).

Пример Создадим две подпрограммы с именами:

• RND10 – без параметров (с использованием датчика случайных чисел, табл. 6.2);

• TEST(N, K) – с параметрами N, K.

Вызовем их различными способами: в операторе печати, присваивания и в выражении.

PRINT "Функция Test: "; TEST(1, 2) X = TEST(3, 4) Y = 3 * TEST(5, 6) + PRINT "X=";X, "Y=";Y PRINT "Функция Rnd10: ";RNDZ = RND10 - PRINT "Z=";Z END FUNCTION RND RND10 = 10 * RND END FUNCTION FUNCTION TEST (N, K) TEST = N + K END FUNCTION Результаты работы:

Функция Test: X= 7 Y= Функция Rnd10: 7.Z= 3.Описание на Фортране Общеупотребительные названия – функция, процедурафункция, процедура FUNCTION.

[тип] FUNCTION имя_функции ([параметр[, параметр,...]]) [операторы описания] [исполняемые операторы] имя_функции = возвращаемое_значение END [FUNCTION] При отсутствии параметров использование скобок в заголовке функции обязательно (аналогично и при ее вызове). Если в заголовке тип функции не указан, то он определяется «по умолчанию», по первой букве имени (как и для переменных).

Пример Создадим две подпрограммы с именами:

• RND10( ) – без параметров (с использованием датчика случайных чисел, табл. 6.1);

• TEST(N, K) – с параметрами N, K.

Вызовем их различными способами: в операторе печати, присваивания и в выражении.

PRINT *, 'Функция Test: ', TEST(1, 2) X = TEST(3, 4) Y = 3 * TEST(5, 6) + PRINT *, 'X= ',X, 'Y= ',Y PRINT *, 'Функция Rnd10: ', RND10() Z = RND10() - PRINT *, 'Z= ', Z END FUNCTION RND10() CALL RANDOM_NUMBER(RND) RND10 = 10 * RND END REAL FUNCTION TEST (N, K) TEST = N + K END FUNCTION Результаты работы:

Функция Test: 3.

X= 7. Y= 34.

Pages:     || 2 | 3 | 4 | 5 |   ...   | 8 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.