Файл: regeda_v_v_regeda_o_n_osnovy_programmirovaniya_na_vba.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 02.12.2019

Просмотров: 3119

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

или

 

блочный

 

вариант

 

 DEF FN

имя

 [(

список

 

аргументов

)] 

 

  

 

 

операторы

 

  

[EXIT 

DEF] 

 

 

 

FN

имя

=

выражение

 

 END DEF 

FN

имя

 

 

имя

 

присваиваемое

 

определяемой

 

функции

 (

буква

за

 

кото

-

рой

 

следует

   

любое

 

число

 

букв

 

или

 

цифр

); 

список

 

аргументов

 

 

не

-

обязательная

 

последовательность

 

разделенных

 

запятыми

 

формальных

 

па

-

раметров

  (

не

 

более

 16), 

при

 

вызове

 

функции

 

им

 

присваивается

 

значение

  

соответствующих

 (

по

 

порядку

 

в

 

списке

параметров

Оба

 

альтернативных

 

способа

 

позволяют

 

определить

 

в

 

программе

 

собственную

 

функцию

 

пользователя

которая

 

затем

 

может

 

вызываться

 

по

 

ее

 

имени

т

.

е

каждый

 

раз

когда

 

в

 

каком

-

либо

 

операторе

 

будет

 

использова

-

но

 

имя

присвоенное

 

данной

 

функции

будет

 

вычисляться

 

выражение

 

с

 

подстановкой

 

в

 

него

 

значений

 

аргументов

указанных

 

при

 

вызове

Имена

 

аргументов

 

в

 

однострочном

 

операторе

 

DEF FN

 

могут

 

совпа

-

дать

 

с

 

именами

 

переменных

 

в

 

программе

но

 

это

 

будут

 

не

 

одни

 

и

 

те

 

же

  

пе

-

ременные

В

 

выражении

 

можно

 

использовать

 

переменные

не

 

включенные

 

в

 

список

 

аргументов

Аргументы

 

могут

 

использоваться

 

только

 

в

 

выраже

-

нии

определяющем

 

функцию

Тип

 

значения

  (

числовое

 

или

 

символьное

), 

которое

 

получается

 

при

 

выполнении

 

функции

определяется

 

именем

 

функ

-

ции

 (

по

 

тем

 

же

 

правилам

что

 

и

 

имя

 

переменной

). 

Пример

IF FNdistance(2,3,4)<6 THEN PRINT "

Точка

 

внутри

сферы

 

радиуса

 6" 

   ... 
REM 

Вычисление

 

расстояния

 

от

 

точки

 (x,y,z) 

REM 

до

 

центра

 

сферы

 

 

 DEF FNdistan

с

e(x,y,z)=SQR (x^2+y^2+z^2) 

Положение

 

в

 

программе

 

определения

 

функции

 

несущественно

в

 

ча

-

стности

она

 

может

 

находиться

 

после

 

тех

 

операторов

в

 

которых

 

она

 

ис

-

пользуется

В

 

отличие

 

от

 

подпрограмм

в

 

тело

 

функции

  "

попасть

 

случай

-

но

нельзя

поскольку

 

при

 

выполнении

 

программы

 

строки

в

 

которых

 

рас

-

полагается

 

ее

 

определение

считаются

 "

невидимыми

". 


background image

Войти

 

в

 

тело

 

функции

 

или

 

выйти

 

из

 

него

 

с

 

помощью

 

операторов

 

GOTO, GOSUB, RETURN

 

нельзя

хотя

 

внутри

 

тела

 

эти

 

операторы

 

допус

-

тимы

Определения

 

функций

 

не

 

могут

 

быть

 

вложенными

хотя

 

в

 

определе

-

нии

 

могут

 

встречаться

 

вызовы

 

других

 

или

 

этих

 

же

 

функций

 (

и

 

процедур

). 

В

 

последнем

 

случае

 

имеем

 

дело

 

с

 

рекурсивным

 

вызовом

Обычно

 

в

 

много

-

строчном

 

определении

 

функции

 

имеется

 

оператор

 

присваивания

в

 

кото

-

ром

 

в

 

левой

 

части

 

стоит

 

имя

 

функции

Если

 

такого

 

оператора

 

нет

то

 

зна

-

чение

возвращаемое

 

функцией

не

 

определено

Для

 

выхода

 

из

 

тела

 

функ

-

ции

 

до

 

оператора

 

END DEF

 

применяется

 

оператор

 

EXIT DEF

Пример

Определим

 

функцию

которая

 

рекурсивно

 

вычисляет

 

значе

-

ние

 

факториала

 

целого

 

числа

REM 

Определение

 

функции

 FNfact

%

 

DEF FNfact

%

(n

%

 IF 

n

%

=0 THEN FNfact

%

=1 

EXIT DEF 

IF n

%

=1 THEN FNfact

%

=1_ 

ELSE FNfact

%

=n

%

*FNfact

%

(n

%

-1

%

END DEF 

REM 

Использование

 

ранее

 

определенной

 

функции

 FNfact

%

 

PRINT "

факториал

 5=";FNfact

%

 (5

%

2.8.3.

 

Процедуры

 

 

самое

 

мощное

 

средство

 

для

 

построения

 

модуль

-

ной

 

программы

 

 

определяются

 

с

 

помощью

 

оператора

 

SUB

 

и

 

END SUB

которые

 

служат

соответственно

началом

 

и

 

концом

 

группы

 

операторов

называемой

 

процедурой

SUB 

имя

 [(

список

 

параметров

)] 

  [LOCAL 

список

 

переменных

  [STATIC 

список

 

переменных

  [SHARED 

список

 

переменных

 

 

 

 

операторы

 

 [EXIT 

SUB] 

END SUB 

имя

 

 

уникальное

 

имя

 

процедуры

отвечающее

 

тем

 

же

 

правилам

по

 

которым

 

образуются

 

имена

 

переменных

список

 

параметров

 

 

после

-

довательность

разделенных

 

запятыми

 

формальных

 

параметров

которые

 

служат

 

только

 

для

 

определения

 

процедуры

не

 

имея

 

никакого

 

отношения

 

к

 


background image

другим

 

переменным

 

программы

 

с

 

тем

 

же

 

именем

Как

 

и

 

для

 

функции

по

-

ложение

 

процедуры

 

не

 

существенно

кроме

 

того

нельзя

  "

случайно

по

-

пасть

 

в

 

процедуру

 

непосредственно

 

от

 

предыдущего

 

оператора

ни

 

с

 

по

-

мощью

 

операторов

 

GOTO

GOSUB

 

или

 

RETUN

хотя

 

внутри

 

процедуры

 

эти

 

операторы

 

действуют

Определения

 

процедур

 

не

 

могут

 

быть

 

вложенными

хотя

 

внутри

 

процедуры

 

могут

 

быть

 

вызовы

 

других

 

процедур

 

и

 

функций

Все

 

переменные

 

в

 

процедуре

 

по

 

умолчанию

 

являются

 

локальными

Локальные

 

переменные

 

являются

 

динамическими

место

 

под

 

них

 

выделя

-

ется

 

лишь

 

при

 

выполнении

 

процедуры

после

 

же

 

выполнения

 

процедуры

 

они

 

автоматически

 

пропадают

Однако

 

можно

 

объявить

 

или

 

с

 

помощью

 

оператора

 

SHARED

 

глобальные

 

переменные

  (

переменные

которые

 

берут

 

свои

 

значения

 

из

 

предыдущих

 

программных

 

строк

), 

или

 

с

 

помощью

 

опера

-

тора

 

STATIC

 

статические

 

переменные

 (

переменные

для

 

которых

 

важно

чтобы

 

они

 

не

 

изменились

 

при

 

повторных

 

вызовах

). 

Определение

 

процедуры

 

должно

 

заканчиваться

 

оператором

 

END 

SUB

который

 

возвращает

 

управление

 

в

 

программу

передавая

 

его

 

к

 

опера

-

тору

следующему

 

за

 

вызовом

 

процедуры

Для

 

выхода

 

из

 

процедуры

 

в

 

про

-

извольном

 

месте

 

используется

 

оператор

 

EXIT SUB

Для

 

вызова

 

процедуры

 

используется

 

оператор

 

CALL

имеющий

 

фор

-

мат

CALL

 

имя

 ([

список

 

параметров

]) 

имя

 

 

это

 

имя

 

процедуры

определенной

 

с

 

помощью

 

оператора

 

SUB; 

список

 

параметров

 

 

это

 

последовательность

 

разделенных

 

запятыми

 

переменных

выражений

 

или

 

констант

передаваемых

 

процедуре

в

 

качест

-

ве

 

фактических

 

параметров

  (

по

 

типу

 

они

 

должны

 

соответствовать

 

фор

-

мальным

 

параметрам

 

в

 

определении

 

процедуры

).  

Ниже

 

приведена

программа

 

для

 

вычисления

 

суммы

 

S

=

=

6

1

i

2

i

i

)

b

a

(

i

где

 

=

нечетное

i

если

,

i

четное

i

если

,i

a

2

i

=

нечетное

i

если

,

i

четное

i

если

,

i

a

3

2

i

 

 

FOR i=1 TO 6 

   CALL 

ab(i) 

 

   s=s+(a-b)^2 
  NEXT 

 

   PRINT 

"S="; 

 

 

   

END 


background image

REM  

Процедура

 

вычисления

 a, b 

 SUB 

ab(i) 

  SHARED 

a,b 

IF i MOD 2 <>0 THEN a=i^2:b=i^3 ELSE a=i:b=i^2 
 END 

SUB 

Обратите

 

внимание

что

 

оператор

 

END

 

необязателен

 

в

 

программе

т

.

к

в

 

процедуру

 

ab

 

можно

 

попасть

 

лишь

 

по

 

оператору

 

CALL ab(i)

2.8.4.

 

Составить

 

три

 

программы

 

для

 

вычисления

 

и

 

вывода

 

на

 

экран

 

монитора

 

значений

 

функции

 

из

 

таблицы

 2.5 

для

 

x

изменяющегося

 

от

 

-20 

до

 20 

с

 

шагом

 2.  

Таблица

 2.5 

 

ва

рианта

 

Функция

 

 

ва

рианта

Функция

 

<

<

+

+

+

=

10

X

1

X

10

10

X

,

,

,

10

X

)

1

X

1

X

5

.

0

(

Z

2

3

 



<

<

+

+

=

1

X

1

X

1

1

X

,

,

,

x

11

x

)

1

X

12

X

2

(

Z

3

4

 

<

<

+

+

=

π

π

π

π

X

X

X

,

,

,

)

x

2

x

(

)

13

X

X

sin

(

Z

3

 

<

<

+

=

π

π

π

π

X

X

X

,

,

,

x

2

)

1

X

X

3

sin

(cos

Z

 

=

+

=

Α

10

1

n

4

4

x

n

1000

 

k

3

x

n

1

k

+

=

Α

=

 

=

=

Α

n

1

k

k

2

X

cos

 

10 

=

+

=

Α

n

1

k

3

)

2

xk

(

 

=

+

=

Α

n

1

k

4

)

k

4

X

(

 

11 

=

=

Α

10

1

n

n

n

x

 

kx

e

n

1

k

x

+

=

Α

=

 

12 

=

+

=

Α

15

5

k

k

x

 

Номер

 

варианта

 

задается

 

преподавателем

В

 

первой

 

программе

 

для

 

организации

 

цикла

 

использовать

 

оператор

 

FOR/NEXT

во

 

второй

 

 

WHILE/WEND

а

 

в

 

третьей

 

 

DO/LOOP

.

 

Вывести

 

полученные

 

результаты

 

на

 

экран

 

монитора

 

и

 

на

 

принтер

в

 

первой

 

программе

 

в

 

строку

 

с

 

точностью

 2 

знака

 

после

 

запятой

во

 

второй

 

программе

 

 

в

 

столбец

 

с

 

точностью

 1 

знак

 


background image

после

 

запятой

в

 

третьей

 

 

по

 

зонам

 

в

 

экспоненциальном

 

формате

Для

 

вы

-

числения

 

значений

 

функций

 

использовать

 

функцию

 

пользователя

2.8.5.

 

Составить

 

программу

 

для

 

вычисления

 

и

 

вывода

 

на

 

экран

 

мони

-

тора

 

наибольшего

 

и

 

наименьшего

 

значений

 

функции

 (

Табл

. 2.6) 

и

 

значения

 

аргумента

при

 

котором

 

оно

 

получено

Для

 

определения

 

наибольшего

 

зна

-

чения

 

использовать

 

подпрограммы

а

 

для

 

определения

 

наименьшего

 

значе

-

ния

 

 

процедуры

Таблица

 2.6. 

 

ва

-

рианта

 

Функция

 

Диапазон

 

изменения

 

Х

Шаг

 

изменения

 

Х

 

y=-sin(X

i

/2) 

20

÷

40 

y=13X

2

 

÷

y=cos(4x) 

4

÷

24 

4

X

1

Y

+

=

 

(-1)

÷

0.5 

23

X

44

Х

Y

+

=

 

(-10)

÷

10 

y=(3x

2

+43) 

11

÷

19 

Для

 

определения

наибольшего

 

значения

функции

 

и

 

соответствую

-

щего

 

ей

 

значения

 

аргумента

 

воспользуйтесь

 

следующим

 

алгоритмом

:  

 

 

присвоить

 

переменной

 

YMAX

 

значение

заведомо

 

меньшее

 

значе

-

ния

 

функции

 

Y

 

для

 

заданного

 

диапазона

 

изменения

 

X

 

организовать

 

цикл

 

по

 

переменной

 

X

 ; 

 

организовать

 

переход

 

в

 

подпрограмму

 

для

 

нахождения

 

наибольше

-

го

 

из

 

двух

 

значения

 

Y

сохранить

 

это

 

значение

 

в

 

переменной

 

YMAX

а

 

соот

-

ветствующее

 

ему

 

значение

 

X

 

в

 

переменной

 

XMAX

;  

 

после

 

завершения

 

цикла

 

ввести

 

на

 

экран

 

полученные

 

значения

 

в

 

следующем

 

виде

:

 

YMAX=

число

    

при

    XMAX=

число

2.9.

 

Использование

 

массивов

 

в

 TURBO BASIC 

Помимо

 

числовых

 

и

 

символьных

 

переменных

 

в

 TB 

используются

 

еще

 

и

 

индексные

 

переменные

 

или

 

массивы

Массив

 

 

это

 

последователь

-

ность

 

данных

 

одинакового

 

типа

имеющих

 

общее

 

имя

Элемент

 

массива

 

является

 

отдельной

 

переменной

Он

 

идентифицируется

 

путем

 

указания

 

в