
- •Федеральное государственное учреждение
- •©Российская таможенная академия, 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]
- •Основы программирования
Типичные задачи с массивами: линейная алгебра
Задачи линейной алгебры, такие как сложение матриц и векторов, умножение их на число, скалярное произведение векторов, умножение и транспонирование матриц и др., удобно решать, представляя векторы как одномерные массивы, а матрицы – как двумерные массивы. Из операторов удобно применять цикл for.
Скалярное произведение векторов
На входе векторы a и b раной и ненулевой длины. Функция scalar должна выдать сумму произведений a[i]*b[i] для всех i.
function scalar(a,b)
{var c=0;
for (var i=0; i<a.length; i++)
c += a[i]*b[i];
return c
}
Произведение матриц
Предполагается, что число столбцов первой матрицы равно числу строк второй матрицы и матрицы не ступенчатые. Функция matrProd должна выдать матрицу, элемент c[i][j] которой равен скалярному произведению i-й строки первой матрицы на j-й столбец второй матрицы.
function matrProd(a,b)
{var c=[]; var j,k;
//Цикл по строкам матрицы a
for (var i=0; i<a.length; i++)
{c[i]=[];
//Цикл по столбцам матрицы b
for (j=0; j<b[0].length; j++)
{//Скалярное произведение i-й строки матрицы a
//на j-й столбец матрицы b
c[i][j]=0;
for (k=0; k<b.length; k++)
c[i][j] += a[i][k]*b[k][j]
}
};
return c
}
Транспонирование квадратной матрицы
Исходная матрица изменится, так как транспонирование проводится «на месте» – меняются местами a[i][j]и a[j][i].
function transp(a)
{var j,c;
for (var i=1; i<a.length; i++)
for (j=0; j<i; j++)
{c = a[j][i];
a[j][i] = a[i][j];
a[i][j] = c
};
}
Типичные задачи с массивами: сортировка. Сортировка вставками. Методsort
Сортировкой называется перестановка элементов массива в порядке возрастания или убывания. Простейший и в ряде случаев самый быстрый метод сортировки – сортировка вставками. Алгоритм просматривает массив слева направо и, обнаружив элемент, нарушающий требуемый порядок, переносит его назад в нужное место. Затем продолжает просмотр массива. Ниже описана функция сортировки массива чисел или строк по возрастанию. Она сортирует массив «на месте».
Сортировка вставками
function sortByInsertion(a)
{var j, x;
for (var i=1; i<a.length; i++)
if (a[i-1]>a[i]) // a[i] нарушил порядок
{x = a[i]; j=i; // j – это свободное место
do {a[j]=a[j-1]; j--} //освобождение
while (j!=0 && a[j-1]>x); //места для х
a[j]=x; //вставка х
}
}
Методsort
Стандартный для JavaScript метод sort значительно эффективнее и позволяет сортировать любые массивы, например, массивы массивов и массивы записей, как по возрастанию, так и по убыванию.
Вариант метода без параметра – массив.sort() – применим только для сортировки строк по возрастанию.
Вариант с параметром – массив.sort(имя функции сравнения) – применим в любых случаях, но программист должен сам определить функцию сравнения:
f(a,b){…}, где a и b – произвольные элементы массива. Функция должна выдать число
0, если порядок a и b не играет роли,
<0, если a должно предшествовать b,
>0, если b должно предшествовать a.
Новый массив не создаётся, т.е. сортировка также происходит «на месте».
Примеры функции сравнения
Сортировка числового массива по возрастанию function numUp(a,b) { return a-b };
Сортировка числового массива по убыванию function numDown(a,b) { return b-a };
Сортировка строк числовой матрицы по первому элементу function rowUp(a,b) { return a[0]-b[0] };
Сортировка массива строк по убыванию function stringDown(a,b) {if (a<b) return 1; if (a==b) return 0 else return -1 };