Действие. Рис. 12. Схемы алгоритмической структуры "Условный оператор".
Действие2 Действие1
Рис. 12. Схемы алгоритмической структуры "Условный оператор".
С помощью условного оператора можно разветвить про- грамму. Простую конструкцию IF-THEN следует читать так: если условие выполняется (логическое выражение принимает значение "Истина"), то действие, заданное оператором или множеством опе- раторов, выполняется. В противном случае (логическое выражение принимает значение "Ложь") действие не выполняется. В програм- ме, если условие не выполняется, управление передается следующей строке. Конструкция IF-THEN-ELSE дает возможность выбирать одно из двух действий. <условие>в программе представляет собой логическое вы- ражение, состоящее из двух операндов, соединенных между собой одной из операций отношения: < - меньше, > - больше, <= (или =<) – меньше или равно, >= (или =>) – больше или равно, = - равно, <> (или ><) – не равно. При расчетах углов треугольника по теореме косинусов требуется вычислять функцию арккосинус. В Бейсике нет стандартной математической функции арккосинус. В этом случае можно воспользоваться выражением функции арккосинус через арктангенс. Прежде чем, запрограммировать в процедуре обработки события расчет углов треугольника, поместим перед описанием этой процедуры функцию: Function acos(x) pi = 3.1415926 aa= Atn(Sqr(1 - x * x) / x) if aa<=0 then aa=aa+pi if x=-1 then aa=pi acos =aa End Function Эту функцию будем теперь использовать в процедуре обработки события. Самое первое действие в процедуре обработки события должно быть очистка формы от предшествующих надписей. Это делается оператором cls. Затем необходимо прочитать введенные в поля значения координат. Для координат первой вершины это можно сделать с помощью конструкций: x1 = Val(Text1.Text): y1 = Val(Text2.Text). Двоеточие между двумя конструкциями выполняет роль разделителя между операторами, когда они помещены в одну строку. Для координат остальных вершин x 2, y2, x3, y3 необходимо поступать аналогичным образом. После ввода координат необходимо выполнить вычисление квадратов сторон и самих сторон. Это можно сделать с помощью конструкций: ab2 = (x2 - x1) ^ 2 + (y2 - y1) ^ 2: ab = Sqr(ab2). Здесь знаком ^2 обозначена операция возведения в квадрат, Sqr – вычисляет квадратный корень. Для остальных длин сторон и их квадратов необходимо поступать аналогично. Затем введя постоянную величину pi=3.1415926, следует вычислить величину угла в граудусах с долями: c = (180 / pi) * acos((bc2 + ac2 - ab2) / (2 * bc * ac)). Здесь acos означает обращение к функции, описанной в программе, множитель 180/pi необходим для перевода из радиан в градусы. Для вычисления остальных углов следует поступать аналогично. Из величин углов в градусах и долях необходимо выделить градусы, минуты и секунды с долями. Для этого следует воспользоваться конструкциями: cg = Int(c): cm = Int((c - cg) * 60): csec = (c - (cg + cm / 60)) * 3600,где c – величина угла в градусах с долями, cg – градусы угла, cm – минуты угла, csec – секунды угла, Int – функция взятия целой части числа (отбрасывание дробной части). Для остальных углов следует поступать аналогично. После последних вычислений необходимо выдать результат на форму. Это можно сделать с помощью оператора: Print "c="; cg; "grad"; cm; "min"; csec; "sec". Для вывода остальных значений углов следует поступать аналогично. Таким образом, вся процедура будет иметь вид: Private Sub Command1_Click() Cls x1 = Val(Text1.Text): y1 = Val(Text2.Text) x2 = Val(Text3.Text): y2 = Val(Text4.Text) x3 = Val(Text5.Text): y3 = Val(Text6.Text) ab2 = (x2 - x1) ^ 2 + (y2 - y1) ^ 2: ab = Sqr(ab2) bc2 = (x3 - x2) ^ 2 + (y3 - y2) ^ 2: bc = Sqr(bc2) ac2 = (x3 - x1) ^ 2 + (y3 - y1) ^ 2: ac = Sqr(ac2)
* 3600
* 3600 pi = 3.1415926 c = (180/pi) * acos((bc2 + ac2 - ab2) / (2 * bc * ac)) a = (180/pi) * acos((ab2 + ac2 - bc2) / (2 * ab * ac)) b = (180/pi) * acos((ab2 + bc2 - ac2) / (2 * ab * bc)) cg = Int(c): cm = Int((c - cg) * 60): csec = (c - (cg + cm / 60)) ag = Int(a): am = Int((a - ag) * 60): asec = (a - (ag + am / 60)) bg = Int(b): bm = Int((b - bg) * 60): bsec = (b - (bg + bm / 60)) * 3600 Print "c="; cg; "grad"; cm; "min"; csec; "sec" Print "a="; ag; "grad"; am; "min"; asec; "sec" Print "b="; bg; "grad"; bm; "min"; bsec; "sec"
|