Арифметические выражения в бейсике. Основные операторы языка бейсик

Вид материалаДокументы

Содержание


Значение в радианах = значение в градусах * 3.14/180
При записи выражений необходимо учитывать следующие рекомендации и ограничения
Математическая запись Запись на языке БЕЙСИК
“Основы программирования на языке Бейсик”
Оператор присваивания
Операторы задания значений переменым
30 DATA 2, -5.36, 0.3e-5
Оператор восстановления блока данных.
Оператор ввода.
10 INPUT «Введите три числа А, В, С»; А, В, С
Оператор вывода.
Оператор комментариев
REM текст
Оператор очищения экрана.
Оператор завершения выполнения программы
Операторы передачи управления.
Оператор безусловного перехода.
Оператор условного перехода.
Общая форма условного оператора в неполной форме
Лекция на тему
...
Полное содержание
Подобный материал:
Арифметические выражения в БЕЙСИКЕ.
Основные операторы языка БЕЙСИК



Для вычисления наиболее распространенных элементарных математических функций в языке БЕЙСИК применяют встроенные стандартные функции. Аргумент функции заключается в круглые скобки. Аргументом функции может быть произвольное арифметическое выражение. Для обращения к функции нужно набрать ее имя и указать аргумент. Стандартные математические функции, применяемые в языке Бейсик, приведены в ТАБЛИЦЕ 1.

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

Значение в радианах = значение в градусах * 3.14/180

В некоторых версиях языка Бейсик имеется функция LOG(X) для вычисления натурального логарифма числа Х. Однако от логарифма с любым основанием легко перейти к натуральному логарифму, используя формулу

LogaN = ln N/ln a, где а – основание.


Над числовыми константами, переменными и стандартными функциями можно производить обычные арифметические операции:

1. вычисляются значения функций

2. возведение в степень,

3. * умножение, / деление,

4. + сложение, - вычитание.


Арифметическое выражение – это символическая запись, указывающая правила вычисления числового выражения. Оно состоит из чисел (констант), имен переменных, функций, знаков арифметических операций и скобок.


При записи выражений необходимо учитывать следующие рекомендации и ограничения:
  1. Формулу требуется записывать в строку без каких-либо подстрочных и надстрочных знаков.
  2. Следует использовать круглые скобки для указания порядка действий, особенно в сомнительных случаях. Вычисления в скобках производятся в первую очередь. Если выражение, содержащее скобки само заключено в скобки, то вычисления производятся, начиная с внутренних скобок. Внутри скобок действия выполняются с лева на право в соответствии с приоритетом операций:
    • Сначала вычисляются значения функций,

Затем - выполняются все операции возведения в степень,
    • Затем - умножения и деления,
    • И наконец, сложения и вычитания.

Если математическое выражение содержит несколько операций одинакового старшинства, то такие операции выполняются последовательно слева на право.

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



  1. Выполнение арифметических операций над арифметическими выражениями одного тепа дает результат того же типа. Операция над целой и вещественной величиной дает вещественный результат.



  1. Возведение в целую степень выполняется многократным умножением или с помощью операции возведения в степень.



  1. Вычисление результата возведения в степень осуществляется с помощью функций EXP и LOG, если показатель степени - действительное число:

xy = EXP(Y*LOG(X))

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

Примеры записей арифметических выражений:

Математическая запись Запись на языке

БЕЙСИК


SIN(2*X)*EXP(3)/(2*SQR(A))

p+ln3z2 P+(LOG(Z2))3

EXP(1/N*LOG(C))+LOG(X)/LOG(10)

sin xn+cos2x SIN(XN)+COS(X)2

e2n+log3 a EXP(2*N)+LOG(A)/LOG(3)

ТАБЛИЦА 1

Обозначение функции на языке Бейсик
Название

Пояснение

ABS(X)

Функция абсолютная величина |x| (модуль)

Функция вычисляет абсолютное значение (модуль) аргумента X

SQR(X)

Функция квадратный корень (х)

Функция вычисляет квадратный корень положительного аргумента X

LOG(X)

Функция натуральный логарифм ln x

Функция вычисляет натуральный логарифм положительного аргумента X

EXP(X)

Экспоненциальная функция ех

Вычисляет ex, где e=2,71828, X-любое число

COS(X)

Функция косинуса cos x

Вычисляет косинус аргумента X

SIN(X)

Функция синуса sin x

Вычисляет синус аргумента X

TAN(X)

Функция тангенса tg x

Вычисляет тангенс аргумента X, находящегося в диапазоне от до

ATN(X)

Функция арктангенса arctg x

Вычисляет арктангенс аргумента X

INT(X)

Целочисленная функция

Определяет наибольшее целое число, не превосходящее X

RND(X)

Функция случайных чисел

Выдает случайное число, лежащее в интервале от 0 до 1. Значение аргумента X игнорируется


Вопросы для самоконтроля.
  1. Какие стандартные математические функции имеются в языке Бейсик?
  2. Какие значения могут принимать аргументы функций SQR, LOG, TAN?
  3. Дать определение арифметического выражения.
  4. Перечислить правила записи арифметических выражений в Бейсике
  5. Как выполнить перевод из градусной меры в радианную?
  6. Как перейти от логарифма с любым основанием к натуральному логарифму?
  7. Перечислить символы арифметических операций.
  8. Как выполнить возведение в целую степень?
  9. Как выполнить вычисление результата возведения в степень осуществляется, если показатель степени - действительное число?
  10. Какие стандартные математические функции имеются в языке Бейсик?
  11. Какие значения могут принимать аргументы функций SQR, LOG, TAN?
  12. Дать определение арифметического выражения.
  13. Перечислить правила записи арифметических выражений в Бейсике
  14. Как выполнить перевод из градусной меры в радианную?
  15. Как перейти от логарифма с любым основанием к натуральному логарифму?
  16. Перечислить символы арифметических операций.
  17. Как выполнить возведение в целую степень?
  18. Как выполнить вычисление результата возведения в степень осуществляется, если показатель степени - действительное число?


Упражнения для самостоятельной работы.

Задание. Запишите арифметические выражения на языке Бейсик.




















Лекция на тему:
“Основы программирования на языке Бейсик”


В результате изучения лекции студент должен

знать:
  • Понятие оператора;
  • Оператор присваивания в Бейсике;
  • Операторы задания значений переменным в Бейсике;
  • Оператор вывода в Бейсике;
  • Оператор ввода в Бейсике;
  • Оператор комментариев в Бейсике;
  • Оператор очищения экрана;
  • Оператор конца текста программы;
  • Оператор безусловного перехода;
  • Оператор условного перехода в полной форме;
  • Оператор условного перехода в неполной форме.

уметь:
  • Приводить примеры использования операторов языка программирования Бейсик;
  • Использовать операторы языка программирования Бейсик при составлении простейших программ.


Оператор – это предписание ЭВМ, написанное на языке БЕЙСИК. Операторы можно разделить на две группы:
  1. Выполняемые операторы – определяют действие программы, указывая Бейсик-системе, какую операцию нужно выполнить (PRINT – печатать, INPUT - ввести);
  2. Невыполняемые операторы – описывают характер и упорядочение данных, позволяют вводить в программу примечания и сообщения описательного характера (DATA, REM).



ОПЕРАТОР ПРИСВАИВАНИЯ

В процессе вычислений на компьютере переменная величина может принимать различные числовые значения. В частности ей может быть присвоено значение вычисленного арифметического выражения с помощью специальной операции присваивания, которая на языке Бейсик обозначается знаком «=». Наименование переменной записывается слева, арифметическое выражение – справа от знака равенства. Для выполнения этой операции используется оператор присваивания, который имеет общую форму

LET <имя переменной>=<арифметическое выражение>,

где LET – имя оператора (можно перевести как пусть).

Оператор присваивания выполняется в два этапа:
  1. вычисляется значение арифметического выражения;
  2. вычисленное значение, присваивается переменной, т.е. засылается в ячейку памяти, отведенную для данной переменной.

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

Примеры операторов присваивания.

10 LET A=11

20 LET B=A

30 LET Y1=B-ABS(2*A-52.6)

Следует обратить внимание на существенную разницу между знаком присваивания “=” в языке Бейсик и обычным знаком равенства. Например, в обычной математической записи выражение Х=Х+1 является неверным. А в языке Бейсик запись

10 LET X=X+1

справедлива и означает, что
        1. берется значение переменной из ячейки памяти с именем Х;
        2. это значение складывается с единицей и получается новое значение Х

результат Х+1 помещается в ячейку памяти с именем Х, стирая находившееся там прежнее значение.

ОПЕРАТОРЫ ЗАДАНИЯ ЗНАЧЕНИЙ ПЕРЕМЕНЫМ


Задания значений переменным можно осуществлять с помощью группы операторов DATA, READ, RESTOR.

Оператор создания блока данных

Числовая информация, необходимая для создания блока данных задается с помощью оператора DATA <>, который имеет вид

DATA<константа 1>,<константа 2>,…,<константа n>

Например,

30 DATA 2, -5.36, 0.3e-5


По этому оператору перед началом счета будет сформирован блок данных, состоящих из трех чисел: 2 – первое, -5.36 – второе, 0.3Е-5 – третье.

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

Оператор выборки значений из блока данных

Оператор DATA формирует данные, которые могут быть считаны с помощью оператора READ . READ – оператор выборки значений из блока данных. Этот оператор имеет вид

READ <имя переменной 1>, <имя переменной 2>,…,<имя переменной n>

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

Например, имеется фрагмент программы:

10 DATA 1.2, -3, 51,100




40 read X, Y, Z<



90 READ A <

В результате выполнения строки 40 переменной Х будет присвоено значение 1,2, переменной Y – значение –3, а Z – значение 51. При выполнении строки 90 переменной А будет присвоено значение 100.

Оператор восстановления блока данных.

Оператор RESTOR (восстановить) служит для восстановления блока данных в исходное состоянияе, когда из блока данных уже выбраны все значения. Он позволяет повторно использовать константы оператора значения. Он позволяет повторно использовать константы оператора DATA.

ОПЕРАТОР ВВОДА.

Оператор ввода данных INPUT позволяет пользователю вводить данные с клавиатуры в процессе выполнения программы. При выполнении оператора INPUT программа делает запрос на ввод данных с терминала. Общая форма оператора

INPUT <имя переменной1>, <имя переменной2>, …,<имя переменной n>

10 INPUT A, B, С


Выполняя оператор INPUT, машина выводит знак вопроса на экран дисплея и ждет ввода значений для каждой переменой в списке этого оператора. Пользователь должен, в данном случае, набрать три числа, разделяя их запятыми, и нажать клавишу ENTER, т.е. ввести их в ЭВМ. Например,

? 32, -5.1, 79

После этого переменные примут следующие значения: А=32, В=-5,1, С=79.

Так как в программе может быть несколько операторов INPUT, то следует использовать текст, поясняющий, какие именно данные следует вводить. Например,

10 INPUT «Введите три числа А, В, С»; А, В, С

При этом на экран выводится сообщение

Введите три числа А, В, С?

и машина переходит в режим ожидания ввода значений.


ОПЕРАТОР ВЫВОДА.

Оператор вывода PRINT осуществляет вывод на экран результатов вычислений и пояснительных текстов. Общая форма оператора

PRINT<пояснительный текст в кавычках> <, или;> <имена переменных, значения которых необходимо вывести на экран или арифметическое выражение, значение которого необходимо вычислить>

Значения выводимые на экран, зависят от элементов выводного списка:
  • если в качестве элемента указана константа, то при выполнении оператора PRINT она будет напечатана на терминале;
  • если в качестве элемента указана переменная, то при выполнении оператора PRINT на терминале будет напечатано ее значение;
  • если в качестве элемента указано арифметическое выражение, то на терминале будет напечатан его результат;
  • если в качестве элемента указан текст в кавычках, то при выполнении оператора PRINT он будет напечатан на терминале без кавычек.

Например:

10 PRINT 3.14

20 PRINT K

30 PRINT 102-17.3

40 PRINT “Ответ значение предела равно”
ОПЕРАТОР КОММЕНТАРИЕВ

Оператор комментариев REM применяется для ввода комментариев в программу и, в частности, для указания наименования программы. Комментарии могут быть составлены из любых допустимых символов языка Бейсик, включая буквы русского алфавита. Общая форма оператора

REM текст


Например:

10 REM Программа вычисления предела

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

ОПЕРАТОР ОЧИЩЕНИЯ ЭКРАНА.

Оператор CLS используется для очищения экрана. В результате его выполнения вся информация с экрана удаляется, экран окрашивается в фоновый цвет, а курсор возвращается в левый верхний угол экрана.

Например,

10 CLS
ОПЕРАТОР ЗАВЕРШЕНИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ

Оператор END используется для завершения выполнения программы. Он является последним в тексте программы.

Например,

60 END

Решим, например, следующую задачу.

Задача. Составить программу нахождения значения выражения (х-А)2+(y-B)2

Решение.

10 CLS

20 PRINT «Ф. И. О., группа»

30 REM Найти значение выражения

40 INPUT «Введи X, Y, A, B»; Х, Y, А, В

50 С=(X-A)2+(Y-B)2

60 PRINT «Ответ:»;С

70 END

ОПЕРАТОРЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ.

Обычно операторы программы выполняются в порядке возрастания их номеров строк. Однако большинство задач редко укладывается в такую линейнyю схему. Часто в задачах встречаются условия, от выполнения которых зависит последующий ход вычислений. Чтобы изменить естественный порядок выполнения операторов программы, используют операторы передачи управления. К ним относятся операторы условного и безусловного перехода.

ОПЕРАТОР БЕЗУСЛОВНОГО ПЕРЕХОДА.

Оператор безусловного перехода GOTO используют для указания того оператора программы, с которого следует продолжать вычисление на данном этапе. Общая форма оператора.

GOTO <номер строки>

где GOTO – имя оператора (идти к)

Например,

70 GOTO 90

80 PRINT “Ответ: точка принадлежит линии”

90 END

В результате выполнения строки 70 программа передаст управление строке 90, игнорируя строку 80.


ОПЕРАТОР УСЛОВНОГО ПЕРЕХОДА.

Часто при составлении алгоритма решения задачи приходится проводить анализ выполнения тех или иных условий. Как правило, для выполнения таких условий дальнейший ход решения задачи. Для изменения естественного порядка выполнения программы при выполнении некоторого условия используется оператор условного перехода IF.

Общая форма оператора в полной форме:

IF <условие> THEN<оператор1> ELSE<оператор2>

где условие – логическое выражение (т.е. выражение, которое принимает одно из двух значений, либо “да”, либо “нет”);

оператор 1 – оператор (или номер строки), который выполняется в том случае, если условие верно;

оператор 2 – оператор (или номер строки), который выполняется в том случае, если условие неверно.

Например,

50 IF X2*Y+7=0 THEN PRINT “Ответ: точка принадлежит линии” ELSE PRINT “Ответ: точка не принадлежит линии”

Оператор IF в полной форме должен быть записан на компьютере на одной строке.

Общая форма условного оператора в неполной форме:

IF<условие> THEN<номер строки>

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

Например,

50 IF X2*Y+7=0 THEN GOTO 80

60 PRINT “Ответ: точка не принадлежит линии”

70 GOTO 90

80 PRINT “Ответ: точка принадлежит линии”

90 END

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

Вопросы для самоконтроля.
              1. Что такое оператор?
              2. Общий вид и функции оператора присваивания.
              3. Что такое блок данных?
              4. Как выполняется оператор READ?
              5. С помощью какого оператора восстанавливается блок данных?
              6. Общий вид и функции оператора ввода.
              7. Общий вид и функции оператора вывода.
              8. Приведите примеры использования оператора PRINT, в каждом из перечисленных ниже случаев:

А) в качестве выводного списка указана константа;

Б) в качестве выводного списка указана переменная;

В) в качестве выводного списка указано арифметическое выражение;

Г) в качестве выводного списка указан текст.
              1. Какие операторы относятся к операторам передачи управления?
              2. Охарактеризовать оператор безусловного перехода.

Дать характеристику оператора условного перехода в полной и неполной формах.
              1. Привести примеры условий.
              2. Какова последовательность составления программы, в которой присутствует оператор IF?


Лекция на тему:

Формирование графических изображений.

Подготовка дисплея для работы в режиме графики.

Оператор SCREEN переключает режимы работы дисплея, в частности включает графический режим. Общая форма оператора

SCREEN <номер режима>


Где SCREEN – имя оператора; <номер режима> десятичная цифра, определяющая режим работы дисплея. Если <номер режима> равен 0, то будет установлен алфавитно-цифровой режим, если <номер режима> равен 1,2,8,9 и др., то графический.

Например. В строке с номером 10 задан оператор установки графического режима 9 (размер экрана 640х350, левый верхний угол имеет координаты (0, 0), а правый нижний (640, 350)).

10 SCREEN 9

Оператор COLOR задает необходимый цвет изображения. Общая форма оператора COLOR [<номер цвета переднего плана>][,<номер цвета фона>]


Например. COLOR 14, 0

Стандартное распределение цветов в режимах SCREEN 0, 7, 8, 9, 12, 13

Атрибут цвета

Цвет

Атрибут цвета

Цвет

0

Черный

8

Серый

1

Синий

9

Светло-синий

2

Зеленый

10

Светло-зеленый

3

Голубой

11

Светло-голубой

4

Красный

12

Светло-красный

5

Пурпурный

13

Светло-пурпурный

6

Коричневый

14

Желтый

7

Белый

15

Ярко-белый

Построение прямых линий и прямоугольников.

Одним из операторов машинной графики является оператор LINE. Общая форма записи оператора:

LINE (x1, y1) – (x2, y2)[, <номер цвета>][, <признак>]

Где LINE – имя оператора (линия); x1, y1 - координаты начала отрезка; x2, y2 - координаты конца отрезка; <номер цвета> - десятичное число, указывающее номер цвета, которым вычерчивается объект. Если <номер цвета> не задан, то объект вычерчивается цветом, указанным в операторе COLOR. Если координаты начальной точки (x1, y1) отсутствуют, то за начальную точку принимается точка окончания построения предыдущего оператора LINE, либо точка с координатами (0, 0), если предыдущих построений не было; <признак> - параметр, указывающий вид фигуры, изображенной на экране. Этот параметр может иметь значения: B – изображается прямоугольник, BF – закрашенный прямоугольник. Параметры (x1, y1) и (x2, y2) задают отрезок прямой, который теперь рассматривается как диагональ изображаемого прямоугольника.

Например. 20 LINE (0, 0) – (640, 50)

30 LINE (10, 10) – (40, 50),4

40 LINE (60, 60) – (90, 190),14,В

50 LINE (120, 60) – (150, 190),10,ВF



Построение окружностей.

Для построения окружностей используется оператор CIRCLE. Общая форма оператора:

CIRCLE (x, y), <радиус>[, [<номер цвета>][,[<начало>],[<конец>][,<сжатие>]]]

Где CIRCLE – имя оператора (окружность); x, y - координаты центра эллипса (окружности); <радиус> - больший радиус эллипса (радиус окружности); <номер цвета> - десятичное число, указывающее номер цвета, которым вычерчивается окружность; <начало> и <конец> задают в радианной мере углы, соответствующие начальной и конечной точкам дуги эллипса, которая будет вычерчена (углы отсчитываются от горизонтальной оси против часовой стрелки; дуга рисуется от точки, соответствующей первому указанному углу до точки, соответствующей второму углу.), в случае отсутствия этих параметров в записи оператора строится полный эллипс; <сжатие> - числовое выражение, значение которого задает отношение вертикальной оси эллипса к его горизонтальной оси, причем оси измеряются в точках экрана (по умолчанию эта величина выбирается так, чтобы рисовалась окружность, т. е. 0,83)

Например. 60 CIRCLE (300, 100),40


70 CIRCLE (390, 100),40,9

80 CIRCLE (300, 200),30,,,,0.2

90 CIRCLE (390, 200),30,14,,,0.7

100 CIRCLE (300, 300),30,,,,0.9


110 CIRCLE (390, 300),30,3,,,5

120 CIRCLE (500, 100),30,,0,3.14,0.83

130 CIRCLE (500, 200),30,2,4.71,6.28,3

140 CIRCLE (500, 300),30,5,4.71,1.57,0.5

Построение изображений по точкам.

В языке Бейсик можно построить на экране отдельно взятую точку. Для этого служит оператор PSET. Общая форма оператора:

PSET (x, y), <номер цвета>

Где PSET – имя оператора (установка точки), x, y - координаты точки; <номер цвета> - десятичное число, указывающее номер цвета точки на экране.

Оператор строит на экране точку с указанными координатами.

Закраска области экрана выполняется оператором PAINT. Общая форма оператора:

PAINT(x, y)[, <номер цвета>]

Где PAINT – имя оператора, x, y - координаты внутренней точки замкнутой области, которую надо закрасить; <номер цвета> - десятичное число, указывающее номер цвета закраски.

Например. 150 PSET (300, 100), 4

160 PSET (290, 100)

170 PSET (310, 100)

180 PAINT (390, 100), 9

Оператор цикла с параметром

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

Операторы FOR и NEXT используют для упрощения процедуры составления циклов и четкого выделения циклов в программе на языке БЕЙСИК.

Оператор FOR называют оператором заголовка цикла (или просто заголовком цикла). Он всегда предшествует повторяющейся группе операторов, составляющих так называемое тело цикла. Общая форма заголовка цикла имеет вид:

FOR v = el TO e2 STEP еЗ

где FOR — имя оператора (для);

v — параметр цикла;

е1— начальное значение параметра цикла;

е2 — конечное значения параметра цикла;

ТО — служебное слово (до);

STEP — служебное слово (шаг);

еЗ — приращение, т. е. шаг изменения параметра цикла.

В случае, если v — параметр цикла целого типа и шаг изменения еЗ = 1, оператор FOR допускает более компактную форму записи без указания приращения:

FOR v = e1 TO e2

За оператором FOR следуют операторы, составляющие тело цикла. Заканчивается цикл оператором NEXT. Общая форма оператора

NEXT v

где NEXT — имя оператора (следующий); v — параметр цикла.

Имя переменной, указанной в качестве параметра цикла в операторе NEXT, должно совпадать с именем переменной, указанной в качестве параметра цикла в заголовке цикла FOR.

При выполнении оператора NEXT изменяется значение параметра цикла (v := v + e3) и производится возврат на начало цикла.

Операторы FOR и NEXT используются только в паре: FOR определяет начало цикла, a NEXT указывает конец тела цикла.

Цикл выполняется следующим образом. По оператору FOR сначала вычисляются характеристики (начальное v конечное значения, приращение (шаг)) и начальное значение присваивается параметру цикла. Затем производится проверка: не превышает ли начальное значение параметра цикла конечного значения. Если значение параметра цикла больше конечного значения по абсолютной величине, то производится выход из цикла, т. е. переход на оператор следующий за оператором NEXT. Если значение параметра цикла меньше конечного значения, то далее выполняются операторы, составляющие тело цикла. По достижении оператора NEXT v происходит вычисление нового значения параметра цикла (v := v + e3) и переход на оператор FOR. Это значение снова сравнивается со значением е2. Цикл повторяется до тех пор, пока значение параметра цикла не станет строго больше v>e2 (при положительном приращении еЗ) или строго меньше (при отрицательном приращении еЗ) конечного значения е2.

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

Сложные (вложенные) циклы


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

Максимальное количество вложенных циклов в зависимости от системы, составляет 8—20. Структуру сложного цикла глубиной 3 можно представить в виде схемы, представленной на рисунке.

10 FOR V1=…






170 NEXT V1

На этой схеме тело цикла с параметром VI содержит два вложенных один в другой цикла; тело цикла с параметром V2 включает в себя цикл с параметром V3. При каждом повторении внешнего цикла внутренний цикл выполняется полностью, т. е. заданное число раз.


Определение массива

Многие задачи, которые решаются с помощью ЭВМ, связаны с обработкой больших объемов информации, представляющей совокупность данных, объединенных единым математическим содержанием или связанных между собой по смыслу. Примером таких организованных совокупностей данных являются координаты, задающие положение точки в пространстве, матрица коэффициентов, определяющая систему линейных уравнений, значения некоторой функции в произвольных точках, коэффициенты многочлена и т. д. Такие данные удобно представлять в виде линейных или прямоугольных таблиц.

В линейной таблице каждому ее элементу соответствует порядковый номер. Для элемента прямоугольной таблицы должны быть указаны два номера: номер по вертикали (номер строки) и номер по горизонтали (номер столбца). В высшей математике табличные величины называют соответственно векторами и матрицами.

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

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

Имя массива образуется по общему правилу образования имен, т. е. представляет собой идентификатор, например A, Bl C8 и т. д. Однако оно не должно совпадать с именем ни одной простой переменной, используемой в той же программе.

Переменная с индексами


Работа с массивом сводится к действиям над его элементами. Для того чтобы указать, какой элемент в данный момент используется, достаточно задать его порядковый номер, который приписывается к имени соответствую­щего массива. Таким образом, элементы массива обозна­чаются переменной с индексами. Запись переменной с индексами состоит из имени массива и следующего за ним в круглых скобках списка индексов, например А(1), A(I), B1(K),C8(I, J),C8(2, 1)

В качестве индексов можно использовать константы, переменные, а также арифметические выражения, называемые индексными выражениями, например А1(К+5), Q3(3*A+B, С(I)-2). Если в качестве индекса используется выражение, то перед обращением к элементу массива (его записью в программе) осуществляется вычисление индексного выражения и выделение целой части. Естественно, что все переменные, входящие в выраже­ние, а также переменные, используемые в качестве индексов, должны быть заданы до обращения. Например, запись T(2*Y-3.2, Z+1.7) при у =1,8 и 2 = 0,9 соответствует элементу Т(0,2).

Индексы определяют положение элемента в массиве. Число индексов определяет размерность массива, т. е. форму его компоновки: одномерный, двумерный и т. д. Одномерный массив соответствует линейной таблице. Его элемент обозначается переменной с одним индексом: А(1), А(1) - соответственно первый и 2-й элементы одномерного массива А; , В1(К) —k-й элемент одномерного массива В1. Двумерный массив описывает в программе прямоугольную таблицу. Его элементы обозначаются переменной с двумя индексами: C8(I, J), С8(2, 1), где первый индекс обозначает номер строки, а второй — номер столбца. В языке Бейсик допускается работа с одномерными и двумерными массивами.

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

Описание массива


Для записи элементов массива в память ЭВМ нужно выделить для их хранения необходимое количество (массив) ячеек памяти, которое определяется размером массива. Размеры массива задаются границами изменения индексов по каждому измерению. Минимальное значение индексов равно нулю. С учетом этого количество элементов в одномерном массиве будет равно значению верхней грани­цы индекса плюс единица, а двумерного — произведению увеличенных на единицу значений верхних границ индексов.

В программе для каждого массива должны быть указаны его параметры: имя, размерность и размеры. Эта информация нужна для резервирования необходимого объема памяти для хранения числовых значений; она задается специальным оператором описания масси­вов DIM (сокращение от DIMENSION — размерность). Оператор DIM в общем случае имеет следующий вид:

DIM V1(i1[,j1]), V2(i2[,j2]),..., Vk(ik[,jk])

где n — номер строки; DIM—имя оператора; V1, V2, ..., Vk — имена массивов; i1, j1, i2, j2, … ik, jk — верхние границы индексов, представляющие собой положительные целые константы; [, jk] — квадратные скобки здесь указывают на необязательность элемента. Например, если в программе используется одномерный массив А, содержащий 10 элементов, и двумерный массив В1, состоящий из трех строк и пяти столбцов, то оператор описания массивов будет иметь вид

10 DIM A(9), В1(2, 4)

Оператор. DIM может быть записан в любом месте программы до первого оператора, использующего соответствующую индексную переменную. Однако наиболее употребительной является такая структура, при которой все описания объединяются в начале программы. Выполняя оператор DIM, машина выделяет для массива соответствующее количество ячеек памяти, причем имя массива определяет адрес первой ячейки участка памяти, хранящего данный массив. Элементы массивов располагаются в памяти ЭВМ один за другим в последовательных ячейках памяти. Строгая последовательность записи элементов исключает необходимость хранения порядковых номеров элементов.

Ввод и вывод массивов


Элементы массива могут быть использованы для вычислений только после того, как их значения будут записаны в память ЭВМ. Запись элементов массива в зарезервированную область памяти может осуществляться, вообще говоря, в любой последовательности с помощью оператора READ из блока данных или в диалоговом режиме оператором INPUT.

Простейшим способом ввода является последовательная запись вводимых элементов массива в операторе ввода. Например, в фрагменте программы

10 DIM С(3)

20 DATA .3, 4.856, 3Е-5, .123

30 READ С(0), С(1), С(2), С(3)

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

1. 10 DIM A(9) 2. 10 DIM A(9)

20 FOR 1=0 ТО 9 20 FOR 1=0 ТО 9

30 READ A(I) 30 INPUT A(I)

40 NEXT I 40 NEXT I

50 DATA 0.8,0.1, 2, 4, 5 (продолжение программы)

60 DATA 4.2, 3.5, .6, .04

(продолжение программы)

В первом случае запись значений элементов массива А осуществляется из блока данных последовательно для каждого значения I (I = 0, 1, 2, ..., 9) в отведенные для данного массива ячейки. При втором варианте ввода массива для каждого из значений I, выполняя оператор INPUT, машина печатает знак вопроса и пользователь должен на каждый вопрос напечатать и ввести одно значение, соответствующее элементу А(I) (I = 0, 1, 2, ..., 9).


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


1. 10 DIM B(2, 4) 2. 10 DIM В (2, 4)

20 FOR I=0 ТО 2 20 FOR J =0 ТО 4

30 FOR J =0 ТО 4 30 FOR I=0 ТО 2

40 INPUT B(I, J) 40 INPUT В (I, J)

50 NEXT J 50 NEXT I

60 NEXT I 60 NEXT J

(продолжение программы) (продолжение программы)

В этом случае на каждый знак вопроса, выводимый машиной при выполнении оператора INPUT, пользователь должен печатать и вводить значение соответствующего элемента B(I, J). Последовательность записи значений элементов при вводе по строкам такая:

В(0, 0), В(0, 1), В(0, 2), В(0, 3), В(0, 4), В(1, 0), ..., В (1, 4), ...,

т. е. элементы первой строки, затем второй и т. д.,

а по столбцам такая:

В(0, 0), В(1, 0), В(2, 0), В(0, 1), В(1, 1), В(2, 1), ..., т. е. элементы первого столбца, затем второго и т. д.

При большом количестве элементов в массиве удобно воспользоваться такой последовательностью операторов:

10 DIM В (2, 4)

20 FOR I=0 TO 2

30 INPUT B(I, 0), B(I, 1) B(I, 2), B(I, 3), B(I, 4)

40 NEXT I

(продолжение программы)

При этом на каждый знак вопроса печатаются через запятую и вводятся все элементы соответствующей строки.

Ввод элементов двумерного массива может осуществляться также и из блока данных с помощью оператора READ. Например, для ввода матрицы

можно записать операторы

10 DIM S(3, 2)

20 FOR I=0 TO 3

30 FOR J =0 TO 2

40 READ S(I, J)

50 NEXT J

60 NEXT I

70 DATA .8, -3, 5, 1.7, 3.2, -.8,0, 2.2, 1, 2.5, 2.4, 5.2

(продолжение программы)]

Для ввода в память ЭВМ элементов нескольких массивов в программе должны предусматриваться соответствующие операторы для ввода каждого из них. При этом значения элементов каждого массива в блоке данных записываются последовательно. Например, массивы



можно ввести следующей группой операторов:

10 DIM T(2, 2), R(1,1)

20 FOR I=0 ТО 2

30 FOR J =0 ТО 2

40 READ T (I, J)

50 NEXT J

60 NEXT I

70 FOR I= 0 TO 1

80 FOR J = 0 TO1

90 READ R(I, J )

100 NEXT J

110 NEXT I

120 DATA 1, .63, .71, -.34, 2.8, 1.17, .18

130 DATA -.65, .7, 2.71, -.7, -2.3, 1.2

(продолжение программы)

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

Понятие подпрограммы


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

Использование подпрограммы позволяет не записывать последовательность операторов для вычисления факториала каждый раз в тех местах программы, где требуется его вычисление, а обращаться к этой после­довательности операторов из различных точек программы. Подпрограмма в языке Бейсик структурно не отделяется от основной программы. Ее роль может играть любой участок программы, заканчивающийся оператором RETURN, который обеспечивает возврат в основную программу.

Обращение к подпрограмме осуществляется оператором передачи управления на подпрограмму (входа в подпрограмму) GOSUB.

Оператор входа в подпрограмму


Оператор входа в подпрограмму используется для передачи управления на подпрограмму и имеет следующий синтаксис:

GOSUB < номер первой строки подпрограммы p>

где GOSUB — имя оператора, переводимое как «перейти на подпрограмму».

Если по оператору GOSUB происходит обращение к группе строк, то запоминается номер строки, из которой сделано обращение к подпрограмме (n), и выполнение подпрограммы начинается со строки с номером p. Все строки указанной подпрограммы выполняются последовательно в порядке возрастания номеров строк (если не встречается оператор перехода) до встречи с оператором RETURN. После этого управление передается оператору, расположенному в начале строки, следующей непосредственно за строкой, из которой было сделано обращение к подпрограмме (n+1). В строке из нескольких операторов оператор GOSUB должен быть обязательно последним, так как операторы, расположенные в той же строке за оператором GOSUB, никогда не получат управления и выполняться не будут. Переход на подпрограмму должен осуществляться только с помощью оператора обращения к подпрограмме GOSUB, так как переход на подпрограмму, например оператором GOTO или другим образом, не обеспечивает возврата в основную программу. Из одной подпрограммы можно вызвать другие подпрограммы. Они, в свою очередь, могут вызвать следующие подпрограммы и т. д.

Оператор выхода из подпрограммы


Для выхода из подпрограммы, т. е. для возврата к опе­ратору, стоящему в следующей за оператором GOSUB строке, используется оператор RETURN (возврат), имеющий следующий синтаксис:

(n) RETURN

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

Рассмотрим пример, показывающий организацию подпрограммы с тремя выходами из нее:

10 LET X=-1:GOSUB 80

20 GOSUB 80

30 GOSUB 80

40 END

80 IF X = 0 THEN 110

90 IF X>0 THEN 120

100 PRINT "ВЫХОД 1 Х = ";Х: LET X = X+1: RETURN

110 PRINT "ВЫХОД 2 X = ";X: LET X = X+1: RETURN

120 PRINT "ВЫХОД 3 X = ";X: PRINT "КОНЕЦ"

130 RETURN

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

ВЫХОД 1 X=-1

ВЫХОД 2 X=0

ВЫХОД 3 X=l

КОНЕЦ

При первом входе в подпрограмму (оператор 10) X равен —1 и выход из нее происходит по оператору RETURN в строке 100 к оператору 20. При втором входе (оператор GOSUB 80 строки 20) X равен 0 и выход происходит по оператору RETURN в строке 110 к оператору 30 основной программы. При последнем входе (строка 30) Х=1 и выход из подпрограммы происходит по оператору RETURN в строке 130.