Лекция 1 Алгоритмизация и программирование
Понятие алгоритма Алгоритм Неформальное определение Формальное определение
Неформальное определение алгоритма АЛГОРИТМ – точное предписание, которое задает вычислительный процесс, начинающийся с произвольного исходного данного (из некоторой совокупности возможных для данного алгоритма исходных данных) и направленный на получение полностью определяемого этим исходным данным результата. Математическая энциклопедия, 1977
Неформальное определение алгоритма АЛГОРИТМ – это процесс последовательного построения величин, идущий в дискретном времени таким образом, что в начальный момент времени задается исходная система величин, а в каждый следующий момент система величин получается по определенному закону из системы величин, имевшейся в предыдущий момент времени. акад. Мальцев А.И., 1986
Свойства алгоритма 1)Понятность 2)Дискретность 3)Элементарность шагов 4)Детерминированность (определенность, точность) 5)Конечность (финитность) 6)Массовость
Понятность Алгоритм должен быть записан на языке, понятном исполнителю. СКИ: ВВЕРХ ВПРАВО
Дискретность Алгоритм состоит из конечного числа инструкций и все инструкции выполняются в дискретном времени. Инструкции выполняются мгновенно в моменты времени t 0, t 1, t 2, …, и между этими моментами ничего не происходит.
Элементарность шагов Объем работы выполняемый на всяком шаге ограничен сверху некоторой константой, не зависящей от объема данных. Элементарные шагиНЕ элементарны - сложение; - вычитание; - умножение; - деление; - сравнение чисел … - сравнение двух файлов; - проверка жесткого диска на вирусы; - архивирование папки …
Детерминированность (определенность, точность) Для каждого шага по набору исходных данных результат выполнения шага определяется однозначно и не зависит ни от каких случайных факторов. Тогда и итоговый результат всего алгоритма тоже будет однозначно определен.
Конечность (финитность) Выполнение алгоритма должно завершиться за конечное число шагов. Число шагов может быть очень большим, но оно не может быть равно.
Массовость (универсальность) Алгоритм должен быть применим к разным наборам допустимых исходных данных. Алгоритм, выходные данные которого уникальны в силу свойства детерминированности будет давать всегда один и тот же результат. => Построение такого алгоритма теряет смысл.
Язык программирования ПРОГРАММА – это алгоритм, записанный на определенном языке программирования. ЯЗЫК ПРОГРАММИРОВАНИЯ – это формальная знаковая система, предназначенная для записи компьютерных программ.
Какие бывают ЯП?
Транслятор ТРАНСЛЯТОР – это программа, которая переводит программу с языка высокого уровня на язык машинных команд. По способу трансляции различают: - компиляторы; - интерпретаторы.
Компиляторы и интерпретаторы Компилятор Интерпретатор В код переводится весь текст программы целиком В код переводятся отдельные строки программы и сразу выполняются Создается исполняемый файл, который впоследствии можно запускать даже при отсутствии компилятора Исполняемый файл (*.exe) не создается В отсутствии интерпретатора программа не запустится
Основные компоненты языка программирования Описание лексики – задание алфавита языка. Описание синтаксиса – задание правил построения конструкций ЯП. Описание семантики – придание смысла конструкциям языка. Описание прагматики – отвечает на вопрос: «Как писать программы на этом языке?»
Способы описания языков программирования Используются метаязыки, т.е. посредством которых можно описать другой язык: Нотация Бэкуса-Наура Синтаксические диаграммы Вирта Терминальные символы – это элементы алфавита языка, из них строится текст программы. Нетерминальные символы – это понятия, которые требуют дальнейшей расшифровки, пока не превратятся в терминальные.
Бэкуса-Наура форма (БНФ) Нетерминальные символы заключаются в угловые скобки ( ). Метасимволы БНФ: ::= определяется как Разделяет левую и правую часть правила. |или Разделяет альтернативы. [ ]может быть Цепочка, записанная внутри скобок может отсутствовать. { } может быть ноль или более раз Цепочка может повторяться многократно или может отсутствовать.
Примеры БНФ ::= 0 | 1 ::= { } ::= if ( ) [ else ]
Диаграммы Вирта Терминальные символы располагаются внутри кругов или прямоугольников со скругленными углами
Диаграммы Вирта Нетерминальные символы заключаются в прямоугольники
Диаграммы Вирта В начале диаграммы указывается расшифровываемое понятие. Ветвления и циклы показываются стрелками и изгибами линий.
Этапы решения задачи с помощью ЭВМ 1. Постановка задачи (определение требований к системе) 2. Анализ и проектирование (построение формальных моделей, определение структур данных, выбор методов решения) 3. Разработка (кодирование) 4. Тестирование 5. Развертывание и сопровождение
Этап тестирования Тестирование – это выполнение программы с целью обнаружения факта наличия в программе ошибки. Отладка – определение места ошибки и внесение исправлений в программу.
Принципы тестирования Ошибки в программе есть. Тест – это совокупность исходных данных и ожидаемых результатов. Тестовые данные должны быть достаточно просты для проверки. Тесты готовятся заранее, до выхода на машину. Первые тесты разрабатываются после получения задания на разработку программы до написания программного кода.
Принципы тестирования Перед началом тестирования следует сформулировать цели, которые должны быть достигнуты в ходе тестирования. В процессе тестирования необходимо фиксировать выполненные тесты и реально полученные результаты. Тесты должны быть одинаково тщательны как для правильных, так и для неправильных входных данных. Необходимо проверить два момента: программа делает то, что должна делать; программа не делает того, чего делать не должна.
Принципы тестирования Результаты теста необходимо изучать досконально и объяснять полностью. Недопустимо ради упрощения тестирования изменять программу. После исправления программы необходимо повторное тестирование. Ошибки «кучкуются». Окончательное тестирование программы лучше проводить не ее автору, а другому человеку.
Способы тестирования Тестирование по принципу «черного ящика» описывают тестирование с точки зрения поставленной задачи без учета внутреннего устройства программы. Тестирование по принципу «белого ящика» учитывают структуру программы.
Тестирование по принципу «черного ящика» тестирование функций; тестирование классов входных данных; тестирование классов выходных данных;
Тестирование границ класса 1) нормальные условия 2) граничные (экстремальные) условия 3) исключительные условия (выход за границу класса).