- •Федеральное государственное учреждение
- •©Российская таможенная академия, 2008
- •Ростовский филиал
- •© Крицкий с.П.
- •Содержание
- •Введение
- •Основные понятия программирования
- •Классификация языков программирования
- •Характеристика систем программирования на языкахJavaScript/Jscript
- •Типы значений в языкеJavaScript
- •Числовые литералы и значения и их организация в памяти Литералы целых чисел
- •Литералы вещественных чисел (чисел с плавающей точкой)
- •Логические литералы и значения и их организация в памяти
- •Строковые литералы, значения и их организация в памяти
- •Массивы и их организация в памяти. Многомерные массивы, матрицы
- •Записи и их организация в памяти
- •Операции над различными типами данных
- •Арифметические операции
- •Строковые операции
- •Логические операции
- •Операции сравнения
- •Операции выборки
- •Переменные, выражения, условия Переменные
- •Выражения
- •Вызовы функций и методов
- •Порядок вычисления выражения
- •Операции присваивания
- •Автоматическое преобразование типов значений. Функции преобразования и проверки типов
- •Ввод и вывод значений
- •Понятие оператора. Простые и составные операторы. Блок-схемы программ и модулей Операторы и модули
- •Блок-схемы
- •Составные операторы (последовательность, условные). Их синтаксис, блок-схемы и правила выполнения Последовательность операторов
- •Условный операторif … else
- •Операторы цикла (while, do-while и for). Их синтаксис, блок-схемы и правила выполнения. Операторыbreakиcontinue Оператор циклаwhile
- •Операторbreak
- •Операторcontinue
- •Оператор циклаdo…while
- •Оператор циклаfor
- •Функции. Определение и вызов. Выход из функцииreturn. Массив аргументовarguments Определение функции – операторfunction
- •Выход из функции – операторreturn
- •Определение переменной – операторvar
- •Отладка программ. Трассировка, отладочная печать. Тестирование программы
- •Основные понятия объектного подхода
- •ОбъектMath, назначение, свойства, методы. Значения NaN, Infinity, null, undefined.
- •Свойства объектаMath– константы:
- •Методы объекта Math
- •Специальные константы
- •Массивы как объекты в языкеJavaScript. Конструкторы, свойства и методы массивов. Задача копирования массива вJavaScript
- •Конструктор объектов типаArray
- •Свойство объектов типаArray
- •Методы объектов типаArray
- •Типичные задачи с массивами: линейная алгебра
- •Скалярное произведение векторов
- •Произведение матриц
- •Транспонирование квадратной матрицы
- •Типичные задачи с массивами: сортировка. Сортировка вставками. Методsort
- •Сортировка вставками
- •Методsort
- •Типичные задачи с массивами: поиск. Двоичный поиск в упорядоченном массиве
- •Обработка строк. Конструкторы, свойства, методы строк
- •Конструктор объектов типаString
- •Свойство объектов типаString
- •Методы объектов типаString
- •Шаблоны и регулярные выражения. Их использование методами строк.
- •Простые шаблоны
- •Составные шаблоны
- •Пользовательский интерфейс программ. Общее понятие
- •Html-страница как средство интерфейса для программ на языкеJavaScript. Тэги и атрибутыHtml
- •ОбъектыHtml-страниц иWeb-браузера, их свойства и методы. События и их обработка Объектные модели
- •Объекты страницы
- •Объекты браузера
- •СтилиHtml-объектов. Свойства позиционирования объектов страницы
- •Таймеры, примеры использования
- •Понятие ссылочной структуры данных. Односвязный список. Запись списков с помощью литералов.
- •Понятие стека. Функции для стека
- •Двухсвязный список, его структура
- •Понятие очереди и дека, их организация
- •Понятие дерева как ссылочной структуры. Бинарные деревья. Представление дерева литералом
- •Обработка деревьев. Рекурсия
- •Обход дерева «в глубину»
- •Обход дерева «в ширину»
- •Файлы и файловая система
- •Работа с текстовыми файлами
- •Объекты типа TextStream
- •Управление файлами и папками
- •Коллекции дисков, папок и файлов
- •Технология и методология создания программ
- •Жизненный цикл программы
- •Организация процесса разработки
- •Методологии проектирования программ
- •Заключение
- •Приложение 1. Теги, атрибуты и соответствующие свойства Общая структура html-документа
- •Форматирование текста
- •Вставка графики
- •Гиперссылки и карты
- •Приложение 2. События вHtmLи их источники
- •Приложение 3. Атрибуты и свойства стилейCss
- •Приложение 4. Работа с файловой системой вJScript
- •Свойства, методы и коллекции объектов файловой системы
- •Список литературы
- •Словарь терминов
- •If (условие) оператор1 [else оператор2]
- •Основы программирования
Типичные задачи с массивами: поиск. Двоичный поиск в упорядоченном массиве
Поиск в массиве – очень часто возникающая задача. Она состоит в том, что по заданному значению нужно определить, содержится ли в массиве такое значение, и если да, то выдать его индекс. Простейшее решение для числовых массивов даёт следующая функция
function find(X, A) //Поиск Х в массиве А
{for (var i=0; i<A.length; i++)
if (X==A[i])
return i;
return -1
}
Эта функция выдаёт –1, если Х не входит в массив А. Выдавать false, null или undefined нельзя, так как при проверке результата они могут автоматически приводиться к 0 – индексу первого элемента. Среднее время поиска пропорционально длине массива, что очень много. Это заставляет искать более эффективные методы. Один из самых быстрых методов поиска – это двоичный поиск в упорядоченном массиве (т.е. в массиве, предварительно отсортированном и затем поддерживаемом в таком состоянии).
Двоичный поиск в упорядоченном массиве осуществляется посредством последовательного уменьшения области поиска делением её пополам. Отсюда и произошло название метода.
function binaryFind(X,A)
{var a=0; //Левый конец области поиска
var b=m.length-1; //Правый конец области поиска
var с; //Середина области поиска
do
{c=Math.floor((a+b)/2); //Середина
if (A[c] < X) //Х должен быть в правой половине
a=c+1 //Выбираем правую половину
else
b=c-1 //Выбираем левую половину
}
while (A[c]!=X && a<=b);
//Из цикла выйдем, когда найдём Х==A[c], или
//когда область поиска станет пустой (a>b)
if (a>b)
return -1 //Массив не содержит X
else
return c //Индекс Х
}
Время поиска для этого алгоритма всегда меньше двоичного логарифма от длины массива, или десятичного логарифма от длины массива, умноженного на 10/3. Так что поиск в массиве из 1 000 000 элементов потребует не более 20 шагов цикла. Это в 25 000 раз быстрее предыдущего алгоритма.
Обработка строк. Конструкторы, свойства, методы строк
Объекты типа String обладают свойствами и методами для обработки строк. Объекты типа String создаются с помощью конструктора. Хотя строковые значения и созданные конструктором строковые объекты (типа String) устроены и ведут себя в некоторых случаях по-разному, но все основные (перечисленные ниже) свойства и методы являются для них общими.
Все символы строки индексируются, начиная с 0. Индексы используется во многих методах. Все методы строк не изменяют значения переменных, хранящих исходные строки, а создают новую строку.
Конструктор объектов типаString
new String(строковый литерал) преобразует строковое значение в объект типа String с тем же значением
Свойство объектов типаString
строка.length длина (число символов) строки (равно n +1, где n – индекс последнего символа).
Методы объектов типаString
Работа с целыми строками
строка1.concat(строка2) соединение исходных строк в одну новую
строка.toLowerCase() возвращает строку, преобразованную к нижнему регистру
строка.toUpperCase() возвращает строку, преобразованную к верхнему регистру
String.fromCharCode(код1, код2, …,кодn) создание строки из Unicode-кодов символов
Работа с частью строки
строка.charAt(индекс) возвращает символ строки, указанный индексом
строка.charCodeAt(индекс) возвращает Unicode-коде указанного символа
строка.slice(индекс1[, индекс2]) возвращает часть строки, начиная с индекса1 и до индекса2 (не включая последний). Если индекс2 не указан, то до конца строки. Метод не входит в стандарт ECMA
строка.substring(индекс1[, индекс2]) Если индекс1 индекс2, делает то же, что и метод slice. Метод не входит в стандарт ECMA
строка.substr(индекс [, длина]) возвращает часть строки указанной длины, начиная с указанного индекса. Если индекс не указан, то до конца строки. Метод не входит в стандарт ECMA
Поиск подстроки
строка1.indexOf(строка2[, индекс1]) начиная с индекса1, слева направо ищет в строке1 первое вхождение строки2 и выдаёт индекс начала этого вхождения. Если индекс1 не указан, поиск происходит с начала строки
строка1.lastIndexOf(строка2[, индекс1]) начиная с индекса1, справа налево ищет в строке1 первое вхождение строки2 и выдаёт индекс начала этого вхождения. Если индекс1 не указан, поиск происходит с конца строки
Работа с шаблонами
строка.search (полный_шаблон) возвращает индекс первой подстроки, совпавшей с шаблоном, или –1
строка.replace (полный_шаблон, строка) возвращает новую строку, полученную из исходной заменой подстрок, совпавших с шаблоном, на указанный текст (важно использование уточнения g, иначе заменяет только первое вхождение)
строка.split (полный_шаблон) разрезает строку на подстроки, разделённые строками, совпавшими с шаблоном, и собирает из них результирующий массив
строка.match (полный_шаблон) возвращает массив подстрок, совпавших с шаблоном
Пример: Удаление лишних пробелов с помощью метода charAt
function delSpaces(s)
{ var n ="";
for (var i=0; i<s.length; i++)
{ c = s.charAt(i);
if (c != " ")
n += c
else
{ while (s.charAt(i+1)==" ")
i++;
if (s.charAt(i+1)!= "")
n += c
}
}; return n
};
С помощью шаблонов эта задача решается значительно проще (см. п. 27).
