Добавлен: 24.04.2023
Просмотров: 119
Скачиваний: 2
2 глава - практического решения конкретной задачи, которое отражено в названии темы курсовой работы (10-12 стр):
2.1. Описание задачи:
2.1.1. Формулировка задачи(Язык , JavaScript):
В Формулировке задачи разделе: дается понятие констант, переменных, показываются основные команды для работы с ними
После вступления о способе хранения данных в программе «всякая обрабатываемая величина занимает своё место – поле в памяти компьютера » излагается о 3х основных типах величин, изучаемых в учебнике: числовой, символьный, логический, устанавливаются различия между константами и переменными:
- «константы записываются своими десятичными записями в памяти, их значение не изменяется во время работы программы»;
- «переменные обозначаются, как в математике, символьными именами - идентификаторами».
Далее рассматриваются основные операции над переменными:
- Присваивание
<переменная>:=<выражение>
Пример : Z:=X+Y
|
До присваивания |
X |
2 |
Y |
5 |
Z |
- |
|
После присваивания |
X |
2 |
Y |
5 |
Z |
7 |
- Команда ввода:
Ввод<список переменных>
Пример: ввод A, B, C
2.1.2.Примеры применения задачи:
Примеры:
1. обмен значениями 2х переменных. Для решения применяется аналогия с двумя стаканами (с молоком и водой) для смены значений которых используется третий, после которой решение становится очевидным.
2. даны 2 правильные дроби, найти дробь – результат деления одной на вторую.
Решение сводится к правилам учебника математики.
Задания по разделу:
1.Методы массивов:
Массивы предоставляют множество методов. Чтобы было проще, в этой главе они разбиты на группы.
1.1. Добавление/удаление элементов:
Я уже знаю методы, которые добавляют и удаляют элементы из начала или конца:
- arr.push(...items) – добавляет элементы в конец;
- arr.pop() – извлекает элемент из конца;
- arr.shift() – извлекает элемент из начала;
- arr.unshift(...items) – добавляет элементы в начало.
Есть и другие.
1.2. Метод splice:
Как удалить элемент из массива?
Так как массивы – это объекты, то можно попробовать delete:
let arr = ["I", "go", "home"];
delete arr[1]; // удалить "go"
alert( arr[1] ); // undefined
// теперь arr = ["I", , "home"];
alert( arr.length ); // 3
Вроде бы, элемент и был удалён, но при проверке оказывается, что массив всё ещё имеет 3 элемента arr.length == 3.
Это нормально, потому что всё, что делает delete obj.key – это удаляет значение с данным ключом key. Это нормально для объектов, но для массивов мы обычно хотим, чтобы оставшиеся элементы сдвинулись и заняли освободившееся место. Мы ждём, что массив станет короче.
Поэтому для этого нужно использовать специальные методы.
Метод arr.splice(str) – это универсальный «швейцарский нож» для работы с массивами. Умеет всё: добавлять, удалять и заменять элементы.
Его синтаксис:
arr.splice(index[, deleteCount, elem1, ..., elemN])
Он начинает с позиции index, удаляет deleteCount элементов и вставляет elem1, ..., elemN на их место. Возвращает массив из удалённых элементов.
Этот метод проще всего понять, рассмотрев примеры.
Начну с удаления:
let arr = ["Я", "изучаю", "JavaScript"];
arr.splice(1, 1); // начиная с позиции 1, удалить 1 элемент
alert( arr ); // осталось ["Я", "JavaScript"]
Легко, правда? Начиная с позиции 1, он убрал 1 элемент.
В следующем примере мы удалим 3 элемента и заменим их двумя другими.
1.3. Метод slice.
Метод arr.slice намного проще, чем похожий на него arr.splice.
Его синтаксис:
arr.slice([start], [end])
Он возвращает новый массив, в который копирует элементы, начиная с индекса start и до end (не включая end). Оба индекса start и end могут быть отрицательными. В таком случае отсчёт будет осуществляться с конца массива.
Это похоже на строковый метод str.slice, но вместо подстрок возвращает подмассивы.
Например:
let arr = ["t", "e", "s", "t"];
alert( arr.slice(1, 3) ); // e,s (копирует с 1 до 3)
alert( arr.slice(-2) ); // s,t (копирует с -2 до конца)
Можно вызвать slice и вообще без аргументов: arr.slice() создаёт копию массива arr. Это часто используют, чтобы создать копию массива для дальнейших преобразований, которые не должны менять исходный массив.
1.4. Метод concat.
Метод arr.concat создаёт новый массив, в который копирует данные из других массивов и дополнительные значения.
Его синтаксис:
arr.concat(arg1, arg2...)
Он принимает любое количество аргументов, которые могут быть как массивами, так и простыми значениями.
В результате мы получаем новый массив, включающий в себя элементы из arr, а также arg1, arg2 и так далее…
Если аргумент argN – массив, то все его элементы копируются. Иначе скопируется сам аргумент.
Например:
let arr = [1, 2];
// создать массив из: arr и [3,4]
alert( arr.concat([3, 4]) ); // 1,2,3,4
// создать массив из: arr и [3,4] и [5,6]
alert( arr.concat([3, 4], [5, 6]) ); // 1,2,3,4,5,6
// создать массив из: arr и [3,4], потом добавить значения 5 и 6
alert( arr.concat([3, 4], 5, 6) ); // 1,2,3,4,5,6
Обычно он просто копирует элементы из массивов. Другие объекты, даже если они выглядят как массивы, добавляются как есть:
let arr = [1, 2];
let arrayLike = {
0: "что-то",
length: 1
};
alert( arr.concat(arrayLike) ); // 1,2,[object Object]
…Но если объект имеет специальное свойство Symbol.isConcatSpreadable, то он обрабатывается concat как массив: вместо него добавляются его числовые свойства.
Для корректной обработки в объекте должны быть числовые свойства и length:
let arr = [1, 2];
let arrayLike = {
0: "что-то",
1: "ещё",
[Symbol.isConcatSpreadable]: true,
length: 2
};
alert( arr.concat(arrayLike) ); // 1,2,что-то,ещё
1.5.Перебор: forEach.
Метод arr.forEach позволяет запускать функцию для каждого элемента массива.
Его синтаксис:
arr.forEach(function(item, index, array) {
// ... делать что-то с item
});
Например, этот код выведет на экран каждый элемент массива:
// Вызов alert для каждого элемента
["Bilbo", "Gandalf", "Nazgul"].forEach(alert);
А этот вдобавок расскажет и о своей позиции в массиве:
["Bilbo", "Gandalf", "Nazgul"].forEach((item, index, array) => {
alert(`${item} имеет позицию ${index} в ${array}`);
});
Результат функции (если она вообще что-то возвращает) отбрасывается и игнорируется.
let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас"];
// удалить 3 первых элемента и заменить их другими
arr.splice(0, 3, "Давай", "танцевать");
alert( arr ) // теперь ["Давай", "танцевать", "прямо", "сейчас"]
Здесь видно, что splice возвращает массив из удалённых элементов:
let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас"];
// удалить 2 первых элемента
let removed = arr.splice(0, 2);
alert( removed ); // "Я", "изучаю" <-- массив из удалённых элементов
Метод splice также может вставлять элементы без удаления, для этого достаточно установить deleteCount в 0:
let arr = ["Я", "изучаю", "JavaScript"];
// с позиции 2
// удалить 0 элементов
// вставить "сложный", "язык"
arr.splice(2, 0, "сложный", "язык");
alert( arr ); // "Я", "изучаю", "сложный", "язык", "JavaScript"
Отрицательные индексы разрешены
В этом и в других методах массива допускается использование отрицательного индекса. Он позволяет начать отсчёт элементов с конца, как тут:
let arr = [1, 2, 5];
// начиная с индекса -1 (перед последним элементом)
// удалить 0 элементов,
// затем вставить числа 3 и 4
arr.splice(-1, 0, 3, 4);
alert( arr ); // 1,2,3,4,5
1.1.5. Таблицы и массивы:
В этом параграфе вводятся основные понятия о массивах: определение, описание, ввод значений на ШАЯ, пример задачи – расчет среднего значения элементов массива.
Школьники уже знакомы с принципом табличной организации данных из БД.
Что такое массив:
Дается определение массива: М – представление таблиц в языках программирования.
Пример – запись температуры воздуха по месяцам
|
Месяц |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
|
Температура |
23 |
12 |
1 |
0 |
-1 |
-12 |
-1,2 |
2,2 |
2 |
3 |
0 |
-1 |
.
На основе этого примера вводится понятие линейной таблицы с индексированными именами, которая
«в программировании называется одномерным массивом .
В примере: Запись Т[1] в данном примере показывает температуру в 1 месяце. Т - имя массива. Порядковый номер элемента – его индекс.
Каждый элемент обозначается так: < имя массива>[<индекс>]»
Так вводится имя массива и его элементов. Далее говорится, что элементы массива должны иметь одинаковый тип . (в примере - вещественный).
Пофантазируйте: пусть это будет сложный шифр или нахождение площади произвольной фигуры, а не треугольника и прочее.
2.2.3. Интерфейс пользователя (картинка) с обоснованием эргономики:
2.2. Техническое задание:
Алгоритм "Сортировка выбором".
Является одним из самых простых алгоритмов сортировки массива. Смысл в том, чтобы идти по массиву и каждый раз искать минимальный элемент массива, обменивая его с начальным элементом не отсортированной части массива. На небольших массивах может оказаться даже эффективнее, чем более сложные алгоритмы сортировки, но в любом случае проигрывает на больших массивах. Число обменов элементов по сравнению с "пузырьковым" алгоритмом N/2, где N - число элементов массива.
Алгоритм Выполнения:
1. Находим минимальный элемент в массиве.
2. Меняем местами минимальный и первый элемент местами.
3. Опять ищем минимальный элемент в не отсортированной части массива
4. Меняем местами уже второй элемент массива и минимальный найденный, потому как первый элемент массива является отсортированной частью.
5. Ищем минимальные значения и меняем местами элементы, пока массив не будет отсортирован до конца.
//Сортировка выбором {---
Функция СортировкаВыбором(Знач Массив)
Мин = 0;
Для i = 0 По Массив.ВГраница() Цикл
Мин = i;
Для j = i + 1 ПО Массив.ВГраница() Цикл //Ищем минимальный элемент в массиве
Если Массив[j] < Массив[Мин] Тогда
Мин = j;
КонецЕсли;
КонецЦикла;
Если Массив [Мин] = Массив [i] Тогда //Если мин. элемент массива = первому элементу неот. части массива, то пропускаем.
Продолжить;
КонецЕсли;
Смена = Массив[i]; //Производим замену элементов массива.
Массив[i] = Массив[Мин];
Массив[Мин] = Смена;
КонецЦикла;
Возврат Массив;
КонецФункции
2.2.1. Входные и выходные данные – их типы и ограничения:
Программа состоит из трех главных модулей:
- Модуль нахождения Минимального ил;
- Модуль по изменению местами первый элемента в Массиве;
- Тестовый модуль (в Упорядочивании Массива).
2.2.2. Возможные ошибки пользователя и их обработка:
В случае ошибок программистов моя цель ясна. Мне надо найти их и исправить.
Таковые ошибки варьируются от простых опечаток, на которые компьютер пожалуется сразу же, как только увидит программу, до скрытых ошибок в нашем понимании того, как программа работает, которые приводят к неправильным результатам в особых случаях. Ошибки последнего рода можно искать неделями.
Разные языки по-разному могут помогать вам в поиске ошибок. К сожалению, JavaScript находится на конце этой шкалы, обозначенном как «вообще почти не помогает». Некоторым языкам надо точно знать типы всех переменных и выражений ещё до запуска программы, и они сразу сообщат вам, если типы использованы некорректно. JavaScript рассматривает типы только во время исполнения программ, и даже тогда он разрешает делать не очень осмысленные вещи без всяких жалоб, например:
x = true * "обезьяна"
На некоторые вещи JavaScript всё-таки жалуется. Написание синтаксически неправильной программы сразу вызовет ошибку. Другие ошибки, например вызов чего-либо, не являющегося функцией, или обращение к свойству неопределённой переменной, возникнут при выполнении программы, когда она сталкивается с такой бессмысленной ситуацией.
Но часто ваши бессмысленные вычисления просто породят NaN (not a number) или undefined. Программа радостно продолжит, будучи уверенной в том, что она делает что-то осмысленное. Ошибка проявит себя позже, когда такое фиктивное значение уже пройдёт через несколько функций. Она может вообще не вызвать сообщение об ошибке, а просто привести к неправильному результату выполнения. Поиск источника таких проблем – сложная задача.
Процесс поиска ошибок (bugs) в программах называется отладкой (debugging).