Мы изучили конструкции ветвления, научились программировать циклы типа “До” и “После” с помощью IF…THEN, DO…LOOP и FOR…NEXT, умеем использовать подпрограммы.
Настоящее занятие – подведение итогов по изученному материалу, закрепление и проверка Ваших умений и навыков.
Несколько задач подробно разберем совместно. Затем Вам будут предложены задачи для самостоятельной разработки.
1.Задача. даны три числа, проверить, могут ли они являться сторонами треугольника, если “да”, то вычисление его медиан и высот организовать в подпрограммах. В результате работы программы выдать длины медиан и высот.
________________Программа 13.1________________
10 CLS
PRINT TAB(15); "Введите три числа, выражающие стороны треугольника";
INPUT a, b, c
REM**Из трех чисел выбираем наибольшее и сохраняем в а**
IF b > a AND b > c THEN SWAP a, b
IF c > a AND c > b THEN SWAP a, c
REM**Проверяем, могут ли они быть сторонами треугольника**
IF a ^ 2 > b ^ 2 + c ^ 2 THEN
PRINT TAB(10); "Вы не правы - это не треугольник"
PRINT TAB(10); "Нажмите пробел и введите три числа снова"
DO: LOOP WHILE INKEY$ <> " ": GOTO 10: '**Обратите внимание на
'**эту конструкцию и применяйте ее в дальнейшем*****
END IF
p = (a + b + c) / 2: s = SQR(p * (p - a) * (p - b) * (p - c))
REM*** Это вычислили полупериметр и площадь по формуле Герона
REM** Организуем меню выбора*****
15 CLS : t = 0
LOCATE 5, 30: PRINT "Будете вычислять:"
PRINT TAB(32); "M - медианы"
PRINT TAB(32); "V - высоты"
PRINT TAB(26); "Нажмите соответствующую клавишу"
'**Выбор медианы или высоты****
20 a$ = INKEY$
IF a$ = "M" OR a$ = "m" OR a$ = "ь" OR a$ = "Ь" THEN t = 1
IF a$ = "V" OR a$ = "v" OR a$ = "М" OR a$ = "м" THEN t = 2
IF t = 1 THEN 22
IF t = 2 THEN 24 ELSE 20
IF t = 1 THEN
22 PRINT TAB(35); "Записывайте:"
x = a: y = b: z = c: GOSUB 30: PRINT TAB(32); "m1 = "; m
x = a: y = c: z = b: GOSUB 30: PRINT TAB(32); "m2 = "; m
x = b: y = c: z = a: GOSUB 30: PRINT TAB(32); "m3 = "; m
END IF
IF t = 2 THEN
24 PRINT TAB(35); "Записывайте:"
x = a: GOSUB 40: PRINT TAB(32); "v1 = "; v
x = b: GOSUB 40: PRINT TAB(32); "v2 = "; v
x = c: GOSUB 40: PRINT TAB(32); "v3 = "; v
END IF
'**И очередной диалог с пользователем*****
LOCATE 15, 30: PRINT "Продолжение"
PRINT TAB(32); "N - новый треугольник"
PRINT TAB(32); "D - другие элементы этого треугольника"
PRINT TAB(32); "T - Окончание работы"
PRINT TAB(26); "Нажмите соответствующую клавишу"
25 a$ = INKEY$
IF a$ = "N" OR a$ = "n" OR a$ = "Т" OR a$ = "т" THEN 10
IF a$ = "D" OR a$ = "d" OR a$ = "В" OR a$ = "в" THEN 15
IF a$ = "T" OR a$ = "t" OR a$ = "Е" OR a$ = "е" THEN END ELSE 25
30 '******Подпрограмма вычисления медиан*********
m = SQR(2 * x ^ 2 + 2 * y ^ 2 - z ^ 2) / 2
RETURN
40 '******Подпрограмма вычисления высот*********
v = 2 * s / x
RETURN
2.Интереснейшая познавательная задача. В какой день Вы родились? Сколько дней прожили на свете? Вы хотите узнать? Пожалуйста, компьютерная программа ответит на эти вопросы!
Только воспользуйтесь формулами.
Число дней после 01,01,1700 до любой даты до 28.02.2100 вычисляется по формулам:
Для января и февраля:
n = [ 365,25(g – 1) ] + [30,6(m + 13)] + d - 621049
Для остальных месяцев:
n = [ 365,25g ] + [30,6(m + 1)] + d – 621049, где квадратные скобки означают целую часть выражения, т.е. функция INT. d, m, g – соответственно день, месяц, год указанной даты, n – число дней после 01.03.1700 до введенной Вами даты. По параметру w можно найти день недели указанной даты, разберитесь по листингу программы, как это можно сделать.
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Программа 13.2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
SCREEN 9: COLOR 14, 1
CLS
PRINT : PRINT
PRINT TAB(10); : INPUT "Введите сегодняшний день месяц год "; d, m, g
dd = d: mm = m: gg = g
GOSUB 40: s = nn
10 CLS : PRINT TAB(10); : INPUT "Введите день месяц год Вашего рождения"; d, m, g
dd = d: mm = m: gg = g
GOSUB 40: s1 = nn
t = s - s1
PRINT TAB(30); "Вы прожили"; t; " дней"
GOSUB 50: PRINT TAB(30); "Ваш день рождения "; : PRINT ; a$
PRINT : PRINT
'**Диалог с пользователем*********
PRINT TAB(10); "1 - для друго дня рождения или 2 - выход"
PRINT TAB(10); "Нажмите соответствующую клавишу"
30 a$ = INKEY$
IF a$ = "1" THEN 10
IF a$ = "2" THEN END ELSE 30
40 '**********Подпрограмма. Число дней после 1,1,1700 **********
IF mm <= 2 THEN nn = INT(365.25 * (gg - 1)) + INT(30.6 * (mm + 13)) + dd - 621049
IF mm > 2 THEN nn = INT(365.25 * gg) + INT(30.6 * (mm + 1)) + dd - 621049
RETURN
50 '******* Подпрограмма. Определение дня недели ****************
f = 365 * g + d + 31 * (m - 1)
IF m <= 2 THEN f = f + INT((g - 1) / 4) - INT(3 * (INT((g - 1) / 100 + 1)) / 4)
f = f - INT(.4 * m + 2.3) + INT(g / 4)
f = f - INT((.75 * (INT(Y / 100) + 1)))
w = f + (-INT(f / 7) * 7) - 1
IF w = 1 THEN a$ = "воскресение" ELSE IF w = 2 THEN a$ = "понедельник"
IF w = 3 THEN a$ = "вторник" ELSE IF w = 4 THEN a$ = "среда"
IF w = 5 THEN a$ = "четверг" ELSE IF w = 6 THEN a$ = "пятница"
IF w = 0 THEN a$ = "суббота"
RETURN
3.Мы с Вами на первых занятиях программировали игру “Угадай число”. Теперь распространим ее на числовую плоскость. Ваша программа генерирует два натуральных числа из (0; 100), те координаты точки. Вы должны найти эту точку. В научно – популярной литературе эта игра называется почему-то “Медвежья берлога”, которую необходимо отыскать, пользуясь подсказками Вашей программы: “налево и прямо”, “назад”, “направо и назад” и т.д. Как и в простой программе считать количество попыток.
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Программа 13.3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
CLS : SCREEN 9: COLOR 14, 1
RANDOMIZE TIMER
x0 = 1 + INT(99 * RND): y0 = 1 + INT(99 * RND)
PRINT TAB(10); x0, y0
k = 0
10 PRINT TAB(10); : INPUT "Ваши координаты"; x, y: k = k + 1
xp$ = "направо": xl$ = "налево"
yv$ = "вверх": yn$ = "вниз"
i$ = " и "
tx = SGN(x0 - x): ty = SGN(y0 - y)
IF tx = 1 AND ty = 1 THEN PRINT TAB(10); xp$; i$; yv$
IF tx = 1 AND ty = 0 THEN PRINT TAB(10); xp$
IF tx = 1 AND ty = -1 THEN PRINT TAB(10); xp$; i$; yn$
IF tx = 0 AND ty = -1 THEN PRINT TAB(10); yn$
IF tx = -1 AND ty = -1 THEN PRINT TAB(10); xl$; i$; yn$
IF tx = -1 AND ty = 0 THEN PRINT TAB(10); xl$
IF tx = -1 AND ty = 1 THEN PRINT TAB(10); xl$; i$; yv$
IF tx = 0 AND ty = 1 THEN PRINT TAB(10); yv$
IF tx = 0 AND ty = 0 THEN PRINT TAB(5)"Нашел с "; k; "попыток"; x; y ELSE 10
А теперь найдем отгаданную точку с помощью вложенных циклов
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Программа 13.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
x0 = 1 + INT(99 * RND): y0 = 1 + INT(99 * RND)
FOR x = 1 TO 99
FOR y = 1 TO 99
IF x = x0 AND y = y0 THEN PRINT TAB(5); "Берлога в точке "; x; y
NEXT y, x
5.Вы находили на предыдущих занятиях длину дуги плоской кривой, она была задана одной формулой в операторе DEF FN. А что если функция задана различными выражениями при различных значениях аргумента?
Например:
Это значит, что необходимо организовать подпрограмму по вычислению значений функции.
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Программа 13.5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
SCREEN 9: COLOR 14, 1
CLS
s = 0
PRINT TAB(10); : INPUT "Начальное и конечное значения аргумента"; a, b
h = (b - a) / 1000
FOR x = a TO b - h STEP h
GOSUB 10: y1 = y
x = x + h
GOSUB 10
dl = SQR((y1 - y) ^ 2 + h ^ 2)
s = s + dl
NEXT x
PRINT TAB(10); "Длина дуги равна"; s
END
10 REM******* Подпрограмма вычисления значений функции ********
IF x < -1 THEN y = x ^ 3 + 2
IF x >= -1 AND x <= 1 THEN y = x ^ 2
IF x > 1 THEN y = EXP(x - 1)
RETURN
В заключение итогового занятия спрограммируйте самостоятельно следующие задачи.
6. А теперь очень легкое упражнение. Напишите письмо стандартной формы, адресованное различным людям. Текст письма расположите в подпрограмме.
7.Определите и напечатайте 5 случайных двузначных целых чисел, сумма которых равна 100.
8.Используя циклы по аргументам оператора LOKATE обрамите экран монитора 2-3-мя рядами каких-нибудь символов, которые имеют различные, случайные цвета.
9.Используя циклы по аргументам оператора LOKATE, напечатайте свое имя лесенками по основной и вспомогательной диагоналям.
10.Дано трехзначное натуральное число. Напечатать его цифры и составить из этих цифр путем их перестановки другие трехзначные числа, например: 123 – это задано пользователем. Пусть Ваша программа найдет 132, 213, 231, 312, 321.
11.Пользователь задает положительное “а” и натуральное n. Возведите “а” в степень n не пользуясь операцией возведения в степень “^”.
12.Пользователь задает целое положительное число а. Среди чисел:
найдите первое, превышающее заданное а.
Какими знаниями Вы овладели, какие умения и навыки Вы приобрели на занятии №13?