Смекни!
smekni.com

Бейсик (стр. 5 из 7)

Очень важная характеристика подпрограмм - это возможность их повторного использования.

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

Вы уже использовали стандартные процедуры и функции при составлении программ. Теперь пришло время научиться создавать свои процедуры и функции.

Процедуры состоят из трех частей: заголовка, тела процедуры, завершения процедуры.

SUB имя (список параметров)
тело процедуры - список операторов
END SUB

Пример:

SUB hello (s$)
PRINT "Привет, ", s$,"! Как твои дела?"
END SUB

REM приветствие
name1$="Саша"
name2$="Вася"
REM процедуру можно вызвать так
CALL hello(name1$)
REM а можно вызвать так
hello(name2$)
REM или даже так
hello("Марина")
END

В результате выполнения программы на экране будет выведено:
Привет, Саша! Как твои дела?
Привет, Вася! Как твои дела?
Привет, Марина! Как твои дела?

Параметры, которые указываются в заголовке подпрограммы, называются формальными. Они нужны только для описания тела подпрограммы. А параметры (конкретные значения), которые указываются в момент вызова подпрограммы, называются фактическими параметрами. При выполнении операторов подпрограммы формальные параметры как бы временно заменятся на фактические.

Учимся программировать!
Конспекты школьника.

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

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

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

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

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

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

Учимся программировать!
Конспекты школьника.

Создание движущихся изображений.

Как нарисовать графический объект вам уже понятно. Но как заставить его двигаться?

Очень просто!
1. Рисуем объект цветом отличным от цвета фона.
2. Рисуем объект цветом фона.
3. Изменяем координаты.
4. Повторяем 1-3 столько раз сколько потребуется.

Пример 1: Движущийся круг.

REM Движущийся круг
SCREEN 1
x = 1
y = 1
REM цвет фона - 0(черный), цвет рисунка - 1

FOR i = 1 TO 150

REM Рисуем объект цветом отличным от цвета фона.
c = 1
CIRCLE (x, y), 2, c

REM задержка
FOR j = 1 TO 250000
NEXT j

REM Рисуем объект цветом цветом фона.
c = 0
CIRCLE (x, y), 2, c

REM Изменяем координаты
x = x + 2
y = y + 1

NEXT i
END

Для того чтобы глаз мог зафиксировать нарисованное изображение используем пустой цикл:
REM задержка
FOR j = 1 TO 250000
NEXT j