ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 6816
Скачиваний: 51
296
10 SCREEN 9
20 WINDOW (-16,-12) - (16,12)
30 COLOR 14,1
4о у**************** тонкая линия ********************
50 FOR х
=
-15 TO 15 STEP .01
60 у = 3*sin(x/3)
70 PSET (х, у+7), 14
80 NEXT х
90 г**************** ломаная линия - 1 ***************
100 FOR х = -15 TO 15 STEP .1
110 у = 3*sin(x/3)
120 PSET (x,y), 11
130 IF x>-15 THEN LINE (x,y) - (xl.yl), 11
140 у1=-У : xl=x
150 NEXT х
160 ***************** ломаная линия - 2 ***************
170 FOR х = -15 TO 15.STEP .1
180 у = 3*sin(x/3)
190 CIRCLE (х, у-7), .1, 15
200 IF x>-15 THEN LINE (х, у-7) - (xl, yl- 7), 10
210 CIRCLE (xl, yl- 7), .1, 15 : PAINT (xl.yl - 7), 14, 15
220 у1=У : х1=х
230 NEXT х
340 '********************** Оси ***********************
250 LINE (-16, 7) - (16, 7), 15
260 LINE (-16, 0) - (16, 0), 15
270 LINE (-16, -7) - (16, -7), 15
Выше упоминалось о способе закрашивания областей, ограниченных линией одного цвета,
с помощью оператора PAINT. Оператор LINE (\l,yl)-(x2,y2),z,bf позволяет получать закрашенные
прямоугольники. Существуют специальные приемы закрашивания. Они основаны на повторении
оператора, закрашивающего элементарную площадку. Причем, это может производиться либо по
определенному закону, либо случайным образом. Ниже приведена программа, иллюстрирующая
два способа закрашивания (хотя можно придумать и другие).
Программа 66
10 **************** закрашивание **********************
20 SCREEN 9
30 WINDOW (-16, -12) -(16, 12)
40 COLOR 14, 1
50 '************ постепенное закрашивание ************
60 LINE (-10.1, -5.1) - (10.1, 5.1), 15, b
70 FOR x = -10 TO 10 STEP .01
80 LINE (x, -5) - (x, 5), 12
90 NEXT x
100 DELAY 2 : ' FOR k=l to 2000 : NEXT k
110 CLS
120 '
А
***************
гаситель экрана *****************
130 FOR i = 1 ТО 2000
140 x = .5*INT(RND*64) - 16
150 у = INT(RND*24) - 12
160 LINE (x, у) - (Х+.5, у+1), 15, bf
170 NEXT i
Следующая программа аналогична программе 31 на Паскале и строит столбчатую диаграм-
му, наглядно отражающую числовую информацию о населении 6 крупных городов мира: Токио,
Гамбурга, Москвы, Бангкока, Мехико и Парижа.
Программа 67
(см. программу 31)
Ю **************** столбчатая диаграмма ****************
20 SCREEN 9
30 COLOR 14, 1
40 DATA 11500, 2300, 9700, 5100, 12400, 8200
297
45 DATA "Токио", "Гамбург", "Москва", "Бангкок", "Мехико", "Париж"
50 LINE (40, 300) - (550, 300): LINE (40, 300) - (40, 20)
60 FOR k
=
1 ТО б
70 READ m(k)
80 NEXT k
90 a = m(l)
100 FOR k = 2 TO 6
110 IF m(k) > a THEN a = m(k)
120 NEXT k
130 FOR k = 1 TO 6
140 READ name$(k)
150 NEXT k
160 FOR k = 1 TO 6
170 n
=
10 * k + 3
180 LOCATE 23, n: PRINT name$(k)
190 m(k) = 300 - m(k) / a * 200
200 LINE (k * 80, 300) - (80 + k * 80, 300 - m(k)), k + 3, BF
210 NEXT k
220 c$ = HEX$(a)
230 LOCATE 3, 1: PRINT c$
240 c$
=
HEX$(0)
250 LOCATE 22, 3: PRINT c$ 260 END
Дадим короткие пояснения к использованным в данной программе и не использовавшимся
ранее средствам. В представленном примере использован не встречавшийся ранее оператор LO-
CATE X,Y, останавливающий курсор на позицию х,у координатной сетки дисплея. Сочетание ко-
манд LOCATE ... PRINT позволяет выводить на экран, находящийся в графическом режиме, тек-
сты. Функция HEXS преобразует числа в соответствующие символы. Отсутствие команды WIN-
DOW приводит к максимально возможному графическому окну.
Контрольные вопросы и задания
1. Перечислите основные операторы для построения элементов изображений и
охарактеризуйте их работу.
2. Замените в одном из приведенных выше примеров SCREEN 9 на другой экранный режим
(например, 12). Что изменилось в работе программы? Если она перестала исполняться, отладьте
ее.
3. Изобразите смешную «рожицу», попеременно моргающую глазами с звуковым эффек-
том.
4.
Постройте орнаменты из геометрических фигур.
5.5. ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ
Кроме числовых значений переменные в Бейсике могут принимать значения в виде строки
символов. Символьные значения (константы) заключаются в кавычки " ".
Имя символьной (строковой) переменной отличается от обычной числовой переменной до-
бавлением справа специального символа, чаще знака доллара $, например, AS, Fl$, MaxS. Над
символьными переменными допустима операция сложения (склейка строк символов); могут быть
использованы функции и процедуры обработки символьных величин.
Начнем с примеров программ, аналогичных приведенным ранее на языке Паскаль.
Программа 68
(см. программу 11)
10 ' ******* Количество гласных в тексте ************
20 с$
=
"аеиоуыэюяАЕИОУЫЭЮЯ"
30 INPUT "Введите текст"; а$
40 n » О
50 FOR k = 1 ТО LEN(c$)
6t> b$ = MID$(c$, k, 1)
70 FOR i = 1 TO LEN(a$)
80 IF b$ = MID$(a$, i, 1) THEN n = n + 1
90 NEXT i
298
100 NEXT k
110 PRINT "Количество гласных равно", n
120 END
Здесь использована строковая функция MID(a$,ij) - вырезка подстроки из строки а$, где
первый аргумент - исходная строка, второй - начальная позиция подстроки, третий - длина под-
строки. Функция LEN(aS) - длина текста.
В следующей программе дополнительно использованы строковые функции LEFT$(a$,i) -
выделение подстроки длиной i от левого края заданной строки и RIGHT$(a$,i) - то же, но с право-
го края.
Программа 69
(см. программу 12)
10 ' ******* Замена в тексте sqr на ехр ************
20 INPUT "Введите текст"; а$
30 FOR i = 1 ТО LEN(a$) - 2
40 IF MID$(a$, i, 3) О "THEN GOTO 60
50 a$ = LEFT$(a$, i -1) + "+ RIGHT$(a$, LEN(a$) - i - 2)
60 NEXT i
70 PRINT a$
80 END
Приведем еще несколько примеров.
Программа 70
10 ' ******* игра клавиатурный тренажер ************
12 DATA "азбука", "год"," .23*45/56", letter, pc-ibm
15 DATA "дом-home", "Красноярск", "Омск", "Пермь", "Воронеж"
20 FOR i = 1 ТО 10
30 READ a$(i)
40 NEXT i
60 FOR i = 1 TO 10
70 CLS : PRINT : PRINT TAB(IO); a$(i);
100 PRINT : PRINT : PRINT
110 PRINT "введите слово и нажмите <ВК>";
120 LOCATE 8, 5 : х » TIMER : INPUT b$ : CLS
130 у = TIMER : PRINT : n =LEN(a$(i))
140 IF a$(i) <> b$ THEN 190
150 PRINT USING "###.#<"; (y - x) / П;
160 PRINT "сек. на один символ": GOTO 200
170 PRINT : PRINT "слово набрано неверно"
180 FOR m = 1 ТО 5000 : NEXT m
190 NEXT i
Функция TIMER возвращает текущее время системной среды в секундах. В строке 180 пре-
дусмотрен пустой цикл для осуществления временной задержки в исполнении программы.
Использование функций LEFTS(aS,n) и MID$(a$,n,k) еще раз продемонстрировано в сле-
дующем примере. Здесь же использованы математические функции INT(x) -целая часть числа х,
RND(x) - случайное число в интервале от 0 до 1. В программе задается массив (оператор DIM
aS(k)) из пяти слов, представленных в списке DATA (30 и 40 строки). Случайным образом выби-
рается одно из них и предлагается его угадать вводом подходящих символов.
Программа 71
5 ' *************** угадай слово *********************
10 k
=
5
15 DIM a$(k)
30 DATA "вечер","информатика","университет"
40 DATA "эхо","тра-ля-ля"
50 FOR i = 1 ТО k
60 READ a$ (i)
70 NEXT i
299
80 CLS
90 r = INT(k * RND(-TIMER)) + 1
100 n = LEN(a$(r))
110 PRINT "Я задумал слово из "; n; "букв"
120 LOCATE 5, 20: PRINT LEFT$(s$, n)
Ш
130 t = о
т
140 DO • 150 LOCATE 8, 12: PRINT "введи букву"
Щ
160 INPUT h$
170 у = О
180 FOR i = 1 ТО n ] 190 IF h$ = MID$(a$(r), i, 1) THEN | 200 LOCATE 5, 19 +
i: PRINT h$: | 210 t=t+l:y=l | 220 END IF |
230 NEXT i
240 LOCATE 8, 12: PRINT " "
250 IF у О 1 THEN LOCATE,10, 15: PRINT "нет такой буквы"
260 FOR m = 1 ТО 5000 : NEXT m 270 LOCATE 10, 15: PRINT " " |
280 LOOP WHILE t 0 n I 290 LOCATE 13, 13: PRINT "угадал, поздравляю!"
f
Обратим внимание на использованный в данной программе цикл DO-LOOP-WHILE, кото-
рый допустим в некоторых версиях Бейсика (QBASIC, Turbo-BASIC).
Контрольные вопросы и задания
1.
Охарактеризуйте использованные выше строковые функции.
5.6. ПОДПРОГРАММЫ
В Бейсике предусмотрена работа с подпрограммами, если необходимо использовать много-
кратно сходные действия, или для блочно-структ\рпрованного построения программы. Для орга-
низации подпрограмм используют две команды: 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
Обратим внимание на существенно иной механизм передачи параметров в подпрограмму
на Бейсике, нежели в паскалевскую процедуру. Формирование входных параметров производится
с помощью присваиваний до обращения к процедуре. Это гораздо менее удобно, чем использова-
ние формальных и фактических параметров в Паскале.
300
Приведем еще несколько примеров работы с подпрограммами.
Программа 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
Контрольные вопросы
1. В чем подпрограммы Бейсика принципиально отличаются от процедур Паскаля?
5.7. РАБОТА С ФАЙЛАМИ
Для осуществления связи с внешними периферийными устройствами и с файловой систе-
мой операционной среды в Бейсике предусмотрена работа с файлами. В следующем фрагменте
программы показаны команды для открытия внешнего файла с именем "aaa3.dat" на активном уст-
ройстве внешней памяти для записи (OPEN-FOR OUTPLT-AS ff). Запись в файл осуществляется
командой PRINT или WRITE с указанием номера файла (строка 30). По завершении работы с фай-
лом его закрытие осуществляется оператором CLOSE.
5 ' ********* работа с файлами для записи *********
10 OPEN "аааЗ.ааГ FOR OUTPUT AS ^3