Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
теория Basic.doc
Скачиваний:
9
Добавлен:
19.09.2019
Размер:
351 Кб
Скачать
☆

Подпрограммы. Функции.

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

Процедуры и функции бывают стандартными и нестандартными. Стандартные подпрограммы входят в  библиотеку, которая поставляется вместе с системой программирования. Нестандартные процедуры и функции программисты пишут сами.

Вы уже использовали стандартные функции, теперь давайте напишем свою функцию.

FUNCTION имя (список параметров) тело функции - список операторов END FUNCTION

Пример: функция возвращающая куб числа

FUNCTION kub (x) kub=x*x*x END FUNCTION

REM Вывод кубов натуральных чисел от 1 до 10 CLS FOR I=1 TO 10 PRINT kub(I) NEXT END

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

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

Рекурсия - это такой способ организации подпрограммы, при котором в ходе выполнения она обращается сама к себе.

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

FUNCTION fak (f) IF f = 0 OR f = 1 THEN fak = 1 ELSE fak = fak(f - 1) * f END IF END FUNCTION

REM "Вычисление факториала" INPUT "Введите число: ", a PRINT "Факториал = ", fak(a) END

Для вычисления факториала числа n, т.е. n! надо умножить последовательно n натуральных чисел от 1 до n: n!=1*2*3*4. Так, 4! будет равно: 4!=1*2*3*4. Это прямой путь вычисления или итеративный.  Возможен и другой путь вычисления: n!=n*(n-1)*...*1. Т.е. 4!=4*3*2*1. Этот путь можно назвать возвратным или рекурсивным.  Именно на этом принципе основана работа приведенной функции.

Графический режим работы.

Ну и теперь, наверное, самое интересное. Будем рисовать. Кто же не любит это занятие?!

Программы могут выводит данные на экран в текстовом и графическом режиме работы. Для перехода в графический режим работы служит оператор:

SCREEN <mode>

<mode> - целочисленная константа, указывающая режим работы для данного экрана и адаптера.

Пример:

SCREEN 1 SCREEN 2 ... SCREEN 11 ...

Для рисования можно использовать следующие операторы:

CLS

Очистка экрана

PSET(X,Y),C

Изобразить точку. X,Y - координаты точки, С -цвет.

PSET STEP(X,Y),C

Изобразить точку. X,Y - смешение от данной точки, С - цвет.

LINE(X1,Y1)-(X2,Y2),C

Прямая линия.X1,Y2 и X2,Y2- координаты концов линии, С - цвет.

LINE -(X2,Y2),C

Прямая линия.  От текущего положения курсора до X2,Y2- координаты конца линии, С - цвет.

LINE(X1,Y1)-(X2,Y2),C,B

Прямоугольник. X1,Y2 и X2,Y2- координаты концов диагонали, С - цвет.

LINE(X1,Y1)-(X2,Y2),C,BR

Закрашенный прямоугольник. X1,Y2 и X2,Y2- координаты концов диагонали, С - цвет.

CIRCLE(X,Y),R,C

Окружность. X,Y - координаты центра, С -цвет.

CIRCLE STEP(X,Y),R,C

Окружность. X,Y - смешение от данной точки, С -цвет.

CIRCLE(X,Y),R,C,A1,A2

Дуга окружности. X,Y - координаты центра, С -цвет, А1,А2 - угловые меры начальной и конечной точки дуги.

CIRCLE(X,Y),R,C,,,K CIRCLE(X,Y),R,C,А1,А2,K

Элипс. К - коэффициент сжатия.

PAINT(X,Y),C1,C2

Закрасить область. С1 - цвет закраски, С2 - цвет границы.

LOCATE T1,T2

Установка курсора в данную позицию. Т1, Т2 - номер строки и столбца.

PRINT

Оператор вывода текста

 Пример: использования LINE

REM использование LINE SCREEN 12 LINE (10, 10)-(200, 10) LINE (10, 20)-(200, 40), 2, B LINE (10, 50)-(200, 70), 2, BF END

Результат работы программы:

Пример: использование CIRCLE

REM ОКРУЖНОСТЬ, ДУГА, ЭЛЛИПС CONST PI = 3.141593 SCREEN 2 REM ОКРУЖНОСТЬ CIRCLE (350, 115), 30 REM ДУГА ОКРУЖНОСТИ CIRCLE (320, 100), 200, , -PI, -PI / 2 REM ОКРУЖНОСТЬ CIRCLE STEP(-100, -42), 100 REM ЭЛЛИПС CIRCLE STEP(0, 0), 100, , , , 5 / 25 REM ВЫВЕСТИ НАДПИСЬ В СТРОКЕ 25 И СТОЛБЦЕ 1 LOCATE 25, 1: PRINT "Press any key to end."; REM ЖДЕМ НАЖАТИЯ ЛЮБОЙ КЛАВИШИ DO LOOP WHILE INKEY$ = ""

Результат работы программы:

Пример: построение окружности

REM окружность CLS INPUT "Введите координаты центра x,y: ", x,y INPUT "Введите радиус окружности R: ", r SCREEN 1 CIRCLE (x, y), r END

Сейчас на улице зима, а значит и ... Пример: программа "Снеговик"

REM Снеговик SCREEN 12 x = 320 y = 240 r = 50 c = 3 c1 = 8 c2 = 5 c3 = 6 REM Снег FOR i = 1 TO 300 PSET (RND * 640, RND * 480), 1 NEXT REM Сугроб FOR i = 1 TO 20 LINE (0 + 2 * i, y + 3 * r + 61 - i)-(640 - 2 * i, y + 3 * r + 61 - i), 1 NEXT REM Тело снеговика CIRCLE (x, y - 80), r - 20, c CIRCLE (x, y), r, c CIRCLE (x, y + 120), r + 20, c CIRCLE (x - 52, y - 30), 10, c CIRCLE (x + 52, y - 30), 10, c PAINT (x, y - 80), c, c PAINT (x, y), c, c PAINT (x, y + 120), c, c PAINT (x - 52, y - 30), c, c PAINT (x + 52, y - 30), c, c REM Оформление лица CIRCLE (x - 15, y - 90), 2, 1 PAINT (x - 15, y - 90), 1, 1 CIRCLE (x + 15, y - 90), 2, 1 PAINT (x + 15, y - 90), 1, 1 CIRCLE (x, y - 80), 10, 4, , , .5 PAINT (x, y - 80), 4, 4 CIRCLE (x, y - 75), 20, 4, 4, 6, 0.5 REM Метла LINE (x - 50, y - 100)-(x - 54, y + 100), c1, BF FOR i = 1 TO 20 LINE (x - 53, y - 100)-(x - 53 - 40 * RND + 20, y - 100 - 40 * RND), c1 NEXT REM Ведро LINE (x - 30, y - r - 2 * (r - 20) + 10)-(x + 30, y - r - 2 * (r - 20) + 10), c2 LINE (x - 15, y - r - 2 * (r - 20) - 30)-(x + 15, y - r - 2 * (r - 20) - 30), c2 LINE (x - 30, y - r - 2 * (r - 20) + 10)-(x - 15, y - r - 2 * (r - 20) - 30), c2 LINE (x + 15, y - r - 2 * (r - 20) - 30)-(x + 30, y - r - 2 * (r - 20) + 10), c2 PAINT (x, y - r - 2 * (r - 20)), c2, c2 REM Пуговицы FOR i = 1 TO 5 CIRCLE (x, y - r + 30 * i), 3, c3 PAINT (x, y - r + 30 * i), c4, c3 NEXT END Результат работы программы:

Пример: построение графика функции.

FUNCTION F (x) F = x * x END FUNCTION REM ГРАФИК ФУНКЦИИ SCREEN 12 REM Строим оси FOR I = 0 TO 3 LOCATE 16, 38 + 10 * I: PRINT 4 * I NEXT FOR I = 0 TO 3 s$ = "-" + STR$(4 * I) LOCATE 16, 38 - 10 * I: PRINT s$ NEXT FOR I = 0 TO 4 LOCATE 16 - 3 * I, 38: PRINT 5 * I NEXT FOR I = 0 TO 3 s$ = "-" + STR$(5 * I) LOCATE 16 + 3 * I, 37: PRINT s$ NEXT LINE (10, 240)-(630, 240) LINE (320, 10)-(320, 470) COLOR 3 LOCATE 1, 38: PRINT "Y" LOCATE 17, 77: PRINT "X" REM Строим график функции COLOR 2 PSET (20*(-10) + 320, 240 - 10 * F(-10)) FOR x = -10 TO 10 STEP .1 XX = 20 * x + 320 YY = 240 - 10 * F(x) LINE -(XX, YY) NEXT END Результат работы программы для y=x2 Результат работы программы для y=x3-2.5

Оператор DRAW позволяет выполнять разнообразные графические операции.

·         Команды черчения по восьми направлениям: U, D, L, R, E, F, G, H.

H

U

E

L

R

G

D

F

  • Команда М чертит от текущей точки до точки с координатами x, y. Если перед координатами стоит знак плюс или минус, то координаты относительные, а не абсолютные.

  • Команда S изменяет масштаб черчения.

  • Команда А поворачивает изображение (А0-0, А1-90, А2-180, А3-270 градусов).

Пример: Рисование флагов.

REM Флаги SCREEN 1 PSET (50, 10) DRAW "R20 G5 F5 L20 U10" DRAW "B D20" DRAW "S5 R20 G5 F5 L20 U10" DRAW "BD20" DRAW "S4 R20 G5 F5 L20 U10" DRAW "BD20" DRAW "R20 G5 F5 L20 U10" DRAW "BD40" DRAW "A3 R20 G5 F5 L20 U10" END

Результат работы программы: