Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

regeda_v_v_regeda_o_n_osnovy_programmirovaniya_na_vba

.pdf
Скачиваний:
11
Добавлен:
06.02.2016
Размер:
1.26 Mб
Скачать

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

2.4.5. Оператор DATA создает в памяти таблицу констант, которые затем могут присваиваться переменным с помощью оператора READ, и имеет следующий формат:

DATA константа[,константа] . . .

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

DATA 22,"Пенза, ул. Красная", Москва, 22.33

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

2.4.6. Оператор READ имеет следующий формат:

READ переменная [, переменная] . . .

где переменная числовая, символьная или индексная перемен-

ная.

Оператор READ используется только совместно с оператором DATA. Он читает данные, перечисленные в операторе DATA, и присваивает их значения переменным из указанного в нем списка. Типы переменных должны соответствовать типам данных в DATA. Иначе при выполнении программы выдается сообщение об ошибке номер 2.

Несколько операторов READ могут читать данные из одного оператора DATA, выбирая их один за другим. Если количество переменных в операторах READ больше, чем количество данных в операторах DATA, то возникает сообщение об ошибке номер 4. В то же время, обязательно использоваться могут и не все данные из операторов DATA.

Пример:

DATA

1, 33.4, 66, 44

 

READ

a,b,c

В результате работы программы переменным присвоятся следующие значения: а=1, b=33.4, с=66.

Чтобы повторно прочитать данные из оператора DATA (снова вернуться к началу последовательности), применяют оператор RESTORE, имеющий следующий формат :

RESTORE [метка]

где метка идентификатора оператора DATA. Если метка не указана, то имеется в виду первый из операторов DATA в программе. После выполнения RESTORE оператор READ может снова читать данные из этого (и следующих) операторов DATA.

Пример:

DATA 21, 3.3,-44 :READ a,b

REM В результате

RESTORE

:READ с

REM

а=21, b=3.3, с=21

2.5. Основные операторы вывода в TURBO BASIC

Операторы вывода TB предназначены для вывода данных на экран, принтер и в файл.

2.5.1. Оператор PRINT используется для вывода информации на экран монитора, и имеет следующий формат:

{PRINT ?} [список выражений ]

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

Список значений выражений выводится на экран; если этот список пустой и оператор не заканчивается точкой с запятой или запятой, то курсор переходит на следующую строку на экране. Оператор PRINT без параметров выводит на экран монитора пустую строку.

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

Запятая в качестве разделителя в списке приводит к переходу в начало новой зоны (строка экрана делится на зоны по 14 позиций).

Точка с запятой или пробел (пробелы) в качестве разделителя в списке приводит к выводу очередного значения непосредственно за предыдущим через пробел.

Если предыдущий оператор PRINT оканчивается пробелом, то последующий оператор PRINT выводит значения с начала следующей строки.

Пример:

a= -5 REM В результате на экране выведутся значения:

PRINT

"1";

"2"

"3", "4"", "5"

REM

1 2

3 4 5

PRINT

a ;

:

PRINT "y=" ; a+10

REM

-5

y= 5

За выводом числа всегда следует пробел, положительному числу всегда предшествует пробел, а отрицательному знак минуса.

2.5.2. Оператор PRINT USING служит для вывода данных на экран монитора в указанном формате и имеет формат:

PRINT USING v$ ; список

где v$ символьная константа или переменная, определяющая формат вывода; список последовательность разделенных запятыми или точками с запятой числовых или символьных выражений, значения которых выводятся.

Рассмотрим некоторые значения константы v$ для вывода чисел:

# представляет позицию десятичной цифры; содержит цифру или пробел (слева от цифр);

. определяет десятичную точку, справа от этой позиции # может представлять только цифру;

+ (в начале или конце строки формата) указывает, что знак числа (+ или -) выводится в эту позицию;

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

^^^^ (за цифровыми позициями) указывают на экспоненциальный формат и заполняются знаками E±nn (для числа с простой точностью), где nn порядок числа .

Пример:

X= 15.44378

PRINT USING "###.##";x, :PRINT USING "+##.####";x, PRINT USING "-##.#";x, :PRINT USING "#.#^^^^";x

x= -15.44378:

PRINT USING "###.##";x, :PRINT USING "+##.####";x, PRINT USING "-##.#";x, :PRINT USING "+#.#^^^^";x PRINT USING "#.#";x

В результате выполнения этой программы получим на экране

15.44

+15.4438

15.4

1.5Е+02

-15.44

-15.4438

-15.4

-1.5E+02

%-15.443799

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

2.5.3. Оператор LPRINT (LPRINT USING) в отличие от PRINT (PRINT USING) выводит информацию не на экран, а на принтер. Как правило, на момент отладки программы используют оператор PRINT (PRINT USING), а затем его он заменяется на оператор LPRINT (LPRINT USING).

2.5.4. Функция TAB (n) используется только в операторах PRINT и LPRINT. Её действие состоит в переходе на позицию n (n целое выражение со значением от 1 до 225) на устройстве вывода, если же текущая позиция больше n, то осуществляется переход на позицию n в следующей строке.

Функцию TAB f(n)”*” часто используют в программах для упрощенного построения графиков функциональных зависимостей f(n). Где положения звездочки по горизонтали соответствуют значениям функции f(n) для текущих значений n. В отличии от привычного графика ось у расположена горизонтально слева направо, а ось Х вертикально сверху вниз.

Составить программу, для вычисления и вывода на экран монитора значений функции Y= 50/X2 и соответствующих ей значений аргумента в виде таблицы для х = 1, 2, ..., 8. Построить на экране монитора график изменения этой функции для тех же значений аргумента.

2.6. Разветвляющиеся программы в TURBO BASIC

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

щимися.

Пример. Составить программу для вычисления значения ступенчатой функции Z для любых значений X, a, b. Вывести результат в документ:

 

 

2

+1, при

X a

0.5X

 

Z = cosX

, при a < X < b

2

X

 

, при

X b

tg

 

Здесь вычислительный процесс имеет три ветви. Схема этого алгоритма представлена на рис. 2.2.

Рис. 2.2

После присвоения значений переменным X, a и b в зависимости от истинности одного из условий, проверяемых в условном символе 3, значение функции Z будет вычисляться по одному из трех выражений, а затем произойдет переход в общую ветвь к символу печати 7. После составления схемы алгоритма можно переходить к написанию программы в соответствии со схемой. При этом в зависимости от используемых операторов программы будут несколько отличаться друг от друга.

Ознакомиться с условными операторами языка TB, используемыми при составлении разветвляющихся программ: строчным оператором IF, IF-блоком и оператором SELECT. Составным элементом этих конструкций является условие, представляемое целым выражением. Равенство нулю выражения воспринимается как логическая ложь, неравенство как логическая истина. Оператор безусловного перехода GOTO метка вызывает переход к оператору с указанной меткой.

2.6.1. Строчный оператор IF имеет следующий формат:

IF x [ , ] THEN операторы [ ELSE операторы ]

где x целое выражение; операторы оператор или последовательность разделенных двоеточием выполняемых операторов.

Если значение x истинно (не равно 0), то выполняются операторы, следующие за THEN, после чего выполнение строчного IF прекращается и программа переходит к следующему оператору. Если x ложно, (равно 0),

то операторы за THEN пропускаются и выполняются операторы за ELSE, если они есть, затем программа переходит к следующему оператору.

Оператор IF и все связанные с ним операторы, включая следующие за ELSE, должны быть в одной программной строке. Если же целесообразно разместить этот оператор в нескольких экранных строках, то в конце каждой экранной строки нужно поместить символ подчеркивания ( _ ). В этом случае следующая строка будет рассматриваться как продолжение предыдущей.

Допускается вложенность операторов IF, ограниченная только одной строкой; при этом ELSE соответствует последнему не закрытому оператору THEN. Оператор

IF a=b THEN IF b=c THEN PRINT "A=C" ELSE PRINT "A< > C"

будет печатать "A < > C" при A= B и B< >C.

Например, программа, реализующая алгоритм, приведенный на рис. 2.2., с помощью строчного оператора IF , будет иметь следующий вид:

INPUT "Введите значения X, a, b "; X,a,b

IF x<=a THEN z=0.5*x^2+1 ELSE IF x>=b THEN_ z=(tan(x))^2 ELSE z= cos(x)

LPRINT Z

END

2.6.2. Блочный оператор IF располагается в нескольких строках и имеет следующий формат:

IF x [ , ] THEN

. . . операторы

[ELSEIF x [ , ] THEN

. . . операторы ]

. . .

[ELSE

. . . операторы ] END IF

где x целое выражение.

При выполнении этого блока сначала проверяется истинность выражения в операторе IF. Если оно ложно, то по порядку проверяется выражения в каждом из следующих за ним операторов ELSEIF (их может быть сколько угодно). Как только находится истинное выражение, выполняются

операторы, следующие за соответствующим оператором THEN, после чего выполнение блока IF прекращается и управление передается на оператор, следующий непосредственно за завершающим END IF. Если никакое из проверенных условий ELSEIF не справедливо, то выполняются операторы за ELSE, если они есть. После чего выполнение блока IF прекращается.

В первой строке после ключевого слова THEN не должно быть больше ничего (так компилятор отличает IF-блок от сточного оператора IF). Кроме того, ничего не должно быть в строке вслед за словом ELSE.

IF-блок может быть вложенным, т.е. любой из операторов, следующий за всяким THEN или ELSE, может содержать другой IF-блок.

IF-блок должен завершаться ключевым словом END IF, с пробе-

лом.

Программа, реализующая алгоритм, приведенный на Рис. 2.2, с помощью IF-блока, будет иметь следующий вид:

INPUT "Введите значение a,b,X "; a,b,x IF x<=a THEN

Z=0.5*X^2+1

ELSEIF x>a AND x<b THEN Z=COS(X)

ELSE

Z=(TAN(X))^2

END IF

LPRINT "Z=";Z END

2.6.3.Оператор SELECT имеет следующий формат.

SELECT CASE x

CASE список сравнений операторы

[CASE список сравнений операторы]

[CASE ELSE . . .

операторы] END SELECT

где x или числовое или символьное выражение; список сравнений это одно или несколько сравнений, в которых неявно участвует x и явно элементы такого же типа. Сравнения могут включать равенство

(знак равенства при этом может быть упущен), неравенство, соотношение "больше чем" и "меньше чем", принадлежность диапазону ("от ... до ..."). Несколько сравнений в одном CASE (список сравнений) связаны между собой операцией логического "ИЛИ". Например,

CASE

<a

 

'

неравенство

CASE

83

 

'

равенство

CASE

a TO

88

'

диапазон

CASE

10,a

 

'два сравнения на равенство,

CASE

a TO

17,23

'связанных неявно операцией ИЛИ

'комбинация сравнений, связанных

 

 

 

'неявно операцией ИЛИ

Если хотя бы одно сравнение в некотором CASE оказывается справедливым, то выполняются все операторы вплоть до следующего CASE, после чего управление передается на оператор, следующий за END SELECT.

Если ни в одном CASE нет сравнения, являющегося истинным, то выполняются операторы, следующие за CASE ELSE, ели они есть.

Программа, реализующая алгоритм, приведенный на Рис. 2.2, с помощью оператора SELECT , будет иметь следующий вид:

INPUT "Введите значение a,b,X "; a,b,x SELECT CASE X

CASE <=a Z=0.5*X^2+1

CASE >=b Z=(TAN(X))^2

CASE ELSE Z=COS(X)

END SELECT

LPRINT "Z=";Z : END

2.6.4. Составить три варианта программы (с использованием строчного IF, блочного IF и оператора SELECT) для определения среднего бала C при сдаче вступительных экзаменов в ВУЗ по результатам трех экзаменов. В зависимости от полученного значения C, приведенного в табл. 2.3, вывести на монитор соответствующую выписку из протокола приемной комиссии.

 

 

Таблица 2.3.

Выписка из протокола приёмной комиссии

Значение С

 

 

 

Вы набрали ... баллов

неудовлетворительно

если С<9

 

 

 

Вы набрали ... баллов

удовлетворительно

если 9<= C <12

 

 

 

Вы набрали ... баллов

хорошо

если 11< C=14

 

 

 

Вы набрали ... баллов

отлично

если C=15

 

 

 

2.6.5. Составить программу для заданного преподавателем варианта задания, приведенного в Табл. 2.4. В программе предусмотреть ввод с клавиатуры трех чисел, а также вывод на экран монитора и на принтер введенных значений и результата работы программы с точностью 2 знака после запятой с пояснительным текстом (например “Наименьшее из трех

чисел равно 6.93”).

 

 

 

Таблица 2.4.

Программа должна вывести

В программе использовать оператор

на экран монитора и на принтер

 

 

 

 

IF строчный

IF блочный

 

SELECT

наименьшее из трех чисел

1

2

 

3

наибольшее из трех чисел

4

5

 

6

числа в порядке возрастания

7

8

 

9

числа в порядке убывания

10

11

 

12

2.7. Циклические программы в TURBO BASIC.

Часто при составлении программ приходится повторять некоторую часть программы несколько раз. Например, вычислить и вывести на экран значения функции у=X2 для значения аргумента X, изменяющегося в интервале от 0 до 20 с шагом 2. Схема алгоритма такой программы в общем случае приведена на рис. 2.3.

Первый и последний элементы схемы алгоритма обозначают начало и конец цикла. В элементе 1 задаются пределы изменения значений переменной цикла (0, 20) и шаг, с которым она изменяется (2). Тело цикла, в данном случае, составляют элементы 2 и 3, где вычисляются текущие значения Y, а затем выводятся на экран монитора. В элементе 4 к текущему значению переменной цикла прибавляется шаг, равный 2, и если полученное значение меньше или равно конечного значения переменной цикла (20), то цикл повторяется еще раз для второго значения X, то есть выпол-

няется тело цикла. Цикл повторяется до тех пор, пока текущее значение переменной цикла не станет больше 20.

Обратите внимание на то, что при выходе из цикла значение X=22 и при необходимости это значение может быть использовано в дальнейшей программе. Иногда внутри одного цикла могут располагаться другие циклы, так называемые вложенные циклы. Однако циклы не могут пересекаться, т.е. все внутренние циклы должны быть закончены до того,

как закончатся внешние.

Рис. 2.3

2.7.1. Оператор FOR/NEXT используется в программе с заданным числом повторений и имеет следующий формат:

FOR переменная = x TO y [STEP z]

. . . операторы

NEXT [переменная [ ,переменная] . . . ]

где переменная числовая переменная, используемая как счетчик повторов; x, y, z числовые выражения, определяющие соответственно начальное, конечное значение и приращение счетчика.

Конструкция выполняет операторы, следующие за FOR, пока в программе не встретится оператор NEXT. Тогда к текущему значению переменной цикла х прибавляется значение шага z (по умолчанию 1) и полученное значение сравнивается с конечным значением y. Если значение переменной больше y, выполняется оператор, следующий за NEXT, иначе управление снова передается к оператору, находящемуся за FOR. Например, программа, реализующая алгоритм, приведенный на рис.2.3, с помощью оператора FOR/NEXT имеет вид:

FOR x=0 TO 20 STEP 2 Y=SIN(X)

PRINT Y NEXT X

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]