Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Теоретична частина. 7.1. Вбудований об'єкта String.



7.1. Вбудований об'єкта String.

Багато мов програмування дозволяють обробляти рядкові дані. Алфавіт — це кінцева множина символів. Рядок — кінцева послідовність символів деякого алфавіту, якщо розглядаємо алфавіт А, складається з двох символів (0, 1), то рядками в алфавіті А є: 1001, 1, 01, 10, 1111 і т. д. Порожній рядок — це рядок, що не містить жоден символ. В рядку важливий порядок символів, так, рядки 01 і 10 різні. Довжина рядка рівна числу символів в рядку. Довжина порожнього рядка рівна нулю, довжина рядка 11 рівна двом, довжина рядка 1001 — чотирьом. Якщо Х і Y — рядки, то їхнім зчепленням або конкатенацією називається рядок XY, отриманий приписуванням символів рядка Y за символами рядка Х. В попередніх лабораторних роботах неодноразово використовувалися рядкові літерали, наприклад, при виведенні деякої інформації в документ Document.write ("Площа рівна", s). Рядкові літерали або рядкові перемінни є в мові JavaScript об'єктом типу string, до якого можуть бути застосовані методи, визначені в мові. Створення нового об'єкта вимагає виклику функції-конструктора об'єкта. Для того, щоб створити рядковий об'єкт, треба застосувати конструктор newString, наприклад:

s=newString("результат=")

Об'єкт string має єдину властивість length (длина строки). Вираз s.length видає значення, рівне довжині рядка, що міститься в рядковому об'єкті s.

Для зміни регістра рядкових перемінних на мові JavaScript є вбудовані методи, такі як s.toLowerCase() і s.toUpperCase(), де s-це ім'я перемінной. Команда s.toLowerCase() перетворить рядок s в символи нижнього регістра (рядкові букви). Команда s.toUpperCase() перетворить рядок s в символи верхнього регістра (прописні букви).

Для повернення одного символа з рядкової перемінной на мові JavaScript так само існує вбудований метод, такий як s.charAt(i), де i- індекс символа. Команда s.charAt(i) повертає символ s рядка s з номером i. Необхідно врахувати, що нумерація починається не з 1, а з 0.

Ще одне призначення підрядкових перемінних - це відшукання рядкових перемінних по тексту, що міститься, в них. Для цього використовуються два методи indexOf() і lastIndexOf(). Наприклад, s.indexOf("Маша"), s.lastIndexOf("Маша"), де s-это ім'я перемінной, а "Маша " - шукани підрядок. Команда s.indexOf("Маша") повертає початок першого входження підрдка "Маша" в рядку s. Команда s.indexOf("Маша",7) робить те ж саме, але починаючи з позиції 7. Команда s.lastIndexOf("Маша") здійснює пошук підрядка з кінця рядка. Команда s.lastIndexOf("Маша",7) проводить аналогічний пошук, але починаючи з позиції 7.

Метод substring(n1,n2) повертає частину значення рядкового об'єкта, визначеного двома індексами, указаними в дужках.

Так само існують і інші методи для роботи з рядковими перемінними:

1. s.big() - команда аналогічна використанню тега BIG (крупний шрифт)

2. s.blink() - команда аналогічна використанню тега BLINK (мигання в Netscape)

3. s.bold() - команда аналогічна використанню тега BOLD (напівжирний шрифт)

4. s.fontcolor() - команда змінює колір рядка тексту. Відповідає тэгу FONT з атрибутами кольору

5. s.fontsize() - команда змінює розмір шрифту. Відповідає тэгу FONT з атрибутами розміру шрифту

6. s.italics() - команда аналогічна використанню тега I (курсив)

7. s.link() - команда створення посилання на іншу Web-страницу. Вимагає як аргумент URL для HREF

7.2. Виведення символів рядка в "стовпчик"

Напишемо сценарій, при виконанні якого заданий текст виводиться в "стовпчик", тобто на кожному рядку розміщується по одному символу.

При рішенні задачі із заданого рядка послідовно вибираються символи. Формується новий рядок, в якому за кожним символом ставиться послідовність символів, що забезпечує перехід на новий рядок. Коли рядок результату сформований, то вона розміщується в текстовому полі форми, тим самим для початкового рядка здійснюється виведення в "стовпчик".

Приклад 7.1.

<HTML>

<HEAD>

<TITLE>Вывод символов строки в "столбик"</TITLE>

<script language="JavaScript">

function ttest(s) {

var sres="Прочитанный текст:"+" \r\n"+s+"\r\n"+

'Текст в "столбик":'+"\r\n"

var cur=""

for (var i=0; i<=s.length-1; i+=1)

{с=s.charAt(i); cur +=с+"\r\n" }

sres+=cur

return sres

}

</script>

</HEAD>

<BODY bgcolor="#FFFFCC">

<h4>Символы текущей строки в столбик</h4>

<FORM name="form1">

Введите строку: <input type="text" size=20 name="st1"><hr>

<input type="button" value=Выполнить

onClick="form1.res.value=ttest(form1.st1.value)">

<input type="reset" value=Очистить><hr>

<textarea cols=20 rows=9 name="res"></textarea>

</FORM>

</BODY>

</HTML>

Рядок є універсальним способом уявлення інформації. Часто користувач вводить інформацію у вигляді рядка, а програма повинна уміти розпізнавати, якого роду дані були введені. В наступній задачі рядок, що вводиться, представляє собою послідовність оцінок, і потрібний цей рядок проаналізувати і витягати з неї потрібні дані.

7.3. Зведення за наслідками проведення іспиту

Напишемо програму, яка по послідовності оцінок, отриманих на іспиті, формує зведення. В зведенні містяться відомості про число студентів, що здали іспит на "відмінно", "добре", "задовільно" і "незадовільно". Крім того, підраховується середній бал, на який зданий іспит. Для обчислення середнього бала підсумовуються всі оцінки, отримані на іспиті, і розрахована сума ділиться на число студентів.

У функцію syod поступає рядок. За допомогою циклу є видимим символи рядка, вибираються ті, які відповідають оцінці, інші ігноруються. У функції використовується чотири перемінні t2, t3, t4, ts для зберігання числа оцінок. В тілі циклу всі оцінки підсумовуються для того, щоб потім отримати середній бал по предмету. Після аналізу всього рядка у відповідних полях форми виводиться необхідна інформація так, як зображено на рисунку.

Приклад 7.2.

<HTML>

<HEAD>

<TITLE>Работа со строками. Сводка по экзамену</TITLE>

<script language="JavaScript">

function svod(obj) {

var t2=0; var t3=0; var t4=0; var t5=0

var s=0; var n =0; var i; var r

var st=obj.data.value

for (i=0; i<st.length; i++)

{r = st.charAt(i);

if (r>="2" && r<="5")

{n=n+1

s=s+Number(r)

switch (r)

{case "2": {t2++; break};

case "3": {t3++; break};

case "4": {t4++; break};

case "5": {t5++; break};

}

}

}

obj.res2.value=t2; obj.res3.value=t3

obj.res4.value=t4; obj.res5.value=t5

obj.num.value=n; obj.sr.value=s/n

}

</script>

</HEAD>

<BODY bgcolor="#FFFFCC">

<h4 align=center>Формирование сводки по экзамену</h4>

<FORM name="form1"><CENTER>

Введите последовательно все оценки, полученные на экзамене

<input type="text" name="data" size="30"> <br>

После ввода всех оценок нажмите на кнопку

<input type="button" value="Сводка" onClick="svod(form1)"><hr>

<table border=3><caption>Сводка по экзамену</caption>

<tr><th bgcolor=silver>оценка

<th bgcolor=silver>число сдавших на оценку

<tr><td>отлично

<td align=center><input type="text" name="res5"

size="5">

<tr><td>xopomo

<td align=center><input type="text" name="res4"

size="5">

<tr><td>удовлетвopительно

<td align=center><input type="text"

name="res3" size="5">

<tr><td>нeyдовлетвopительно

<td align=center><input type="text" name="res2"

size="5">

<tr><th colspan=2 bgcolor=silver align=center>

Дополнительные сведения

<tr><td>количecтво сдавших

<td align=center><input type="text" name="num"

size="10">

<tr><td>cpeдний бал

<td align=center><input type="text" name="sr" size="10">

</TABLE>

<input type="reset" value="Отменить">

</FORM>

</BODY>

</HTML>

7.4. Перевірка ідентифікатора

Напишемо програму, визначальну, чи є послідовність введених символів ідентифікатором. Під ідентифікатором будемо розуміти послідовність букв латинського алфавіту (як прописних, так і рядкових) і цифр. Послідовність символів, що є ідентифікатором, повинна починатися з букви.

При рішенні задачі перевіримо перший символ введеного рядка. Якщо символ не є буквою, то задача вирішена: введена послідовність символів не є ідентифікатором. Якщо ж перший символ — буква, то аналіз рядка потрібно продовжити. По черзі є видимим всі символи послідовності. Якщо який-небудь елемент не є буквою або цифрою, то аналіз рядка потрібно припинити, а роботу циклу перервати. Якщо переглянули всі символи рядка, і кожний з них задовольняє нашій умові, то введений рядок представляє собою ідентифікатор.

Приклад 7.3.

<HTML>

<HEAD>

<TITLE>Последовательность символов - идентификатор</TITLE>

<script language="JavaScript">

function idt(obj) {

var s=obj.data.value

var res=1

var ch=s.charAt(0)

if (!(ch>='а' && ch<='z' ¦¦ ch>='А' && ch<='Z'))

res=0;

if (res!=0)

{for (var i=1; i<=s.length-1; i++)

{ch=s.charAt(i)

if (!(ch>='а' && ch<='z' ¦¦ ch>='А' && ch<='Z' ¦¦

ch>='0' && ch<='9'))

{res=0; break}

}

}

if (res==1) obj.result.value="идентификатор"

else obj.result.value="He является идентификатором"

}

</script>

</HEAD>

<BODY>

<h4>Является ли последовательность символов идентификатором?</h4>

<FORM name="form1">

<input type="text" name="data" size="8">

<input type="button" value="Опpeделить" onClick="idt(form1)">

<input type="text" name="result" size="28"><hr>

<input type="reset" value="Отменить">

</FORM>

</BODY>

</HTML>

7.5. Обчислення кількості повторень символа в рядку

Необхідно написати програму, яка визначає, скільки разів деякий символ зустрічається в заданому тексті.

Досліджуваний текст визначається у формі, за допомогою тега <textarea>. Алгоритм розв'язання простий. Є видимим рядок зліва направо, і кожний символ рядка порівнюється із заданим символом. Після перегляду всього тексту буде визначено число символів в тексті, співпадаючих з даним.

Приклад 7.4.

<HTML>

<HEAD>

<TITLE>Количество заданих символов в тексте</TITLE>

<script language="JavaScript">

function numsym(obj) {

var h=obj.data.value

var s=obj.textin.value

var res=0

for (var i=0; i<=s.length-1; i++)

{ch=s.charAt(i)

if (ch==h)

{res+=1}

}

obj.result.value=res

}

</script>

</HEAD>

<BODY>

Количество заданих символов в тексте

<FORM name="form1">

Введите текст:<br>

<textarea name="textin" rows=4 cols=20></textarea><hr>

Введите символ: <input type="text" name="data" size="8"><hr>

<input type="button" value="Определитъ"

onClick="numsym(form1)"><hr>

Количество символов в тексте:

<input type="text" name="result" size=8><hr>

<input type="reset" value="Отменить">

</FORM>

</BODY>

</HTML>

Одним з часто використовуваних є метод виділення з рядка необхідною підрядка. Метод substring(n1,n2) повертає підрядок, заданий індексами min(n1,n2) і max(n1,n2)-1. Якщо n1=n2, то результатом буде порожній рядок. Якщо рядок s="Решение", то значенням s.substring(0,1) буде перший символ рядка "Р". Результатом виконання s.substring(0,7) буде весь рядок.

7.6. Виведення префіксів рядка

Напишемо програму, яка виводить всі префікси заданого рядка.

Рядок х називається префіксом рядка s, якщо рядок s представим як XY. В прикладі 7.5 показано, як може бути організовано виведення префіксів введеного рядка.

При рішенні задачі будемо використовувати метод substring, "нарощуючи" на кожному кроці ітерації рядок, що є префіксом заданій.

Приклад 7.5.

<HTML>

<HEAD>

<TITLE>Вывод всех префиксов строки</TITLE>

<script language="JavaScript">

function pref(obj) {

var s=obj.data.value

var res=""

for (var i=1; i<=s.length; i++)

{res+=s.substr(0,i)+"\r\n" }

obj.textpref.value=res

}

</script>

</HEAD>

<BODY bgcolor="#FFFFCC">

<h4>Вывод всех префиксов заданого слова</h4>

<FORM name="form1">

Введите слово: <input type="text" name="data" size="15"><hr>

<input type="button" value="Определить" onClick="pref(form1)"><hr>

<textarea name="textpref" rows=15 cols=15></textarea><hr>

<input type="reset" value="Отменить">

</FORM>

</BODY>

</HTML>

7.7. Виведення суфіксів рядка

Необхідно написати програму, яка виводить всі суфікси заданого рядка. Рядок Y називається суфіксом рядка s, якщо рядок s представимим як XY.

При рішенні цієї задачі потрібно спочатку виділити останній символ рядка, потім передостанній і останній і т. д. Функція suf здійснює формування рядка, який потім буде поміщена у відповідне поле форми, в рядку зберігаються суфікси введеного слова:

function suf(obj) {

var s=obj.data.value

var n=s.length

var res =""

for (var i=n-l; i >=0; i--)

{ res +=s.substr (i-,n)+"\r\n" }

obj.textsuf.value = res

}

Метод substr (n1,n2) також дозволяє виділяти з рядка підрядок. Параметр n1 задає позицію першого символа підрядка; параметр n2 визначає кількість символів в підрядку. Наприклад, якщо рядок s="сборник", то в результаті виконання substr (0,4) буде виділена подстрока "сбор".

7.8. Обчислення кількості повторень рядка в тексті

Напишемо програму, яка визначає, скільки разів задане слово зустрічається в певному тексті.

В тексті слова розділяються пропусками. Після того, як чергове слово знайдено, перегляд продовжується з символа, наступного за знайденим словом.

Приклад 7.6.

<HTML>

<HEAD>

<TITLE>Количество заданных слов в тексте</TITLE>

<script language="JavaScript">

function numword(obj) {

var h=obj.data.value

var s=obj.textin.value

s=' '+s+' '

h=' '+h+' '

var m=h.length

var res=0

var i=0

while (i<=s.length-1)

{ch=s.substr(i,m)

if (ch==h) {res+=1; i=i+m-1}

else

i++

}

obj.result.value=res

}

</script>

</HEAD>

<BODY bgcolor="#FFFFCC">

<h4>Количество заданных слов в тексте</h4>

<FORM name="form1">

Введите текст:<br>

<textarea name="textin" rows=4 cols=20></textarea><hr>

Введите слово: <input type="text" name="data" size="8"><hr>

<input type="button" value="Опpeдeлить"

onClick="numword(form1)"><hr>

Количество слов в тексте: <input type="text" name="result"

size=8><hr>

<input type="reset" value="Отменить">

</FORM>

</BODY>

</HTML>

7.9. Дзеркальна перестановка символів

Напишемо функцію, яка формує рядок, що є переверненою по відношенню до заданої. Якщо заданий рядок "сокира", то по ній повинен бути побудована рядок "гомін".

Є видимим початковий рядок s зліва направо, і одночасно формується новий рядок s1, елементи в яку добавляються з початку. Функція rev перевертає початковий рядок.

function rev(s)

{ var n=s.length-1

var h

var s1=''

for (var i=0; i<=n; i++)

{ s1+=s.charAt(n-i) }

return s1

}

7.10. Паліндром

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

а троянда впала на лапу Азора

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

Будемо аналізувати текст з обох кінців, пропускати пропуски. Якщо обидва аналізовані символи не є пропусками, то порівняємо ці символи. Якщо вони різні, то аналіз тексту можна завершити, фраза не є палиндромом. Якщо ж чергові символи однакові, то аналіз потрібно продовжити. Помітимо, що значення р1 в програмі може тільки збільшуватися, значення р2 лише зменшуватися. Процес перевірки потрібно припинити у разі, коли значення р1 стане більше або рівно значенню р2. Це означає, що переглянутий весь рядок, і символи на відповідних місцях однакові.

Приклад 9.7.

<HTML>

<head>

<TITLE>Проверка, является ли строка палиндромом</TITLE>

<script language="JavaScript">

function pal(obj) {

var s=obj.data.value

var n=s.length-1

var р1=0

var р2=n

var с1=s.charAt(0)

var с2=s.charAt(n)

var р=true

var s1=""

while ((р1<р2)&&(р==true))

{if (с1=" ") {р1+=1; с1=s.charAt(р1)}

else

if (с2=" ") {р2-=1; с2=s.charAt(р2)}

else

if (с1==с2)

{р1+=1; с1=s.charAt(р1); р2-=1; с2=s.charAt(р2)}

else {р=false}

}

if (!р) 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="Опpeделить" onClick="pal(form1)"><hr>

<input type="reset" value="Отменить">

</pre>

</FORM>

</BODY>

</HTML>





Дата публикования: 2015-04-10; Прочитано: 334 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.038 с)...