Справочник от Автор24
Поделись лекцией за скидку на Автор24

Информатика

  • ⌛ 2016 год
  • 👀 316 просмотров
  • 📌 231 загрузка
  • 🏢️ РГУПС
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Информатика» pdf
РОСЖЕЛДОР Федеральное государственное бюджетное образовательное учреждение высшего образования «Ростовский государственный университет путей сообщения» (ФГБОУ ВО РГУПС) ________________________________________________________________ В.Л. Панасов ЛЕКЦИИ ПО КУРСУ «ИНФОРМАТИКА» (семестр 1) Ростов-на-Дону 2016 Лекция 1. Общие сведения о программировании в Visual Basic for Applications (VBA) Типы данных Любая переменная характеризуется следующим: 1. 2. 3. 4. Именем. Значением. Адресом в памяти, где она хранится. Типом данных. Типы данных относятся к самым фундаментальным понятиям любого языка программирования. Тип данных определяет: 1. Множество допустимых значений, которое может принимать указанная переменная. 2. Объём выделяемой памяти под переменную. 3. Допустимые операции над переменными этого типа. Основные типа данных языка VBA: 1. Integer - целые числа. 2. Single/Double - вещественные числа (с дробной частью) одинарной/двойной точности. Точность определяет количество байт, занимаемых переменной. 3. String - строковые, т.е. содержащие последовательность символов. 4. Boolean - логические (булевские) значения (True/False - Истина/Ложь). 5. Массивы - наборы из нескольких переменных одного типа. Допустимые имена переменных В VBA пользователь определяет имена переменных, функций, процедур, типов, постоянных и других объектов. Вводимые пользователем имена должны отражать суть обозначаемого объекта так, чтобы делать программу легко читаемой. В VBA имеются следующие ограничения на имена: 1. Длина имени не должна превышать 255 символов. 2. Имя не может содержать точек, пробелов и следующих символов - % , & , !, #.©,$. Вместо пробелом принято использовать символ подчеркивания "_". 3. Имя может содержать любую комбинацию букв, цифр и символов, начинающуюся с буквы. 4. Имена должны быть уникальны. 5. Не следует использовать имена, совпадающие с ключевыми словами VBA и именами встроенных функций и процедур, например: while, for, print и т.п. Хотя регистр букв (верхний или нижний) в имени не имеет значения, умелое использование его может существенно облегчить понимание содержательной стороны переменной. Например, из имени переменной PloshKruga, явствует, что в ней хранится величина площади круга. Константы Константы, в отличие от переменных, не могут изменять свои значения. Использование констант делает программы легче читаемыми и позволяет проще вносить исправления- отпадает необходимость многократно исправлять значения по тексту программы, т. к. достаточно ввести новое значение при определении константы. Пример: const PI=3.14 ploshad = T*PI/sin(PI + 4) — D/PI В данной программе, при необходимости изменить точность представления числа Пи, достаточно только лишь изменить значение константы в первой строчке. Комментарии Работая с программой, удобно использовать комментарии, т. е. фрагменты текста программы, не являющиеся программными кодами и игнорируемые VBA. Комментарии выполняют две важные функции: 1. Делают программу легко читаемой, поясняя смысл программных кодов и алгоритма. 2. Временно отключают фрагменты программы при ее отладке. Комментарии вставляются с применением апострофа ('). Его можно ставить в любом месте строки. При этом все символы, начиная от апострофа до конца строки, будут восприниматься средой разработки как комментарий. Пример: 'Расчет площади фигуры ploshad = T*PI/sin(PI + 4) — D/PI 'ploshad = T*PI/sin(PI + 4.5) — D/PI В данной программе первый комментарий служит для пояснения следующей строчки, а второй - для отключения строки, которая была исправлена. Операции VBA В программах на VBA можно использовать стандартный набор операций над данными. Имеются три основных типа операций: 1. Математические, выполняются над числами, и их результатом являются числа; 2. Отношения, применяются не только к числам, и их результатом являются логические значения, например х>у=True 3. Логические, используются в логических выражениях и их результатом являются логические значения, например Not(x>y) And (x < 10) Математические операции. A+ B A-B A*B A/ B A mod B A^B Операции отношения. A>B A B A <= B A >= B Логические операции. (A>0) And (B < 10) (A>0) Or (B < 10) Not (A>0) And (B < 10) (A>0) Xor (B < 10) Другие операции. A=Y+1 "Привет, " + "Иван" Равно Не равно Меньше или равно Больше или равно Логическое "И" Логическое "ИЛИ" Логическое "НЕ" (отрицание или инверсия) Логическое "Исключающее ИЛИ" Присваивание. Не следует путать эту операцию с операцией сравненение на равенство. При присваивании осуществляется копирование выражения справа в переменную слева от знака присваивания. Слияние строк. Не смотря на использования символа "+", данная операция не имеет ничего общего с алгебраическим сложением. Здесь происходит слияние (соединение) двух строковых значений. Приоритет операций. Как и в математике, в VBA операции в выражениях выполняются слева направо. У каждой операции есть приоритет. Например, известно, что в математике всегда умножение выполняется раньше сложения. Для изменения порядка действий применяются скобки. Приведем приоритет операций в VBA. Построение выражений. Пример: Записать выражение на языке VBA: y = (sin(a) + log(x)) / (4 + a ^ (3 - x) * 5) - 2 * a / x Функции VBA В VBA имеется большой набор встроенных функций и процедур, использование которых существенно упрощает программирование. Эти функции можно разделить на следующие основные категории: 1. 2. 3. 4. Математические функции; Функции преобразования форматов; Функции обработки строк; Функции времени и даты. Ниже рассмотрим некоторые из них. Математические функции. В VBA имеется большой список математических функций, позволяющих произвести любые вычисления. • abs(x) – модуль • • • • • • • • • sin(x) – синус cos(x) – косинус log(x) – натуральный логарифм exp(x) – возведение числа e в степень x, т. е. ex tan(x) – тангенс atn(x) – арктангенс sqr(x) – квадратный корень int(x) – округление в меньшую сторону. Пример: int(2.6) = 2; int(-4.3) = -5 rnd() – возвращает случайное число в интервале от [0..1) Функции преобразования форматов (типов данных). • val(s) – преобразование из строки в число. Пример: val("4") = 4 • str(n) – преобразование из числа в строку Функции преобразования форматов часто применяются в тех случаях, когда необходимо преобразовать введенные пользователем значения в числовой формат, или, наоборот, подготовить числа к выводу на экран. Неявное преобразование типов данных. Кроме этих функций в Бейсике имеется механизм неявного преобразования типов данных. Например булевые значения (Истина/Ложь) могут преобразовываться в числовые значения -1 и 0 соответственно. Далее эти преобразованные значения можно использовать в математических выражениях. Примечание: В большинстве других языков программирования значение Истина преобразуется в число 1, а не -1. Если рассмотреть двоичное представление -1, то у этого числа стоит 1 во всех битах. Ввод и вывод в VBA В VBA существуют различные способы ввода данных с клавиатуры, мышки и вывода их на экран. В рамках данного курса изучается только один способ вывода и один - ввода. Ввод данных с помощью функции InputBox Пример: imya = InputBox("Введите Ваше имя?") vozr = val(InputBox("Сколько Вам лет?")) При выполнении первой строчки пользователь увидит на экране следующее окно: Выполнение программы приостановится. Пользователь должен ввести имя в текстовое поле и нажать кнопку OK. После этого функции возвратит введенное пользователем строковое значение, которое потом присвоится переменной imya. У функции InputBox имеется параметр - текст подсказки, которая появляется в окне. Функция возвращает введенное значение в строковом формате. Если, как во второй строке примера, введенное значение является числом, то его необходимо преобразовать с помощью функции val. Вывод данных в окно отладки (Immediate window). Наиболее простым способом вывода данных является использование окна отладки Immediate window. Данные, выведенные в него, можно легко скопировать и потом вставить, например, в отчет. Прежде всего необходимо убедиться, что это окно открыто. Если нет, то его следует открыть через главное меню среды VBA View->Immediate window. Вывод в окно Immediate window осуществляется функцией Debug.Print. Например: Debug.Print "Максимум из элементов "; i ;"-ой строки и "; j ;"-го столбца=" ; max Функция позволяет выводить сразу несколько компонентов текста. Каждый компонент должен разделяться ";". Текстовые компоненты, выводимые "как есть" заключаются в кавычки. Переменные, вместо которых выводится их значение, остаются без кавычек. Данная строк выведет следующий результат: Блок-схемы Блок-схемы являются графической формой записи алгоритма программы. Они состоят из блоков и соединительных линий. Блок означают операции, а линии - последовательность их выполнения. Стандартным направлением линий на блок-схемах является либо "сверху-вних", либо "слеванаправо". При стандартном направлении у линий стрелки на концах не рисуются. Если направление линии не стандартное или линия имеет изломы, то нужно рисовать стрелочку на конце, чтобы указать направление. Основные блоки. • Блок начала и конца алгоритма: • Блок процесса (вычислений). Этим блоком обозначаются действия, не предполагающие ветвления, ввода или вывода данных. • Блок ввода/вывода. Этим блоком обозначаются действия, приводящие к вводу или выводу данных. Например, операторы InputBox и Debug.Print. Внутри блока пишутся переменные, подлежащие вводу или выводу. • Блок условия (ветвления). Этот блок обозначает действие, в котором принимается решение, по какому пути должно идти выполнение программы. Обычно он соответствует оператору If. Иногда этим блоком обозначается место цикла, в котором принимается решение о повторном проходе, например, оператор While. Внутри блока указывается условие ветвления. У этого блока сверху всегда показывается "вход", а с остальных сторон 2 выхода, т.е. 2 возможных направления ветвления. Возле одного выхода подписывается слово "да", чтобы обозначить направление следования при выполнении условия. • Блок начала цикла с параметром. Этот блок соотвествует открытию цикла с параметром, например, оператору For. Внутри него указывается имя параметрапеременной, диапазон ее значений и шаг изменения. • Блок конца цикла с параметром. Этот блок соответствует закрытию цикла с параметом, например, оператору Next. Внутри него указывается имя параметрапеременной, которое должно соответствовать имени параметра в открывающем блоке. • Блок перехода между страницами. Это специальный блок, которому не соответствуют никакие реальные действия. Он служит всего лишь для обозначения перехода соединительных линий между страницами, когда блок-схема не умещается на одной странице. Внутри пишется любая цифра. Цифра в "блоке-отправлении" и "блокеприбытии" одной и той же линии должны совпадать. Более подробно каждый блок будет рассмотрен в тех разделах лекции, в которых пойдет речь о данных операторых языка VBA. Лекция 2. Линейный, разветвляющийся алгоритмы и цикл с параметром Линейный алгоритм Линейный алгоритм представляет собой просто последовательность действий, выполняемых одно за другим сверху вниз. Как правило программа состоит из 3 частей: 1. Ввод неизвестных параметров (переменных) с клавиатуры; 2. Выполнение каких-либо вычислений; 3. Вывод результата на экран. Шаги 1 и 2 выполняются с применением уже рассмотренных функций InputBox и Debug.Print. Рассмотрим конкретный пример задания. Задание. Разработать программу для вычисления значения функции и вывода его на экран. Аргументы вводить с клавиатуры: Выполнение. Программа состоит из 3 частей: 1) ввод неизвестных параметров (переменных) с клавиатуры – в данном случае переменных x и y; 2) вычисление функции по заданной формуле и помещение результата в любую незадействованную переменную, пусть – f; 3) вывод результата на экран. Программа. Sub Lineyniy_1() 'Начало подпрограммы (макроса) x = Val(InputBox("Введите x:")) 'Ввод параметра x с клавиатуры 3. y = Val(InputBox("Введите y:")) 'Ввод параметра y с клавиатуры 4. f = (Sqr(5 + x + 5 * x ^ 2) + x * Sqr(5) + x ^ 3) / (Log(x) + Log(x) ^ 2 + Log(x ^ 2)) * (3 ^ (x + 2) - 2 * x) + 1 / (4 - x ^ 2 * Sqr(y)) 'Вычисление функции по формуле и помещение результата в f 5. Debug.Print "Результат ="; f 'Вывод результата на экран 6.End Sub 'Окончание подпрограммы Словесное описание программы. Перед вычислением заданного выражения необходимо ввести в память компьютера значения всех неизвестных параметров. Поэтому первым этапом выполняется ввод переменных с клавиатуры (строки 3–4). Далее в строке 6 вычисляется результат по заданной формуле и помещается в новую переменную. Результат посчитан, но для того, чтобы его увидеть, необходимо вывести его на экран, что и делается в строчке 8. 1. 2. Блок-схема. (Примечание: здесь и далее выносками с цифрами обозначены номера строчек, которым соответствует данный блок. На реальных блок-схемах их отображать не следует.) Рассмотрим еще один пример линейного алгоритма, который все же допускает «альтернативные» вычисления, зависящие от каких-либо условий. Задание. Стоимость товара составляет 100 руб. Компания предоставляет скидку в 10% при заказе более 10 товаров. Для очень малых заказов (менее 3 товаров) предусмотрена наценка в 5%. Покупатель купил N товаров. Рассчитать стоимость его заказа. Выполнение. Программа также состоит из 3 частей: ввод числа N, расчет стоимости заказа и вывод на экран. Базовая стоимость заказа вычисляется простым перемножением N * 100. Скидка и наценка тоже считается просто: -N * 100 * 0.1 и +N * 100 * 0.05 соответственно. Скидка идет со знаком «минус», а наценка со знаком «плюс». Чтобы скидка и наценка суммировались не всегда, а только при определенных условиях, можно использовать операции сравнения. Для скидки N > 10, а для наценки N < 3. Их можно использовать в формуле расчета стоимости заказа, принимая во внимание, что логические значения этих операций (Истина или Ложь) Бейсиком преобразуются в числовые значения (-1 и 0 соответственно). Рассмотрим выражение: -N*100*0.1*-(N > 10). Это варажение будет обращаться в 0, при N <= 10, а при N > 10 оно будет равно скидке: -N * 100 * 0.1. Аналогично выражение N * 0.05 * -(N < 3) будет обращаться в 0 при N>= 3, а при N < 10 оно будет равно наценке: N * 100 * 0.05. Программа. Sub Lineyniy_2() 'Начало подпрограммы (макроса) 2. N = Val(InputBox("Введите количество товара:")) 'Ввод параметра N с клавиатуры 3. P = N * 100 - N * 100 * 0.1 * -(N > 10) + N * 100 * 0.05 * -(N < 3) 4. Debug.Print "Стоимость заказа ="; P 'Вывод результата на экран 5.End Sub 'Окончание подпрограммы 1. Разветвляющийся алгоритм Для организации ветвления в программах VBA применяется оператор If. Он имеет следующий синтаксис: Форма 1. If <Условие> then <Группа операторов 1> else <Группа операторов 2> end if Оператор работает следующим образом. Если условие верно, то выполняется группа операторов 1, а затем операторы, идущие за end if. Если условие не верно, то выполняется группа оперторов 2, а затем операторы, идущие за end if. Отметим, что группы оперторов, слова else и end if должны располагаться на новых строчках именно так, как здесь показано. Форма 2. If <Условие> then <Группа операторов 1> end if В данной форме, если условие верно, то группа операторов 1 выполняется. Иначе она пропускается. Форма 3. If <Условие> then <Оператор 1> else <Оператор 2> Данная форма по функциональности совпадает с формой 1, но записывается в одну строчку. Форма 4. If <Условие> then <Оператор 1> Данная форма по функциональности совпадает с формой 2, но записывается в одну строчку. На блок схемах формы 1 и 3 изображаются следующим образом: При этом "входная" линия рисуется всегда сверху, а "выходные" с боков или с одного бока с снизу. Формы 2 и 4 изображаются следующим образом: Рассмотрим пример. Задание. Разработать программу для вычисления значения составной функции и вывода его на экран. Аргументы вводить с клавиатуры: Выполнение. Значение функции следует рассчитывать по одной из трех формул в зависимости от того, в какой интервал попадает значение аргумента – x. Если x < -2, то используется формула y = x + 2. Если -2 < x < 0, то y = 0. В остальных случаях y = 2x. Программа. 1. 2. Sub Raszvetv_1() 'Начало подпрограммы (макроса) x = Val(InputBox("Введите x:")) 'Ввод параметра x с клавиатуры 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. If x < -2 Then 'Проверка, является ли x < -2 y = x + 2 'если является, то используется формула 1 Else 'иначе If x < 0 Then 'проверка, является ли x < 0, с учетом того, что он уже не меньше -2 y = 0 'если является, то используется формула 2 Else 'иначе оба неравенства не выполняются, а значит x >= 0 y = 2 ^ x 'используется формула 3 End If 'конец действий, относящихся к else-части второй проверки, т.е. if x < 0 End If 'конец действий, относящихся к else-части первой проверки, т.е. if x < -2 13. Debug.Print "Результат ="; y 'Вывод результата на экран 15. End Sub 'Окончание подпрограммы Словесное описание программы. 14. После ввода неизвестного параметра x (с. 2) осуществляется проверка, является ли x < -2 (с. 4). Если является, то следует рассчитывать y по первой формуле (с. 5). Иначе возможны 2 варианта: либо формула 2, либо формула 3. Проверяем, является ли x < 0 (с. 7). Если является, то используем формулу 2 (с. 8), иначе формулу 3 (с. 10). В с. 14 выводим результат вычислений, по какой бы формуле он ни был посчитан. Блок-схема. Цикл с параметром (For-Next) Для создания повторяющихся действий применяются циклы. Циклы бывают 2 видов: цикл с параметром и циклы с условием. Последние являются более универсальными, но требуют более подробного описания. Цикл с параметром проще в применении, но не может быть использован во всех случаях. Рассмотрим цикл с параметром, который в VBA создается с помощью операторов For и Next. Форма 1. For <параметр>=<начальное значение> to <конечное значение> step <шаг> <Операторы тела цикла> Next <параметр> Форма 2. For <параметр>=<начальное значение> to <конечное значение> <Операторы тела цикла> Next <параметр> Вторая форма отличается тем, что не указывается шаг изменения параметра. В этом случае по-умолчанию считается, что он равен 1. При использовании цикла For-Next интерпретатор VBA выполняет сам несколько простейших действий. Перечислим их: 1. Параметру присваивается начальное значение. 2. Выполняется тело цикла. 3. Если параметр еще не достиг конечного значения, то он увеличивается на шаг и все повторяется с пункта 2. 4. Выполняются операторы, идущие за Next. В циклах с условием эти действия приходится расписывать программисту самостоятельно. Циклы с параметром можно применять только в том случае, если соблюдаются условия его применимости: 1. Начальное и конечное значения параметра известны до начала цикла. 2. Шаг известен до начала цикла. 3. Внутри цикла начальное, конечное значения и шаг параметра на изменяются. В противном случае следует применять циклы с условием. В блок-схемах цикл с параметром принято изображать 2 способами. Первый способ основан на прежнем ГОСТе, а второй на новом. В литературе встречаются оба варианта. Кроме того, старый вариант более удобен для обучения, поэтому здесь будет применен именно он. Ваирант старого ГОСТа: Вариант текущего ГОСТа: В обоих стандартах в верхнем блоке указывается переменная-параметр, диапазон ее значений и шаг. Во нижнем блоке текущего ГОСТа указывается таже переменная. Рассмотрим пример. Задание. Вычислить произведение целых чисел от m до n, кратных 3. При вводе значений полагать m < n. Выполнение. Входными параметрами в данной программе являются переменные m и n. В задании сказано, что при тестировании программы следует вводить m < n, поэтому в программе будем исходить из того, что это условие соблюдается. Искомое произведение будет пошагово «накапливаться» в некоторой переменной, например p, путем домножения его предыдущего значения на очередное число, удовлетворяющее условиям задачи. Чтобы на первом шаге в переменную p поместилось первое число, необходимо задать такое начальное значение для переменной p, которое бы не изменяло произведение. Такое число – 1. После ввода входных параметров присваиваем для p начальное значение – 1. Далее программа должна осуществлять последовательный перебор всех целых чисел от m до n и присваивать эти числа некоторой рабочей переменной, например i. Далее следует обеспечить проверку значений этой переменной на кратность 3. Если i кратна 3, то домножаем ее в прежнее произведение p. По окончании перебора всех чисел из интервала от m до n имеем результирующее произведение в переменной p. Программа. 1. 2. 3. Sub For_Next_1() 'Начало подпрограммы (макроса) m = Val(InputBox("Введите m:")) 'Ввод параметра m с клавиатуры n = Val(InputBox("Введите n:")) 'Ввод параметра n с клавиатуры 4. p = 1 'Задается начальное значение для произведения For i = m To n 'Начало цикла, перебирающего все значения от m 6. до n If i Mod 3 = 0 Then 'Проверка, что текущее значение i кратно 7. 3 p = p * i 'если кратно, то домножаем его в прежнее 8. произведение p End If 'конец действий, относящихся к условию 9. 10. Next i 'конец действий, относящихся к циклу for i 11. Debug.Print "Результат ="; p 'Вывод результата на экран 12. End Sub 'Окончание подпрограммы Словесное описание программы. 5. После ввода исходных параметров (с. 2–3) задается начальное значение для переменной p, служащей для «накопления» произведения (c. 5). Организуется цикл (с. 6–10) для перебора всех целых чисел от m до n с шагом 1. Числа помещаются в переменную i. Внутри цикла проверяется, что переменная i кратна 3, т.е. остаток от ее деления на 3 равен 0 (с. 7). Если кратна, то домножаем прежнее произведение p на i (c. 8). Иначе до конца итерации не выполняем никаких действий, а затем начинаем новую итерацию (проход) цикла со следующим значением i. После цикла выводим результат, накопленный в переменной p на экран (с. 12). Блок-схема. Лекция 3. Циклы с условием и одномерные массивы Цикл с условием (While-Wend) Примером цикла с условием является цикл While-wend. Он имеет следующий синтаксис: While <условие продолжения> <Операторы тела цикла> Wend Цикл выполняет следующие действия: 1. 2. 3. 4. Если условие продолжения ложно, то переходим к шагу 4, иначе продолжаем. Выполняются операторы тела цикла. Возвращаемся к шагу 1. Выполняются операторы, идущие за Wend. Как видно, этот цикл не отвечает за изменение каких-либо параметров. Поэтому, если в нем есть какие-либо параметры, то их изменение должно быть явно расписано программистом. Цикл должен быть устроен так, чтобы в процессе его работы в определенный момент условие продолжения менялось с истинного на ложное. Это необходимо для завершения цикла. В противном случае цикл будет работать бесконечно, т.е. произойдет "зацикливание". В блок-схемах для циклов с условием не предусмотрено специальных блоков. Вместо этого применяется блок условия, который рисуется в начале или конце цикла в зависимости от того, где проверяется условие работы цикла. В случае цикла While-wend условие продолжение рисуется перед телом цикла. Стрелка после тела цикла изображает возврат к проверке условия продолжения, а другая стрелка изображает пропуск тела цила и переход к операторам, следующим за телом, в том случае, если условие продолжения цикла ложно. Рассмотрим пример. Задание. Разработать программу для вычисления бесконечного ряда с точностью 0 < p < 1, вводимой с клавиатуры, с использованием цикла While-Wend: Выполнение. Чтобы понять, как следует рассчитывать сумму бесконечного ряда, распишем несколько первых ее слагаемых: Здесь видно, что при увеличении n каждая дробь по модулю уменьшается. Сказано, что сумму нужно посчитать с заданной точностью p. Это значит, что когда модуль дроби станет меньше p, то суммирование можно остановить и выдать результат. Заранее перед началом вычислений не известно, сколько таких дробей будет. Это выясняется только внутри цикла при увеличении n. Поэтому в данной задаче нельзя применять цикл For-Next - нарушается одно из условий его применения. Значит придется использовать цикл с условием. Для вычисления суммы ряда понадобится переменная, в которой эта сумма будет накапливаться, например s. Чтобы на первой итерации цикла в s было помещено первое рассчитанное значение, начальное значение для s должно быть «нейтральным» для суммирования, т.е. 0. На каждой итерации цикла будет осуществляться расчет заданной формулы, стоящей под знаком суммы (Σ), назовем его «слагаемым», и добавление текущего значения этого слагаемого в переменную s. Количество итераций цикла заранее неизвестно, но сказано, что сумму ряда следует считать с заданной точностью p, которая по условию задачи находится в интервале 0 < p < 1. Поэтому условием остановки цикла будем считать ситуацию, когда модуль слагаемого становится меньше введенной с клавиатуры точности p. По выполнению этого условия итерации цикла завершаются и осуществляется вывод «накопленной» суммы на экран. Программа. Sub While_Wend_1() 'Начало подпрограммы (макроса) 2. p = Val(InputBox("Введите точность:")) 'Ввод точности p с клавиатуры 3. s = 0 'Начальное значение суммы задается 0 4. n = 1 'Начальное значение n=1 по заданию 5. A = 1 'Задаем такое число, которое бы позволило выполниться циклу хотя бы первый раз 6. While Abs(A) > p 'Начало цикла и условие продолжения до тех пор, пока модуль слагаемого A больше введенной точности 7. A = 1 / (n * (n + 1)) 'Расчет текущего значения слагаемого при данном n 8. s = s + A 'Добавление слагаемого в сумму s 9. n = n + 1 'Увеличение параметра n на 1 10. Wend 'Конец тела цикла While 11. Debug.Print "Сумма ряда ="; s 'Вывод накопленной суммы ряда на экран 12.End Sub 'Окончание подпрограммы Словесное описание программы. После ввода точности p (с. 2) задаем начальное значение суммы s, которое бы не влияло на результат суммирования, т.е. 0. Далее задаем начальное значение для n=1 по заданию. В цикле мы будем рассчитывать текущее значение слагаемого (с. 8) и помещать результат в переменную a. Условием продолжения цикла будет то, что модуль этой переменной a больше введенной с клавиатуры точности p (с. 7). Однако до начала цикла значение a еще неопределенно, а, следовательно, цикл может не выполниться ни разу. Чтобы этого избежать, в с. 6 присваиваем a=1 (возможно любое число заведомо большее p, с учетом того, что 0 < p < 1 по заданию). В теле цикла рассчитываем очередное значение слагаемого a (с. 8), добавляем его в сумму s (с. 9) и увеличиваем текущую переменную n на 1 (с. 10). После закрытия цикла (с. 11) выводим накопленную сумму ряда на экран (с. 13). 1. Блок-схема. Цикл с условием (Do-Loop) Цикл Do-Loop является другим примером цикла с условием. Он во многом похож на цикл While-Wend, но имеет 4 формы. Форма 1. Do while <условие продолжения> <Операторы тела цикла> Loop Данная форма полностью совпадает с циклом While-Wend и выполняет следующие действия: 1. 2. 3. 4. Если условие продолжения ложно, то переходим к шагу 4, иначе продолжаем. Выполняются операторы тела цикла. Возвращаемся к шагу 1. Выполняются операторы, идущие за Loop. В блок-схемах она изображается также, как и цикл While-Wend: Форма 2. Do until <условие завершения> <Операторы тела цикла> Loop Данная форма отличается от первой тем, что вместо условия продолжения применяется противоположное ему - условие завершения. Здесь выполняются следующий действия: 1. 2. 3. 4. Если условие завершения истинно, то переходим к шагу 4, иначе продолжаем. Выполняются операторы тела цикла. Возвращаемся к шагу 1. Выполняются операторы, идущие за Loop. Отличие от формы 1 в блок-схемах состоит только в изменении условия на противоположное и переносе слова "да": Форма 1 и форма 2 называются формами с предусловием, т.е. условие работы цикла проверяется перед его телом. Их особенность состоит в том, что тело цикла может быть не выплнено ни одного раза в том случае, если условие продолжения изначально ложно (а условие завершения изначально истинно). Последующие две формы называются циклом с постусловием - условие работы цикла проверяется после его тела. Их особенность состоит в том, что тело цикла всегда выполняется хотя бы один первый раз вне зависимости от того, истинно или ложно условие работы цикла. Форма 3. Do <Операторы тела цикла> Loop while <условие продолжения> В данной форме условие продолжения цикла проверяется после его тела, и поэтому пишется после слова Loop. Последовательность действий следующая: 1. Выполняются операторы тела цикла. 2. Если условие продолжения истинно, то возвращаемся к пункту 1. 3. Выполняются операторы, идущие за Loop. Отличие от формы 1 в блок-схеме состоит в том, что блок условия рисуется после тела цикла: Форма 4. Do <Операторы тела цикла> Loop until <условие завершения> В отличие от формы 3 здесь используется условие завершения, поэтому последовательность действий следующая: 1. Выполняются операторы тела цикла. 2. Если условие завершения ложно, то возвращаемся к пункту 1. 3. Выполняются операторы, идущие за Loop. Отличие от формы 3 в блок-схемах состоит только в изменении условия на противоположное и переносе слова "да": Рассмотрим примеры. Задание. Реализовать задачу из предыдущей тему с циклом While-Wend с помощью четырех форм цикла Do-Loop. Выполнение. Выбор цикла мало влияет на алгоритм программы, потому описание по существу см. в предыдущей теме. Здесь опишем только те изменения, которые потребуется внести: 1. Форма цикла Do-While-Loop полностью совпадает с циклом While-Wend. См. задание 1, поэтому здесь она описываться не будет. 2. Форма цикла Do-Until-Loop имеет только одно отличие: вместо условия продолжения цикла Abs(a) > p используется условие завершения цикла, т.е. Abs(a) <= p: Программа Do-Until-Loop. 1. 2. 3. 4. 5. 6. Sub Do_Until_Loop_1() 'Начало подпрограммы (макроса) p = Val(InputBox("Введите точность:")) 'Ввод точности p с клавиатуры s = 0 'Начальное значение суммы задается 0 n = 1 'Начальное значение n=1 по заданию A = 1 'Задаем такое число, которое бы позволило выполниться циклу хотя бы первый раз Do Until Abs(A) <= p 'Начало цикла и условие завершения, как только модуль слагаемого A станет меньше либо равен введенной точности 7. A = 1 / (n * (n + 1)) 'Расчет текущего значения слагаемого при данном n 8. s = s + A 'Добавление слагаемого в сумму s 9. n = n + 1 'Увеличение параметра n на 1 10. Loop 'Конец тела цикла Do-Loop 11. Debug.Print "Сумма ряда ="; s 'Вывод накопленной суммы ряда на экран 12. End Sub 'Окончание подпрограммы Отличие блок-схемы тоже только в направлении неравенства и положении надписи «да»: Блок-схема Do-Until-Loop. Формы цикла Do-Loop-While и Do-Loop-Until имеют немного больше отличий. В связи с тем, что условия у этих циклов проверяются после первой итерации, отпадает необходимость в начальном значении для слагаемого a=1. Тело цикла будет выполнено хотя бы один раз при любых значениях a. Между собой эти циклы отличаются также только направлением неравенства в условии: Программа Do-Loop-While. 1. 2. 3. 4. 5. 6. 7. 8. Sub Do_Loop_While_1() 'Начало подпрограммы (макроса) p = Val(InputBox("Введите точность:")) 'Ввод точности p с клавиатуры s = 0 'Начальное значение суммы задается 0 n = 1 'Начальное значение n=1 по заданию Do 'Начало цикла A = 1 / (n * (n + 1)) 'Расчет текущего значения слагаемого при данном n s = s + A 'Добавление слагаемого в сумму s n = n + 1 'Увеличение параметра n на 1 Loop While Abs(A) > p 'Конец цикла и условие продолжения, пока модуль слагаемого A больше введенной точности 10. Debug.Print "Сумма ряда ="; s 'Вывод накопленной суммы ряда на экран 11. End Sub 'Окончание подпрограммы 9. Блок-схемы отличаются тем, что блок условия находится после тела цикла и отсутствует начальное значение переменной a. Блок-схемы формы 3 и формы 4 также отличаются направлением неравенства и положением надписи «да». Блок-схема Do-Loop-While. Программа Do-Loop-Until. Sub Do_Loop_Until_1() 'Начало подпрограммы (макроса) p = Val(InputBox("Введите точность:")) 'Ввод точности p с клавиатуры 3. s = 0 'Начальное значение суммы задается 0 4. n = 1 'Начальное значение n=1 по заданию 5. Do 'Начало цикла 6. A = 1 / (n * (n + 1)) 'Расчет текущего значения слагаемого при данном n 7. s = s + A 'Добавление слагаемого в сумму s 8. n = n + 1 'Увеличение параметра n на 1 9. Loop Until Abs(A) <= p 'Конец цикла и условие завершения, как только модуль слагаемого A станет меньше либо равен введенной точности 10. Debug.Print "Сумма ряда ="; s 'Вывод накопленной суммы ряда на экран 11. End Sub 'Окончание подпрограммы 1. 2. Блок-схема Do-Loop-Until. Одномерные массивы Что такое массив? Массив – это группа переменных одного типа, объединенных одним именем – именем массива. Выбор отдельных переменных (элементов) внутри массива, осуществляется через имя массива и номер – индекс элемента него. В литературе одномерные массивы часто называют вектором. Не путать с понятием вектор из векторной алгебры! Очень важно уяснить разницу между элементом массива и номером элемента массива. Этот номер принято называть индексом элемента в массиве. В примере выше массив состоит из элементов: 5, -3, 0, 6, 9 и 11. Они соответственно имеют номера 1, 2, 3, 4, 5 и 6. Под каждым элементом подписан его номер. Чтобы получить доступ к любому элементу массива необходимо: • знать имя переменной-массива. В нашем примере - A, • знать номер элемента внутри массива. Например, чтобы получить доступ к элементу с индексом 3 из массива A, нужно в программе написать A(3). Недопустимо использовать массив целиком, т.е. без указания номера конкретного элемента. Применение массивов дает следующие преимущества: 1. Появляется возможность применять однотипные действия ко всем элементам массива в цикле, перебирая их номера; 2. Программа становится способной к обработке различных объемов данных: количество переменных — элементов массива может быть не фиксированным. Перед применением массива его необходимо описать. Это делается одним из двух операторов: Dim <имя массива>(<константа - число эл-ов в массиве>). Например, Dim A(4) Этот оператор применяется в том случае, если число элементов массива фиксировано и известно на момент написания программы, т.е. является константой. И второй оператор: ReDim <имя массива>(<переменная - число эл-ов в массиве>). Например, ReDim A(N) Этот оператор применяется в том случае, если число элементов массива переменное и не известно на момент написания программы. Работа с массивом состоит из следующих этапов: 1. Dim A(6) 'Описание массива 2. A(1) = 5 : A(2) = -3 : A(3) = 0 : A(4) = 6 : A(5) = 9 : A(6) = 11 'Заполнение элементов 3. A (3) = A(1)^2 + 5 / A(1) 'Операции с массивом 4. Debug.print A(1) , A(2) , A(3) , A(4) , A(5) , A(6) 'Вывод массива на экран (Примечание: Если несколько действий нужно расположить в одну строчку в VBA, то их нужно разделить двоеточием ":") Рассмотрим пример использования массива. Задание. Дан вектор X(n). Обеспечить ввод элементов вектора с клавиатуры. Найти произведение всех элементов вектора, а также среднее арифметическое четных элементов вектора. Выполнение. Перед вводом элементов вектора необходимо запросить их общее количество – n, а потом и сами элементы вектора по одному в цикле. Как и в предыдущих примерах, произведение будет «накапливаться» на каждом проходе цикла поэтапно в какой-либо переменной, например p. Начальное значение для этой переменной – 1. Расчет среднего арифметического возможен в том случае, если имеется сумма и количество всех элементов, подлежащих подсчету согласно условию, т.е. четных. Для «накопления» суммы и количества необходимо также предусмотреть какие-либо незадействованные переменные, например s и k соответственно. Начальные значения для них – 0. Значения p, s и k будут пошагово «накапливаться» при последовательном просмотре всех элементов вектора в цикле, начиная с первого и до последнего. При подсчете s и k нечетные элементы будут пропускаться. Результаты подсчетов будут известны после завершения проходов по всем элементам вектора. Для получения среднего арифметического следует выполнить деление s / k. Программа. 1. 2. 3. 4. 5. 6. 7. 8. Sub massiv_1() 'Начало подпрограммы (макроса) n = Val(InputBox("Введите количество элементов вектора?")) 'Ввод общего колечества элементов с клавиатуры ReDim x(n) 'Описание массива (вектора) x и выделение памяти под него For i = 1 To n 'Начало цикла, обеспечивающего ввод самих элементов вектора x(i) = Val(InputBox("Введите элемент " + Str(i) + "?")) 'Ввод элемента с номером i с клавиатуры Next i 'Конец цикла, обеспечивающего ввод элементов вектора p = 1 'Начальное значение произведения задается 1 s = 0 'Начальное значение суммы задается 0 k = 0 'Начальное значение количества задается 0 10. For i = 1 To n 'Начало цикла, обеспечивающего просмотр всех элементов вектора 11. p = p * x(i) 'Домножение очередного элемента вектора с номером i в произведение p 12. If x(i) Mod 2 = 0 Then 'Проверка, является ли очередной элемент вектора с номером i четным 13. s = s + x(i) 'Если да, то добавление его в сумму s 14. k = k + 1 'А также увеличение счетчика количества четных элементов на 1 15. End If 'Конец действий, относящихся к четным элементам 16. Next i 'Конец цикла, обеспечивающего просмотр всех элементов вектора 17. Debug.Print "Произведение = "; p; " среднее арифметическое четных = "; s / k 'Вывод результата на экран 18.End Sub 'Окончание подпрограммы Словесное описание программы. 9. После ввода количества элементов вектора (с. 2) происходит описание вектора с именем X и количеством элементов n (c. 3). В строчках 4–6 осуществляется последовательный перебор номеров элементов вектора от 1 до последнего, т.е. n и ввод каждого элемента вектора с клавиатуры (с. 5). После задания начальных значений для переменных p, s и k (с. 7 – 9) с помощью цикла организуется блок повторяющихся действий над каждым элементом вектора, начиная с 1 и до последнего, т.е. n (с. 10–16). Среди этих действий: домножение очередного элемента вектора в произведение p (с. 11); проверка, что очередной элемент является четным (с. 12); а также для четных элементов добавление их в сумму s (с. 13) и увеличение счетчика k (с. 14). После просмотра всех элементов вектора выводится результат (с. 17). Блок-схема. Рассмотрим еще один пример. Здесь будет описан стандартный алгоритм поиска максимума/минимума. Задание. Дан вектор X(n). Обеспечить ввод элементов вектора с клавиатуры. Найти максимальный среди элементов, стоящих на нечетных местах. Выполнение. Поиск минимального или максимального элемента осуществляется путем последовательного сравнения какой-либо переменной с каждым элементом вектора, начиная от первого и до последнего. Назовем эту переменную max. При поиске максимума проверяется, если очередной элемент вектора больше этой переменной max, то его значение записывается в эту переменную. Если далее среди последующих элементов находится такой, чье значение больше этого нового значения max, то уже его значение записывается в max. Таким образом, после просмотра всех элементов вектора в переменной max оказывается значение максимального среди всех элементов вектора. Перед началом просмотра элементов вектора важно установить начальное значение для переменной max. Это значение должно быть таким, чтобы при просмотре первого элемента вектора его значение обязательно оказалось бы больше начального значения max. Принимая во внимание, что целые числа в VBA имеют размерность 16 бит, минимально возможным значением является -32768. Следовательно, первый элемент вектора не может быть меньше этого значения. Поэтому начальным значением для max следует задать -32768. По условию задачи следует искать максимум не среди всех элементов вектора, а только среди тех, что стоят на нечетных местах. Поэтому перед проверкой очередного элемента следует убедиться, что его порядковый номер в массиве – i нечетный. Программа. Sub massiv_2() 'Начало подпрограммы (макроса) n = Val(InputBox("Введите количество элементов вектора?")) 'Ввод общего колечества элементов с клавиатуры 3. ReDim x(n) 'Описание массива (вектора) x и выделение памяти под него 4. For i = 1 To n 'Начало цикла, обеспечивающего ввод самих элементов вектора 5. x(i) = Val(InputBox("Введите элемент " + Str(i) + "?")) 'Ввод элемента с номером i с клавиатуры 6. Next i 'Конец цикла, обеспечивающего ввод элементов вектора 7. max = -32768 'Задание для max минимально возможного значения 8. For i = 1 To n 'Начало цикла, обеспечивающего просмотр всех элементов вектора 9. If i Mod 2 <> 0 Then 'Проверка, является ли текущий номер элемента нечетным 10. If max < x(i) Then 'Если да, то сравнение текущего элемента с переменной max 11. max = x(i) 'Если текущий элемент оказался больше, то записываем его в max 12. End If 'Конец действий, относящихся к сравнению текщуего элемента с max 13. End If 'Конец действий, относящихся ко всем элементам, стоящим на нечетных местах 14. Next i 'Конец цикла, обеспечивающего просмотр всех элементов вектора 15. Debug.Print 'Максимум из элементов, стоящих на нечетных местах = "; max 'Вывод результата на экран 16.End Sub 'Окончание подпрограммы Словесное описание программы. 1. 2. После ввода количества элементов в векторе (с. 2) и его описания (с. 3) обеспечивается пошаговый ввод всех элементов вектора (с. 4–6). В с. 7 для max задается минимально возможное значение для переменных разрядностью 16 бит. Перебор всех элементов вектора осуществляется в с. 8–14. Для каждого элемента вектора проверяется, является ли его номер i нечетным (с. 9). Если является, то делается сравнение этого элемента с переменной max (с. 10). Если этот элемент оказался больше max, то его значение записывается в max (с. 11). После просмотра всех элементов вектора результат (max) выводится на экран (с. 15). Если бы задача состояла в поиске минимума, то пришлось бы внести всего лишь 2 изменения: в с. 7 исправить начальное значение переменной max на максимально возможное для переменных разрядностью в 16 бит 32767; и изменить направления знака неравенства в с. 10. Блок-схема. Лекция 4. Двумерные массивы, работа со строками, подпрограммы и файлы Двумерные массивы Что такое двумерные массив? Двумерные массив – это массив, у которого доступ к элементов осуществляется не через один, а через два индекса. Геометрическое представление двумерного массива - это матрица. Если у массива более двух индексов, то такой массив называется многомерным. Такие массивы уже сложно изобразить графически. Квадратной называется матрица, у которой число строк и столбцов одинаково. Пример квадратной матрицы: У квадратной матрицы можно выделить элементы, находящиеся на диагоналях. Здесь красным выделена главная диагональ, а синим - побочная. Внизу под элементами матрицы мелким шрифтом подписаны их индексы, состоящие из номера строки и номера столбца. Для доступа к элементам матрицы необходимо указывать оба индекса, например A(2, 3). Чтобы в программе VBA вывести матрицу построчно, как показано на рисунке ниже, можно использовать следующий пример кода программы: Dim A(5, 5) 2. For i = 1 to 5 3. For j = 1 to 5 4. A(i, j) = Int(Rnd() * 20 - 10) 5. Debug.print A(i, j); 6. Next j 7. Debug.Print 8. Next i Здесь в первом цикле For (с. 2) происходит перебор номеров всех строк матрицы. Во втором цикле For (с. 3) - перебор всех элементов внутри каждой одной строки. Внутри циклов сначала происходит заполнение текущего элемента случайным числом (с. 4), а потом вывод его на экран (с. 5). Точка с запятой в конце с. 5 служит для того, чтобы очередной элемент матрицы печатался на той же строке экрана, а вывод пустой строки в с. 7 - для перевода текущей позиции вывода на новую строку экрана после каждой строки матрицы. Элементы матрицы заполняются случайными числами. Берутся целые числа из интервала от -10 до +10. Это достигается с помощью функции Rnd - генератора случайных чисел. Функция выдает случайные числа в интервала от [0..1]. Чтобы преобразовать этот интервал, сначала происходит его расширение до 20 путем домножения на 20 (Rnd() * 20), потом сдвиг в отрицательную области путем вычитания 10 (Rnd() * 20 - 10), и в конце округление Int(Rnd() * 20 - 10). 1. Если необходимо просто вывести уже заполненную матрицу на экран, то следует из данного фрагмента кода исключить с. 1 и с. 4. Надо понимать, что строки и столбцы могут нумероваться любой переменной: i, j, k и т.п. Важно то, на какое место подставляется переменная. Если переменная подставляется первым индексом, то она служит номером строки. Если вторым индексом - то номером столбца. Рассмотрим пример. Задание: Вывести на экран элементы 2-ой строки и 2-го столбца. Выполнение. Чтобы вывести элементы 2-ой строки, нужно номер строки зафиксировать, а номера столбцов перебирать в цикле. Фрагмент программы: For i=1 to 5 Debug.Print A(2, i) Next i Выполнение. Чтобы вывести элементы 2-го стоблца, нужно номер столбца зафиксировать, а номера строк перебирать в цикле. Причем, как и в предыдущем случае можно использовать переменную i, но подставлять ее на первое место. Фрагмент программы: For i = 1 to 5 Debug.Print A(i, 2) Next i Как видно, разница только в месте, куда подставляется переменная i и номер фиксируемой строки/столбца. Теперь рассмотрим полный пример программы. Задание. Дана квадратная матрица A(n,n). Ввести с клавиатуры размерность матрицы – n и заполнить все элементы матрицы случайными целыми числами в диапазоне от -10 до 10. Вывести исходную матрицу на экран. Переставить местами элементы главной и побочной диагонали матрицы. Вывести полученную матрицу на экран. Выполнение. Программа должна состоять из трех частей: заполнение матрицы случайными числами; перестановка элементов главной и побочной диагонали; и вывод полученной матрицы на экран. Для реализации первой и третьей части потребуется по двум вложенным циклам: внешний цикл обеспечивает перебор номеров строк от 1 до n, а внутренний – перебор номеров элементов внутри каждой строки (столбцов) также от 1 до n. Для заполнение случайными числами используется описанная выше формула. Во время заполнения матрицы следует одновременно выводить ее на экран, чтобы можно было сравнить результаты до и после преобразований. Для перестановки элементов достаточно одного цикла для перебора номеров строк от 1 до n. Имея номер строки i, номер столбца для элементов на диагоналях легко вычисляется и равен для главной диагонали i, а для побочной n – i + 1. Для перестановки также потребуется вспомогательная переменная t, используемая для временного хранения одного из переставляемых элементов. Программа. 1. 2. 3. 4. 5. 6. 7. 8. 9. Sub matrix_1() 'Начало подпрограммы (макроса) n = Val(InputBox("Введите размерность матрицы?")) 'Ввод размерности матрицы ReDim a(n, n) 'Описание матрицы и выделение под нее памяти For i = 1 To n 'Начало цикла для перебора номеров строк матрицы For j = 1 To n 'Начало цикла для перебора номеров элементов внутри строки a(i, j) = Round(Rnd() * 20 - 10) 'Заполнение очередного элемента матрицы случайным числом из диапазона -10..10 Debug.Print a(i, j); 'Вывод очередного элемента матрицы без перевода текущей позиции на следующую строку экрана Next j 'Окончание цикла для элементов внутри строки Debug.Print 'Перевод текущей позиции на новой строку экрана 10. Next i 'Окончание цикла для строк 11. 12. 13. 14. 15. 16. For i = 1 To n 'Начало цикла для перебора номеров строк матрицы t = a(i, i) 'Запоминание очередного элемента главной диагонали во временной переменной a(i, i) = a(i, n - i + 1) 'Копирование очередного элемента с побочной диагонали на главную a(i, n - i + 1) = t 'Копирование запомненного элемента главной диагонали на побочную Next i 'Окончание цикла для строк 17. Debug.Print "Результирующая матрица:" 'Вывод сообщения о начале результирующей матрицы 19. For i = 1 To n 'Начало цикла для перебора номеров строк матрицы 20. For j = 1 To n 'Начало цикла для перебора номеров элементов внутри строки 21. Debug.Print a(i, j); 'Вывод очередного элемента матрицы без перевода текущей позиции на следующую строку экрана 22. Next j 'Окончание цикла для элементов внутри строки 23. Debug.Print 'Перевод текущей позиции на новой строку экрана 24. Next i 'Перевод текущей позиции на новой строку экрана 25.End Sub 'Окончание подпрограммы Словесное описание программы. После ввода размерности матрицы (с. 2) и ее описания (с. 3) следуют вложенные циклы (с. 4– 10) заполнения матрицы случайными элементами (с. 6) и вывода ее на экран (с. 7). Чтобы элементы матрицы выводились на экран построчно, в конце с. 7 ставится точка с запятой (;). Это приводит к тому, что следующий вызов оператора Debug.Print продолжает печатать в той же строке экрана. По завершению внутреннего цикла, т.е. после последнего элемента каждой строки, выполняется дополнительный пустой оператор Debug.Print (с. 9), который приводит к тому, что следующий за ним вызов Debug.Print уже печатает на новой строке экрана. В с. 12–16 осуществляется перебор номеров строк с целью последовательного перебора элементов главной и побочной диагоналей с 1-го до n-го. Внутри цикла для каждой пары элементов главной и побочной диагонали, находящихся на одной (i-й) строке, осуществляется перестановка за 3 шага: запоминание элемента главной диагонали во временной переменной (с. 13), копирование элемента с побочной диагонали на главную (с. 14), и копирование запомненного элемента главной диагонали на побочную (с. 15). Для того чтобы визуально отделить исходную и результирующую матрицу, на экране вывода выводится соответствующая надпись (с. 18). Вывод самой результирующей матрицы осуществляется построчно, аналогично выводу исходной в с. 19–24. 18. Блок-схема. Строковые переменные Строковые переменные служат для хранения последовательностей символов. Эти символы могут быть буквами, цифрами, символами и т.п. При записи строки в VBA она заключается в двойные кавычки - ". Например: A= "Привет, Иван!" При выводе на экран можно использовать как строковые переменные, так и подставлять сами строки: let = 17 Debug.print A; " Поздравляю с "; let; "-ти летием!" Данный код даст следующий текст в окне Immediate window: В памяти компьютера строки хранатся в виде массива кодов символов. Для работы со строками применяются следующие функции: • Len(<строка>) – возвращает длину строки. Пример: Len("Привет") = 6. • Left(<строка>, <длина>) – возвращает подстроку слева с заданным количеством символов. Пример: Left("Привет", 3) = "При". • Right(<строка>, <длина>) – возвращает подстроку справа с заданным количеством символов. Пример: Right("Привет", 3) = "вет". • Mid(<строка>, <начиная с>, <длина>) – возвращает подстроку с заданным количеством символов, начиная с заданного. Пример: Mid("Привет", 2, 3) = "рив". • Instr([<начиная с>], <строка>, <искомая строка>) – Возвращает номер позиции, где найдена искомая строка. Поиск начинается с заданной позиции. Если не найдено, то возвращает 0. Примеры: Instr("Василий", "и") = 4, Instr(5, "Василий", "и") = 6. Рассмотрим примеры. Задание. Ввести с клавиатуры предложение S и произвольную букву S2. Подсчитать какой процент от общества количества букв предложения S составляет буква S2. Выполнение. Необходимо организовать цикл для перебора номеров букв от первой до последней. Внутри цикла следует выделять каждую букву предложения S и сравнивать ее с S2. Если они равны, то увеличивать значение переменной-счетчика на 1. В качестве результата следует вывести результат деления полученного значения переменной-счетчика на общее количество букв в предложении в процентом соотношении. Программа. Sub string_1() 'Начало подпрограммы (макроса) s = InputBox("Введите предложение?") 'Ввод исходного предложения с клавиатуры 3. s2 = InputBox("Введите искомую букву?") 'Ввод буквы для поиска 4. c = 0 'Задание начального значения для счетчика букв 5. For i = 1 To Len(s) 'Начало цикла для перебора номеров букв 6. If Mid(s, i, 1) = s2 Then c = c + 1 'Если выделенная очередная буква равна s2, то увеличиваем счетчик на 1 7. Next i 'Конец цикла перебора номеров букв 8. Debug.Print "Доля буквы '"; s2; "' в предложении '"; s; "' составляет="; c / Len(s) * 100 'Вывод результата 9.End Sub 'Окончание подпрограммы Словесное описание программы. После ввода исходного предложения s (с. 2) и искомой буквы s2 (с. 3) обнуляем значения счетчика букв c (с. 4). Далее организуем цикл (с. 5–7) для перебора номеров букв i. Внутри цикла выделяем каждую букву и сравниваем ее с s2 (с. 6). Если выделенная буква равна s2, то увеличиваем счетчик c на 1 (с. 6). В конце программы делим счетчик c на общее количество букв len(s), умножаем на 100 для перевода в проценты и выводим результат на экран (с. 8). 1. 2. Блок-схема. Рассмотрим другую задачу. Задание. Во введенном с клавиатуры предложении заменить слово «Иван» на слово «Петр». Выполнить программу с помощью функции mid. Выполнение. Вместо «замены» слов в исходной строке следует в цикле последовательно перебирать номера букв от 1 до последней и переписывать все буквы исходной переменной s в новую переменную s2, кроме тех букв, которые образуют слово «Иван». Вместо них следует добавлять в переменную s2 слово «Петр». Программа. Sub string_2() 'Начало подпрограммы (макроса) s = InputBox("Введите предложение?") 'Ввод исходного предложения 3. s2 = "" 'Начальное значение для результирующей строки = пустая строка 4. For i = 1 To Len(s) - 3 'Перебираем все буквы за исключением последних 3 5. s3 = Mid(s, i, 4) 'Выделяем очередные 4 буквы, начиная с текущей i 6. If s3 <> "Иван" Then 'Проверяем, является ли выделенной слово словом "Иван" 7. s2 = s2 + Mid(s, i, 1) 'Если не является, то добавляем 1 текущую букву в s2 8. Else 'Иначе, если является 9. s2 = s2 + "Петр" 'то добавляем в s2 слово Петр 10. i = i + 3 'и увеличиваем номер текущей буквы еще на 3, чтобы в последствии проверять уже после слова Иван 11. End If 'Конец ветвления 12. Next i 'Конец цикла для перебора номеров букв 13. s2 = s2 + Mid(s, i) 'Добавляем оставшиеся 3 (или менее) букв в s2 14. Debug.Print "Введенная строка = "; s 'Вывод исходной строки 15. Debug.Print "Новая строка = "; s2 'Вывод результата 16.End Sub 'Окончание подпрограммы Словесное описание программы. После ввода исходного предложения s (с. 2) задаем начальное значение для результирующей переменной s2 равное пустой строке (с. 3). В цикле перебираем номера букв от 1 до длина строки минус –3 (с. 4). Последние 3 буквы не следует брать, т.к. в них никак не может находиться слово «Иван», длина которого 4 буквы. В с. 5 выделяем 4 буквы, начиная с текущей i в переменную s3. В с. 6 проверяем, являются ли выделенные буквы s3 словом «Иван». Если не являются, то переписываем одну текущую букву в результирующую переменную s2 (с. 7). Иначе, добавляем в s2 слово «Петр» (с. 9). Также необходимо пропустить оставшиеся 3 буквы, чтобы при следующем проходе цикла выделились бы буквы после слова «Иван». Это делается путем увеличения номера букв i на 3 (с. 10). После завершения цикла мы имеем в переменной i номер буквы, на которой остановилась проверка. Оставшиеся буквы также надо дописать в переменную s2 (с. 13). В конце выводим исходное предложение (с. 14) и результирующее (с. 15). 1. 2. Блок-схема. Подпрограммы Подпрограммы - это фрагменты кода программы, выполняющие определенную функцию и вызываемые из разных мест основной программы и из других подпрограмм. Подпрограммы имет интерфейс - перечень входных и выходных параметров. Подпрограммы бывают двух видов: 1. Процедуры - выполняет определенные действия, но не возвращают никаких значений. Их нельзя подставлять в математические выражения. 2. Функции - выполняют определенные действия и возвращают результат. Их можно использовать в математических выражениях. Описание процедуры в VBA имеет слудющий синтаксис: Sub <Имя>(<список параметров>) <Операторы процедуры> End Sub Если параметры отсутствуют, скобки все равно должны ставиться. Описание функции в VBA имеет слудющий синтаксис: Function <Имя>(<список параметров>) <Операторы функции> <Имя>=<Возвращаемое значение> End Sub По завершению расчетов функция должны присваивать результат условной переменной, имеющие имя данной функции. Рассмотрим пример. Задание. Рассчитать и вывести на печать значения функции: где i = 1..3. Выполнение. В данной формуле применяется расчет факториала. Выделим его в отдельную функцию Fact. Также в задаче имеется 2 массива A и B, которые необходимо вводить с клавиатуры. Выделим алгоритм ввода массивов в отдельную процедуру. Функция. Function fact(n) p = 1 For i = 1 to n p = p * i Next i fact = p End Function Процедура. Sub vvod_massiva(m, n) For i = 1 to n m(i) = Val(InputBox("Введите элемент №" + Str(i))) Next i End Sub Основная программа. Sub glavnaya() Dim A(3) vvod_massiva(A, 3) Dim B(4) vvod_massiva(B, 4) For i = 1 to 3 R = Fact(A(i))^2 + B(i)*2 + Fact(B(i+1)) Debug.print R Next i End Sub У подпрограмм различают формальные и фактические параметры. Формальные параметры - это имена переменных, указанные при описании интерфейса подпрограммы. В примерах выше они выделены синим. Фактические параметры - это значения, подставляемые взамен формальных параметров при вызове подпрограммы. В примерах выше они выделены красным. Применение подпрограмм имеет следующие преимущества: • Сокращают текст программы, т.к. повторяющиеся действия записываются один раз; • Улучшают читаемость программы, т.к. в основной программе остаются лишь имена вызываемых подпрограмм без их "внутренностей"; • Облегчают модификацию программы, т.к. исправления достаточно внести только в одно место, где описана подпрограмма; • Упрощают отладку программы по той же причине, что и выше; • Облегчают независимую отладку блоков программы, т.к. после договоренности об интерфейсе подпрограммы (списке входных и выходных параметров с их описанием) ее разработку можно поручить другим программистам. Функции подразделяют на: • пользовательские - описаны выше; • стандартные - это функции встроенные в VBA. Основными алгоритмическими конструкциями подпрограмм являются: 1. Следование - выполнение операторов один за другим сверху вниз; 2. Ветвление - пропуск и переход к определенным операторам в зависимости от условий; 3. Повторение - повторение операторов в цикле. Работа с файлами Работа с файлами возможна двумя способами: 1. Последовательным доступом. В этом случае файл читается или записывается всегда строго в одном направлении от начала и до конца. Перескакивание через какие-либо фрагменты файла или возвраты не допускаются. 2. Произвольным доступом. В этом случае можно перескакивать на любой фрагмент файла, пропуская другие. Возможны также возврат к предыдущим фрагментам и повторное чтение или запись прежних фрагментов. VBA также допускает следующие форматы файлов: 1. Файлы данных. В них каждая строчка представляет собой блок данных. Внутри блока хранятся значения переменных, разделенные запятой. Строковые переменные хранятся в двойных кавычках. Пример: В файле данных «file1.txt» хранится следующее: ”Иван Иванович”, 10, -5 ”Антон Викторович”, 5, 4.5 Здесь мы имеет 2 сточки — блока данных. Каждый блок состоит из 3-х переменных. Первая имеет строковый тип, а остальные — числовой. 2. Текстовые файлы. Содержат просто текст, разбитые на строчки. Пример: В текстовом файле «file2.txt» хранится следующее: Здравствуйте! Поздравляем Вас с Днем Рождения! Ваши друзья Работа с файлами произвольного доступа возможна в двух режимах: 1. Чтение. Для этого файл нужно открывать оператором OPEN “file1.txt” for input as #1. 2. Запись. Для этого файл нужно открывать оператором OPEN “file1.txt” for output as #1. Работа с любым файлом состоит из 3 стадий: 1. Открытие файла. 2. Чтение или запись в файл. 3. Закрытие файла. Рассмотрим основные операторы и функции для работы с файлами произвольного доступа. • Open <путь к файлу> for input as #<номер>. Пример: open «file1.txt» for input as #1 Открывает файл с указанным именем для чтения и присваивает ему условный номер. Этот номер будет использоваться другими функциями, чтобы указать с каким файлом они будут работать. • Open <путь к файлу> for output as #<номер>. Пример: open «file2.txt» for output as #2 Аналогичным образом открывает файл, но для записи. Если файл уже существует, то его содержимое стирается. Если такого файла нет, то он создается. • Eof(#<номер>). Пример: while not eof(1) ...wend Данная функция используется в режиме чтения файла, чтобы определить момент, когда все данные прочитаны и достигнут конец файла. Обычно она используется в качестве условия продолжения цикла, внутри которого происходит чтение файла. • Input #<номер>, <переменные>. Пример: input #1, a, b Этот оператор осуществляет чтение одной строчки из файла данных с указанным условным номером и помещает прочитанные значения в переменные, перечисленные через запятую. Первое значение из файла попадает в первую переменную, второе — во вторую и т.д. После этого оператор переводит указатель позиции в файле на следующую строку. Таким образом следующий вызов любого оператора чтения будет читать уже следующую строчку файла. • Write #<номер>, <переменные>. Пример: write #1, a, 5 Этот оператор осуществляет запись одной строчки в файл данных. Значения для записи перечисляются через запятую. Первое значение записывает первым, второе — вторым и т.д. Значения строкового типа в файле сохраняются в двойных кавычках. • Line input #<номер>, <переменная>. Пример line input #1, a Этот оператор выполняет чтение одной строчки из текстового файла, и помещает прочитанную строку в указанную переменную. После этого оператор переводит указатель позиции в файле на следующую строку. Таким образом следующий вызов любого оператора чтения будет читать уже следующую строчку файла. • Print #<номер>, <переменная>. Пример: print #1, a Этот оператор осуществляет запись новой строки в текстовый файл. Содержимое строки указывается после запятой. Строка записывается в неизменном виде без кавычек. • Close #<номер>. Пример: close #1 Этот оператор закрывает файл, прежде открытый оператором open. При этом освобождаются ресурсы, выделенные для работы с файлом. Рассмотрим примеры. Задание 1. В файле данных хранятся ФИО сотрудников и их зарплата. Создать новый файл данных, в котором будут храниться ФИО и зарплаты сотрудников, у которых она больше 10000. Выполнение. Необходимо сначала в блокноте создать входной файл. Например файл vse_sotr.txt со следующим содержимым: “Иванов Никита Павлович”, 12000 “Осипова Наталья Петровна”, 9000 “Михайлов Евдоким Николаевич”, 7000 Далее в программе нужно открыть одновременно этот файл для чтения, а другой файл, например, sotr.txt для записи. Далее нужно организовать цикл чтения первого файла. Внутри цикла нужно читать каждую строчки в 2 переменные. Первая будет содержать ФИО, а вторая — зарплату из файла. Затем нужно проверять прочитанную зарплату. Если она больше 10000, то нужно выполнить запись этих двух переменных во второй файл. После цикла нужно закрыть оба файла. Программа. Sub file_1() open “vse_sotr.txt” for input as #1 open “sotr.txt” for output as #2 while not eof(1) input #1, fio, zar if zar>10000 then write #2, fio, zar end if wend close #1 close #2 end sub Рассмотрим другой пример с текстовыми файлами. Задание 2. Сократить сообщение, хранящееся в файле следующим способом. Строчки длиной более 20 символов сократить до 17 и добавить троеточие «...» в конце. Остальные строчки оставить без изменений. Результат сохранить в новый файл. Выполнение. Сначала необходимо в блокноте набрать исходный файл с сообщением. Например, soob.txt: Здравствуйте! Поздравляем Вас с Днем Рождения! Ваши друзья Далее в программе нужно открыть этот файл для чтения, а другой, например, soob2.txt для записи. Потом следует организовать цикл, в котором будет читаться строчка из первого файла и помещаться в какую-либо переменную. Потом внутри цикла нужно проверять длину этой строки. Если она больше 20 символов, то во второй файл записывать фрагмент из первых 17 символов этой строки, соединенный с тремя точками. Иначе во второй файл записывать всю строку. После цикла нужно закрыть оба файла. Программа. Sub file_2() open “soob.txt” for input as #1 open “soob2.txt” for output as #2 while not eof(1) line input #1, str if len(str) > 20 then print #2, left(str, 17) + “...” else print #2, str end if wend close #1 close #2 Лекция 5. Технологии разработки программного обеспечения Этапы разработки программного обеспечения Разработки программного обеспечения (ПО) осуществляется поэтапно. 1. Анализ требований. На этом этапе участвует человек, хорошо представляющий предметную область задачи (биолог, экономист, инженер). Он должен чётко определить цель задачи, дать словесное описание содержания задачи и предложить общий подход к её решению. 2. Проектирование (математическое или информационное моделирование). Цель данного этапа – создать такую математическую модель решаемой задачи, которая могла быть реализована в компьютере. Существует целый ряд задач, где математическая постановка сводится к простому перечислению формул и логических условий. Здесь осуществляется выбор методов решения задачи и математического аппарата. Этот этап тесно связан с первым этапом, и его можно отдельно не рассматривать. Однако возможно, что для полученной модели известны несколько методов решения и необходимо выбрать лучший. 3. Кодирование. На основе математического описания необходимо разработать алгоритм решения. Ввод программы и исходных данных в компьютер с клавиатуры с помощью редактора текстов. Поиск и устранение грубых синтаксических ошибок. 4. Тестирование и отладка программы. Исполнение алгоритма с помощью компьютера, поиск и устранение ошибок. Подстановка реальных тестовых значений и проверка правильности результатов, выдаваемых программой. Устранение ошибок кодирования и проектирования. При этом программисту приходится выполнять рутинную работу по проверке работы программы, поиску и исключению ошибок, и поэтому для сложных программ этот этап часто требует гораздо больше времени и сил, чем написание первоначального текста программы. Сложные программы отлаживают отдельными фрагментами. Для повышения качества выполнения этого этапа используются специальные программы – отладчики. 5. Документирование. Разработка технической и пользовательской документации к программе. 6. Сопровождение. Взаимодействие с потребителями программы с целью их обучения и выявления новых возможностей и путей дальнейшего усовершенствования программы. Данный этап может осуществляться неограниченное время. Все этапы разработки можно обобщенно назвать жизненным циклом ПО. Таким образом, жизненный цикл ПО продолжается от момента начала создания программы и пока она востребована пользователями. Понятие алгоритма Алгоритм – это набор точных и понятных предписаний о содержании и выполнении конечного числа каких-либо действий, приводящих к решению задачи данного типа. Термин алгоритм ведёт начало от перевода на европейские языки имени арабского математика Аль-Хорезми. Существуют различные способы записи алгоритма: 1. На естественном языке – описание на обычном разговорном (естественном) языке; 2. На формальном языке – в виде программы, выполняемой на компьютере или псевдокода с использованием слов естественного языка. 3. Графический способ – в виде блок-схем, таблиц истинности или каких-либо других изображений. В таблицах истинности изображается соответствие всех возможных значений выходных сигналов (параметров) со всеми возможными значениями входных сигналов (параметров). Каждый алгоритм должен удовлетворять следующим свойствам: 1. Детерменированность. Команды и предписания алгоритма строго предопределны и должны всеми толковаться однозначно без разночтений. Чтобы алгоритм обладал этим свойством, он должен быть записан командами из строго регламентированной системы команд. Конечность. Каждое действие и весь алгоритм в целом должен иметь завершение, т. е. не должен осуществляться бесконечно. 2. Результативность. Алгоритм должен завершаться получением какого-либо результата, т. е. он не должен быть бесцельным. 3. Массовость. Алгоритм должен быть применим для решения не только одной задачи, но целого класса задач из данной области. 4. Правильность. Алгоритм должен выдавать верные результаты. 5. Формальность. Команды алгоритма должны исполняться формально, т. е. "бездумно" (без разночтений). При разработке алгоритмов широко применяется метод пошаговой детализации. При нем сложный алгоритм разбивается на более мелкие, каждый из которых разрабатывается независимо друг от друга с предварительным согласованием входных и выходных параметров. В последствие разрабатывается основной алгоритм с использованием всех его более мелких составляющих. Языки программирования Язык программирования – это язык, алфавит, словарный запас и структура которого удобны и понятны компьютеру. Языки программирования должны быть понятны и человеку, и компьютеру. Языки программирования бывают двух больших классов: 1. Декларативные. Имеют описательный характер. Применяются для описания данных, фактов, знаний и связей между ними в различной форме: в виде тестовых структур, схем, продукционных правил (вида "Если – то"), логических утверждений (например, язык Prolog – логика предикатов, язык LISP и др.). В них нет какой-либо четко определенной последовательности шагов для достижения цели. Среди них особое место занимает логический язык высокого увроня - Prolog. 2. Процедурные. Содержат набор действий (процедур) с данными и их последовательность, необходимые для получения результата. Это большинство языков. Процедурные языки подразделяются на следующие виды: 1. Низкого уровня (машинно-ориентированные). Это набор простейших командкодов, которые могут непосредственно выполняться определенным микропроцессором. Под каждый вид микропроцессора необходимо разрабатывать свою программу. Такие языки отражают структуру данного класса компьютера, и поэтому иногда называются машинно-ориентированными. Пользуясь системой команд, понятной данноме компьютеру, можно описать алгоритм любой сложности, но такая запись для сложных задач будет очень громоздкой и мало приспособленной для использования человеком. Существенной особенностью языков низкого уровня является жесткая ориентация на определённый тип аппаратуры (систему команд процессора). Язык Ассемблера – разновидность языка низкого уровня, у которого вместо кодов записываются слова более понятные человеку. Структура команд Ассемблера определяется форматами команд и данных машинного языка. Программа на Ассемблере ближе человеку, потому что операторы этого языка – те же коды, но они имеют мнемонические названия; используются не конкретные адреса, а их символьные имена. Достоинства языков низкого уровня: • Высокое быстродействие программы; • Использование всех возможностей микропроцессора. Недостатки: • Сложность разработки и понимания для человека; • Сложность поиска ошибок и модернизации. 2. Высокого уровня. Средства таких языков допускают описание задачи в наглядном, легко воспринимаемом виде. Отличительной особенностью этих языков является ориентация не на систему команд того или иного компьютера, а на систему операторов, характерных для записи определённого класса алгоритмов. Программа на языках высокого уровня записывается системой обозначений, понятной человеку (например, фиксированным набором слов английского языка). Однако для исполнения таких программ на компьютере требуются трансляторы. Примеры язков выского уровня: Basic (Beginner's All-purpose Symbolic Instruction Code - переводится как универсальный симвполический код для начинающих), Фортран, Pascal (создатель языка - Никлаус Вирт), C, C++, Delphi, Java, Perl, PL4, PHP, Javascript, Ada (назван в честь первой программистки Ада Лавлейс) и т.д. Среди языков выского уровня особое значение имеют объектно-ориентированные языки: C++, Java, Delphi, Visual Basic. Достоинства языков высокого уровня: • Простота и меньшее время разработки и понимания человеком. • Простота поиска ошибок и модернизации. • Возможность запуска на различных микропроцессорах (МП) за счет отсутствия ориентации я систему команд конкретного МП. • Данные имеют тип, что упрощает поиск ошибок и улучшает читаемость программы. Недостатки: • Сравнительно меньшая производительность. Текст программы, записанный на языке выского уровня не может быть воспринят компьютером непосредственно, требуется перевести его на машинный язык. Перевод программы с языка программирования на язык машинных кодов называется трансляцией (translation – перевод), а выполняется специальными программами – трансляторами. Трансляторы – это программы, осуществляющие перевод (трансляцию) команд с языка высокого уровня, на машинные коды, понятные какому-либо конкретному микропроцессору. Любой транслятор решает следующие основные задачи: • Анализирует транслируемую программу, в частности, проверяет, содержит ли она синтаксические ошибки; • Генерирует выходную программу (её часто называют объектной или рабочей) на языке команд компьютера; • Распределяет память выходной программы, в простейшем случае назначает каждому фрагменту программы: переменным, константам и другим объектам свои адреса в памяти. Любой транслятор имеет в себе следующие компоненты: • Лексический анализатор – проверяет правильность записи слов программы. • Синтаксический анализатор – разбирает текст программы в соответствии с грамматикой данного языка. • Семантический анализатор – проверяет правильность типов данных и преобразований с ними. • Генератор кода – создает программу в машинном коде и распределяет память под переменные, константы и т.п. Трансляторы бывают двух видов: 1. Интерпретаторы. Читают команды языка высокого уровня и выполняют их поочередно. Сама программа остается в прежней форме – на языке высокого уровня. Примерами языков, запускаемых в интерпретаторах, являются: Basic, Java (виртуальная машина Java является интерпретатором), Javascript, PHP. 2. Компиляторы. Преобразуют программу с языка высокого уровня в загрузочный модуль (файл) в машинном коде конкретного микропроцессора (МП). Загрузочный модуль потом может быть непосредственно запущен на этом МП без компилятора. Примерами языков, программы которых подвергаются компиляции, являются: Pascal, Delphi, C, C++. Работа компилятора состоит из следующих этапов: • Непосредственно компиляция, т.е. преобразование текста программы в объектный (перемещаемый) код, в котором все адреса относительные; • Компоновка (линковка) (от англ. link - соединять) - соединение нескольких объектных модулей в один исполняемый модуль (COM или EXE-файл) и подстановка конкретных адресов памяти. Этот этап осуществляется линкером. Разработка сложных программ осуществляется в Интегрированны средах программирования (Integrated Development Environment - IDE). В состав IDE входят: • Текстовый редактор для ввода и редактирование текста программы. Современные редакторы имеют подсказщики, позволяющие быстро выбрать нужную функцию или переменную, допустимую для ввода в данном месте текста программы; • Транслятор; • Отладчик (Debugger) предназначенный для запуска программы в пошаговом режиме (по одной строчке) для поиска ошибок; • Инструменты визуального проектирования для разработки интерфейса программы (размещение кнопок, форм и прочих элементов управления). Принципы проектирования программ, объектно-ориентированное программирование Существует 2 основных способа проектирования программ: 1. Низходящее проектирование. По другому оно называется проектированием "сверхувниз". В его основу положены следующие принципы: • Осуществляется последовательное разбиение (декомпозиция) большой сложной задачи на более мелкие задачи – модули; • Для каждого модуля разрабатывается интерфейс – описание входных и выходных параметров; • Модули верхнего уровня разрабатываются без "заглядывания" (т.е. детализации описания) в модули нижних уровней; • Разработка модулей может идти параллельно разными разработчиками. Этот способ графически можно изобразить следующим образом: Здесь прямоугольниками обозначены подзадачи-модули, а цифрами последовательность их разработки. 2. Восходящее проектирование. По другому оно называется проектированием "снизувверх". В его основу положены следующие принципы: • Сначала решаются частные задачи, чтобы увидеть пути решения общей задачи; • По мере уточнения общей задачи возможен возврат к решению отдельных подзадач; • Применяется в сложных "исследовательских" проектах, когда решение задачи в целом заранее не очевидно. Этот способ графически можно изобразить следующим образом: При написании программ также широко применяются следующие концепции: 1. Модульное программирование. В его основу положены следующие принципы: • Применение проектирования "сверху-вниз", т. е. большие программы следует разбивать на более мелкие подпрограммы; • Модуль должен иметь одну точку входа и одну точку выхода; • Запрещается использование "общей памяти", где бы хранились переменные всех модулей. Вместо них у моделей должны быть дополнительные параметры. 2. Структурное программирование. В его основу положены следующие принципы: • Запрещается оператор безусловного перехода – GOTO; • Применение проектирования "сверху-вниз", т. е. большие программы следует разбивать на более мелкие подпрограммы; • Один модуль не может воздействовать на переменные в другом модуле; • Запрещается использование "общей памяти", где бы хранились переменные всех модулей. Вместо них у моделей должны быть дополнительные параметры. Согласно концепции структурного программирования в программах должен быть реализован следующий минимальный набор операторов: • Оператор присваивания; • Должно быть последовательное выполнение операторов; • Оператор ветвления – if then else; • Оператор цикла с условием – while. 3. Объектно-ориентированное программирование (ООП). Объект – особая структура, состоящая из поименованных переменных и методов – процедур и функций их обработки. Переменные-члены в отличие от массивов, могут иметь различный тип. Объект аналогичен записи (строке) в базе данных. Класс в объектно-ориентированном программировании - это множество объектов, имеющих общее поведение и общую структуру. Класс – это абстрактный образ объектов. Объект – это конкретный экземпляр класса, наполненный данными. Понятию "класс" объектно-ориентированного программирования соответствует в классическом программировании понятие тип данных. Чтобы пояснить взаимоотношение классов и объектов рассмотрим 2 понятия: "автомобиль" и "мой автомобиль". Понятие "автомобиль" в данном случае является классом, а понятие "мой автомобиль" - объектом. Каждый класс имеет в своем составе перечень переменных-свойств. Они называются членами или переменными-членами. Например, в нашем примере переменнымичленами могут быть характеристики автомобилей: "вес", "мощность", "заправлено топлива" и т.п. Объект в этом случае будет содержать конкретные значения этих величин, например: вес=1.2 тонны, мощность=90 л.с., заправлено топлива=41 л. Кроме того, с объектами можно осуществлять различные действия. Эти действия описываются в функциях-членах класса, называемых методами. Методы описываются в классах, но применяются к объектам этого класса. Например, можно описать метод "заправка". Очевидно, этот метод должен увеличивать свойство "заправлено топлива". Применить этот метод можно к объекту "мой автомобиль". Для описания объекта moe_avto класса Avtomobil применяется следующий синтаксис: Dim moe_avto as Avtomobil Для доступа к переменным-членам нужно указывать имя объекта и имя переменнойчлена через точку. Например, чтобы этому объекту задать свойство ves нужно записать: moe_avto.ves = 1.2 Для вызова методов также нужно указывать имя объекта и метод через точку. В скобках указываются параметры метода. Например, чтобы вызвать метод zapravka с указание количества заправленого топлива нужно записать: moe_avto.zapravka(20) В программе можно описывать различные классы. Причем классы могут находитсья в "родственных" отношениях друг с другом. Например, можно описать класс "транспортные средства", который будет родительским по отношению к классам "автомобиль" и "поезд". Они будут называться дочерними. В этом случае наиболее общие переменные-члены и методы этих двух классов можно описать в родительском классе - "транспортные средства". Например, переменные-члены "вес" и "мощность" можно перенести в класс "транспортные средства". Переменную-член "заправлено топлива" нельзя перенести, т.к. она характерна только для автомобилей, и для некоторых поездов (например, электропоездов) она не актуальна. Такие родственные отношения позволяют создавать иерархию классов. В ООП применяются следующие парадигмы: • Наследование. Это означает, что все дочерные классы наследуют свойства (переменные-члены) и методы родительских классов. Другими словами к ним можно осуществлять доступ из объектов дочерних классов. Например, у объектов класса "поезд" будут доступны свойства "вес" и "мощность", описанные в классе "транспортные средства". • Инкапсуляция. Означает, что доступ к свойствам объектов желательно осуществлять не напрямую, а посредством специальных методов данного класса. Например, не желательно вручную увеличивать свойство "заправлено топлива", а вместо этого вызывать метод "заправка", чтобы сам объект "заботился" о своих свойствах. • Полиморфизм. Означает возможность переопределения методов дочерними классами. Например, если у класса "автомобиль" существует еще дочерний класс "гоночный автомобиль", для которого важен каждый килограмм веса, то у класса "гоночный автомобиль" может быть переопределен метод "заправка" так, чтобы он корректировал не только свойство "заправлено топлива", но и свойство "вес". Лекция 6. Сетевые технологии Топологии вычислительных сетей и сетевая архитектура Компьютерная (вычислительная) сеть – это совокупность компьютеров и линий связи между ними, объединенных для совместного использования информационных и вычислительных ресурсов. По территориальному признаку компьютерные сети можно разделить на: • локальные сети (в пределах одной организации), • корпоративные сети (при большой территориальной распределенности одной организации), • региональные (охватывают территорию одного района или города), • глобальные сети. В глобальных сетях выделяют магистральные сети в пределах стран и объединяющую их вместе сеть Интернет. Любая компьютерная сеть включает в себя систему каналов передачи данных, телекоммуникационное, серверное и клиентское оборудование, называемое узлами сети, сетевые операционные системы, сетевые приложения. Топология сети – это схема (структура) соединения компьютеров в сети. Различают следующие 2 класса топологий сети: • Одноранговые – все компьютеры сети имеют одинаковое значение; • На основе сервера (клиент-серверные) – есть центральный компьютер (сервер) – "поставщик" ресурсов и "потребители" ресурсов – клиенты. Архитектура «клиент-сервер» позволяет использовать распределенные вычисления. Распределенные вычисления - это технология решения сложных вычислительных задач, предполагающая разделение задачи на подзадачи, которые распределеяются между нескольким компьютерами, и решаются одновременно с постоянным согласованием действий между этими компьютерами. При распределенных вычислениях должен быть центральный компьютер - сервер, координирующий работу других компьютеров. Рассмотрим подробнее все виды топологий. Топология "Звезда". Имеется центральный компьютер - сервер, к которому отдельными линиями связи подключены все другие компьютеры - клиенты. "Звезда" является топологией типа "клиентсервер". Достоинства топологии «звезда»: • Простота администрирования, т.к. все основные работы осуществляются из одного центра - сервера; • При обрыве линии теряется связь только с одним клиентом; • Информационная безопасность – сложно перехватить чужие данные, т.к. они передаются по другим физическим линиям связи. Недостатки: • Требует сравнительно большое количество линий. • Центральный компьютер имеет высокую стоимость. Топология "Общая шина". Имеется одна линия связи - шина, через которую передаются все сообщения между любой парой компьютеров, подключенных к шине. Является одноранговой топологией. Широко применяется в локальных вычислительных сетях (ЛВС) с протоколом Ethernet. Достоинства: • Требуется меньше всего линий связи по сравнению с другими топологиями; • Низкая стоимость всех компьютеров. Недостатки: • Низкая надежность – при обрыве линии отключается несколько компьютеров сразу; • Плохая масштабируемость – при увеличении числа компьютеров линия может не справиться с объемами данных; • Низкая информационная безопасность – легко перехватить чужие данные. Топология "Кольцо". Здесь происходит последовательное обслуживание узлов сети, т.е. сообщения передаются от одного компьютера к соседнему и далее через промежуточные компьютеры. В отличие от топологии "общая шина" сообщения "заходят" к каждому промежуточному компьютеру. Направление передачи может быть как по часовой, так и против часовой стрелки. Топология "Ячеистая". Топология "Полносвязная". Здесь каждый компьютер сети соединен с каждым другим отдельной линией связи. Здесь требуются большие расходы на линии связи, поэтому данная топология применяется редко. Топология "Смешанная". Здесь имеются фрагменты топология всех видов. Все большие сети имеют именно такую топологию. Сетевая архитектура – это комбинация стандартов, топологий и протоколов, используемых для построения сетей. Различают следующие типы сетевых архитектур: • Ethernet – в локальных вычислительных сетях (ЛВС); • Token Ring – в глобальных сетях. Основные понятия сетевых технологий и характеристики сетей Кодирование – изменения формы представления информации с целью ее передачи, хранения и обработки. Протокол – набор правил и соглашений о кодировании данных и обмене служебной информации между передающим и принимающим сетевым интерфейсом (компьютером). Маршрутизация – определение маршрута (через какие линии связи и компьютеры) передачи данных в сложных сетях. Сетевой интерфейс – устройство или программа, обеспечивающая передачу данных между компьютерами или программами. Разделение каналов – метод передачи нескольких независимых потоков данных через одну среду (кабель, спутник, радиоэфир). Модем – устройство (плата) для преобразования цифровых сигналов в аналоговые (пригодные для передачи по линиям связи) и обратно. Концентратор – устройство (плата), обеспечивающее частотное разделение каналов передачи. Мост – устройство (плата) для соединения сетей с одинаковыми методами передачи данных. Бывают локальные и удаленные, внутренние и внешние. Маршрутизатор – устройство (плата) для соединения сетей разного типа, но с одним протоколом передачи данных. Шлюз – устройство (плата) для соединения сетей с разными протоколами передачи данных. Например, для связи локальной сети с глобальной. Как уже говорилось, в сетевую архитектуру также входит и применяемая операционная система (ОС). Большинство ОС сейчас имеют поддержку сетей, но можно выделить несколько ОС, которые специально ориентированы на работы в сетях: • Windows NT/2000/2003, • Unix (Linux), • Novell Netware. Любая сеть имеет определенные параметры (характеристики), описывающие ее. Рассмотрим их. 1. Производительность – характеризует объем и требуемое время на передачу данных. Описывается двумя основными показателями: пропускная способность – BAUD RATE и время отклика (реакции) сети – PING. Поясним их на рисунке: Здесь осуществляется передача пакета данных, состоящего из нескольких байт, от компьютера "A", к компьютеру "B". При этом можно выделить 4 характерные момента времени: время начала и конца передачи пакета данных с компьютера "A", и время начала и конца приема этого пакета данных на компьютере "B". • Пропускная способность - это физическая скорость линии передачи данных. Она определяется быстродействием приемо-передающего оборудования и характеристиками самой линии связи. Она измеряется в бодах - это количество бит, передаваемых за секунду времени. Пропускная способность современного оконечного оборудования измеряется в мегабитах в секунду (МБит/с). Из определения ясно, что, как видно из рисунка, пропускная способность описывается длиной промежутков времени между началом и концом передачи и между началом и концом приема пакета данных. • Врема реакции сети определяет время, необходимое на прохождение 1 байта данных от передающего компьютера "A" до принимающего "B". Основное влияние на эту характеристику оказывает пропускная способность сети, но не только она. Значение также имеет количество промежуточных компьютеров между передающим "A" и принимающим "B". Время реакции сети может быть высоким и при высокой пропускной способности, если имеется большое количество промежуточных компьютеров - узлов сети. Эта характеристика измеряется в секундах. Обычно при передачи блоков данных эта характеристика не очень важна. Исключение составляют задачи реального времени, в которых важно быстро получать сообщения и высылать ответ на них. Примером таких задач являются: системы IP-телефонии и игры. В первых высокое время реакции сети проявляется как "задержка" между фразами одной и другой стороны, участвующей в разговоре. Рассмотрим остальные характеристике сетей: 2. Надежность – вероятность того, что сеть будет работать безотказно. 3. Безопасность – защищенность от несанкционированного перехвата или порчи данных, повреждения сети. 4. Расширяемость – простота добавления новых компьютеров (узлов). 5. Масштабируемость – способность сохранения производительности при увеличении числа узлов сети. 6. Прозрачность – единообразие способов доступа к ресурсам, независимо от их физического размещения. 7. Поддержка различных видов трафика – возможность совмещать функции передачи информации разного вида: телефонной, телевизионной, компьютерной и т. п. 8. Управляемость – возможность распределения ресурсов сети и устранения неполадок из единого центра. 9. Совместимость – поддержка взаимодействия различного оборудования и типов линий передачи данных. Модель взаимодействия открытых систем (OSI) Чтобы обеспечить взаимодействие самых различных программ, оборудования и операционных систем в глобальных сетях, разработана модульная модель построения сети. Причем каждый модуль имеет свой уровень. Нижние модули отвечают за физическое кодирование, модули более высокого уровня – за адресацию и маршрутизацию, и на самом высоком уровне – за предоставление прикладных услуг пользователю компьютера. При этом модули низкого уровня "прозрачны" для модулей более высокого уровня, у которых создается иллюзия "непосредственного взаимодействия". Для каждого уровня существует свой протокол и интерфейсы взаимодействия с нижним и верхним уровнями. Совокупность таких протоколов называется стеком протоколов. Такая модель получила название Модели Взаимодействия Открытых Систем - Open System Interconnection (OSI). Открытыми называются системы, обеспечивающие возможность взаимодействия по опубликованным стандартным протоколам, а не по своим внутренним корпоративным протоколам. Модель OSI имеет 7 служебных уровней. Физически каждый пакет данных должен пройти на передающей стороне сверху от Приложения сначала в уровень Прикладной, где к нему добавится определенная служебная информация, потом в уровень Представительный и т.д. до Физического уровня и в Сеть. Потом на принимающей стороне из Сети он должен попасть сначала в Физический уровень, потом в Канальный и т.д. до уровня Прикладного и в Приложение принимающей строны. Служебная информация, добавленная Физическим уровнем передающей стороны будет прочитана Физическим уровнем принимающей стороны. Аналогично Прикладным уровнем в Прикладном уровне. Таким образом, каждый уровень передающей стороны "взаимодействует" с таким же уровнем принимающей стороны, но это взаимодействие не непосредственное, а логическое. При построении многоуровневой сетевой системы необходимо обеспечить "взаимопонимание" на каждом из уровней, то есть совместимость протоколов, а также "взаимопонимание" при передаче информации с одного уровня на другой, то есть совместимость интерфейсов. Рассмотрим каждый уровень. Физический уровень (Physical layer). На этом уровне выполняется согласование электрических сигналов между сетевыми интерфейсами и способы их синхронизации при передаче на расстояния. Протоколы физического уровня определяют и набор правил представления информации в виде изменения той или иной физической величины, например, электрического напряжения в кабеле. Также физический уровень определяет требования к характеристикам физической среды передачи данных (кабелей, разъемов) и передающего оборудования. Канальный уровень (Data-link layer). На канальном уровне организуется совместный доступ к среде передачи данных, проверяется её доступность. В связи с возможностью начала одновременной передачи данных несколькими независимыми источниками по единой среде возможно столкновение данных (коллизия). В задачи канального уровня входит устранение коллизий. Выполняются также задачи обнаружения и коррекции ошибок и адресации (передачи информации между двумя заданными компьютерами), но не маршрутизации. Это означает, что доставка информации происходит только в пределах одного сегмента сети, имеющего строго определенную топологию и построенного на основе конкретной технологии. Функции канального уровня реализуются средствами телекоммуникаций: коммутаторами, концентраторами, мостами, сетевыми адаптерами и их драйверами. Сетевой уровень (Network layer). На сетевом уровне решаются задачи маршрутизации и объединения разнородных по топологии и оборудованию сетей, то есть передачи блоков информации между компьютерами, находящимися в различных сегментах сети, которые могут работать на основе различных сетевых технологий. Сети соединяются между собой специальными устройствами – роутерами (route, маршрут) или маршрутизаторами. В качестве маршрутизаторов могут выступать компьютеры (маршрутизирующие серверы) и специальные телекоммуникационные устройства. В настоящее время главным сетевым протоколом является IP (Internet Protocol). Транспортный уровень (Transport layer). На транспортном уровне решается задача обеспечения надежной и безошибочной связи, совместного использования одного сетевого соединения различными программами и протоколами сетевого уровня и коррекции ошибок. При передаче пакетов через сложную сеть возможны потери, дублирования или подмены пакетов, которые обнаруживаются средствами протоколов сетевого уровня. Также этот протокол позволяет распределять принимаемые данные между программами, совместно работающими с сетью. Самые распространенные протоколы транспортного уровня это TCP (Transmission Control Protocol - протокол управления передачей) и UDP (User Datagram Protocol - протокол передачи пользовательских дейтаграмм). Протоколы нижних четырех уровней, как правило, называют транспортной подсистемой, так как они полностью решают задачу передачи блоков информации между узлами сети, а протоколы верхнего уровня решают прикладные задачи. Сеансовый уровень (Session layer). На сеансовом уровне организуется синхронизация взаимодействия приемника и передатчика, которая позволяет разбить сложный процесс взаимодействия на несколько сеансов. Примером может являться процесс возобновления приема информации с восстановлением с прежнего места в случае разрыва. На практике функции сеансового уровня требуются достаточно редко и, как правило, не выделяются в отдельный протокол, а реализуются в протоколе прикладного уровня. Представительный уровень (Presentation layer). На представительном уровне проводится изменение формы представляемой информации, например, шифрование или приведение к единой кодировке символов. Примером этого протокола является SSL (Secure Socket Layer - уровень безопасных соединений). Прикладной уровень (Application layer). Протоколы прикладного уровня обеспечивают приложениям доступ к разделяемым ресурсам. Прикладной протокол представляет собой набор команд, которые клиент передает серверу для получения определенной информации. Примерами протоколов сетевого уровня являются HTTP (Hyper Text Transfer Protocol - протокол пересылки гипертекста), FTP (File Transfer Protocol - протокол пересылки файлов) и др. Линии передачи данных Существует 3 способа передачи данных по линии связи: • Симплексный – это передача только в одном направлении. Примеры: телевидение передача только от телестанции к телевизору, пожарная сигнализация - передача только от датчика на пульт дежурного. • Полудуплексный – это передача в обоих направлениях, но не одновременно, а попеременно то в одном направлении, то в другом. Примеры: рация, домофон. В обоих устройствах для смены направления нужно нажимать кнопку. • Дуплексный – это передача в обоих направлениях одновременно. Примеры: телефон, интернет. Для организации дуплексного способа передачи данных применяют либо 2 независимые физические линии, например, 2 пары проводов, либо используют технологии организации двух независимых каналов по одной физической линии с применением частотного или временнОго разделения каналов. Для создания нескольких независимых каналов передачи данных по одной физической линии используются устройства концентраторы. Передача данных может осуществляться по радио или через физическую линию. Рассмотрим основные виды линий передачи данных. Витая пара. Представляет собой 2 изолированных проводника, скрученных друг с другом как косичка. Скручивание обеспечивает более высокую помехозащищенность линии по сравнению с нескрученными проводниками. Достоинства: • Дешевизна; • Простота монтажа; • Широко используется в локальных вычислительных сетях (ЛВС). Недостатки: • Высокая подверженность помехам; • Низкая скорость передачи данных (до 100МБит/с); • Дает помехи и сам подвержен им. Коаксиальный (соосный) кабель. Имеет сложное внутреннее устройство. В середине имеется внутренний проводник из цельной медной жилы. Вокруг него отлита виниловая изоляций строго нормированной толщины. Вокруг нее обвита оплетка (сетка из тонких проволок) или фольга, представляющая собой внешний проводник. Сверху него находится плотная изолирующая и защищащая виниловая оболочка. Сигнал передается не столько по проводам, сколько в виде радиоволны в пространстве между внутренним и внешним проводником. Геометрические оси обоих проводников совпадают, что дало название этому кабелю - коаксиальный, т.е. в переводе соосный. Соединительное оборудование также имеет сложное устройство, призванное обеспечить сохранение внутренней геометрии кабеля. Достоинства: • Более высокая скорость по сравнению с витой парой (более 100 МБит/с); • Дороже витой пары, но дешевле оптоволоконного кабеля. Недостатки: • Также подвержен помехам, хотя и в меньшей степени, чем витая пара; • Сложность монтажа из-за необходимости соблюдать внутреннюю геометрию кабеля. Соединения не очень надежны; • В настоящее время используется редко, т.к. все более вытесняется дешевеющим оптоволоконным кабелем. Оптоволоконный кабель. Является наболее современным видом кабеля, обеспечивающим самую высокую скорость передачи данных и самую высокую дальность передачи без применения повторителей. Сигнал передается в виде импульсов света по оптическому волокну. Стеклянное покрытие обеспечивает отражение света и сохранение его силы внутри оптического волокна. Защитное покрытие служит для защиты от внешних механических повреждений и воздействий окружающей среды. Достоинства: • Очень высокая скорость передачи (более 1 ГБит/с); • Кабель совершенно не подвержен помехам; • Не дает никаких вредных излучений и не подвержен несанкционированной прослушке; • Высокая дальность передачи без повторителей; • Используется очень часто на дальние расстояния. Недостатки: • Высокая цена, которая однако постоянно снижается; • Сложность монтажа – требуется специальное дорогостоящее оборудование; • Уязвим к механическим воздействиям: изгиб и деформация, что требует дополнительных мер к его защите. Лекция 7. Основные понятия сети Интернет Адресация в сети Интернет Передача данных по сети Internet осуществляется на основе семейства протоколов TCP/IP. IPпротокол – межсетевой протокол, отвечающий за передачу данных. TCP-протокол– протокол управления передачей данных. В сети Интернет действуют 2 системы адресации: 1. IP-адресация. Пример IP-адреса: 10.0.0.34 Данные в Интернет передаются в виде коротких пакетов (до 1.4 кбайт). В заголовке каждого пакета вместе со служебной информацией указывается IP-адрес получателя. Каждый клиент Интернет имеет уникальный IP-адрес. IP-адрес представляет собой 4-х байтовое в традиционное версии - IPv4 или 16-ти байтовое число в новой версии IPv6. В IPv4 адрес представляется чаще всего в виде чисел от 0 до 255 (например, 10.83.114.10), конкретизация адреса осуществляется слева направо, т.е. слева расположены старшие разряды, а справа - младшие. IPv6 появилась сравнительно недавно и еще не получила широкого распространения. В ней адрес записывается в виде 8 групп из 16-ти разрядных чисел, записываемых в шестнадцатиричной системе счисления. Например, 2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d В IPv4 первые 1, 2 или 3 байта являются адресом подсети. Оставшиеся байты – адрес компьютера внутри подсети. Например, в адресе 10.0.0.34 10 – адрес подсети, а 0.0.23 – адрес компьютера внутри подсети. IP-адреса бывают: • Статические. Такие адреса закрепляются за компьютером. Все сервера сети Интернет должны иметь статический адрес. • Динамические. Даются временно в момент подключения к сети. При следующем подключении может быть назначен другой адрес. Кроме того IP-адреса бывают: • Глобальные. Они берутся из всемирного списка адресов. Их называют "белыми". К таким адресам возможен прямой доступ от любого компьютера сети Интернет. • Внутренние. Они берутся из списка внутри организации. Их называют "серыми". Компьютер с серым адресом получает доступ в интернет не напрямую, а через специальный мост. В результате к такому компьютеру невозможно подключиться извне локальной сети, хотя сам компьютер может подключаться к белым адресам. На серых адресах невозможно установить Интернет-сервер и службы прямого (PEER-TOPEER) обмена файлами. 2. Доменная система имен - Domain Name System (DNS) - это второй тип адресации сети Интернет. Домен – совокупность компьютеров, принадлежащих одному уровню. DNS (Domain Name System) – доменная система имен – система преобразования доменных адресов в IP-адреса. Важно понимать, что DNS является вторичной системой. Для связи с компьютером, его DNS-адрес должен быть предварительно преобразован в IP-адрес. Этим занимаются специальные подсистемы, с которыми автоматически взаимодействует браузер при вводе DNS-адреса. Рассмотрим доменный адрес www.rgups.ru В доменной адресации уточнение адреса сервера происходит справа налево, т.е. старшие домены расположены в адресе правее, а младшие левее. Иерархическая структура доменов для данного примера: • ru – домен верхнего уровня, который соотвествует языковой группе сайта, • rgups – домен второго уровня - соответствует организации, • www – домент третьего уровня - соответствует используемой службе или подразделению внутри организации. За исключением домена верхнего уровня это деление условно. Кроме того, DNS-адрес может иметь и домены четвертого и высших уровней. Домены первого уровня подразделяются на отраслевые и национальные (географические). Отраслевые домены верхнего уровня как правило используются в США, как в стране, где зародился Интернет. Перечислим их: • • • • • • .com (commercial) – коммерческие организации; .edu (educational) – образовательные организации; .gov (govemental) – правительственные организации; .mil (military) – военные организации; .net (network) – организации, предоставляющие сетевые услуги; .org (organization) – организации, не относящаяся к вышеназванным видам. Важно понимать, что национальное деление доменов отражает их тематическую ориентацию, а не территориальную. Другими словами, если применен домен .ru, это означает, что сайт либо ориентирован на русскоязычную аудиторию, либо представляет именно Российскую организацию. Физически содержимое сайта может располагаться в другой стране. Перечислим основные национальные домены: • • • • • • • • .гu (Russia) – Россия; .su (Soviet Union) – страны бывшего СССР, ныне ряд государств СНГ; .uk (United Kingdom) – Великобритания; .ua (Ukraine) – Украина; .bg (Bulgaria) – Болгария; .hu (Hungary) – Венгрия; .uz (Uzbekistan) – Узбекистан; .de (Deutchland) – Германия. Основные понятия сети Интернет WWW – World Wide Web (Всемирная паутина) – служба (набор Web-серверов) для размещения гипертекста. Главным понятием этой технологии является гипертекст – документ, связанный с фрагментами этого же документа или другими документами через систему выделенных слов (гиперссылок). Документ, включающий не только текст, но и другие данные, часто называют гипермедиа – гипертекстовый мультимедийный документ (web-документ, web-страница). Гипермедиа формируется на специально разработанном языке HTML (Hyper Text Markup Language, язык разметки гипертекстов). Документ, подготовленный на HTML, представляет собой текстовый файл, содержащий собственно текст, несущий информацию читателю, и теги (флаги разметки) – командыинструкции по представлению (отображению) текста, а также ссылки на другие документы (файлы). Для просмотра и работы с web-документами используются специальные программы – браузеры (browse, осматривать). Браузер работает с сервером по протоколу HTTP (Hyper Text Transfer Protocol, протокол для передачи гипертекстовых документов). К наиболее популярным браузерам относятся Internet Explorer, Mozilla Firefox, Opera, Google Chrome. Сайт – набор страниц гипертекста, объединенных одним DNS-адресом и тематикой. Хост – компьютер сторонней организации, на котором размещается сайт. Домашняя страница – сайт, целью которого является представление информации о человеке или организации. Интернет магазин – сайт, целью которого является представление каталога товаров и их продажа через электронные системы платежей. Поисковая система – сайт, ориентированный на поиск информации в каталоге или на других сайтах. Форум – сайт, позволяющий пользователям обмениваться сообщениями по определенным тематикам, сгруппированным в разделы и темы. Портал – крупный сайт, объединяющий в себе различные функции (домашней страницы, интернет магазина, форума и т. п.). URL – Universal Resource Locator (Универсальный указатель ресурсов) – используется для указания месторасположения ресурса в сети Интернет. Рассмотрим URL более подробно. Структура URL: • Протокол – протокол, используемый для связи с сервером. Если не указан, то программа-клиент (например, браузер) пытается подобрать протокол автоматически, перебирая наиболее часто используемые. • DNS-адрес сайта – обязательная часть. Может быть и IP-адресом. При использовании IPv6 адрес должен быть заключен в квадратные скобки. Например, http:// [2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d]/ • Порт – на одном сервере может существовать несколько служб. Чтобы их различать, каждая служба имеет свой порт - двухбайтовое число. За основными службами закреплены стандартные порты. Например, 80 - порт службы WWW. Если порт не указан, то используется стандартный порт для данной службы. • Путь и имя файла – указываются относительно корневой папки на сервере. Если не указаны, то используется файл по-умолчанию на данном сервере. Обычно это index.htm или index.php • Параметры – позволяют уточнять запрашиваемые данные. Если предусмотрены, то должны быть указаны. Параметры начинаются со знака вопроса "?", и разделяются символом амперсенд "&". Обычно они представляют собой пары "имя параметра=его значение". URL не следует путать с адресом сайта. Как видно, адрес сайта является только лишь частью URL. Способы подключения к Интернет Для подключения к Интернет необходимы следующие элементы: 1. Интернет-провайдер (Internet Service Provider, ISP) – компания, предоставляющая услуги по подключению к Интернет. 2. Физический канал связи между организацией и Интернет-провайдером, в качестве которого может выступать и радиоканал. 3. Устройство, обеспечивающее связь по каналу: модем, роутер, сотовый телефон и т.п. Наиболее распространены следующие каналы связи и способы подключения к оборудованию провайдера: • Коммутируемая линия или режим Dail-up (в переводе "дозвон")- осуществляется через обычную телефонную линию. Средняя скорость передачи/приема данных – около 33–54 Кбит/сек. В настоящее время используется редко. • Использование цифрового канала ISDN обеспечивает скорость 64/128 кБит/сек по той же телефонной линии. В настоящее время практически не используется. • Технология ADSL - Advanced Digital Signal Layer пришла на замену Dial-up и ISDN. Позволяет создавать высокоскоростной канал по обычной телефонной линии. Скорость передачи достигает до 25 МБит/с. • Технология FTTH - Fiber To The House (Оптическое волокно в дом). Наиболее современная технология при которой дом подключается к провайдеру по оптоволоконной линии связи. При этом в доме устанавливается мини-маршрутизатор, через которыq уже подключаются компьютеры дома - через Ethernet-линию. Скорость может достигать 100 МБит/с. • Спутниковая связь. Бывает ассимитричной и симметричной. При ассимитричной связи через спутник организуется только прямой канал от провайдера к клиенту. Обратный канал от клиента к провайдеру - через другие виды связи. Этот способ относительно незатратный. При симметричной связи и прямой, и обратный каналы организуются через спутник. При этом способе требуется дорогостоящее оборудование. Цена канала тоже высока. Спутниковая связь используется преимущественно на территориях, где нет других видов связи с Интернет. • Радиоканалы сотовых операторов. Осуществляется либо через сотовые телефоны, либо через специализированные USB-модемы, в которые вставляется SIM-карта. Данная технология в настоящее время очень быстро развивается благодоря мобильности. Связь возможна по технологиям GPRS - до 115 кБит/с, EDGE - до 384 кБит/с, 3G - до 14 МБит/с, 4G - до 1 ГБит/с. Компьютеры организаций обычно подключаются к Интернет не напрямую, а через шлюз. Шлюз выполняет функции: роутера (позволяет подключаться к Интернет нескольким компьютерам, используя только один "белый" IP-адрес; брандмауэра (защита внутренней локальной сети - Интранет от несанкционированного доступа из Интернет); proxy-сервера (кэширование наиболее часто посещаемых страниц для ускорения доступа); антивируса и файлового сервера. Шлюз подключается в Интернет через какое-либо высокоскоростное соединение. Интернет-провайдеры предоставляют различные тарифные планы для подключение к Интернет. Среди всего многообразия тарифов можно выделить следующие виды: • Подключение с повременной тарификацией. Учитывается время соединения на линии. Эта тарификация в основном использовалась с Dial-up соединениями, и поэтому в настоящее время практически не применяется; • Оплата потребленного трафика. Учитывается объем принятой и переданной информации. Имеется фиксированная или плавающая ставка за 1 Мб информации; • Безлимитное подключение. Имеется фиксированная абонентская плата, и не ведется учет трафика. При этом обычно есть ограничение по скорости приема/передачи информации, которое зависит от размера абонентской платы. Основные службы Интернет Приведем описание основных служб Интернет. World Wide Web (WWW) - всемирная паутина. Является основной службой Интернет. Предоставляет доступ к гипертекстовым страницам, содержащим текст, ссылки друг на друга, картинки, анимации, видео и звуковые записи и файлы. Страницы хранятся на Web-серверах, а просматриваются Web-браузерами. С помощью службы WWW можно организовать личные страницы, домашние страницы организаций, интернет-магазины, форумы, блоги, большие порталы и т.п. С помощью WWW можно также скачивать файлы, но для больших объемов файлов более удобно пользоваться службой FTP. Форумы представляют собой интернет-площадки для обсуждения пользователями самых различных тем: "учеба в университете", "воспитание детей", "выбор покупок", "обсуждение спорта" и т.п. После входа на форум пользователю предоставляется возможность выбора одной из тем и подтем и просмотра ниток (thread) обсуждений с сообщениями других пользователей. У каждой нитки есть свой заголовок - тема нитки. Все сообщения хранятся в базе данных форума и могут быть просмотрены в любой момент. Есть возможность автоматического поиска сообщений по ключевым словам или по контактным данным автора. Чтобы отправлять сообщения, необходимо зарегистрироваться. При этом пользователь должен придумать себе имя в системе и указать дополнительную информацию о себе. Большинство форумов модерируемые, т.е. имеется специальный человек-модератор, который следит за сообщениями для того, чтобы отсеить нежелательные, например, выходящие за рамки данной темы или проявляющие неуважение к другим пользователям. File Transfer Protocol (FTP) - служба передачи файлов. FTP-сервис используется для: • Загрузки файлов с удаленного компьютера на свой (download); • Загрузки собственных файлов на удаленный компьютер (upload); • Создание и удаление каталогов и файлов на удаленном FTP-сервере. Любой FTP-сервер требует авторизации пользователя, то есть ввода его имени и пароля, в зависимости от которых пользователю будет предоставлен доступ к определенным каталогам и возможность осуществлять разрешенные действия над содержимым FTP-архива. Структура FTP-запроса: ftp://:@/, где user – имя пользователя, password - его пароль, host – доменное имя или IP-адрес сервера, url-path – путь к файлу. Практически каждый FTP-сервер предоставляет анонимный вход (другое название этого сервиса – анонимный FTP). Для анонимного FTP существует упрощенный синтаксис: ftp:///. Имя для входа – anonymous. При таком входе предоставляется доступ к общедоступным каталогам и данным. Обычно в таком режиме доступа к серверу пользователь может только просматривать каталоги и "скачивать" файлы к себе на диск. Некоторые серверы создают специальные каталоги, куда каждый желающий также может "закачать" свои собственные файлы. Для работы со службой FTP необходмы специальные программы FTP-клиенты, хотя простейший набор функций работы с FTP поддерживают и все основные браузеры. Когда пользователь открывает FTP-соединение, то оказывается в root-каталоге (корневой самый верхний каталог в иерархии файлов). Пользователь может перемещаться по дереву каталогов файлового архива, просматривать список файлов и при желании "скачивать" необходимые файлы к себе на компьютер. Работа в FTP-каталогах аналогична работе с любым файлменеджером, например, Проводником. E-Mail - электронная почта. E-mail (Electronic mail) – система для обмена электронными сообщениями. Для работы с Email необходимо зарегистрироваться т.е. "завести почтовый ящик" на почтовом сервере провайдера или на одном из серверов, предоставляющих бесплатные почтовые услуги (www.rambler.ru, www.mail.ru, www.yahoo.com и др.). На компьютере пользователя устанавливается клиентская почтовая программа – мэйлер (mail - почта). При запуске эта программа устанавливает связь с почтовым сервером, а после прохождения авторизации и проверки учетной записи клиента осуществляется обмен сообщениями по протоколам POP3 / SMTP или IMAP. Клиент может иметь несколько учетных записей, т.е. несколько e-mail адресов. В функции мэйлера входят: подготовка и отправка сообщений; ответ на входящие сообщения; редактирование сообщений; автоматическая сортировка прочитанных и непрочитанных сообщений по разным критериям; пересылка сообщений; вложение и извлечение файлов, прикрепленных к сообщениям; настройка начальных установок; блокировка нежелательных сообщений (спама); использование адресной книги; автоматическое добавление подписи и визитной карточки; шифрование сообщений; добавление электронно-цифровой подписи. Преимущества E-mail: удобство подготовки и работы с сообщениями; высокая скорость доставки сообщения от нескольких секунд до нескольких минут; низкая стоимость; надежность доставки. Структура электронных сообщений: • • • • Заголовок; Текст сообщения; Прикрепленные файлы; Электронно-цифровая подпись. Основные поля заголовка: • • • • • From – адрес отправителя; То – адрес получателя; СС (Carbon Copies) – кому еще адресовано это письмо (копии); Subj (Subject) – тема сообщения; Date – дата и время отправки сообщения. Пример электронного адреса: user_2005@mail.ru Здесь user_2005 - имя пользователя на сервере; mail.ru - адрес сервера. При отправлении по E-mail сведений конфиденциального характера необходимо обеспечение подлинности сообщений и безопасности их передачи. Для подтверждения авторства отправителя используется механизм цифровой подписи. Для шифрования сообщений и формирования цифровой подписи используются алгоритмы шифрования с синхронным и асинхронным ключом. Электронная почта и сервисы, функционирующие на ее базе (телеконференции, списки рассылок, доски объявлений и др.) представляют собой off-line коммуникационные сервисы. Это означает, что работы с почтой возможна без постоянного соединения с Интернет. Подключение требуется только для приема и отправки сообщений. Просмотр принятых сообщений и подготовка новых к отправке возможны без подключения к Интернет. В последнее время для работы с почтой стала широко использоваться служба WWW. Для работы с почтой пользователь заходит на специальный сайт провайдера почтового ящика, который предоставляет все функции мэйлера. Преимуществом такого способа является отсутствие необходимости устанавливать и настраивать программу мэйлер. Недостатками: невозможность подготовки сообщений в off-line; сложность поиска почтовых сообщений в архиве, сложность работы с архивом почты и ограничение на объем архива. Обычно этот способ не применяется при большим объемах работы с корреспонденцией. Служба E-Mail уязвима для одного из видов Интернет-угроз - спама. Спам - это несанкционированное почтовое сообщние обычно рекламного характера. Из-за большого числа таких сообщений осложняется работа с корреспонденцией, т.к. иногда бывает сложно быстро отличить спам от полезного письма. Распространение спама согласно законодательству является преступлением. Для борьбы со спамом существуют специальные программы. Некоторые из них встроены в мэйлеры, другие работают у почтового провайдера. Анти-спам программы пытаются распознать спам по некоторым признакам, например, по характерным словам в сообщении, вложениям, адресатам и отправителям. Некоторые анти-спам программы используют базы данных спаммеров (рассыльщиков спама) и спам-сообщений, а также взаимодействуют друг с другом для повышения эффективности обнаружения спама. ICQ и другие интернет-пейджеры. В отличие от E-Mail интернет-пейджеры, такие как ICQ, являются чисто on-line службами. Они служат для быстрой пересылки коротких сообщений между двумя или более пользователями. Передача сообщений осуществляется без почтового ящика, т.е. за доли секунды. У всех интернет-пейджеров есть возможность сообщать о том, кто из контактов (людей, занесенных в персональный список контактов) сейчас on-line, т.е. подсоединен к службе интернет-пейджера. Для использования интернет-пейджера необходима предварительная бесплатная регистрация в службе, во время которой пользователь придумывает свой Ник (от английского nickname кличка), указывает дополнительную информацию о себе для удобства нахождения его в базе данных пользователей. Большинство интернет-пейджеров также позволяют пересылать файлы, хотя эта возможность является вторичной и не всегда хорошо работает в зависимости от типа интернет-соединения пользователей (с "серым" или "белым" IP-адресом). IP-телефония. Является разновидностью телефонной связи через Интернет. При подключении микрофона к компьютеру появляется возможность голосового общения между пользователями. Существует много служб IP-телефонии, но наиболее известной является Скайп - Skype. Как и в интернет-пейджерах, пользователь видит список контактов, находящихся on-line. Звонки в IP-телефонии возможно двух типов: • С одного IP-телефона (компьютера) на другой IP-телефон (компьютер); • С IP-телефона (компьютера) на обыкновенный стационарный или мобильный телефон. Звонки первого типа обычно бесплатны. Чтобы осуществлять звонки второго типа, необходима внести деньги на счет в системе. Второй тип обычно используют для дальней (междугородней или международной) связи. Такие звоник получаются намного дешевле, чем звонки между двумя обыкновенными телефонами. Это происходит за счет того, что большая часть пути преодолевается сигналом через Интернет до специального шлюза IP-телефонии в городе адресата. Фактически затраты сводятся к стоимости местного звонка по городу от шлюза до телефона адресата. В IP-телефонии активно развиваются стандарты связи, например, протоколы SIP. Благодаря этому стали появляться спецаильные автономные IP-телефонные аппараты, которые подключаются напрямую в Интернет без персонального компьютера. Основным препятствием для качественной связи в IP-телефонии является особенности построения протоколов TCP/IP, которые неспособны обеспечить надежную доставку IPпакетов без задержек в несколько милисекунд или даже секунд. В других службах эти задержки не ощутимы, но в IP-телефонии они приводят к ощутимым задержкам голоса, рывкам и эхо. Качество связи определяется показателем время реакции сети - PING, и зависит не только от пропускной способности канала, но и от количества промежуточных компьютеров между абонентами. Разновидностью IP-телефонии является видо-связь, которая становится возможной на быстрых Интернет-каналах и при подключении Web-камеры. В качестве дополнительных некоторые службы предоставляют возможность телеконференций (одновременный разговор более 2 абонентов); чат (пересылка коротких сообщений); пересылка файлов; демонстрация экрана компьютера другому абоненту. IRC - Internet Relay Chat - ретранслируемый Интернет чат. Эта служба появилась одной из первых, но в настоящее время стала очень мало востребованной, и заместилась форумами и интернет-пейджерами. Она представляет собой нечто среднее между двумя этими службами. Как и интернет-пейджеры, она позволяет обмениваться мгновенными сообщениями. Пользователь должен предварительно войти на IRC-сервер и выбрать один из каналов тематическую группу. После этого ему видны все пользователи, подключенные к этому каналу и их сообщения, отправленные с момента его подключения к каналу. Пользователь может отправлять сообщения сразу всем в канал или индвивидуальным пользователям. В отличие от форумов в IRC-каналах не хранится история всех сообщений и почти отсутствует модерация (отсеивание вредных или неуместных сообщений специальным человеком - модератором). Для использования службы необходима спецаильная программа IRC-клиент. Telnet - терминальный доступ и удаленный рабочий стол. Служба Telnet используется для удаленного подключения к другому компьтеру в режиме консоля (командной строки). Пользователь имеет возможность вводить команды ОС в удаленном режиме, запускать программы, работать с файлами. Используется в основном для удаленного администрирования серверами, обычно на базе ОС Linux. Более современной версией являются службы удаленного рабочего стола, например, на протоколах VNC или RDP. Эти службы позволяют видеть и управлять рабочим столом удаленного компьютера в графическом режиме. Как и Telnet, чаще всего они применяются для удаленного администрирования серверами. Однако, есть и другие применения, например: "удаленный помощник" - техподдержка пользователей в удаленном режиме; он-лайн семинары с трансляцией рабочего стола преподавателя многим студентам одновременно. Поиск информации в Интернет Поисковая система – это сайт, хранящий базу данных цитат с различных сайтов в сети Интернет. По запросу пользователя поисковая система выдает список подходящих сайтов и ссылки, для перехода к ним. Пример страницы поисковой системы: Существует 2 типа поисковых систем: 1. Вербальные (индексные, словарные) – поиск осуществляется только по ключевым словам. База дынных сайтов в таких системах составляется полностью автоматически. Примеры: yandex.ru, rambler.ru, google.com Достоинства: • Большой объем базы данных (БД) сайтов; • Простота использования, т.к. для поиска нужно всего лишь ввести ключевые слова. Недостатки: • Результативность поиска зависит от качества введенного запроса. Не всегда удается сразу сформулировать хороший запрос. 2. Классификационно-вербальные – поиск осуществляется как по ключевым словам, так и по рубрикам и подрубрикам каталога. База дынных сайтов в таких системах составляется полуавтоматическом режиме. Классификацию по рубрикам и подрубрикам осуществляет человек. Работа таким систем близка к работе обычных библиотек. Пример: elibrary.ru Достоинства: • Удобный поиск по рубрикам; Недостатки: • Малый объем базы данных сайтов. Все поисковые системы имеют определенный язык запросов, т.е. правила ввода ключевых слов. Каждая конкретная поисковая система содержит подробное описание языка запросов поиска. Конечно, языки запросов поисковых систем отличаются друг от друга, но среди них есть и общие черты, например, знак плюса перед словом обозначает обязательный поиск данного слова, знак минуса обозначает исключение слова из поиска, фраза, взятая в кавычки, означает поиск её точного совпадения. Работа поисковой системы включает следующие функции: 1. Индексирование – осуществляется программами спайдерами (spider – паук), которые проходят от ссылки к ссылке по всем страницам интернет и сохраняют копии или цитаты с найденных страниц; 2. Занесение индексов в базу данных. Индексы реорганизуются с учетом морфологии языка, семантики (смысла) цитат. На этом этапе используются тезаурусы (словари синонимов), встроенные в систему. Тезаурусы играют важную роль. От их объема и качества зависит простота поиска цитат. В большинстве случаев пользователь не может знать какие именно ключевые слова могут встретиться на сайте. Система должна как минимум учитывать все возможные синонимы введенных ключевых слов, а в идеале анализировать смысл введенного поискового запроса и сопоставлять его со смыслом цитат. 3. Обработка поискового запроса пользователя и выдача результатов поиска. Все функции работают одновременно и непрерывно. Рассмотрим показатели работы поисковой системы и следующую диаграму соответствия между страницами, занесенными в поисковую систему: Релевантность – это смысловое соответствие страницы, хранимой в БД, поисковому запросу, введенному пользователем. Здесь общем квадратом изображен весь объем страниц в БД поисковой системы. Верхние 2 квадрата изображают объем страниц, выданных пользователю в ответ на его поисковый запрос, нижние - невыданных. Левые 2 квадрата изображают страницы по смыслу релевантные поисковому запросу, а справа - нерелевантные. Как видно, среди выданных страниц есть релевантные и нерелевантные, которые не надо было выдавать. Также и среди невыданных есть как нерелевантные, так и релевантные, которые надо было выдавать. Основными показателями работы поисковой системы являются: • Точность поиска – отношение количества выданных релевантных страниц к общему числу выданных. В данном примере точность = 15% / (15% + 20%); • Полнота поиска – отношение количества выданных релевантных страниц к общему числу релевантных. В данном примере полнота = 15% / (15% + 30%); • Охват – общие количество страниц в БД системы; • Скорость обхода – скорость индексирования и занесения индексов в БД; • Скорость поиска – скорость выдачи результатов запроса. Лекция 8. Информационная безопасность и защита данных Понятие об информационной безопасности Современный уровень информационных технологий позволяет рассматривать информацию, как общественный ресурс развития, наравне с традиционными (сырье, электроэнергия и т.д.) ресурсами. За последние десятилетия резко увеличился уровень производства и потребления обществом информационных продуктов и услуг. В нашей стране ускоренными темпами идет развитие систем телекоммуникаций, увеличиваются парки компьютерной техники, непрерывно растет число пользователей сотовой связи и сети Интернет. Информация, являясь по своей физической природе нематериальным объектом, давно стала предметом торговли и обмена, а с появлением ряда правовых и регулирующих положений, приобретает черты материального объекта. Федеральным Законом "Об информации, информатизации и защите информации" определено, что информационные ресурсы, то есть отдельные документы или массивы документов, в том числе и в информационных системах, являясь объектом отношений физических, юридических лиц и государства, подлежат обязательному учету и защите, как всякое материальное имущество собственника. По степени важности и ценности защищаемой информации выделяется три категории: • Информация, составляющая государственную тайну; • Персональная информация; • Информация, составляющая коммерческую тайну. Важно помнить основные цели защиты информации, согласно законодательным актам: • Предотвращение утечки, хищения, искажения, подделки информации; • Обеспечение безопасности личности, общества, государства; • Предотвращение несанкционированных действий по уничтожению, искажению, блокированию информации; • Защита конституционных прав граждан на сохранение личной тайны и конфиденциальности персональных данных; • Сохранение государственной тайны, конфиденциальности документированной информации. Согласно законодательству: • Создание и распространение вредоносных программ является преступлением; • Запрещается делать информацию о деятельности органов государственной власти информацией с ограниченным доступом; • Гарантом национальной безопасности РФ является президент. Безопасность информационных систем и технологий обеспечивается реализацией следующих основных функций безопасности: • Защита конфиденциальности – предотвращение утечки, хищения информации на переносных носителях; защита от перехвата и несанкционированного доступа по каналам связи. Достигается как техническими так и организационными мерами (защищенные комнаты, сейфы и т. д.); • Защита целостности – предотвращение искажения, уничтожения, внедрения дезинформации; • Защита доступности – обеспечение доступности информации при сбоях или внешних атаках. Достигается резервированием компьютерных систем и каналов связи, т.е. созданием дополнительных резервных копий, запасных компьютеров и каналов связи; • Защита живучести – обеспечение возможности быстрого восстановления доступности информации. Достигается применением технологий восстановления ресурсов и своевременным реагированием на чрезвычайные ситуации. Защита компьютерных сетей и систем Существуют следующие технические способы защиты информации в компьютерных сетях и системах: • Применение антивирусов; • Применение брандмауэров (межсетевых экранов) – Brandmauer; • Криптографическая защита. Антивирусы. Предназначены для поиска вирусов в программах, файлах, памяти компьютера, дисках, интернет-трафике (передаваемых данных). Поиск обычно осуществляется путем поиска в проверяемых объектах сигнатур (образцов) вирусов из базы данных вирусов, загруженной в антивирус. Успех антивируса во многом зависит от регулярного обновления базы данных вирусов и пополнения ее сигнатурами новых вирусов. Подготовкой БД вирусов занимаются специальные компании. Существуют следующий виды антивирусов: • Сканеры – осуществляют проверку только файлов, указанных пользователем. Проверка идет либо путем поиска сигнатур вирусов, хранящихся в БД антивируса; либо эвристическим анализатором, который способен находить незнакомые вирусы по некоторым типовым "признакам поведения" вирусов; • Мониторы – осуществляют непрерывный контроль над всеми файлами, загружаемыми в систему, и интернет-трафиком; • Ревизоры изменений. Отслеживают подозрительный изменения в жизненно важных файлах системы. Внешними признаками работы вирусов бывают: • • • • • • Невозможность загрузки ОС; Медленная работа и неисправность отдельных программ; Отказ работы отельных устройств компьютера; Невидимая рассылка спама с данного компьютера; Стирание или повреждение отдельных файлов; Другие видимые аномальные эффекты в работе компьютера. Брандмауэры (Brandmauer). В отличие от антивирусов брандмауэры предназначены исключительно для контроля над интернет-трафиком. Различают следующие виды брандмауэров: • Сетевые (фильтрующие) – отслеживают интернет трафик и ограничивают входящие и исходящие Интернет-пакеты в зависимости от IP-адреса и номера порта отправителя или получателя пакета. Могут быть выполнены как отдельные устройства, включаемые в сеть между Интернет и компьютером или локальной сетью, или как программы; • Персональные (файрволлы) – ограничивают доступ в Интернет для отдельных программ пользователя: одним программам разрешается полный доступ, другим – только к определенным сайтам и службам, третьим – доступ запрещается. Выполняются в виде программ. Криптографическая защита и цифровая подпись Криптографическая защита используется для: • шифрования файлов с целью ограничения к ним доступа; • организации защиты каналов в виртуальных частных сетях и защищенных соединениях; • создания цифровой подписи для почтовых сообщений и других документов. Для безопасной передачи данных по открытым каналам сети Интернет есть две помехи: • Возможность перехвата или искажения информации на промежуточных узлах сети между отправителем и получателем; • Сложноть проверки подлинности получателя. Для решения первой проблемы используются защищенные соединения, второй – сертификаты и цифровая подпись. Криптосистема – семейство обратимых преобразований открытого текста в шифрованный. Криптографическая стойкость – способность алгоритма шифрования противостоять криптоанализу (подбору пароля). Основные виды алгоритмов шифрования: • Симметричные – используют один и тот же пароль для шифрования и расшифрования; • Асимметричные – используют 2 пароля: открытый (дли шифрования) и закрытый (для расшифрования); • На основе хэш-функций. Хэш-функцией называется функция, преобразующая текст произвольной конечной длины в его образ фиксированной длины. Хэш-функции одностороние, т.е. преобразовать текст в его образ легко, а обратно преобразовать образ в оригинальный текст практически невозможно. Это свойство и используется в цифровой подписи. Этапы шифрования в ассиметричных алгоритмах: 1. Получатель информации придумывает закрытый ключ (пароль); 2. На основе закрытого ключа получатель генерирует открытый ключ. (Обратное преобразование открытого ключа в закрытый невозможно); 3. Получатель сообщает открытый ключ всем своим отправителям; 4. Отправители используют открытый ключ для зашифрования информации и отправляют получателю; 5. Только получатель может ее расшифровать своим закрытым ключом. Цифровая подпись. Цифровая подпись – это небольшая добавка к письму, тексту или файлу, позволяющая удостовериться в авторстве текста. Цифровая подпись генерируется с помощью ассиметричных алгоритмов шифрования, т. е. с помощью открытого и закрытого ключа. Назначение цифовой подписи: • Удостоверяет подлинность информации – что она не была искажена; • Удостоверяет целостность информации – что она пришла целиком, и никакой фрагмент не был утерян; • Удостоверяет авторство информации – что она пришла от данного отправителя и только от него. Невозможно отказаться от ее авторства, т.к. никто другой не может создать точно такую же цифровую подпись для данного блока информации (письма или файла). Оглавление Лекция 1. Общие сведения о программировании в Visual Basic for Applications (VBA)............2 Типы данных.......................................................................................................................................2 Допустимые имена переменных.......................................................................................................2 Константы............................................................................................................................................2 Комментарии.......................................................................................................................................3 Операции VBA....................................................................................................................................3 Функции VBA.....................................................................................................................................4 Ввод и вывод в VBA...........................................................................................................................5 Блок-схемы..........................................................................................................................................6 Лекция 2. Линейный, разветвляющийся алгоритмы и цикл с параметром .................................8 Линейный алгоритм...........................................................................................................................8 Разветвляющийся алгоритм...............................................................................................................9 Цикл с параметром (For-Next).........................................................................................................12 Лекция 3. Циклы с условием и одномерные массивы..................................................................15 Цикл с условием (While-Wend).......................................................................................................15 Цикл с условием (Do-Loop).............................................................................................................17 Одномерные массивы.......................................................................................................................22 Лекция 4. Двумерные массивы, работа со строками и подпрограммы......................................26 Двумерные массивы.........................................................................................................................26 Строковые переменные....................................................................................................................30 Подпрограммы..................................................................................................................................33 Лекция 5. Технологии разработки программного обеспечения .................................................35 Этапы разработки программного обеспечения..............................................................................35 Понятие алгоритма...........................................................................................................................35 Языки программирования................................................................................................................36 Принципы проектирования программ, объектно-ориентированное программирование..........38 Лекция 6. Сетевые технологии........................................................................................................41 Топологии вычислительных сетей и сетевая архитектура...........................................................41 Основные понятия сетевых технологий и характеристики сетей................................................43 Модель взаимодействия открытых систем (OSI)..........................................................................45 Линии передачи данных...................................................................................................................48 Лекция 7. Основные понятия сети Интернет ................................................................................49 Адресация в сети Интернет.............................................................................................................49 Основные понятия сети Интернет..................................................................................................51 Способы подключения к Интернет.................................................................................................52 Основные службы Интернет...........................................................................................................53 Поиск информации в Интернет.......................................................................................................57 Лекция 8. Информационная безопасность и защита данных......................................................59 Понятие об информационной безопасности..................................................................................59 Защита компьютерных сетей и систем...........................................................................................60 Криптографическая защита и цифровая подпись..........................................................................61
«Информатика» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 462 лекции
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot