Скачиваний:
109
Добавлен:
21.01.2014
Размер:
2.38 Mб
Скачать

4. Контрольные вопросы

                  1. Назначение и синтакис операторов передачи управления ?

                  1. Назначение и синтакис операторов работы с датой и временем ?

                  1. Назначение и синтакис операторов работы с файлами ?

                  1. Назначение и синтакис операторов работы с окружением DOS ?

Вопросы по процедуре выполнения индивидуального задания.

5. Библиографический список

                  1. Бобровский С. Программирование на языке QBASIC для школьников и студентов. — М.: Десс; Инфорком-Пресс, 1999. - 208 с.

                  1. Зельднер Г.А. Программируем на языке QuickBASIC 4.5. - М: ABF, 1996. - 432 с.

                  1. Введение в программирование на языке Microsoft BASIC: Учебное пособие / Ю.Я. Максимов, С.В. Осипов, А.В. Потемкин, Щ.С. Симоненков. - М.: ”Диалог-МИФИ”,1991. - 176 с.

Министерство образования

Российской Федерации

Тульский государственный университет

Кафедра “Инструментальные и метрологические системы”

Информатика

ЛАБОРАТОРНАЯ РАБОТА 15

Создание и работа с процедурами пользователя

для студентов очного обучения

Тула 2000 г.

1. Цель и содержание работы

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

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

2. Порядок выполнения работы

                  1. Изучить теоретическую часть.

                  1. Получить задание у преподавателя.

                  1. Выполнить задание.

                  1. Оформить отчет.

                  1. Защитить работу.

3. Теоретическая часть

Процедуры, их объявление и вызов

DECLARE

Оператор

Описывает процедуру FUNCTION или SUB и выполняет проверку аргументов на соответствие типу данных.

DECLARE {FUNCTION | SUB} имя [ ( [ параметры ] ) ]

  • имя - имя процедуры;

  • аргументы - одна или несколько переменных, указывающих параметры, которые передаются в процедуру при ее вызове:

перемен[( )] [AS тип] [, перемен[( )] [AS тип]]...

  • перемен - имя переменной Basic.

  • тип - тип данных переменной (INTEGER, LONG, SINGLE, DOUBLE, STRING или тип, определенный пользователем). ANY допускает использование любого типа данных.

  • DECLARE необходим при вызове процедур SUB без использования CALL.

  • BASIC автоматически добавляет оператор DECLARE при сохранении программы.

  1. DECLARE FUNCTION Ims# (j%)

SHARED

STATIC

Оператор

SHARED предоставляет процедурам доступ к переменным уровня модуля.

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

SHARED переменная[()] [AS тип] [,переменная[()] [AS тип]]...

STATIC переменная[()] [AS тип] [,переменная[()] [AS тип]]...

  • переменная - имя переменной уровня модуля или статической переменной. Имя переменной может быть длиной до 40 символов и должно начинаться с буквы. Допустимые символы: A-Z, 0-9 и точка (.).

  • AS тип - описывает тип данных переменной (INTEGER, LONG, SINGLE, DOUBLE, STRING или тип данных, определенный пользователем).

FUNCTION

END FUNCTION

Операторы

Определяют начало и конец процедуры FUNCTION.

FUNCTION имя [(параметры)] [STATIC]

[блок_операторов]

имя = выражение

[блок_операторов]

END FUNCTION

  • имя - имя функции и возвращаемый ею тип данных, указанный суффиксом типа данных (%, &, !, # или $);

  • параметры - список переменных, значения которых передаются функии при ее вызове. Изменение значения параметра внутри функции изменит его значение в вызывающем модуле. Аргументы передаются по значению в следующем формате:

перемен[( )] [AS тип] [, перемен[( )] [AS тип]]...

  • перемен - имя переменной Basic.

  • тип - тип данных переменной (INTEGER, LONG,SINGLE, DOUBLE, STRING или тип данных, определенный пользователем);

  • STATIC - указывает, что локальные переменные функции сохраняются между вызовами. Иначе локальные переменные считаются динамическими и их значения теряются при выходе из функции. Этот атрибут не влияет на переменные, описанные вне функции операторами DIM или COMMON с атрибутом SHARED;

  • выражение - выражение, вычисляющее результат функции. Если нет выражений присвоенных имени функции, по умолчанию возвращается “0” для числовой функции и пустая строка - для символьной.

  • При вызове функции можно указать, что значение аргумента не должно изменяться функцией. Для этого следует заключитеь аргумент в круглые скобки.

  • Использование FUNCTION (а не SUB) оправдано если неоходимо получение одиночного значения.

  • Чтобы передать в процедуру в качестве аргумента массив достаточно указать пустые скобки (например: Ims ()).

  • Процедуры FUNCTION как и SUB состоит из серии операторов и изменяет значения параметров, однако FUNCTION вызывается подобно встроенной функции языка BASIC.

  • Переменные не вхдящие в список параметров - локальные (если конечно они не описаны оператором SHARED внутри процедуры или операторами DIM или COMMON с атрибутом SHARED в главном модуле).

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

  • Процедуры FUNCTION могут быть рекурсивными (вызывать сами себя). При этом следует предусмотреть условие выхода.

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

  • Процедуры вызываются оператором CALL или путем указания ее имени со списком аргументов.

  • Термин “параметры” означает - имя переменной (массива), используемой в операторе SUB, FUNCTION, DECLARE, их список может состоять из имен переменных (кроме строк фиксированной длины) и имен массивов. (Пример: FUNCTION Ims# (параметр%) STATIC )

  • Термин “аргументы” означает - константы, выражения, имена переменных, имена массивов которые передаются в процедуру FUNCTION или SUB при их вызове. (Пример: СALL Ims# (аргумент_1%, аргумент_2!, аргумент_3#) ).

  1. DECLARE FUNCTION Ims# (j%)

... ‘Блок операторов главного модуля

PRINT Ims# (Group%) ‘Вызов процедуры

FUNCTION Ims# (j%) STATIC

... ‘Блок операторов процедуры

END FUNCTION

SUB

END SUB

Операторы

Определяют начало и конец процедуры SUB.

SUB имя [(список_параметров)] [STATIC]

[блок_операторов]

[EXIT SUB]

[блок_операторов]

END SUB

  • имя - имя процедуры SUB, длиной до 40 символов, без суффикса типа данных;

  • список_параметров - содержит имена простых переменных и массивов, разделенных запятыми и передаваемых в процедуру. Изменение значения аргумента внутри процедуры изменит его значение в вызывающем модуле. Список_параметров передаются по значению в следующем формате:

перемен[( )] [AS тип] [, перемен[( )] [AS тип]]...

  • перемен - имя переменной или массива Basic.

  • тип - тип данных переменной (INTEGER, LONG, SINGLE, DOUBLE, STRING или тип данных, определенный пользователем). Строки фиксированной длины необходимо преобразовать в строки переменной длины;

  • EXIT SUB - выход из процедуры;

  • STATIC - указывает, что локальные переменные функции сохраняются между вызовами. Иначе локальные переменные считаются динамическими и их значения теряются при выходе из процедуры. Этот атрибут не влияет на переменные, описанные вне процедуры операторами DIM или COMMON с атрибутом SHARED.

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

  • Использование SUB (а не FUNCTION) оправдано если неоходимо получение более чем одного значения.

  • Чтобы передать в процедуру в качестве аргумента массив достаточно указать пустые скобки (например: Ims ()).

  • Процедуры SUB как и FUNCTION состоит из серии операторов и изменяет значения параметров, однако SUB вызывается подобно операторам языка BASIC.

  • Переменные не входящие в список параметров - локальные (если конечно они не описаны оператором SHARED внутри процедуры или операторами DIM, REDIM или COMMON с атрибутом SHARED в главном модуле).

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

  • Процедуры SUB могут быть рекурсивными (вызывать сами себя). При этом следует предусмотреть условие выхода.

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

  • Процедуры вызываются оператором CALL или путем указания ее имени со списком аргументов.

  • Термин “параметры” означает - имя переменной (массива), используемой в операторе SUB, FUNCTION, DECLARE, их список может состоять из имен переменных (кроме строк фиксированной длины) и имен массивов. (Пример: SUB Ims# (параметр%) STATIC )

  • Термин “аргументы” означает - константы, выражения, имена переменных, имена массивов которые передаются в процедуру FUNCTION или SUB при их вызове. (Пример: СALL Ims# (аргумент_1%, аргумент_2!, аргумент_3#) ).

  1. DECLARE SUB Ims (j%(), i%())

... ‘Блок операторов главного модуля

CALL Ims (Group_1() , Group_2()) ‘Вызов процедуры

SUB Ims (j%)

... ‘Блок операторов процедуры

END SUB

CALL

Оператор

Передает управление в процедуру типа SUB.

[CALL] имя [ ( [ аргументы ] ) ]

  • имя - имя вызываемой процедуры типа SUB.

  • аргументы - переменные или константы передаваемые в процедуру SUB. Разделяйте аргументы запятыми. При указании аргументов массива, введите имя массива и после него пустые скобки.

  • Если Вы опускаете ключевое слово CALL, то пропустите также скобки, в которые заключен список аргументов. Либо опишите процедуру в операторе DECLARE перед ее вызовом, либо сохраните программу и QB автоматически сгенерирует оператор DECLARE.

  • При указании аргумента, чье значение не будет изменяться процедурой, заключите этот аргумент в скобки.

  • См. предшествующий пример