На занятии 5 были рассмотрены простейшие конструкции реализации разветвляющихся алгоритмов. Рассмотрим более сложные конструкции с введением новых понятий и операторов.
Типовые задачи: составление тренажеров, тестов, простейших меню в бейсик программах.
Начнем с задачи: первокласснику необходимо хорошо запомнить таблицу умножения. Составляем для него специальный тренажер.
Программа может выглядеть так.
*************Программа 6.1 Простейший тренажер****************************
INPUT”Сколько примеров тебе задать”;n
(Введем понятие СЧЕТЧИКА. Это целочисленная переменная, которая увеличивает свое значение как правило, на единицу при выполнении определенных условий)
k = 0:’**Обнуление счетчика неверных ответов
k1 = 0:’**Обнуление счетчика верных ответов
5 a = 1 + INT(10*RND): b = 1 + INT(10*RND): с = a * b
‘**формирование случайных целых чисел и расчет их произведения
10 ? a; “x”; b;” = “;:INPUT m:’**печать вопроса и запрос ответа
IF m<>c THEN
?”Неверно, попробуй еще”
k = k + 1
IF k < 4 THEN 10
END IF
‘**В полном формате IF..THEN анализируется ответ и дается всего 4 попытки на ввод правильного ответа
k1 = k1 + 1:’**Подсчет числа верных ответов
IF n < k1 THEN ?”Умница, следующее задание”:GOTO 5
Предлагается усложнить эту программу, выдавать в заключение резюме: с какой попытки и сколько ученик дал правильных ответов.
Более сложные программы представляют тесты, модные в наше время. В качестве пробного примера приведем тест для второклассника, осваивающего устный счет в пределах 100, кстати, второклассник не знает отрицательных чисел и это необходимо учесть при составлении теста.
Программа может выглядеть так.
**********************Программа 6.2************************************
10 CLS : INPUT "Сколько примеров тебе предложить"; n
k = 0:’***Обнуление счетчика предлагаемых примеров
kp = 0:’***Обнуление счетчика правильных ответов
IF n < 10 THEN PRINT "Это очень мало!" ELSE 12
PRINT "Нажми любую клавишу и закажи побольше примеров"
11 IF INKEY$ = "" THEN 11 ELSE GOTO 10
(Здесь впервые нами использована функция INKEY$. Она принимает СИМВОЛЬНОЕ значение, один символ, первой нажатой клавиши. Если она не имеет никакого значения – клавиша не нажата, т.е “” – “пусто-пусто”, то управление передается на ту же 11 строку, пока не будет нажата какая-либо клавиша)
12 t = SGN(-.5 + RND): IF t = -1 THEN a$ = "-" ELSE a$ = "+"
(В строке 12 формируется знак + или -, т.е. определяется на сложение или вычитание будет выполнятся пример)
13 IF t = -1 THEN 50
(Строка 13: если упражнение на вычитание, то управление передается на строку 50)
15 a = INT(10 + 90 * RND): b = INT(10 + 80 * RND)
IF a + b > 100 THEN 15
(Формирование слагаемых с проверкой условия: не превышает ли сумма числа 100)
k = k + 1’***Увеличение счетчика примеров на 1
PRINT a; a$; b; "="; : INPUT c: IF c = a + b THEN kp = kp + 1
(Увеличение счетчика правильных ответов)
GOTO 100
50 a = INT(10 + 90 * RND): b = INT(10 + 80 * RND)
IF a < b THEN 50’***Проверка условия: уменьшаемое меньше вычитаемого)
k = k + 1
PRINT a; a$; b; "="; : INPUT c: IF c = a - b THEN kp = kp + 1
100 IF k < n THEN 12’***”Идем за следующим прмером****
(Далее формируем оценку, разберитесь самостоятельно - как)
IF kp / n > .9 THEN oc = 5
IF kp / n <= .9 AND kp / n > .75 THEN oc = 4
IF kp / n <= .75 AND kp / n > .5 THEN oc = 3
IF kp / n <= .5 THEN oc = 2
PRINT "Ваша оценка"; oc
PRINT "1 - продолжим, 2 - достаточно. Нажмите цифру"
200 b$ = INKEY$
IF b$ = "1" THEN 10
IF b$ = "2" THEN END ELSE 200
И наконец, на этом занятии рассмотрим организацию простейших меню в бейсик - программах. Приведем наглядный пример.
*********************Программа 6.3**************************
5 CLS: PRINT TAB(30); "МЕНЮ"
PRINT TAB(20); "1.Сказка про белого бычка"
PRINT TAB(20); "2.Сказка про серого волка"
PRINT TAB(20); "3.Сказка про козленка"
PRINT TAB(20); "4.Сказка про веселых гусей"
PRINT TAB(20); "5.Сказка про курочку рябу"
PRINT TAB(20); "6.Выход из мира сказок"
100 INPUT”Введите соответствующую цифру”;t
ON t GOTO 110, 120, 130, 140, 150, 160
(Впервые применен оператор ON)
110 CLS : PRINT TAB(20); "1.Сказка про белого бычка"
PRINT”&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&”:GOTO 200
GOTO 200
120 CLS : PRINT TAB(20); "2.Сказка про серого волка"
PRINT "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&": GOTO 200
130 CLS : PRINT TAB(20); "3.Сказка про козленка"
PRINT "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&": GOTO 200
140 CLS : PRINT TAB(20); "4.Сказка про веселых гусей"
PRINT "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&": GOTO 200
150 CLS : PRINT TAB(20); "5.Сказка про курочку-рябу"
PRINT "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&": GOTO 200
160 STOP
200 IF INKEY$ = "" THEN 200 ELSE 5
На примере этой простой программки по организации простенького меню необходимо хорошо уяснить как работает оператор ON и функция INKEY$. По возможности для закрепления приемов использования IF..THEN, INKEY$ можно использовать и другие конструкции. Например, передачу управления в строках 100-160 возможно организовать следующим образом:
100 t$=INKEY$
<Акцентируйте внимание на глаголах: “введите” и “нажмите”>
IF t$=”1” THEN 110 ELSE IF t$=”2” THEN 120
IF t$=”3” THEN 130 ELSE IF t$=”4” THEN 140
IF t$=”5” THEN 150 ELSE IF t$=”6” THEN 160 ELSE 100
Необходимо отметить, что при организации меню или других фрагментов выбора использование буквенных клавиш иногда приводит начинающих пользователей к естественным проблемам, они забывают, что под каждой клавишей 4 различных символа.
Пример.
?”Продолжить работу (Д) или выйти из программы (В), нажмите соответствующую клавишу”
100 t$=INKEY$
IF t$=”Д” OR t$=”д” OR t$=”L” OR t$=”l” THEN 200
IF t$=”В” OR t$=”в” OR t$=”D” OR t$=”d” THEN STOP ELSE 100
Фрагмент “реагирует” только на указанные символы, но такая конструкция не очень удобна.
5.Программа, которая запрашивает неполное имя, а выдает полное, может выглядеть, например, так:
…………………Программа 6.5…………………………………….
10 CLS : PRINT TAB(35); "Для друзей": PRINT
PRINT TAB(15); "Введите своё имя с заглавной буквы не полное": PRINT
PRINT TAB(20); : INPUT a$
b$ = "Тебя зовут"
IF a$ = "Миша" THEN PRINT b$; " Михаил"
IF a$ = "Ира" THEN PRINT b$; " Ирина"
IF a$ = "Лёха" THEN PRINT b$; " Алексей"
IF a$ = "Аня" THEN PRINT b$; " Анна"
IF a$ = "Женя" THEN PRINT b$; " Евгений"
PRINT "Я тебя не знаю": PRINT
PRINT TAB(15); "Если хочешь попробовать еще введи 1"
PRINT TAB(15); "Если хочешь уйти введи 2"
INPUT a
IF a = 1 THEN 10 ELSE IF a = 2 THEN STOP
В качестве домашнего задания запишите тексты программ с более простыми конструкциями на закрепление IF..THEN.
1.Даны три положительных числа. Могут ли эти числа выражать длины сторон треугольника? Если да, то определите вид этого треугольника: остроугольный, прямоугольный, тупоугольный
2.Даны 2 точки в прямоугольной системе координат. Определить какая из точек ближе к началу координат.
3.Точка задана своими координатами в прямоугольной системе координат. Определить: какой четверти, или какой координатной оси принадлежит эта точка.
4.Остроумно реализуйте фрагмент русской сказки о витязе, который на коне перед камнем с надписью: налево пойдешь.. направо пойдешь.. прямо пойдешь.
5.Дано комплексное число z = a + bi. Найдите его модуль и аргумент. Помните, что аргумент комплексного числа принадлежит интервалу
(-180o; 180o).
6.Дан квадрат с вершинами в точках (-1; -1); (-1; 1); (1; -1); (1; 1). В него вписан круг единичного радиуса. Генерируйте точки, принадлежащие квадрату, подсчитывайте их число, а также подсчитывайте число точек, принадлежащих кругу. Через каждую 1000 точек рассчитывайте отношение точек, принадлежащих кругу к числу всех точек, это отношение умножайте на площадь квадрата, т.е. на 4, и выдавайте сообщение. Вы будете удивлены результатом!
7.Составьте меню, содержащее темы курса математики, которые Вы изучили в первом семестре. Постарайтесь вспомнить, о чем шла речь в каждой из тем.
8.Известно, что если приращение функции в точке положительно, то эта функция в данной точке возрастает, в противном случае – убывает. Выдайте соответствующее сообщение.
9.Переработайте тренажер (Программа 6.1) и получите из проверочный тест с выставлением оценки.
10.Занимательная задача, содержащаяся во всех научно-популярных изданиях. Пусть Ваша программа реализует игру “Угадай число”. Программа генерирует двузначное (трехзначное) натуральное число и предлагает пользователю угадать это число. Играющий вводит свои догадки, программа сравнивает и выдает одно из сообщений: “Недолет”, “Перелет” или “Молодец! Угадал с _ попыток”.
Разработайте дома 2-3 из предложенных задач, запишите их тексты, по возможности, разместите на магнитном носителе, чтобы было удобно проверить Вашу работу.
Что нового Вы узнали, какие умения и навыки приобрели на занятии №6?