
- •Тема 10. ЭЛЕМЕНТЫ ТЕОРИИ И НЕКОТОРЫЕ ПРОБЛЕМЫ
- •Алгоритм как результат решения задачи
- •Интуитивно алгоритм определяется – как последовательность действий,
- •Математическое определение А.(Колмогоров А.Н.)
- •Зачем нужны такие строгости в определении?
- •Определение алгоритма для компьютерных применений:
- •Требование упорядоченности
- •Требование выполнимости этапов
- •Недвусмысленность
- •Требование конечности процесса
- •Способы описания алгоритмов
- •Примитивы
- •Примитивы
- •способ описания синтаксиса языков программирования. Нормальная нотация Бекуса
- •Расширенные Бэкуса – Наура Формы (РБНФ)
- •Каждому определению РБНФ соответствует синтаксическая диаграмма
- •Здесь мы познакомились лишь с основными понятиями описания синтаксиса ЯП.
- •Представление алгоритма во время его разработки
- •В 1950-60гг. самым совершенным средством была блок схема
- •Псевдокоды
- •Создание алгоритмов или
- •Что значит создать алгоритм?
- •Расплывчато, фазы решения задач, предложенные в книге математика Д. Пойа «Как решать задачу»
- •Неупорядоченность процесса решения задач является основной причиной трудностей, связанных с разработкой систематического подхода
- •Математик А. Пуанкаре так же описал этот феномен. Он считал, что творческий процесс
- •Как же все таки надо действовать при решении задачи?
- •Вычислимые и невычислимые функции теорема Геделя
- •Результат Черча
- •В то время еще не было сколь нибудь значимых компьютеров, а усилия ученых
- •Алгоритмические проблемы
- •Проблема универсального языка программирования
- •Универсальный язык программирования
- •Описание универсального языка программирования
- •Даные
- •Операторы
- •Операторы
- •Как программировать на этом языке
- •Примеры программирования
- •Дальнейшее развитие
- •Проблема
- •Модели универсальных ВМ
- •Машины Тьюринга
- •Описание МТ
- •Команда МТ(qi aj qnamR)
- •Пример программы
- •Работа программы
- •Аналогично, можно запрограммировать любую
- •Новое поколение ВМ
- •Вычислительная мощность ВМ Функции и их вычисление
- •Виды функций
- •Значение МТ для современной теории вычислительных систем
- •Ограниченность ВМ и проблема Искусственного Интеллекта
- •Сложность задач и алгоритмов с точки зрения ВМ оценивается затратами на вычисление а
- •Оценки сложности
- •Сравнение полиномиальных и экспоненциальных
- •Классификация задач по сложности
Проблема универсального языка программирования
Предположим, что нам нужно разработать новый язык программирования, которым можно будет пользоваться довольно долго
Проблема, однако в том, что мы не можем заранее предвидеть, какие операторы понадобятся в будущем.
Но как при этом можно было бы гарантировать, что создаваемый язык будет содержать все необходимые операторы, которые в будущем позволят запрограммировать любой алгоритм, решения любой задачи.
Решение этой проблемы заключается в создании языка, мощность которого не будет уступать мощности самих алгоритмических процессов
07/02/19 |
31 |
Универсальный язык программирования
Если некоторая задача может быть решена алгоритмически, то алгоритм ее решения всегда можно выразить на универсальном языке программирования
Ниже мы рассмотрим такой язык
07/02/19 |
32 |
Описание универсального языка программирования
•Мы уже знаем, что основой всех языков являются машинные языки. Все остальное это надстройки, позволяющие облегчить программирование тех или иных задач
•Построим простейший язык, который будет содержать необходимый набор данных и операторов
07/02/19 |
33 |
Даные
Современные языки высокого уровня оперируют с разнообразными структурами данных: числа, массивы, строки, ......, объекты.
Однако после всех трансляций, процессор манипулирует битовыми комбинациями (01).
Поэтому наш простейший язык манипулирует только данными типа: комбинация двоичных разрядов произвольной длины:
{01101010000101010000010}
имя переменной: a, b, c, …обозначает такую комбинацию
a= {0110101000010}
b= {0110010}
07/02/19 |
34 |
Операторы
3 оператора присваивания:
•cleare <имя>; очистка строки
•incr <имя>; увеличить на 1 (101 110)
•decr <имя>; уменьшить на 1
• |
(если перемен. = 0, то |
• |
дальнейшего изменения |
• |
не будет) |
07/02/19 |
35 |
Операторы
Один оператор цикла:
•While <имя> not 0 do
• |
<повторяемые операторы> |
• |
... |
• |
... |
• |
end; |
Это знакомый нам оператор While с одним условием имя 0.
07/02/19 |
36 |
Как программировать на этом языке
•Присвоить переменной х значение 3 (011):
•cleare x;
•incr x, incr x, incr x;
•Присвоить z значение х (z:=x):
•clear z;
•While x not 0 do;
• |
Incr z; |
• |
decr x; |
•end;
•при этом однако уничтожается х. Это можно легко исправить, введя промежуточную переменную y .
07/02/19 |
37 |
Примеры программирования
•Присвоить z значение х не уничтожая х:
•clear y; clear z;
• While x not 0 do; присвоить у значение х
•Incr y;
•decr x;
•end;
• While y not 0 do; присвоить z и x значение y
•Incr z;
•Incr x;
•decr y;
•end;
07/02/19 |
38 |
Дальнейшее развитие
Этот набор команд можно обозначить далее
<имя1> := <имя2>;
В качестве упражнения попробуйте смоделировать
If x not 0 then <S1> else <S2>;
Оказывается этот простейший язык является универсальным (самым мощным) ,
на нем можно запрограммировать любой алгоритм который появится в будущем
07/02/19 |
39 |
Проблема
универсальной вычислительной машины
Теперь познакомимся с предельными возможностями вычислительных машин.
Что собой представляет универсальная ВМ, т.е. такая, которая выполнит любую программу, написанную на универсальном языке?
07/02/19 |
40 |