Предложение - палиндром

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

А роза упала на лапу Азора

Кит на море не романтик

На рис. 6.3 изображен результат выполнения сценария, анализа текста.

Рис. 6.3. Строки - палиндромы

Будем анализировать текст с обоих концов, пропускать пробелы. Если оба анализируемых символа не являются пробелами, то сравним эти символы. Если они различны, то анализ текста можно завершить, фраза не является палиндромом. Если же очередные символы одинаковы, то анализ следует продолжить. Заметим, что значение p1 в программе может только увеличиваться, значение p2 только уменьшаться. Процесс проверки следует прекратить в случае, когда значение p1 станет больше или равно значению p2. Это означает, что просмотрена вся строка, и символы на соответствующих местах одинаковы. HTML-код, содержащий сценарий проверки, хранится в листинге 6.4.

Листинг 6.4. Строка-палиндром

<html>
<head>
<title>Проверка, является ли строка палиндромом</title>
<script language="JavaScript">
<!-- //
function pal(obj)
{ var s=obj.data.value
var n=s.length-1
var p1=0
var p2 =n
var c1= s.charAt(0)
var c2= s.charAt(n)
var p = true
var s1=""
while ((p1 < p2) && (p==true))
{if (c1==" ") {p1+=1; c1= s.charAt(p1)}
else
if (c2==" ") {p2 -=1; c2= s.charAt(p2)}
else
if (c1 == c2)
{p1+=1; c1= s.charAt(p1); p2 -=1; c2= s.charAt(p2) }
else {p = false}
}
if (!p) s1 ="не является палиндромом "
else s1 = "является палиндромом"
obj.res.value=s1
}
//-->
</script>
</head>
<body>
<h4>Является ли строка палиндромом? </h4>
<form name="form1">
<pre>
Введите строку: <input type="text" name="data" size="50"><hr>
Результат: <input type="text" name="res" size="30"><hr>
<input type="button" value="Определить" onClick="pal(form1)"><hr>
<input type="reset" value="Отменить">
</pre></form></body></html>

Стандартные функции работы со строками

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

Функция Number (s) преобразует строковый параметр s в число. Эту функцию уже неоднократно использовали в предыдущих сценариях. Функция String(n) преобразует число n в строку.

Автоморфные числа

Напишем сценарий, в результате работы которого определяется, является ли введенное число автоморфным числом. Напомним, что натуральное число называется автоморфным, если оно содержится в качестве младших цифр в своем квадрате. Например, число 25 является автоморфным, так как 252=625.

Опишем функцию avtomorf, которая преобразует введенную строку в число, находит квадрат числа. Далее работа осуществляется со строками. Выделяются последние символы строки, представляющей квадрат числа, и сравниваются со строкой, соответствующей числу. Результатом этого анализа является решение задачи. HTML-код в листинге 6.5.

Листинг 6.5. Автоморфные числа

<html>
<head>
<title>Автоморфные числа</title>
<script language="JavaScript">
<!-- //
function avtomorf (obj)
{ var a=Number(obj.num.value)
var p=a*a
obj.num1.value=p
var sa= String(a)
var sp= String(p)
var nsa= sa.length
var nsp= sp.length
endsp=sp.substr(nsp-nsa,nsa)
if (endsp==sa) obj.res.value="автоморфное"
else obj.res.value="не является автоморфным"
}
//-->
</script>
</head>
<body>
<h4>Проверка, является ли заданное число автоморфным</h4>
<form name="form1">
<pre>
Число: <input type="text" size=25 name="num"><hr>
Число в квадрате: <input type="text" size=25 name="num1"><hr>
Результат: <input type="text" size=25 name="res"><hr>
</pre>
<input type="button" value=Определить onClick="avtomorf(form1)">
<input type="reset" value=Очистить>
</form></body></html>

Автоморфные числа в заданном интервале

Напишем сценарий, определяющий все автоморфные числа в заданном интервале.

Функция interav обеспечивает перебор всех натуральных чисел в заданном диапазоне. Для каждого из чисел диапазона проверяется, является ли оно автоморфным, и если это так, то формируется строка результата. В строку результата заносится само число и его квадрат. Кроме того, информация о каждом числе располагается на отдельной строке. Строка результата помещается в текстовое поле. Если в качестве интервала взять интервал [20;9999], то результат работы сценария изображен на рис. 6.4.

Рис. 6.4. Автоморфные числа в заданном диапазоне

Сценарий, реализующий поиск автоморфных чисел в заданном интервале, и HTML-документ представлен в листинге 6.6.

Листинг 6.6. Автоморфные числа в заданном интервале

<html>
<head>
<title>Автоморфные числа в заданном интервале</title>
<script language="JavaScript">
<!-- //
function interav (obj)
{ var s=""
var l=obj.left.value
var r=obj.rig.value
var s="Автоморфные числа в интервале от "+l+" до " +r+"\r\n"
for (var i=l; i<=r; i++)
if (avtomorf (i))
s +=i+" "+i*i+"\r\n"
obj.result.value=s
}
function avtomorf (a)
{ var p=a*a
var sa= String(a)
var sp= String(p)
var nsa= sa.length
var nsp= sp.length
endsp=sp.substr(nsp-nsa,nsa)
return (endsp==sa)
}
//-->
</script>
</head>
<body>
<h4>Автоморфные числа в заданном интервале</h4>
<form name="form1">
pre>
Левое значение интервала: <input type="text" size=10 name="left">
Правое значение интервала: <input type="text" size=10 name="rig"><hr>
<input type="button" value=Найти onClick=" interav(form1)">
<textarea cols=45 rows=5 name=result></textarea>
<input type="reset" value=Очистить>
</pre>
</form></body></html>


Числа Армстронга в заданном интервале

Напишем сценарий, определяющий все числа Армстронга, расположенные в задан-ном интервале. Натуральное число называется числом Армстронга, если оно совпадает с суммой к- ых степеней составляющих его цифр, где к- количество цифр в чис-ле. Например, таким число является число 153, так как 153=13+53+33.

Функция arm получает в качестве параметра строку, для которой требуется определить, представляет ли строка число Армстронга. Переменная ls определяет длину строки или число цифр в числе. Далее в строке отщепляется по одному символу, символ преобразуется в число, определяется число в заданной степени, и полученное значение добавляется к формируемой сумме. После того, как все символы строки просмотрены, проверяется условие для числа Армстронга. Функция arm выдает значение true, если число является числом Армстронга. В листинге 6.7 приведено описание функции, определяющей является ли целое число числом Армстронга.

Листинг 6.7. Функция определения числа Армстронга

function arm (s)
{ var h; var k; var r
var ls= s.length
sum=0
for (var i=0; i<=ls-1; i++)
{ h=s.charAt(i)
k= Number (h)
r=Math.pow(k,ls)
sum +=r
}
return (s== String(sum))
}

Перебор осуществляется функцией interav. Просматриваются все числа из заданного диапазона, и для каждого из них проверяется, является ли число числом Армстронга. Так как параметр функции arm строка, то и при обращении к ней в функции interav числовой параметр i преобразуется в строку. Результат работы помещается в текстовое поле. Каждое число располагается в отдельной строке. Описанные сценарии приведены в листинге 6.8.

Листинг 6.8. Числа Армстронга в заданном интервале

<html>
<head>
<title>Числа Армстронга в заданном интервале</title>
<script language= "JavaScript">
<!-- //
function interav (obj)
{ var s=""
var l=obj.left.value
var r=obj.rig.value
var s="Числа Армстронга в интервале от "+l+" до " +r+"\r\n"
for (var i=l; i<=r; i++)
if (arm (String(i)))
s +=i+"\r\n"
obj.result.value=s
}
function arm (s)
{ var h; var k; var r
var ls= s.length
sum=0
for (var i=0; i<=ls-1; i++)
{ h=s.charAt(i); k= Number (h); r=Math.pow(k,ls); sum +=r }
return (s== String(sum))
}
//-->
</script>
</head>
<body bgcolor="#FFFFCC">
<h4>Числа Армстронга в заданном интервале</h4>
<form name="form1">
<pre>
Левое значение интервала: <input type="text" size=10 name="left">
Правое значение интервала: <input type="text" size=10 name="rig"><hr>
<input type="button" value=Найти onClick=" interav(form1)">
<textarea cols=45 rows=8 name=result></textarea>
<input type="reset" value=Очистить>
</pre>
</form></body></html>

Если поиск чисел производить в интервале [100;9999]. То результат работы сценария будет изображен на рис. 6.5.

Рис. 6.5. Числа Армстронга в заданном интервале

Строка и число в различных системах счисления

Функция parseInt(s,n) возвращает целое число по основанию, заданному в качестве второго параметра. Если первый символ в строке не является цифрой в указанной вторым параметром системе счисления, то функция parseInt(s,n) возвращает значение "NaN".

Приведем документ, который содержит функцию тест, демонстрирующую работу функции parseInt(s,n). В результате работы теста исследуется введенная строка, и выводятся числа, соответствующие этой строке в различных системах счисления (листинг 6.9)

Листинг 6.9. Демонстрационные тесты для функции parseInt(s,n)

<html>
<head>
<title>Тест на демонстрацию работы функции parseInt(s,n) </title>
<script language="JavaScript">
<!-- //
function test (obj)
{ var s= obj.numtest.value
var t1= parseInt(s,16); obj.test1.value=t1
var t2= parseInt(s,10); obj.test2.value=t2
var t3= parseInt(s,8); obj.test3.value=t3
var t4= parseInt(s,2); obj.test4.value=t4
var t5= parseInt(s,7); obj.test5.value=t5
}
//-->
</script>
</head>
<body>
<P>Тест на демонстрацию работы функции parseInt(s,n) </P>
<pre>
<form name="form1">
Исходная строка: <input type="text" size=25 name="numtest"><hr>
Число в шестнадцатиричной системе <input type="text" size=25 name="test1"><hr>
Число в десятичной системе <input type="text" size=25 name="test2"><hr>
Число в восьмиричной системе <input type="text" size=25 name="test3"><hr>
Число в двоичной системе <input type="text" size=25 name="test4"><hr>
Число в семиричной системе <input type="text" size=25 name="test5"><hr>
<input type="button" value=Тест onClick="test(form1)"><hr>
<input type="reset" value=Очистить>
</pre>
</form></body></html>

Строка и вещественное число

Функция parseFloat(s) анализирует значение строкового параметра s и определяет, соответствует ли строка s представлению вещественного числа. Если в строке содержится символ, отличный от символов, разрешенный при формировании вещественного литерала, то оставшаяся часть строки игнорируется, в качестве результата функции возвращается числовое значение, которое обнаружено до неправильного символа. Если первый символ в строке не является цифрой, то функция parseFloat(s) возвращает значение "NaN".

Функция isNaN(s) проверяет, является ли параметр s числом. Если параметр s не является числом, то функция возвращает значение true, в противном случае - значение false.


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



double arrow
Сейчас читают про: