к оглавлению

Составление и отладка более сложных программ, содержащих выбор, циклы и подпрограммы

Мы изучили конструкции ветвления, научились программировать циклы типа “До” и “После” с помощью 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?

к оглавлению

Знаете ли Вы, что диаграмма классов, Class diagram - это методология объектно-ориентированного проектирования, предназначенная для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution