Определение вида треугольника по трем сторонам

Напишем сценарий, который определяет, можно ли построить треугольник с заданными длинами сторон. Если треугольник построить можно, то дополнительно требуется определить его вид: остроугольный, прямоугольный или тупоугольный. Информация о длинах сторон вводится с помощью текстовых полей как показано на рис. 2.1.

Рис. 2.1. Определение вида треугольника

Для того чтобы можно было построить треугольник с длинами сторон a, b, с должно быть выполнено условие, что длина каждой из сторон меньше суммы двух других. В сценарии поступим следующим образом: упорядочим по убыванию длины предполагаемых сторон, а затем проверим неравенство a < b+c, предполагая, что a – наибольшая длина. HTML- код документа приведен в листинге 2.4.

Листинг 2.4. Определение вида треугольника по трем заданным сторонам

<HTML>
<HEAD>
<TITLE>Вид треугольника по трем заданным сторонам</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!-- //
function tr (obj)
{ var a = Number(obj.num1.value);
var b = Number(obj.num2.value);
var c = Number(obj.num3.value);
var l
var r
var t= "треугольник "
if (a < b)
{l=a; a=b; b=l}
if (a < c)
{l=a; a=c; c=l}
// a - наибольшее из a, b, c
if (a < b+c)
{ r = a*a - b*b - c*c
if (r < 0)
t +="остроугольный"
else
if (r == 0)
t +="прямоугольный"
else
t +="тупоугольный"
}
else
t +="построить нельзя"
obj.res.value=t
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<h4>Определение вида треугольника по заданным длинам сторон</h4>
<FORM name="form1">
Длина стороны 1: <INPUT type="text" size=8 name="num1"><BR>
Длина стороны 2: <INPUT type="text" size=8 name="num2"><BR>
Длина стороны 3: <INPUT type="text" size=8 name="num3"><HR>
<INPUT type="button" value=Вычислить onClick="tr(form1)"><HR>
<INPUT type="text" size=28 name="res"><HR>
<INPUT type="reset">
</FORM></BODY></HTML>

Переменная l используется при сортировке трех значений для обмена значениями двух переменных. Строковая переменная m запоминает вид треугольника. Значение переменной m помещается в поле для результата.

Награждение участников конкурса

Каждый участник конкурса представляет семь работ. Каждая из работ оценивается 3, 5, 7, 10 баллами. Участники конкурса награждаются дипломами разной степени в зависимости от результатов оценки работ. Участникам, все работы которых оценены высшей оценкой, награждаются дипломами первой степени. Участники, все работы которых оценены на баллы не менее 7, но хотя бы одна из работ оценена высшим баллом, награждаются дипломом второй степени. Участники, все работы которых оценены на оценку 7, награждаются дипломами третьей степени. Остальным участники дипломами не награждаются.

Создадим анкету участника. В анкете указываются оценки за представленные работы. При обработке анкеты указывается, награждается участник дипломом или нет.

При решении задачи поступим следующим образом. Сначала определим наибольший балл, который был получен участником, затем найден наименьший балл за представленные работы. Дипломом первой степени награждается участник, у которого минимальная из полученных оценок равна 10. Если минимальная оценка равна 7, а максимальная 10, то такому участнику присуждается диплом второй степени. Если значения минимальной и максимальной оценок совпадают и равны 7, то это означает, что все работы участника оценены баллом 7. Такой участник получает диплом третьей степени. HTML- код со сценарием решения задачи представлен в листинге 2.2.

В сценарии переменная t хранит максимальную из оценок, переменна l- минимальную из оценок. Объект Math содержит метод max, который позволяет определить максимальное значение из двух заданных. Метод Math.min определяет минимальное значение из двух заданных. В сценарии, приведенном в листинге 2.5, для вычисления максимального и минимального значения из семи заданных использовались методы объекта Math.

Листинг 2.5. Использование методов объекта Math

function st (obj)
{ var a = Number(obj.num1.value);
var b = Number(obj.num2.value);
var c = Number(obj.num3.value);
var d = Number(obj.num4.value);
var e = Number(obj.num5.value);
var f = Number(obj.num6.value);
var g = Number(obj.num7.value);
var l // минимальная оценка
var t // максимальная оценка
var m = 0
t=Math.max(Math.max(Math.max(a,b),Math.max(c,d)),
Math.max(Math.max(e,f),Math.max(f,g)))
l=Math.min(Math.min(Math.min(a,b),Math.min(c,d)),
Math.min(Math.min(e,f),Math.min(f,g)))
if (l == 10) {m="первой "}
else
if ((t == 10) && (l == 7)) {m="второй "}
else
if ((t == 7)&& (l == 7)) {m="третьей "}
if (m==0)
obj.stip.value="К сожалению, Вам диплом не присужден"
else
obj.stip.value="Вам присужден диплом "+m+" степени"
}

Оператор switch и его свойства

В тех случаях, когда при решении задачи требуется выбрать один вариант действия из нескольких возможных, удобно воспользоваться оператором switch. Синтаксис оператора switch следующий

switch (B)
{ case L1: S1;
case L2: S2;
……………
case Ln: Sn;
default: S
}

где B - выражение, L1, L2,…,Ln - литералы, S1, S2,…,Sn, S - операторы.

Выполнение переключателя происходит так: вычисляется значение выражения B. Если значение B равно L1, то выполняются операторы S1, а затем все остальные операторы либо до первого оператора break, либо до конца оператора switch. Если значение B равно L2, то выполняются операторы S2, а затем все остальные операторы либо до первого оператора break, либо до конца оператора switch и т.д. Если же значение B не равно ни одному из значений L1,L2,…,Ln, то выполняются операторы S. Часть default: S может отсутствовать, тогда переключатель имеет вид

switch (B)
{ case L1: S1;
case L2: S2;
……………
case Ln: Sn;
}

В этом случае если значение выражения B не равно ни одному из значений L1,L2,…,Ln, то оператор switch завершает свою работу, он эквивалентен пустому оператору. На самом деле переключатель удобно записывать в виде

switch (B)
{ case L1: S1; break;
case L2: S2; break;
……………
case Ln: Sn; break;
default: S
}

Оператор break обеспечивает завершение работы переключателя после выполнения очередного варианта.

Путешествуя по сети Интернет, можно сделать много полезных вещей, например, подписаться на электронное издание. Предположим, что с помощью анкеты, размещенной на Web- странице, пользователь хочет оформить подписку. Стоимость редакционной подписки зависит от срока подписного периода. Если выбирается один месяц, то стоимость 60 рублей, если подписка оформляется на 3 месяца, то стоимость 168 рублей, если 6 месяцев, то 312 рублей, и подписка на 12 месяцев стоит 540 рублей.

Вычисление стоимости подписки

Создадим документ, в котором пользователь вводит срок подписного периода (1,3,6,12) месяцев, и в зависимости от этого определяется стоимость подписки.

Решить эту задачу можно, используя как в предыдущем случае, условный оператор. Однако в данном случае сценарий будет нагляднее и короче, если мы воспользуется оператором switch.

HTML- код документа представлен в листинге 2.6.

Листинг 2.6. Вычисление стоимости подписки

<HTML>
<HEAD>
<TITLE>Стоимость подписки</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function def (obj)
{ var n =Number(obj.num.value)
d= document
var s=""
switch (n)
{ case 1: s=60; break;
case 3: s=168; break;
case 6: s= 312; break;
case 12: s=540; break;
default: s="неверен срок подписного периода"
}
obj.res.value=s
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<h4>Вычисление стоимости подписки</h4>
<FORM name="form1">
Введите срок подписного периода: <INPUT type="text" size=2 name="num">
<br>
<INPUT type="button" value=Определить onClick="def (form1)"><br>
Стоимость подписки: <INPUT type="text" size=32 name="res"><br>
<INPUT type="reset">
</FORM></BODY></HTML>


Определение по номеру дня его названия

Напишем программу, которая по номеру дня определяет его название. Задачу можно решить с использованием условных операторов, в этом случае программа будет ненаглядной. При решении такого рода задач удобно использовать переключатель. Переменной s в зависимости от номера дня недели будет присвоено его название. Приведем HTML- код документа, содержащего требуемый сценарий, в листинге 2.7.

Листинг 2.7. Определение по номеру дня его названия

<HTML>
<HEAD>
<TITLE>Определение по номеру дня его названия</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--//
function numday (obj)
{ var m = Number(obj.num1.value);
d= document
var s
switch (m)
{ case 1: s="понедельник"; break;
case 2: s="вторник"; break;
case 3: s="среда"; break;
case 4: s="четверг"; break;
case 5: s="пятница"; break;
case 6: s="суббота"; break;
case 7: s="воскресенье"; break;
default: s=" ошибка в номере дня"
}
obj.res.value=s
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<p>Определение названия дня по его номеру</p>
<form name="form1">
Введите номер дня: <input type="text" size=7 name="num1"><hr>
Название дня:
<input type="button" value=Определить onClick=" numday(form1)">
<input type="text" size=20 name="res"><hr>
<input type="reset">
</form></BODY></HTML>

Идея единства данных и подпрограмм занимает одно из основных мест в объектно-ориентированном программировании. В языке JavaScript идея процедурных типов данных реализована с помощью функции eval. Функция eval получает в качестве параметра строку. Если строка представляет собой выражение языка JavaScript, то вычисляется ее значение и возвращается как результат функции eval. В предыдущей главе приводился сценарий, в котором пользователь мог задать функцию и точку, в которой требовалось вычислить значение функции.

Функция может быть такова, что ее нельзя описать с помощью лишь одного выражения, например, следующий фрагмент сценария определяет функцию f3:

if (Math.abs(x) <1)
{y=Math.sqrt(1-x*x)}
else
if (x <-1) {y=x+1}
else {y=x-1}

Метод eval может быть использован для выполнения операторов языка JavaScript, включенных в строку параметра. Таким образом, при задании функции можно вводить не только формулу, как мы поступали ранее, но и операторы. Используя метод eval, мы получили возможность задавать в качестве исходных данных функцию, и тем самым решать целый класс однотипных задач.

Повторяющиеся вычисления

Для успешного решения многих задач требуется многократно повторить некоторую последовательность действий, выписанную в программе один раз.

Оператор цикла while

В том случае, когда число повторений последовательности действий нам неизвестно, либо число повторений зависит от некоторых условий, можно воспользоваться оператором цикла вида

while (B) {S}

где B - выражение логического типа, S - операторы, называемые телом цикла. Операторы S в фигурных скобках выполняются до тех пор, пока условие B не станет ложным.

Цикл может прекратить свою работу в результате выполнения оператора break в теле цикла.

Оператор цикла арифметического типа

Если число повторений заранее известно, то можно воспользоваться следующим оператором цикла, который часто называют оператором цикла арифметического типа. Синтаксис этого оператора следующий

for (A; B; I){S}

Выражение A служит для инициализации параметра цикла. Вычисляется один раз в начале выполнения цикла. Выражение B (условие продолжения) управляет работой цикла. Если значение выражения ложно, то выполнение цикла завершается, если истинно, то выполняется оператор S, составляющий тело цикла. Выражение I служит для изменения значения параметра цикла. После выполнения тела цикла S вычисляется значение выражения I, затем опять вычисляется значение выражения B и т.д. Цикл может прекратить свою работу в результате выполнения оператора break в теле цикла.

Анализ свойств объектов. Оператор for...in

Оператор for...in используется для анализа свойств объекта. Синтаксис оператора for (i in t) {s}, где i - переменная цикла, t - объект, S - последовательность операторов. В результате выполнения оператора цикла производится перебор свойств объекта. Переменная цикла при каждом повторении содержит значение свойства объекта. Количество повторений тела цикла S равно числу свойств, определенных для объекта t.

В следующих главах при создании сценариев мы часто будем использовать операторы цикла.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: