Файл: regeda_v_v_regeda_o_n_osnovy_programmirovaniya_na_vba.pdf

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

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

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

Добавлен: 02.12.2019

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

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

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
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 

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

еще

и

индексные

переменные

или

массивы

Массив

это

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

-

ность

данных

одинакового

типа

имеющих

общее

имя

Элемент

массива

является

отдельной

переменной

Он

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

путем

указания

в