Институт №8 МАИ

10 день. Элементы дейкстровской нотации


Словарик программиста:


© У нас форма распространения знаний устная!

Глава 3. Элементы дейкстровской нотации

3.1.1 Требования к структуре программ для машины фон Неймана

Машина фон Неймана состоит из управляющего устройства, памяти и регистров.

Для работы в её памяти должны быть объекты:

Объекты связаны с адресами памяти специальными ячейками.

Правильность работы программы зависит от программиста, поскольку память — хранилище слов без какой-либо интерпретации.

Составление таблицы имён можно автоматизировать правками текста программы, а для полной автоматизации процесса надо указать тип процессора обработки данных.

Для упрощения помещаем таблицу имён в начало программы.

Для обработки объект должен иметь значение, отличное от боттом _|_ (знак неопределённости — перевёрнутая Т).

int i, j, k;

Данные в памяти недоступны для восприятия человеком, т.е. представлены внутренне. Их надо преобразовать во внешнее представление на доступном человеку носителе — произвести вывод данных.

Инструкции ввода и вывода могут находиться в любом месте программы. При этом важно, чтобы результат обработки данных предшествовал их выводу.


3.1.2 Обобщённая инструкция присваивания

Машина обрабатывает данные покомандно. Операнды вызываются на регистры из памяти, и команда выполняет действия над ними, оставляя результат на регистрах.

Основная инструкция обработки данных любого ЯП — инструкция присваивания.

x = a

Всё, что в левой границе присваивания — lvalue.

Значение переменной копируется на свободный регистр, а с регистра — в ячейку памяти, сопоставленную с lvalue. На практике проверка на неопределённость значения переменно не выполняется — это замедляет исполнение программы.

Операнды в выражении выражаются словами одного типа, иначе — согласуются, что происходит перед отправкой копии в ячейку lvalue.

Обобщение инструкции присваивания задаёт одновременную замену значений нескольких объектов.

Левая часть присваивания будет списком объектов, а правая — выражения, соответствующие левым объектам.

image

На Pascal символ присваивания составной: :=, а в Си — атомарный =

На языке СИ нельзя присваивать массивы или структуры! Есть лишь константный указатель на память, который должен быть в левой части присваивания.

А также в Си есть условное присваивание, в Pascal его нет:

image


3.1.3 Обобщенная инструкция композиции

Для минимизации вычислений процесс разбивают на ряд последовательных подвыражений, разделённых точкой с запятой. В Си композиция инструкций скрепляется знаками { }

image

image

image

При параллельной композиции знаком разделения ветвей будет ||.


3.1.4 Охраняемые инструкции

Охраняемую инструкцию используют для возможности разрешать/запрещать выполнение инструкции в зависимости от выполнения условий.

Она снабжена предохранителем.

image

image

Предохранитель используют в ветвлении и цикле.

Это обычно называют тернарным оператором

Подробнее почитать здесь


3.1.5 Обобщённое ветвление

image

Правила выполнения ветвления (инструкции IF-FI):

1) Предохранители и предикаты одновременно и независимо вычисляются.

2) Чтобы ветвление разветвилось, должна быть хотя бы одна истинная ветка, иначе аварийный отказ. Ошибка при планировании ветвления лежит на плечах программиста.

3) Допустимо наличие более чем 1 истинного предиката.

Выбор истинного ветвления не определяется порядком записи — предохранители не упорядочены. Это называют недетерминированностью ветвления.

У них свои наборы регистров и переменных, не влияющие друг на друга.

Но компилятор вряд ли может обнаружить ошибку, поскольку она проявляется лишь в процессе runtime.

© Клянусь мамой, программа работает!
- Ставлю печать!

Выбрать и выполнить ветку — одно из основных назначений ветвления.

Если отдых, то отправляемся в Сочи.
- Если неважно,
- самолётом или на поезде,
- тогда проявляется 
- недетерминированнось.

При неалгоритмическом ветвлении ветка выбирается не случайно!

Ветвление на 2 ветки выполняется одним предикатом и никогда не отказывает (двузвенное ветвление). Ветвление выбирает одну из двух альтернативных ветвей.

© Язык СИ — это птичий,
- более лаконичный язык.
- В нём больше скобочек, значков.

Что в нём плохого:

© Нужны бойцовские качества! Надо уметь ругать языки — тогда вы выплывете на любом собеседовании!


3.1.6 Обобщённая инструкция цикла

image

Правила выполнения цикла:

1) Ветка выполняется, если предохранитель истинный.

2) Количество истинных предохранителей может быть более 1.

3) При отсутствии истинных веток цикл может не работать.

4) Выполнение каждой охраняемой инструкции приводит к изменению аргументов.

Предохранитель в IF FI обеспечивает более защитное программирование, отказ обнаруживается раньше.

Pascal — untill not (двойное отрицание, использовалось, чтобы формулировка цикла была точной. При отрицании условия — просто Untill, при согласии — двойное отрицание).


3.2 Типы данных

3.2.1 Определение типа данных

Данные — сообщения в машинно-читаемом операбельном виде.

Атрибуты данных:

Эффективные способы задания типов:

1) Перечислением множества изображений. Сводятся к начальному отрезку натурального ряда.

image

2) Заданием характеристической функции (предиката), истинного, когда изображение относится к данному типу.

3) С помощью системы аксиом, содержащих свойства изображений.


Первая отечественная ЭВМ БЭСМ.

Она также представляла собой МТ и была неудобной: на ней также приходилось моделировать числа вещественного типа.

Всего было 4 пришествия МТ:

И всё это делали умные люди, с математическим подходом!


image

image

Перечислимый тип основан на задании слов, пронумерованных в порядке описания и несущих смысловую нагрузку.

Соответствующий тип может быть задан отрезком, или диапазоном.

image


3.2.2 Тип логический

image

image

Если в машинном слове хотя бы одна единица, то истина.

image

image

image


3.2.3 Тип целый

Из курса алгебры знаем — это множество целых чисел вида 0-+1+-2, образующих алгебраическое кольцо относительно сложения и умножения (деление разрывает кольцо — 7/2 не является целым числом).

Эффективная вычислимость требует замены бесконечного числа чисел на конечный отрезок (множество), в который войдут числа между MIN MAX.

Отношения являются операциями если в результате получается тот же тип данных. А рациональные числа - размыкание целого типа.

image

image

image