Информатика |
Глава 9. Основные приемы программирования | назад оглавление вперед |
9.5. Составление программ разветвляющейся структуры. Контроль ввода данных
Изучение раздела рекомендуется после выполнения работ 1,2 (глава 4)
При программировании разветвления на языке Basic следует иметь в виду, что на схеме (рис. 8.5) отдельные ветви разветвления расположены параллельно, а в программе они должны следовать друг за другом. Причем, если одна ветвь выполнена, то другую выполнять не нужно. Этот обход второй ветви (действие 2) осуществляется оператором GO TO N, который обеспечивает переход к общей части программы после выполнения первой ветви ( действие 1).
Организация разветвления в программе на Basic осуществляется оператором условного перехода IF. Сразу за оператором IF должны располагаться операторы действия 2. Эта часть программы начинает выполняться, если условие в операторе IF имеет значение нет, т. е. структура р а з в е т в л е н и е имеет следующий программный эквивалент:
1 IF условие
GO TO 4
2 Операторы действия
2
3 GO TO 5
4 Операторы действия
1
6 Операторы общей
части программы
В качестве примера составим программу для решения (нахождения вещественных корней при а≠ 0) квадратного уравнения
aх2+Ьх-+с=0.
Квадратное уравнение имеет решение, если дискриминант D=Ь2—4ас не является отрицательным, т. е. после ввода коэффициентов а, Ь, с нужно вычислить D и проверить условие D<0. Если это условие выполняется (имеет значение да), то нужно вывести сообщение “Уравнение не имеет решения”. Если условие D<0 не выполняется, нужно напечатать корни, вычисляемые по формулам
x1 =(- b + D)/2a, x2 =( -b - D)/2a.
Схема представлена на рис. 9.2.
Рис. 9.2.
Далее приводится программа 9.4, составленная в соответствии со схемой.
Программа 9.4
10 PRINT
“ВВЕДИТЕ КОЭФФИЦИЕНТЫ УРАВНЕНИЯ ”
20 INPUT A,
B, C
30 D = В*В-4*А*С
40 IF D<0
GO TO 90
50 PRINT “КОРНИ
УРАВНЕНИЯ"
60 X1=(-B+SQR
(D))/(2*A) \ X2=(-B-SQR (D))/(2*A)
70 PRINT X1;X2
80 GO TO 100
90 PRINT "УРАВНЕНИЕ
НЕ ИМЕЕТ РЕИЕНИЯ"
100 STOP
Используя составленную программу, решим следующую задачу. Определить, через сколько секунд упадет на землю камень, брошенный с высоты 2 м вверх с начальной скоростью 10 м/с.
Зависимость
вертикальной координаты камня от времени определяется уравнением
h(t)= 2+10t-gt2
/2,
где g=9,8 м/с2 — ускорение свободного падения.
Для решения поставленной задачи нужно найти значение t, при котором h(t)== 0, т. е. необходимо решить квадратное уравнение
—gt2/2
+ 10t+2= 0.
Это можно сделать,
выполнив составленную программу при A=-4.9, В=10, С=2.
Р е з у л ь т а т в ы п о л н е н и я п р о г р а м м ы
ВВЕДИТЕ
КОЭФИЦИЕНТЫ УРАВНЕНИЯ
? –4.9,10,2
КОРНИ УРАВНЕНИЯ
-,1835 2,22432
Физический смысл имеет только второй (положительный) корень — искомое время в секундах.
Частный случай разветвления — обход (см. рис. 8.6) имеет следующий программный эквивалент:
1 IF условие
GO TO 3 ,
2 Операторы действия
3 Операторы общей
части программы
При программировании обхода нужно следить за тем, чтобы обход осуществлялся по стрелке да во избежание .лишних операторов GO TO.
В качестве примера составим программу для нахождения максимального из двух чисел х и у, используя структуру обход. По сравнению со схемой (см. рис. 8.10) программа 9.5 дополнена операторами ввода данных и вывода результата.
Программа 9.5
10 PRINT
"ВВЕДИТЕ ДВА ЧИСЛА"
20 INPUT X,
Y
30 U=X
40 IF U>=Y
GO TO 60
50 U=Y
60 PRINT “БОЛЬШЕЕ
ЧИСЛО”; U
70 STOP
(>= употребляется вместо ³ ).
При вводе данные, как правило, подвергаются различным видам контроля. В частности, если исходные данные не принадлежат диапазону, для которого программа обеспечивает правильную обработку, программа не должна выполняться. Организация контроля вводимых данных для этого случая демонстрируется в следующем примере.
Пример . Программа — льстец.
На экране должен появляться вопрос: “Кто ты: мальчик или девочка? Введи М или D”, и в зависимости от ответа на экране должен появляться текст “Мне нравятся девочки” (если было введено D) или “Мне нравятся мальчики” (если было введено М).
Исходные данные (М или D) будем вводить в символьную переменную, например S$. Текст, подлежащий выводу (в зависимости от ответа), присвоим другой символьной
переменной, например Т$, и затем эту переменную выведем на печать (см. программу 9.6).
Схема алгоритма для этого примера приведена на рис. 9.3.
Рис. 9.3.
Программа 9.6
10 PRINT
"КТО ТЫ: МАЛЬЧИК ИЛИ ДЕВ0ЧКА ? ";
20 PRINT "ВВЕДИ
М ИЛИ D"
30 INPUT S$
40 IF S$=”M”
GO ТО 70
50 Т$=”МНЕ
НРАВЯТСЯ ДЕВОЧКИ"
60 GO TO 80
70 Т$=''МНЕ
НРАВЯТСЯ МАЛЬЧИКИ"
80 PRINT Т$
90 SТОР
Рис. 9.4.
Недостатком этой программы является то, что она не защищена от неправильного ввода. Действительно, если вводится любой другой символ (или символы), кроме М, на экране появится текст “Мне нравятся девочки”. Например, недостаточно внимательный мальчик может ввести что-нибудь вроде: “Я — мальчик”, и ответ машины будет неверным. Для защиты программы от неправильного ввода необходимо, если условие S$= "М" не выполняется, проверять также условие S$== "D”, и если оно также не выполняется, то нужно вернуться к оператору ввода. Этот прием иллюстрируется следующей схемой (рис. 9.4) и программой 9.7.
Программа 9.7
10 PRINT
”КТО ТЫ: МАЛЬЧИК ИЛИ ДЕВОЧКА ? ";
20 PRINT "ВВЕДИ
М ИЛИ D"
30 INPUT S$
40 IF S$=”M”
GO TO 90
50 IF S$=”D”
GO TO 70
60 GO TO 20
70 Т$=''МНЕ
НРАВЯТСЯ ДЕВОЧКИ"
80 GO TO 100
90 T$="МНЕ
НРАВЯТСЯ МАЛЬЧИКИ"
100 PRINT T$
110 STOP
Замечание . В приведенной программе (а также на схеме) допущено отступление от структурного подхода. Строгое соблюдение правил, допускающих использование только типовых структур алгоритма, потребовало бы введения вспомогательной переменной и привело бы к необоснованному усложнению программы и потере ее наглядности.