Функции и процедуры, определенные пользователем. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функции и процедуры, определенные пользователем.



Собственные функции.

В предшествующих главах Вы познакомились с некоторыми встроенными функциями QBASIC (например, MID$ или SQR). Теперь рассмотрим составление собственных функций.

Вернемся к математической функции INT. INT — имя функции. Этим именем определяются некоторые программные действия, невидимые программисту, и которые инициализируются автоматически с появлением в программе имени функции. Иначе говоря, функцию можно понимать как группу операторов в программе, объединенных под именем функции. С помощью заключенного в круглые скобки аргумента (сравни INT (3.34)) в подпрограмму, инициируемую именем функции, передаются конкретные данные. Над этими данными производятся некоторые преобразования, и результат, как правило, возвращается в основную программу.

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

Пример:
STRICH$()-Возвращаемое значение - строка
RUNDEN%()-Возвращаемое значение - число типa INTEGER
WURZEL! ()-Возвращаемое значение — число типа SINGLE
В QBASIC пользовательские функции объявляются при вводе ключевого слова FUNCTION и следующего за ним имени функции. В этом случае редактор автоматически генерирует новое программное окно, в котором нет ничего, кроме операторов, ограничивающих тело функции:
FUNCTION Имя_функции END FUNCTION
В пространство между ограничивающими ключевыми словами вносят операции QBASIC, обеспечивающие выполнение необходимых действий. Чтобы вернуться в главную программу, надо нажать клавишу. На экране появляется поле списков со всеми BIBL.BAS и сохраните его под новым именем ("Save as..."). Если Вы будете составлять свою программу в этом файле, из нее можно вызывать все процедуры и функции файла BIBL.BAS.

Покажем создание функции извлечения корня, упомянутой в главе "Математические вычисления", функция должна извлекать из числа корень любой степени. Начнем с главной программы:

'Главная программа для функции извлечения корняDIM argument!, wurz%CLSDOINPUT "Ввести аргумент: ", argument!INPUT "Ввести степень корня: ", wurz%LOOP WHILE argument! < 0PRINTPRINT wurzel!(argument!, wurz%)'Конец главной программы

Составим шаблон функции:
FUNCTION wurzel! (argument!, wurz%) END FUNCTION
Извлечение корня из аргумента можно представить функцией возведения аргумента в степень, обратную степени корня. Функция извлечения корня любой степени имеет следующий вид:

FUNCTION wurzel! (argument!, wurz%)wurzell = argument! ^ (1 / wurz%) END FUNCTION

Рассмотрим синтаксис определения функции в программе более детально:
FUNCTION Имя_функции (Параметр_1 [, Параметр_2]...) [STATIC]
[Оператор]...
Имя_функции = Выражение
END FUNCTION
Имя_функции
- Имя функции; последний символ обязательно определяет тип возвращаемого значения (%,&,!, #или $).
Параметр - Параметр, который передается функции при вызове.
STATIC - Если в теле функции объявляются локальные переменные, то они сохраняют свои значения в промежутке между вызовами функции.
Выражение - Возвращаемое значение
Смысл опции STATIC разъясним на небольшом примере. Составим главную программу для вызова функции zlen:

'Главная программаPRINT "Длина 'test' "; zlen%("test")PRINT "Длина 'test' "; zlen%("test")

Функцию zlen объявим следующим образом:

FUNCTION zlen%(text$)DIMi%i%-i%+LEN(text$)zlen%-i% END FUNCTION

После запуска программы дважды получим на экране сообщение "Длина 'тест' 4". Изменим заголовок функции:
FUNCTION zlen% (text$) STATIC
После первого запуска программы получаем сначала значение длины 4, затем 8. Так как при объявлении функции используется ключевое слово STATIC, то значение локальной переменной i% сохраняется после окончания выполнения функции. Поэтому при последующих вызовах к значению переменной i% добавляется число 4, и при втором обращении к функции возвращаемое значение уже не 4, а 8.

Собственные процедуры.

В процедурах, как и в функциях, под одним именем процедуры объединяются логически самостоятельные фрагменты программы. Для начала рассмотрим пример:

'Программа, иллюстрирующая понятие процедуры PRINT "A"PRINT "В"PRINT "B1"PRINT "B2" PRINT "С"PRINT "В"PRINT "B1"PRINT "B2"PRINT "erf"PRINT "B"PRINT "B1"PRINT "B2" PRINT "ugh" 'Конец программы

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

Такие повторения необоснованно удлиняют программу и затрудняют работу с ней. Процедуры позволяют объединять под одним именем повторяющиеся фрагменты программы. Процедуру, как и функцию, можно вызвать из главной программы.
Задайте в программе команду "SUB beispiel" и получите пустой шаблон процедуры:

SUB beispiel END SUB

Внесите туда операторы, которые повторяются в главной программе.

SUB beispiel PRINT "В" PRINT "B1" PRINT "B2"END SUB

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

beispiel PRINT "C"beispielPRINT "erf"beispielPRINT "ugh"

Другие операторы.

Обработка даты компьютера.

С помощью функции DATE$ можно определить текущую системную дату или изменить ее.

Пример:DIM datSPRINT DATE$dat$ = DATE$DATE$="17-02-1992"PRINT "Предшествующая дата: "; datS: 'последующая дата: ";DATES

Обработка компьютерного времени.

С помощью функции ТIМЕ$ можно определить текущее системное время или изменить его.

Пример:DIMtlmSPRINT TIME$Tim$=TIME$TIME$-"12:12:00""PRINT "Предшествующее время:"; tlm$;последующее время: ";TIME$

Обмен значениями.

Оператор SWAP позволяет выполнить обмен значениями между двумя переменными одного типа.

Пример:'Программа для демонстрации SWAPDIMa%,b%,aS,bSа%=1b%=4a$= "А"b$="B"SWAPa%,b%SWAP aS, bSPRINT "a%-"; a%, "b%-"; b%, "aS-"; aS, "bS"; bS

Опрос клавиатуры.

С помощью функции INKEY$ во время выполнения программы можно узнать, какая клавиша была только что нажата. Эта функция возвращает строковое значение, которое может быть пустой строкой (") либо состоять из одного или двух символов. Если значение функции — пустая строка, то это означает, что никакие клавиши не нажимались; если возвращается один символ, то это символ, только что набранный на клавиатуре.

Пример 1:'INKEY$ для программных прерыванийCLSPRINT "Для продолжения нажать любую клавишу"DO WHILE INKEY$-""LOOPPRINT "Спасибо!"'Конец программы

Пример 2:
Функция INKEY$ интересна тем, что она может опрашивать специальные и функциональные клавиши. Коды клавиатуры можно узнать либо в справочной системе QBASIC, либо использовать следующую программу:

'Коды клавиш DIM taste$ DOCLSPRINT "Нажать любую клавишу"DOTASTE$=INKEY$LOOPWHILEtaste$=""PRINT "Код клавиши: "; taste$PRINT "Длина кода клавиши: "; LEN(taste$)PRINTPRINT "Опросить еще одну клавишу? (Y)"DOTaste$-INKEY$LOOP WHILEtaste$-"" LOOP UNTIL UCASTS(taste$)< > "Y"

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

Установка цветов экрана.

Используя оператор COLOR, можно изменять цвет изображения и фон. Оператор COLOR имеет следующий формат:
COLOR [Цвет_фона] [,Цвет_символов]
Цвет_фона - Величина типа INTEGER, обозначающая цвет фона экрана
Цвет_символов - Величина типа INTEGER, обозначающая цвет изображения символов.
Возможны следующие цвета:

Номер Цвет Номер Цвет
  Черный   Темно-серый
  Синий   Светло-синий
  Зеленый   Светло-зеленый
  Голубой   Светло-голубой
  Красный   Светло-красный
  Фиолетовый   Светло-фиолетовый
  Коричневый   Желтый
  Светло-серый   Белый

Стандартное значение установки цвета — COLOR 7,0. Если к коду цвета фона прибавить число 16, то получим мерцающее изображение.

Пример:'Программа для демонстрации различных цветов изображенияDIM vordergrund%, hlntergrund%CLSFOR vordergrund%=O to 31 'цвет символаFOR hlntergrund%=O to 15 'фонCOLOR vordergrund%, hlntergrund%PRINT USING "Farbe #*"; vordergrund%;PRINT ",";PRINT USING "•»»";hintergrund%NEXT hlntergrund% NEXT vordergrund% 'Возвращение к стандарту:COLOR 7,0 'Конец программы

Работа с файлами.



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 390; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.119.241 (0.009 с.)