
- •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) Применение пролог для решения логических задач
13) Принципы работы с массивами (на примере е97).
Массив — это совокупность величин одинакового типа, расположенных в памяти ЭВМ последовательно друг за другом.
Для работы с элементами массива достаточно знать адрес первого элемента и их количество. Номер элемента массива называют его индексом. Чаще всего при решении задач с массивом его элементы просматриваются поочередно, с первого до последнего.
Типовые задачи на обработку массивов данных:
поиск элементов с определенными свойствами;
сортировка (расположение в порядке возрастания или убывания);
изменение элементов по определенному правилу;
заполнение массива по определенному правилу.
На примере Е97 можно рассмотреть следующий пример решения одной из таких задач.
Постановка задачи звучит следующим образом: Поменять местами первый отрицательный элемент массива (гарантируется, что хотя бы один такой элемент есть) и его максимальный элемент.
При прочтении задания можно сразу же выделить основную идею решения: Просматривая массив, необходимо запомнить адреса первого отрицательного элемента и максимального элемента. По окончанию просмотра совершить обмен.
План решения задачи можно оформить в виде некого алгоритма действий, который описан ниже.
1. i := 2
2. max := 1
3. otr := 0
4. Если a[1]<0, то k:=1, otr:= 1.
5. Сравнить i с n.
6. Если i>n, перейти к п. 11.
7. Если a[i]<0 и otr=0, то k:=i, otr:= 1.
8. Если a[i]>a[max], то max := i.
9. i := i + 1.
10. Перейти к п. 5.
11. vsp := a[k].
12. a[k] := a[max].
13. a[max] := vsp.
14. Стоп.
После чего перейдем к распределению памяти
Сама же программа с подробными комментариями, которые ссылаются уже на составленный алгоритм действий.
Адрес Команда Действие Замечания
0000 01D5 2 => (R1) i := 2
0002 0002
0004 0103 R0 => R3 адрес максимального элемента
0006 02D1 R1 := R1 + 2 адрес otr
0008 0002
000A 01D5 0 => (R1) otr := 0
000C 0000
000E 04D4 сравнить a[1] с 0 (R0) - 0
0010 0000
0012 2D06 если a[1]>=0, переход на 6 байт
0014 0106 R0 => (R2) адрес первого отрицательного элемента
0016 01D5 1 => (R1) otr := 1
0018 0001
001A 02D2 R2 := R2 + 2 адрес n
001C 0002
001E 03D1 R1 := R1 - 2 адрес i
0020 0002
0022 02D0 R0 := R0 + 2 адрес 2-го элемента массива
0024 0002
0026 0456 сравнить (R1) с (R2) (i с n) (R2) - (R1)
0028 3D32 если <0, переход на 32 байта переход на обмен значений
002A 02D1 R1 := R1 + 2 адрес otr
002C 0002
002E 04D4 сравнить (R0) c 0 (R0) - 0
0030 0000
0032 2D14 если >= 0, переход на 14 байт
0034 04D5 сравнить (R1) c 0 (R1) - 0
0036 0000
0038 4D0E если <>0, переход на E байт
003A 03D2 R2 := R2 - 2 адрес k
003C 0002
003E 0106 R0 => (R2) адрес первого отрицательного элемента
0040 01D5 1 => (R1) otr := 1
0042 0001
0044 02D2 R2 := R2 + 2 адрес n
0046 0002
0048 0447 ср. (R0) с (R3) (a[i] c a[max]) (R3) - (R0)
004A 2D02 если >=0, переход на 2 байта если a[max]>=a[i]
004C 0103 R0 => R3 адрес максимального элемента
004E 03D1 R1 := R1 - 2 адрес i
0050 0002
0052 02D5 (R1) := (R1) + 1 i:= i + 1
0054 0001
0056 02D0 R0 := R0 + 2 адрес i-го элемента
0058 0002
005A 1DCA переход на -36(16) байт на сравнение i с n
005C 03D2 R2 := R2 - 2 адрес k
005E 0002
0060 0162 (R2) => R2
0062 0161 (R2) => R1 vsp := a[k]
0064 0176 (R3) => (R2) a[k] := a[max]
0066 0117 R1 => (R3) a[max] := a[k]
0068 0F00 стоп