Файл: Могилев А.В. Информатика.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.03.2021

Просмотров: 6816

Скачиваний: 51

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

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 


background image

 

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 


background image

 

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 


background image

 

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 

Обратим  внимание  на  существенно  иной  механизм  передачи  параметров  в  подпрограмму 

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


background image

 

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