- •1)Простые типы данных. Представление в памяти эвм символов, целых и вещественных чисел.
- •2) Структурированные типы данных. Представление в памяти эвм массивов, структур, битовых полей и т.Д.
- •4)Инкапсуляция, наследование, полиморфизм
- •1. Инкапсуляция
- •2. Полиморфизм
- •3. Наследовние
- •5) Перегрузка функций. Перегрузка операций.
- •6) Шаблоны функций.
- •7)Шаблоны классов.
- •8)Структура микропроцессора (на примере е97).
- •9) Система команд процессора (на примере е97).
- •10) Основной алгоритм работы процессора. Способы адресации данных (на примере е97).
- •11) Формат и назначение команд процессора (на примере е97).
- •12) Организация переходов. Развилка и цикл (на примере е97).
- •13) Принципы работы с массивами (на примере е97).
- •14) Организация подпрограмм (на примере е97)
- •15)Логическое программирование. Пролог. Принцип работы программ.
- •16) Факты, правила, вопросы. Сопоставление в пролоГе.
- •17)Отсечение (Cut)
- •18)Рекурсия в прологе
- •19) Списки. Описание. Примеры типовых задач обработки: длина списка, членство в списке, склеивание списков, переворачивание списков.
- •20) Обработка списков: суммирование, вычисление произведения элементов списка, поиск минимального и максимального элементов.
- •21)Сортировка списков: метод обмена (пузырьковая), метод вставки
- •Сортировка вставкой
- •22) Сортировка слияниями
- •23)Быстрая сортировка
- •24) Применение пролог для решения логических задач
14) Организация подпрограмм (на примере е97)
Подпрограммы (вспомогательные алгоритмы) целесообразно использовать в тех случаях, когда исходная задача является достаточно сложной, а ее решение — громоздким. Тогда разумно выделить в ней отдельные подзадачи, решение каждой из которых оформить в виде подпрограммы. Еще более естественным является использование подпрограмм в тех случаях, когда некоторый фрагмент программы повторяется.
При обращении к подпрограммам в E97 используется стек — структура данных, организованная по принципу "последний пришел — первый ушел". Стек позволяет по окончанию работы подпрограммы обеспечить возврат в ту точку основной программы, которая следует сразу же за вызовом подпрограммы. При обращении к вспомогательному алгоритму адрес в указателе стека (SP) уменьшается на 2, по вновь полученному адресу записывается адрес, следующий за вызовом подпрограммы. Подпрограмма исполняется, и когда встречается команда возврата (0D00), в счетчик команд помещается адрес, на который указывает SP, значение SP увеличивается на 2. Таким образом исполнение основной программы продолжается.
Из сказанного выше следует, что в SP нужно поместить адрес, свободный от данных и программы; несколько предшествующих адресов также должны быть свободны, поскольку стек стоится в сторону уменьшения адресов.
Рассмотрим более подробно механизм обращения к подпрограмме. По схеме ниже можно проследить, как осуществляются переход к вспомогательному алгоритму и возврат в вызывающую программную единицу.
Следует заметить, что регистр SP может быть использован не только при работе с подпрограммами, но и для промежуточного хранения величин.
Заметим также, что подпрограммы могут обращаться и сами к себе — прямо или косвенно (через другие подпрограммы). Подпрограмма, вызывающая себя, называется рекурсивной.
Продемонстрируем это на классическом примере рекурсивного алгоритма — вычислении факториала натурального числа. С одной стороны, n! определяется как произведение последовательных натуральных чисел от 1 до n включительно. С другой стороны это и есть рекурсивное определение факториала, которым мы воспользуемся.
План решения
1. Сравнить n с 0.
2. Если n=0, переход к п. 7.
3. Запомнить n в стеке; n:=n-1.
4. Вызов п/п вычисления факториала.
5. F:=F*n.
6. Переход к п. 1.
7. F:=1.
8. Возврат из п/п.
Распределение памяти
Подпрограмма
Адрес Команда Действие Замечания
0070 2400 сравнить R0 c 0 n-0
0072 5D0E если равно 0, переход переход на F:=1
0074 0E20 n => стек
0076 2310 R0 := R0 - 1 n := n - 1
0078 9C0D переход к п/п
007A 0010 вычисления факториала
007C 0E30 стек => R0 n => R0
001E 0501 R1 := R1 * R0 F := F * n
0020 1D02 переход к возврату из п/п
0022 2111 1 => R1 F :=1
0024 0D00 возврат из п/п
Распределение памяти
Основная программа
Адрес Команда Действие
0000 0E6D Установка указателя
0002 00FE стека SP на адрес 00FE
0004 9C0D вызов п/п
0006 0010 вычисления факториала
0008 0F00 стоп
Тест. n=7; F=5040(10)=13B0(16). \vskip2mm
