- •1. Языки программирования. Структурная технология программирования. Реализация основных алгоритмических структур на процедурном языке программирования.
- •2.Базовые алгоритмические структуры: процедуры и функции, рекурсивные функции и процедуры.
- •3.Составные структуры данных: определение новых типов данных, одномерные и двухмерные массивы, строки, множества, записи, файлы.
- •1. Массивы
- •3. Множества
- •4. Записи
- •5. Файлы
- •4. Динамические структуры данных: списки, стеки, очереди.
- •5. Понятие о логическом программировании. Структура программы в Прологе. Предикаты, правила, факты.
- •10) Информация, ее виды и свойства. Измерение информации.
- •11) Кодирование информации. Условие Фано. Коды Шеннона-Фано и Хаффмана.
- •12) Достоверность передачи информации. Коды Хемминга.
- •Кодирование с выявлением ошибок (коды с проверкой на четность).
- •3. Кодирование с исправлением ошибок (самокорректирующиеся коды).
- •13) Понятие о конечных автоматах. Эквивалентность и произведение конечных автоматов.
- •Алгоритмы и их свойства. Существование алгоритмически неразрешимых проблем. Машина Поста.
- •Формализация понятия алгоритма . Машина Тьюринга.
- •Формализация понятия алгоритма. Нормальные алгоритмы Маркова.
- •Формализация понятия алгоритма. Рекурсивные функции.
- •18. Формальная грамматика. Метаязыки. Форма Бэкуса-Наура. Синтаксические диаграммы.
- •Инструментальное программное обеспечение
- •Системы программирования
- •Виды инструментального по
- •Определение
Алгоритмы и их свойства. Существование алгоритмически неразрешимых проблем. Машина Поста.
Алгоритм – точно определенная последовательность действий, обеспечивающая решение задач определенного класса для указанного класса исходных данных.
Из нестрогого определения понятия алгоритм следует, что для решения задачи он содержит определенную на некотором языке дискретную конечную последовательность отдельных шагов, на каждом из которых выполняется одна очередная элементарная операция.
Исполнитель алгоритма – субъект или устройство, способные правильно воспринимать описание алгоритма и выполнять содержащиеся в нем действия.(человек, группа людей, робот, станок, компьютер, язык программирования и т.д).
Введение в рассмотрение понятия «исполнитель алгоритма» позволяет определить:
Алгоритм - понятное и точное предписание исполнителю совершить последовательность действий, направленных на достижение поставленной цели.
Система команд исполнителя – совокупность элементарных операций, понятных исполнителю
Главной целью формализации понятия алгоритма является решение проблемы алгоритмической разрешимости различных математических задач, т.е. получение ответа на вопрос, существует ли алгоритм решения указанного класса задач.
Второй целью – является определение элементарного шага алгоритма.
Третьей целью - выбор наиболее эффективного алгоритма из нескольких возможных с теоретической и практической точек зрения.
Свойства алгоритма: Дискретность (алгоритм исполняется по шагам: В начальный момент задается исходная ситуация. На каждом следующем шаге ситуация преобразуется на основе данных, полученных на предыдущем шаге. Следующий шаг начинается только после того, как закончился предыдущий)
Детерминированность (точность) (на каждом шаге исполнения алгоритма однозначно определено преобразование, которое должен совершить исполнитель).
Результативность (конечность) (после завершения каждого шага алгоритма все имеющиеся объекты однозначно определены. Если это по каким-то причинам невозможно, алгоритм должен сообщить, что решения задачи не существует). Понятность (в алгоритме могут использоваться только допустимые команды исполнителя, только те, которые входят в систему команд исполнителя).
Массовость (Алгоритм должен выполняться для множества допустимых начальных ситуаций (потенциально бесконечного множества)).
Методы разработки алгоритмов
-Метод частных целей. Задача сводится к набору простых (декомпозиция). «Необходимо свести трудную задачу к последовательности более простых задач. Любой человек очень часто использует этот метод решения стоящих перед ним задач, при этом даже не догадываясь об имеющемся для него (метода) названии. С другой стороны, в конкретной сложной задаче часто очень трудно указать способ ее разбиения на набор более простых задач. Здесь большое значение имеет опыт и искусство специалиста. Несмотря на общность метода и отсутствие «точного рецепта» его применения очень важно освоить этот метод, так как он лежит в основе решения многих задач и по своей сути составляет основу алгоритмизации и программирования. Именно с вопроса «Можно ли данную задачу разбить на последовательность (набор) более простых?» и нужно начинать разработку простого алгоритма.
Пример: Упорядочение массива перестановками (поиск максимального, поиск минимального, перестановка двух элементов массива), заменить старое значение элемента на новое.
Метод подъема: алгоритм начинается с принятия начального предположения или построения начального решения задачи. Затем начинается быстрое движение «вверх» по направлению к лучшим решениям. Когда алгоритм достигает точки, из которой больше невозможно двигаться «наверх», он останавливается.
Пример. Сортировка массива записей. (Ф,И,О, возраст, стаж работы).
Подъем: Индексация по каждому полю, Индексация массива полей
Пример2: в задачах поиска экстремумов (максимумов и минимумов) среди некоторой совокупности числовых данных. Начальное решение: пусть экстремальным значением является значение первого элемента из заданной совокупности данных. Лучшим решением по отношению к начальному является такой элемент, у которого значение больше ( в случае поиска максимума) или меньше (в случае поиска минимума) по отношению к начальному значению или к промежуточному “лучшему” решению. Критерием окончания алгоритма является просмотр всех элементов из заданной совокупности.
Существует большое количество задач, вызывающих трудности создания алгоритма их решения или требующих значительного упрощения процедур их решения или расширения области применения известных алгоритмов и др. Существование таких задач требует формализовать понятие алгоритма. При этом выделяют 2 проблемы:
-возможно более строгое определение алгоритма, его свойства;
-изучение теоретических моделей алгоритмов и исследование проблемы алгоритмической разрешимости.
Цели формализации: 1. решение проблемы алгоритмической разрешимости различных математических задач, т.е. получение ответа на вопрос, существует ли алгоритм решения указанного класса задач. 2. определение элементарного шага алгоритма. 3. выбор наиболее эффективного алгоритма из нескольких возможных с теоретической и практической точек зрения
Машина Поста.
Машина Поста состоит из ленты, каретки и программы.
Бесконечная лента, разделена на одинаковые клетки, каждая из которых может быть либо пустой, либо заполненной меткой «V»
Каретка может перемещаться вдоль ленты на одну клетку вправо или влево, наносить в клетку ленты метку, если этой метки там ранее не было, стирать метку, если она была, или проверять наличие в клетке метки.
Информация о заполненных метками клетках ленты характеризует состояние ленты, которое может меняться в процессе работы машины.
В каждый момент времени каретка («-») находится над одной из клеток ленты и, как говорят, обозревает ее. Информация о местоположения каретки вместе с состоянием ленты характеризует состояние машины Поста
Состояние
машины Поста
Программа.
Работа машины Поста состоит в том, что каретка передвигается вдоль ленты и печатает или стирает метки. Эта работа происходит по инструкции определённого вида, называемой программой машины Поста, которая состоит из команд.
Команда машины Поста имеет следующую структуру:
n K m, где
n - порядковый номер команды,
K - действие, выполняемое кареткой,
m - номер следующей команды, подлежащей выполнению.
Существует всего шесть команд машины Поста,
1) команда движения вправо: n → m
(
Нельзя
наносить метку в секцию, в которой уже
есть метка, такая команда
считается
недопустимой.
(3) команда печатания метки: n М m
Нельзя
стирать метку там, где ее нет, такая
команда считается
недопустимой.
(4) команда стирания метки: n С m
m
Проверка
наличия метки в клетке, над которой
находится каретка. Если метки нет –
управление передается команде m1,
иначе m2
(
5)
команда
передачи управления: n
m2
(6) команда остановки: n Стоп m
Программой для машины Поста будем называть непустой список команд, такой что:
на n-м месте команда с номером n;
номер каждой команды совпадает с номером какой-либо команды списка.
С точки зрения свойств алгоритмов, изучаемых с помощью машины Поста, наибольший интерес представляют причины останова машины при выполнении программы:
останов по команде "стоп". Такой останов называется результативным и указывает на корректность алгоритма (программы);
останов при выполнении недопустимой команды. В этом случае останов называется безрезультативным;
машина не останавливается никогда. В этом и в предыдущем случае мы имеем дело с некорректным алгоритмом (программой).
Чтобы машина начала работать, необходимо задать:
(1) программу;
(2) начальное состояние машины, т.е. каким-то образом расставить метки по секциям ленты (в частности, можно все секции оставить пустыми) и поставить каретку против одной из секций.
Пример 1. Установка метки. Пусть задано исходное состояние головки и требуется на пустой ленте написать две метки: одну в секцию под головкой, вторую справа от нее.
