Информатика -продвинутый курс


ПОДПРОГРАММЫ


В Бейсике предусмотрена работа с подпрограммами, если необходимо использовать многократно сходные действия, или для блочно-структ\рпрованного построения программы. Для организации подпрограмм используют две команды: GOSUB <номер строки> - перейти на подпрограмм: RETURN - возврат.

Во многих версиях Бейсика предусмотрен переключатель подпрограмм ON k GOSUB 100,200,300. Здесь k может принимать значения 1.2.3, что соответствует обращению к одной из трех подпрограмм, начинающихся с номеров 100. 200, 300.

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

Программа 72 (см. программу 17).

10 ' ****** квадратные корни и логарифмы*********************

15 CLS / 20 " а » 35: с$ = "-"

30 GOSUB 1000 40 PRINT : PRINT "Таблица квадратных корней"

50 GOSUB 1000

55 PRINT

60 FOR x = 1 TO 10

70 PRINT USING "x = ##» sqr(x) = t».#»#<"; x; SQR(x) :

80 NEXT x

90 GOSUB 1000



100 PRINT : PRINT "Таблица логарифмов" ;

110 GOSUB 1000 120 PRINT

130 FOR x = 1 TO 5 140 PRINT USING "x = ««» log(x) = »».»»»»"; X; LOG(x)

150 NEXT x

:60 с$ = "*" 170 GOSUB 1000 180 END

1000 FOR i = 1 TO a : PRINT c$ : NEXT i

1010 RETURN

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

Приведем еще несколько примеров работы с подпрограммами.

Программа 73

'*********** меню графиков функций ***********

10 CLS : PRINT : PRINT

20 PRINT " ГРАФИКИ ФУНКЦИЙ"

30 PRINT

40 PRINT ". Синус"

50 PRINT ". Косинус"

60 PRINT ". Тангенс"

70 PRINT : PRINT

80 INPUT "введи номер"; j

90 SCREEN 2

100 LINE (200, 0) - -(200, 200) : LINE (0, 100) - (400, 100)

110 PSET (0, 0), 4

120 FOR x = - 4 TO 4 STEP 1/32


130 ON j GOSUB 500, 600, 700

140 PSET (200 + 32 * x, 100 - 32 * у)

150 NEXT x

160 r$ = INPUT$(1)

170 IF r$ = "К" OR r$ = "к" THEN END ELSE SCREEN 0: GOTO 10

500 у = SIN(x) : RETURN

600 у = COS(x) : RETURN

700 у = TAN(x) : RETURN

Подпрограммы, к которым обращаются по GOSUB, сильно уступают истинным процедурам Паскаля, поскольку у них отсутствуют возможности локализации переменных, нет формальных параметров, которые можно замещать при обращении фактическими. Однако, в более поздних версиях (например в Qbasic) предусмотрены подпрограммные единицы SUB - подпрограммы-процедуры и FUNCTION - подпрограммы-функции. В следующем примере использована подпрограмма решения квадратного уравнения SUB kvur(a,b,c) со списком входных данных. В основной программе можно объявить подпрограмму оператором DECLARE, а вызвать ее с помощью команды CALL.

Программа 74

5 ' ********** пример работу с подпрограммой ********

10 DECLARE SUB kvur (а!, Ь!, с!)

20 INPUT "введи а, Ь, с"; а, Ь, с 30 CALL kvur (a, Ь, с)

40 END SUB kvur (a, b, c)

1000 d.=b*b-4*a*c

1010 IF d < 0 THEN PRINT "корней нет": GOTO 1050

1020 xl = (- b + SQR(d)) / 2 / a

1030 x2 = (- b - SQR(d)) / 2 / a

1040 PRINT ="; xl, ="; x2

1050 END SUB


Содержание раздела