Главная :: Рассылки :: Скрипты "Решение квадратного уравнения" и "Kонвертер температуры"
Ночь. Сидит программист за компом, дописывает последние строчки новой программы. Но тут неожиданно звонок в дверь. Программист за дверь - а там смерть с косой, но маленькая. - Блин не вовремя ты дай допишу программу, а там и забирай меня... - Не переживай мужик, я не за тобой. Я за твоим винтом!

Скрипты "Решение квадратного уравнения" и "Kонвертер температуры"

Уважаемые подписчики!

Представляю Вашему вниманию двадцать седьмой выпуск информационной рассылки сайта "Свободное и бесплатное ПО". В этом выпуске мы продолжим серию уроков, посвященных JavaScript.

Новости наших проектов. Мы начали объединение с сайтом Свободное и бесплатное ПО. Целью объединения является полная переработка материалов сайта Веб дизайн в примерах на современном и профессиональном уровне и добавление новых материалов. Если у вас есть вопросы, задавайте их на нашем форуме.

Новости ПО. Тестировать работу веб-страниц и скриптов на корректность работы необходимо в различных браузерах. Вы можете бесплатно загрузить новые версии браузеров: Mozilla Firefox (версии 3.0.7 и 3.1 beta-3) и Opera (версия 9.64).

В текущем выпуске мы разберем два скрипта: решение квадратного уравнения и конвертер температуры. Наша цель - ознакомиться с обработкой данных формы и базовая работа со строками.

Решение квадратного уравнения

Напишем сценарий JavaScript для решения квадратного уравнения.

Для начала подготовим форму.

<div align="center">
<b>Решение квадратного уравнения a&middot;x&sup2; + b&middot;x + c = 0.</b>
<form name="square" action="javascript:square_equation()">
a <input name="square_a" type="text" value="1" size="4">
b <input name="square_b" type="text" value="2" size="4">
c <input name="square_c" type="text" value="1" size="4">
<input type="submit" value="посчитать">
</form>
Решение: <span id="square_sol">Введите коэффициенты и нажмите "посчитать"</span>
</div>

Мы задаем имя формы name="square" и обработчик формы (сценарий JavaScript) action="javascript:square_equation()". Далее идут три поля вода текста input...type="text" и кнопка, запускающая обработчик формы input type="submit". Результат будет записываться в контейнер span, идущий сразу же за формой. Обратите внимание на то, что для элементов формы мы задаем имя (и в скрипте будем обращаться к ним через их имена), а контейнер вне формы задан через ID (и обращаться к нему будем через getElementById).

Описание скрипта

<script language="javascript">
<!--
function square_equation() {
  var a = document.square.square_a.value;
  var b = document.square.square_b.value;
  var c = document.square.square_c.value;
  var sol = document.getElementById("square_sol");

  var d = b * b - 4 * a * c;
  if ( d < 0 ) {
    string = "пара комплексно-сопряженных корней<br>x<sub>1</sub> = (";
    string += - b / ( 2 * a );
    string += ", ";
    string += Math.sqrt( -d ) / ( 2 * a );
    string += "), x<sub>2</sub> = (";
    string += - b / ( 2 * a);
    string += ", ";
    string += - Math.sqrt( -d ) / ( 2 * a );
    string += ").";
  } else {
      if ( d == 0 ) {
        string = "два одинаковых вещественных корня:<br>x<sub>1</sub> = x<sub>2</sub> = ";
        string += -b / ( 2 * a );
        string += ".";
      } else {
        string = "два различных вещественных корня:<br>x<sub>1</sub> = ";
        string += -b / ( 2 * a ) - Math.sqrt( d ) / ( 2 * a );
        string += ", x<sub>2</sub> = ";
        string += -b / ( 2 * a ) + Math.sqrt( d ) / ( 2 * a );
        string += ".";
      }
  }
  sol.innerHTML = string;
}
-->
</script>

Получение значения из полей ввода текста формы осуществляется конструкцией вида:

  var переменная = document.имя_формы.имя_поля.value;
в примере:
  var a = document.square.square_a.value;

Связывание элемента, заданного через ID:

  var переменная = document.getElementById("ID_элемента");
в примере:
  var sol = document.getElementById("square_sol");

А доступ к изменению содержимого:

  переменная.innerHTML = значение;
в примере:
  sol.innerHTML = string;

Отметим структуру использованной конструкции для вложенного условного оператора (серыми линиями отмечены структурные блоки):

if (условие1) {
| операторы1
} else {
  |  if (условие2) {
  |  |  операторы2
  |  } else {
  |    |  операторы3
  |    }
  }

Kонвертер температуры

Данный сценарий позволяет переводить температуру из одной системы измерений в другую с заданной точностью. Обрабатывается три типа температур: градусы Цельсия, градусы Кельвина и градусы Фаренгейта.

Описание скрипта

Наша цель - написать скрипт для перевода температуры из одной системы измерений в другую. Скрипт будет конвертировать между тремя основными системами измерения температуры: градусы Цельсия, градусы Кельвина и градусы Фаренгейта. Все расчеты мы будем проводить с заданной нами точностью. Описываем поля формы input (по умолчанию это текстовые поля) c именами precision, celsius, kelvin, fahrengeit. Для поля precision (точность расчета) зададим начальное значение 8 (число значащих цифр). Выравнивание полей формы достигается с помощью элемента pre (конечно, можно использовать и другие методы, например, поместить поля формы в ячейки таблицы).

При вводе значений все поля формы обновляются автоматически, т.к. обработка осуществляется через событие onKeyUp (нажатие клавиши клавиатуры). При возникновении этого события вызывается функция UpdateF с параметром. Этот параметр определяет какие действия следует предпринять для обработки полей формы.

В функции UpdateF определяется значение для точности p и определяются переменные для доступа к полям формы, отвечающим за температуру (переменные c, k, f). Действие определяется значением переданного в функцию параметра n. Для n=0 происходит перезапись данных для заданной точности с помощью метода toPrecision. Значения n от 1 до 3 определяют текущий тип температуры и расчет производится для двух остальных типов.

Код скрипта

Скрипт обрабатывает следующую форму:

<form name="converter">
<pre>
 Число значащих цифр:  <input name="precision" value="8" maxlength="12" onKeyUp="UpdateF(0)">
 Цельсии:              <input name="celsius" maxlength="12" onKeyUp="UpdateF(1)">
 Кельвин:              <input name="kelvin" maxlength="12" onKeyUp="UpdateF(2)">
 Фаренгейт:            <input name="fahrengeit" maxlength="12" onKeyUp="UpdateF(3)">
</pre>
</form>

И сам скрипт:

<script language="javascript">
<!--
function UpdateF(n)
{
var p = eval(window.document.converter.precision.value);
var c = window.document.converter.celsius;
var k = window.document.converter.kelvin;
var f = window.document.converter.fahrengeit;

if ( n == 0) {
	if (c.value) c.value = eval(c.value).toPrecision(p);
	if (k.value) k.value = eval(k.value).toPrecision(p);
	if (f.value) f.value = eval(f.value).toPrecision(p);
};
if ( n == 1 ) {
	k.value = (eval(c.value) + 273.15).toPrecision(p);
	f.value = (1.8 * eval(c.value) + 32).toPrecision(p);

};
if ( n == 2 ) {
	c.value = (eval(k.value) - 273.15).toPrecision(p);
	f.value = (1.8 * (eval(k.value)) - 459.67).toPrecision(p);

};
if ( n == 3 ) {
	c.value = ( (eval(f.value) - 32) / 1.8 ).toPrecision(p);
	k.value = ( (eval(f.value) + 459.67) / 1.8).toPrecision(p);

};
}
-->
<script>

До новых встречь! Оставайтесь с нами.