ЕН.Ф.3 Информатика

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Мурманский государственный гуманитарный университет»
(ФГБОУ ВПО «МГГУ»)
УЧЕБНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС
ДИСЦИПЛИНЫ
ЕН.Ф. 2 ИНФОРМАТИКА
ОСНОВНАЯ ОБРАЗОВАТЕЛЬНАЯ ПРОГРАММА ПОДГОТОВКИ СПЕЦИАЛИСТА
ПО СПЕЦИАЛЬНОСТИ (специальностям)
010501 Прикладная математика и информатика
(код и наименование специальности/тей)
Утверждено на заседании кафедры
математики и математических методов
в экономике факультета
физико-математического образования,
информатики и программирования
(протокол № 6 от 27 февраля 2013 г.)
Зав. кафедрой _______О.М. Мартынов
РАЗДЕЛ 1. Программа учебной дисциплины.
Структура программы учебной дисциплины.
1.1 Автор программы: ст. преподаватель Попов С.Г.
1.2 Рецензенты: доцент Ланина Н.Р.
1.3 Пояснительная записка:
Приведенная программа написана на основе Государственного образовательного
стандарта специальности 010501 – Прикладная математика и информатика. При составлении
программы мы руководствовались также:
1. Примерной программой дисциплины «Информатика», авторами редакторами и рецензентами которой являются:
Авторы программы: Евдокимов В.В. – профессор Санкт-Петербургского университета экономики и финансов, Юкелис Ю.И. – доцент Санкт-Петербургского университета экономики
и финансов
Научная редакция: Пытьев Ю.П. – профессор Московского государственного университета
им. М.В.Ломоносова, Сенаторов П.К. – доцент Московского государственного университета
им. М.В.Ломоносова
Рецензенты: Тарасевич Л.С. - профессор Санкт-Петербургского университета экономики и
финансов, академик МАНВШ, Волков Б.И. - доцент Московского государственного университета им. М.В.Ломоносова
Примерная программа написана для направлений 510000 - Естественные науки и математика (кроме математических), 540000 – Образование, 550000 - Технические науки,
560000 - Сельскохозяйственные науки; одобрена президиумом Научно-методического совета
по информатике; утверждена начальником Управления образовательных программ и стандартов высшего и среднего профессионального образования Г.К. Шестаковым в 2000 году.
2. Программой дисциплины «Информатика и вычислительная техника», написанной доцентом кафедры экономической информатики Московского государственного института коммерции Смольниковым Л.П. и утвержденной Учебно-методическим советом
Института экономики, учета и финансов в 1998 году.
Информатика – комплексное научное направление, имеющее междисциплинарный характер, активно содействующее развитию других научных направлений и тем самым выполняющее интегративную функцию в системе наук.
Как учебная дисциплина «Информатика» находится в стадии становления. В отличие от
других дисциплин, благодаря интенсивному развитию технической базы, происходящему в
последнее время, меняется не только технология, но и общий подход к освоению элементов
информатики.
Дисциплина «Информатика» имеет целью ознакомить учащихся с основами современных информационных технологий, тенденциями их развития, обучить студентов принципам
построения информационных моделей, проведению анализа полученных результатов, применению современных информационных технологий в профессиональной деятельности и,
кроме того, она является базовой для всех курсов, использующих автоматизированные методы анализа и расчетов, и так или иначе использующих компьютерную технику.
Студент, успешно освоивший курс информатики, должен:
1. иметь представления об информационных ресурсах общества как экономической категории;
2. знать основы современных информационных технологий переработки информации и их влияние на успех в профессиональной деятельности;
3. знать современное состояние уровня и направлений развития вычислительной техники и программных средств;
4. уверенно работать в качестве пользователя персонального компьютера, самостоятельно использовать внешние носители информации для обмена
данными между машинами, создавать резервные копии и архивы данных и
программ;
5. владеть основами автоматизации решения экономических задач.
Реализация программы по дисциплине «Информатика» на факультете сопровождается
учебными практиками, курсами по выбору и факультативами, в результате освоения которых
обучающиеся должны приобрести навыки анализа предметной области в терминах информатики, осуществления постановки и программной реализации профессиональных (экономических, социологических, управленческих и др.) задач в условиях использования современных
информационных технологий на базе персональных компьютеров с привлечением различных
программных средств.
1.4 Извлечение (в виде ксерокопии) из ГОС ВПО специальности (направления), включающее требования к обязательному минимуму содержания дисциплины и общее количество часов (выписка).
1.5 Объем дисциплины и виды учебной работы
№
п/п
1
Шифр и наименование специальности
Курс
Семестр
Трудоемкость
010501 – Прикладная математика и информатика
Виды учебной работы в часах
Всего
ЛК ПР/ ЛБ
Сам.
аудит.
СМ
работа
1
1
153
36
26
–
16
16
–
зачет
94
2
Вид итогового контроля (форма отчетности)
59
Зачет,
экзамен
1.6 Содержание дисциплины.
1.6.1. Разделы дисциплины и виды занятий (в часах). Примерное распределение учебного времени:
№
п/п
1
2
3
Наименование раздела, темы
Алгоритмы и алгоритмические системы
Языки программирования и структуры
данных
Классификация алгоритмов, их сложность и их использование для решения
задач
Количество часов
Всего
ауд.
ЛК
ПР
ЛБ
Сам.раб.
7
4
3
–
9
18
10
8
–
10
18
10
8
–
10
4
5
6
Архитектура ЭВМ
Машинная графика
Интерфейс пользователя
17
16
18
10
8
10
7
8
8
–
–
–
10
10
10
1.6.2. Содержание разделов дисциплины.
Алгоритмы и алгоритмические системы
Понятие алгоритма и алгоритмической системы. Две формы представления алгоритмов:
визуальная и текстовая. Визуальные и текстовые языки и псевдоязыки. Преобразование алгоритмов из визуальной формы в текстовую и обратно. Визуализация алгоритмов и блоксхемы. Формализация и эргономизация блок-схем.
Линейные, разветвленные и цикличные алгоритмы. Вложенные и параллельные алгоритмы. Пошаговая детализация как метод проектирования алгоритмов. Компьютер как исполнитель алгоритмов. Программа как изображение алгоритма в терминах команд, управляющих работой компьютера. Коды, ассемблеры, языки высокого уровня. Трансляция и компоновка. Исходный и объектный модули, исполняемая программа. Компиляция и интерпретация. Данные как объект обработки. Типы данных, способы и механизмы управления данными. Операции с массивами. Ввод и вывод массивов. Алгоритмы поиска и упорядочения
массива.
Программы и подпрограммы. Подпрограммы, их назначение и классификация. Оформление подпрограмм, обращение к ним, передача параметров. Библиотечные подпрограммы.
Решение задач с помощью стандартных программ.
Объектно-ориентированное и логическое программирование.
Языки программирования и структуры данных
Классификации языков программирования и моделирования. Основные методологии
программирования (императивная, объектно-ориентированная, функциональная, логическая), их методы и концепции, синтаксис и семантика, класс задач. Основные технологические процессы: анализ требований, проектирование, реализация, тестирование и отладка,
ввод в действие, эксплуатация.
Элементы и структуры данных, алфавит, имена, выражения, операции, операторы,
структуры программ, аппарат подпрограмм, реализация логических структур.
Понятие языка высокого уровня. Синтаксис и семантика. Элементы программирования
на алгоритмическом языке высокого уровня. Реализация простейших алгоритмов (упорядочение, отбор, сортировка и т.д.) на языке программирования С++.
Классификация алгоритмов, их сложность и их использование для решения задач
Основные алгоритмические структуры. Примеры алгоритмов: примеры задач на натуральных числах, приближенные алгоритмы, примеры задач на графах, задачи сортировки и
поиска.
Понятие сложности алгоритмов. Полиномиальные алгоритмы. Полиномиальность и
эффективность. Полиномиальные сходимости и полнота: сходимость по Куку, недетерминированные алгоритмы, сводимость по Карпу.
Приближенные алгоритмы с гарантированными оценками точности: жадный алгоритм
в задаче о покрытии, динамическое программирование для задачи о рюкзаке.
Анализ сложности в среднем. Вероятностные алгоритмы. Задача упаковки. Точность
жадного алгоритма для почти всех исходных данных.
Приложение теории сложности.
Архитектура ЭВМ
Основные функциональные части компьютера. Взаимодействие процессора и памяти
при выполнении команд и программ. Принцип запоминаемой программы. Программа как
последовательность действий компьютера.
Двоичная система счисления. Понятие о машинном языке и языке Ассемблер. Код
ASCII. Исходная и объектная программа. Трансляция как процесс преобразования исходного
кода в объектный. Революция персональных компьютеров.
Архитектура компьютера. Центральные устройства. Внешние устройства: накопители
на гибких и жестких дисках, клавиатура, мышь, видеотерминал, принтер, диск CD-ROM,
стриммер.
Машинная графика
Растровые и векторные изображения. Различные способы представления точки растра в
видеопамяти.
Цвет в компьютерной графике. Физические, физиологические и интуитивные представления о цвете. Стандартные цветовые пространства и преобразования между ними. Палитры.
Алгоритмы генерации растровых отрезков и кривых (ЦДА, алгоритмы типа Брезенхема
(Bresenham) для отрезка, окружности и кривой общего вида).
Алгоритмы отсечения отрезков (Cohen-Sutherland, средней точки, Cyrus-Beck,
Liang-Barsky, Nicholl-Lee-Nicholl) и многоугольников (Sutherland-Hodgeman, WeilerAtherton).
Заполнение многоугольников и растровых областей.
Параметрические кривые: кривые Безье (полиномы Бернштейна), кривые Эрмита,
B-сплайны, NURBS. Определения, вычисление, рекурсивное разбиение, отсечение, пересечение.
Структуры данных для хранения векторного представления объектов. Реберный список
с двойными связями (Крылатый граф). Полу-ребра (half edges). Триангуляция. Понятие о топологических свойствах геометрических объектов.
Диаграммы Вороного и триангуляция Делоне.
Обзор алгоритмов поиска пространственных (многомерных) данных: R-дерево, четыредерево, K-d дерево, сеточный файл, карта трапеций, иерархические триангуляции.
Обработка растровых изображений: фильтрация, геометрические преобразования, аппроксимация полутонами, устранение последствий дискретных преобразований. композиция. фильтры и свёртки, g-коррекция.
Сжатие изображений: без потерь (групповое кодирование, кодирование по Хаффману,
словарная паковка, S+P - преобразование ); сжатие с потерями (дискретное преобразование
Фурье, вейвлет преобразование). Форматы графических файлов (BMP, PCX, PPM, JPEG).
Интерфейс пользователя
Понятие интерфейса пользователя. Диалоговые окна. Стандартные диалоговые окна:
стартовые, диалоговые окна выполнения, диалоговые окна завершения.
Редакторы интерфейса пользователя. Создание интерфейса пользователя с помощью
Visual C++.
1.6.3 Темы для самостоятельного изучения.
№
п/п
1
Наименование разде- Форма самостояла
тельной работы
дисциплины.
Тема.
Алгоритмы и алго- вопросы для саритмические системы мостоятельного
изучения
Форма контроля
выполнения самостоятельной работы
Количество
часов
защита рефератов
9
2
3
4
Языки программирования и структуры
данных
Классификация алгоритмов, их сложность
и их использование
для решения задач
Архитектура ЭВМ
5
Машинная графика
6
Интерфейс пользователя
вопросы для самостоятельного
изучения
рефераты
выполнение тестов
10
защита рефератов
10
вопросы для самостоятельного
изучения
индивидуальное
задание
индивидуальное
расчетнографическое задание
Коллоквиум
10
Защита выполненного задания
Защита РГЗ
10
10
1.7 Методические рекомендации по организации изучения дисциплины.
1.7.1 Тематика и планы практических занятий по изученному материалу
Практические занятия по теме «Алгоритмы и алгоритмические системы» (3 часа)
Вопросы для обсуждения:
Визуальная и текстовая формы представления алгоритмов.
Визуальные и текстовые языки и псевдоязыки.
Преобразование алгоритмов из визуальной формы в текстовую и обратно.
Визуализация алгоритмов и блок-схемы.
Основные алгоритмические структуры: линейные, разветвленные и цикличные алгоритмы.
Вложенные и параллельные алгоритмы.
Пошаговая детализация как метод проектирования алгоритмов.
Компьютер как исполнитель алгоритмов. Программа как изображение алгоритма в терминах команд, управляющих работой компьютера.
9. Коды, ассемблеры, языки высокого уровня. Трансляция и компоновка. Исходный и объектный модули, исполняемая программа. Компиляция и интерпретация.
10. Программы и подпрограммы. Подпрограммы, их назначение и классификация. Оформление подпрограмм, обращение к ним, передача параметров. Библиотечные подпрограммы.
Решение задач с помощью стандартных программ.
11. Объектно-ориентированное и логическое программирование.
1.
2.
3.
4.
5.
6.
7.
8.
Литература:
1. Алгоритмы и программирование на алгоритмическом языке PL/1: Методические указания /
Сост. Кривошеев В.А., Кирякова Г.С., Легалов А.И. Красноярск, КПИ, 1981.
2. Алиев Ю.А., Козлов О.А. Алгоритмизация и языки программирования Pascal, C++, Visual
Basic: Учебно-справочное пособие. – М.: Финансы и статистика, 2002.
3. Вирт Н. Алгоритмы и структуры данных: Пер. с англ. М.: Мир, 1989.
4. Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов: Пер. с англ. М.:
Мир, 1981.
5. Пильщиков В.Н. Программирование на языке ассемблера IBM PC. М.: Диалог-МИФИ,
1994.
6. Программирование. Методические указания / Сост. Титовский С.Н., Титовская Н., Покидышева Л.И. Красноярск, КПИ, 1981.
Практические занятия по теме «Языки программирования и структуры данных» (8 часов)
Вопросы для обсуждения:
1.
2.
3.
4.
5.
6.
7.
Классификации языков программирования и моделирования.
Основные методологии программирования (императивная, объектно-ориентированная,
функциональная, логическая), их методы и концепции, синтаксис и семантика.
Основные технологические процессы: анализ требований, проектирование, реализация, тестирование и отладка, ввод в действие, эксплуатация.
Элементы и структуры данных, алфавит, имена, выражения, операции, операторы.
Структуры программ, аппарат подпрограмм, реализация логических структур.
Языки высокого уровня.
Программирования на алгоритмическом языке высокого уровня. Реализация простейших
алгоритмов (упорядочение, отбор, сортировка и т.д.) на языке программирования С++.
Литература:
1. Дейл, Нелл. Программирование C++: Учебник для студентов вузов и преподавателей информатики/ Ч. Уимз, М. Хедингтон. - М.: ДМК, 2000.
2. Касаткин А.И. Системное программирование. Минск: Выш. шк., 1993.
3. Кнут Д. Искусство программирования для ЭВМ. Т.1,2. - М.: Мир, 1976.
4. Абрамов- С.А., Зима Е.В. Начала программирования на языке Паскаль. М.: Наука, 1987.
5. Алгоритмы и программирование на алгоритмическом языке PL/1: Методические указания /
Сост. Кривошеев В.А., Кирякова Г.С., Легалов А.И. Красноярск, КПИ, 1981.
6. Алиев Ю.А., Козлов О.А. Алгоритмизация и языки программирования Pascal, C++, Visual
Basic: Учебно-справочное пособие. – М.: Финансы и статистика, 2002.
7. Аммерал Л. Программирование графики на Турбо-Си: Пер. с англ. М.: Сол систем, 1992.
8. Бабэ Б. Просто и ясно о Borland C++: Пер. с англ. М.: BINOM, 1995.
9. Баженова И.Ю. Visual C++ 6.0. М.: Диалог-МИФИ, 1999.
10. Бентли Д. Жемчужины программирования: Пер. с англ. СПб.: Питер, 2002.
11. Березин Б.И., Березин С.Б. Начальный курс С и C++. М.: Диалог-МИФИ, 1996.
12. Вайнер Р., Пинсон Л. C++ изнутри: Пер. с англ. Киев: ДиаСофт, 1993.
13. Гилберт С., Маккарти Б. Программирование на Visual C++6. Этюды профессионалов: Пер.
с англ. Киев: ДиаСофт, 1999.
14. Гуревич Н., Гуревич О. Visual C++ 5: Пер. с англ. М.: BINOM, 1999.
15. Задачи по программированию. Язык С++: учебно-методическое пособие. – Мурманск:
МГПУ, 2003. – Ч.1.
16. Керниган Б., Ритчи Д. Язык программирования Си: Пер. с англ. М.: Финансы и статистика,
1992.
17. Кондратьева С.Д. Введение в структуры данных. М.: Изд-во МГТУ, 2000.
18. Пильщиков В.Н. Сборник упражнений по языку Паскаль. М.: Наука, 1989.
19. Побельский В.В. Язык C++. М.: Финансы и статистика, 1999.
20. Прайс Д. Программирование на языке Паскаль. Практическое руководство: Пер. с англ. М.:
Мир, 1987.
21. Редькина А.В. Программирование на языке Турбо-Паскаль. Учеб. пособие. Красноярск:
КГТУ, 1999.
22. Справочник по языку С++. – Мурманск, МГТУ. – 2003.
23. Страуструп Б. Язык программирования C++: Пер. с англ. М.: BINOM, 1999.
24. Уинер Р. Язык Турбо Си: Пер. с англ. М.: Мир, 1991.
25. Уэйт М., Прата С., Мартин Д. Язык Си: Пер. с англ. М.: Мир, 1988.
26. Фаронов В.В. Программирование на персональных ЭВМ в среде Турбо-Паскаль. М.: Изд-во
МГТУ, 1992.
27. Шилдт Г. Программирование на С и C++ для Windows95: Пер. с англ. Киев: Торговоиздательское бюро BHV, 1996.
28. Щуп Т. Решение инженерных задач на ЭВМ: Пер. с англ. М.: Мир, 1982.
Практические занятия по теме
«Классификация алгоритмов, их сложность и их использование для решения задач»
(8 часов)
Вопросы для обсуждения:
1. Основные алгоритмические структуры.
2. Примеры алгоритмов: примеры задач на натуральных числах, приближенные алгоритмы,
примеры задач на графах, задачи сортировки и поиска.
3. Понятие сложности алгоритмов. Полиномиальные алгоритмы. Полиномиальность и эффективность.
4. Полиномиальные сходимости и полнота.
5. Сходимость по Куку.
6. Недетерминированные алгоритмы.
7. Сводимость по Карпу.
8. Приближенные алгоритмы с гарантированными оценками точности: жадный алгоритм в задаче о покрытии, динамическое программирование для задачи о рюкзаке.
9. Вероятностные алгоритмы. Задача упаковки.
10. Точность жадного алгоритма для почти всех исходных данных.
11. Приложение теории сложности.
Литература:
1. Д.С. Джонсон, М. Гэри. Вычислительные машины и труднорешаемы задачи. М.: Мир, 1982.
2. Р. Стирнз Дж. Хартманис. О вычислительной сложности алгоритмов. М: Мир, 1967.
3. Рональд Ривест Томас Кормен, Чарльз Лэйзерсон. Алгоритмы: построение и анализ. М.:
МЦНМО, 1999.
4. Верещагин Н.К., Шень А. Лекции по математической логике и теории алгоритмов.
Практические занятия по теме «Архитектура ЭВМ» (7 часов)
Вопросы для обсуждения:
1. Основные функциональные части компьютера.
2. Взаимодействие процессора и памяти при выполнении команд и программ. Принцип запоминаемой программы. Программа как последовательность действий компьютера.
3. Двоичная система счисления.
4. Понятие о машинном языке и языке Ассемблер. Код ASCII.
5. Исходная и объектная программа.
6. Трансляция как процесс преобразования исходного кода в объектный.
7. Архитектура компьютера. Центральные устройства. Внешние устройства: накопители на
гибких и жестких дисках, клавиатура, мышь, видеотерминал, принтер, диск CD-ROM,
стриммер.
Литература:
1. Айден К., Фибельман X., Крамер М. Аппаратные средства PC. - СПб: BHV, 1996.
2. Богумирский Б.С. Руководство пользователя ПК. Части 1 и 2. - СПб.: Ассоциация OILCO,
1992.
3. Борзенко А.Е. IBM PC: устройство, ремонт и модернизация. - М.: Компьютер Пресс, 1995.
4. Бройдо ВЖ., Ковальский ЕЖ., Румянцева ИМ. Проблемно-ориентированные ЭВМ: Учебное
пособие. - Л.: ЛИЭИ, 1984.
5. Бройдо ВЛ. Персональные ЭВМ: архитектура и программирование на Ассемблере. - СПб.:
ГИЭА, 1994.
6. Гукин Д. IBM-совместимый персональный компьютер: устройство и модернизация. - М.:
Мир, 1993.
7. Каган Б.М. Электронные вычислительные машины и системы. - М.: Энергоатомиздат, 1991.
8. Кручинин С, Озерецковский С. Векторные суперкомпьютеры // Computer Week. - 1995.
9. Кулаков В. Мир портативных компьютеров // Hard and Soft. -1994, - № 5.
10. Макарова Н.В., Гуревич В.И. Работаем на персональном компьютере единой системы. - Л.:
Машиностроение, 1989.
11. Мячев А.А. Персональные ЭВМ: краткий энциклопедический справочник. - М.: Финансы и
статистика, 1992.
12. Нортон П. Программно-аппаратная организация IBM PC. - М.: Радио и связь, 1992.
13. Основы компьютерной грамоты / Под ред. Н.В. Макаровой. - Л.: Машиностроение, Ленингр.
отд-ние, 1987.
14. Скляров ВЛ. Применение ПК. Организация и управление ресурсами ПК. - М.: Высшая школа, 1992.
15. Холидей К. Секреты ПК. - Киев: Диалектика, 1996.
16. Шатер М. Компьютер XXI века // В мире науки (Scientific american). -1991. - № 11.
Практические занятия по теме «Машинная графика» (8 часов)
Вопросы для обсуждения:
Парадигма мультимедийных технологий и основы компьютерного дизайна
Математические основы машинной графики
Форматы графических данных: растровый и векторный форматы.
Цветовые модели
Цветоделение
Акселераторы и средства обработки графической информации
Cредства ввода графической информации: сканеры, дигитайзеры
Cредства вывода графической информации: принтеры, плоттеры. Устройства вывода 3D
графической информации
9. Комбинированные устройства ввода-вывода
10. Визуальные эффекты компьютерной графики
11. Основы компьютерной анимации. 3D MAX, Maya и другие программные средства
12. Роль визуализации в научных исследованиях
13. Прикладное применение визуализации в промышленном производстве: RP-технологии
быстрого проектирования и RPM-технологии быстрого прототипирования, ГИСтехнологии, визуализация в медицине
14. Высокопроизводительные графические системы и средства виртуальной реальности
15. Примеры аппаратных и программных средств высокого уровня (SGI Onyx, SGI Octane, SGI
O2 и др.)
16. Стандарт OpenGL
17. Применение графики в Internet: WEB-технологии, программирование Internet-приложений,
язык Java
1.
2.
3.
4.
5.
6.
7.
8.
Литература:
1. А.А. Зенкин. Когнитивная компьютерная графика и научное творчество. Будущее искусственного интеллекта: Сб./М.: Наука, 1991
2. Б. Флеминг, Д. Доббс, "Методы анимации лица. Мимика и артикуляция", Издательство:
ДМК Пресс, 2003 г.
3. Д. Роджерс, Дж. Адамс, "Математические основы машинной графики", М:, из-во "Мир",
2001
4. Дж. Маэстри “Секреты анимации персонажей”, СПб: Питер; 2002 г.
5. Дж. Маэстри. “Компьютерная анимация персонажей”, СПб.: Питер, 2001
6. Донни О'Квин, "Допечатная подготовка. Руководство дизайнера.", М:, Изд-во "Вильямс",
2003г.
7. Дэвид А. Форсайт, Джин Понс, "Компьютерное зрение. Современный подход", Изд-во "Вильямс", 2004 г.
8. Краснощеков П.С., Петров А.А. Принципы построения моделей. - М.: Фазис, 2000.
9. Л. Аммерал. Интерактивная трехмерная машинная графика. -М.: "Сол систем", 1992.
10. Марк Джамбруно, "Трехмерная графика и анимация "(2-е изд.) , Изд-во "Вильямс", 2002г.
11. Роджерс Д., Адамс Дж. Математические основы машинной графики. -М.: Машиностроение,
1980.
12. Эдвард Энджел, "Интерактивная компьютерная графика. Вводный курс на базе OpenGL "
(2-е изд.) , Изд-во "Вильямс", 2001г.
Практические занятия по теме «Интерфейс пользователя» (8 часов)
1.
2.
3.
Понятие интерфейса пользователя.
Диалоговые окна. Стандартные диалоговые окна: стартовые, диалоговые окна выполнения,
диалоговые окна завершения.
Редакторы интерфейса пользователя.
4.
5.
6.
7.
8.
Технология обработки информации в системе и интерфейс пользователя.
Сетевые технологии автоматизированной обработки информации.
Анализ пользовательского интерфейса.
Моделирование интерфейса пользователя системы.
Создание интерфейса пользователя с помощью Visual C++.
Литература:
1. Боэм Б, Браун Дж., Каспар X. и др. Характеристики качества программного обеспечения /
Пер. с англ. Е.К. Масловского. - М.: Мир, 1981.
2. Брябрин В.М. Программное обеспечение персональных ЭВМ. - 2-е изд., стер. - М.: Наука.
Гл. ред. физ.-мат. лит., 1989.
3. Кнут Д. Искусство программирования для ЭВМ. Т.1,2. - М.: Мир, 1976.
4. Липаев В.В. Проектирование программных средств. - М.: Высшая школа, 1990.
5. Блэк Ю. Сети ЭВМ. Протоколы, стандарты, интерфейсы. - М: Мир, 1990.
6. Дронов В.А. JavaScript в wеb-дизайне. – СПб.: БХВ Петербург, 2002.
7. Дунаев В.В., Дунаев В.В. Графика для Veb. – СПб.: БХВ-Петербург, Армит, 2003.
1.8 Учебно-методическое обеспечение дисциплины.
1.8.1 Рекомендуемая литература:
Основная литература.
1. А.А. Зенкин. Когнитивная компьютерная графика и научное творчество. Будущее искусственного интеллекта: Сб./М.: Наука, 1991
2. Абрамов- С.А., Зима Е.В. Начала программирования на языке Паскаль. М.: Наука, 1987.
3. Айден К., Фибельман X., Крамер М. Аппаратные средства PC. - СПб: BHV, 1996.
4. Алгоритмы и программирование на алгоритмическом языке PL/1: Методические указания /
Сост. Кривошеев В.А., Кирякова Г.С., Легалов А.И. Красноярск, КПИ, 1981.
5. Алгоритмы и программирование на алгоритмическом языке PL/1: Методические указания /
Сост. Кривошеев В.А., Кирякова Г.С., Легалов А.И. Красноярск, КПИ, 1981.
6. Алиев Ю.А., Козлов О.А. Алгоритмизация и языки программирования Pascal, C++, Visual
Basic: Учебно-справочное пособие. – М.: Финансы и статистика, 2002.
7. Б. Флеминг, Д. Доббс, "Методы анимации лица. Мимика и артикуляция", Издательство:
ДМК Пресс, 2003 г.
8. Бабэ Б. Просто и ясно о Borland C++: Пер. с англ. М.: BINOM, 1995.
9. Бентли Д. Жемчужины программирования: Пер. с англ. СПб.: Питер, 2002.
10. Блэк Ю. Сети ЭВМ. Протоколы, стандарты, интерфейсы. - М: Мир, 1990.
11. Богумирский Б.С. Руководство пользователя ПК. Части 1 и 2. - СПб.: Ассоциация OILCO,
1992.
12. Борзенко А.Е. IBM PC: устройство, ремонт и модернизация. - М.: Компьютер Пресс, 1995.
13. Боэм Б, Браун Дж., Каспар X. и др. Характеристики качества программного обеспечения /
Пер. с англ. Е.К. Масловского. - М.: Мир, 1981.
14. Бройдо ВЖ., Ковальский ЕЖ., Румянцева ИМ. Проблемно-ориентированные ЭВМ: Учебное пособие. - Л.: ЛИЭИ, 1984.
15. Бройдо ВЛ. Персональные ЭВМ: архитектура и программирование на Ассемблере. - СПб.:
ГИЭА, 1994.
16. Брябрин В.М. Программное обеспечение персональных ЭВМ. - 2-е изд., стер. - М.: Наука.
Гл. ред. физ.-мат. лит., 1989.
17. Верещагин Н.К., Шень А. Лекции по математической логике и теории алгоритмов.
18. Вирт Н. Алгоритмы и структуры данных: Пер. с англ. М.: Мир, 1989.
19. Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов: Пер. с англ. М.:
Мир, 1981.
20. Гукин Д. IBM-совместимый персональный компьютер: устройство и модернизация. - М.:
Мир, 1993.
21. Гуревич Н., Гуревич О. Visual C++ 5: Пер. с англ. М.: BINOM, 1999.
22. Д. Роджерс, Дж. Адамс, "Математические основы машинной графики", М:, из-во "Мир",
2001
23. Д.С. Джонсон, М. Гэри. Вычислительные машины и труднорешаемы задачи. М.: Мир, 1982.
24. Дейл, Нелл. Программирование C++: Учебник для студентов вузов и преподавателей информатики/ Ч. Уимз, М. Хедингтон. - М.: ДМК, 2000.
25. Дж. Маэстри “Секреты анимации персонажей”, СПб: Питер; 2002 г.
26. Дж. Маэстри. “Компьютерная анимация персонажей”, СПб.: Питер, 2001
27. Донни О'Квин, "Допечатная подготовка. Руководство дизайнера.", М:, Изд-во "Вильямс",
2003г.
28. Дунаев В.В., Дунаев В.В. Графика для Veb. – СПб.: БХВ-Петербург, Армит, 2003.
29. Дэвид А. Форсайт, Джин Понс, "Компьютерное зрение. Современный подход", Изд-во "Вильямс", 2004 г.
30. Задачи по программированию. Язык С++: учебно-методическое пособие. – Мурманск:
МГПУ, 2003. – Ч.1.
31. Каган Б.М. Электронные вычислительные машины и системы. - М.: Энергоатомиздат, 1991.
32. Касаткин А.И. Системное программирование. Минск: Выш. шк., 1993.
33. Кнут Д. Искусство программирования для ЭВМ. Т.1,2. - М.: Мир, 1976.
34. Кондратьева С.Д. Введение в структуры данных. М.: Изд-во МГТУ, 2000.
35. Краснощеков П.С., Петров А.А. Принципы построения моделей. - М.: Фазис, 2000.
36. Кручинин С, Озерецковский С. Векторные суперкомпьютеры // Computer Week. - 1995.
37. Кулаков В. Мир портативных компьютеров // Hard and Soft. -1994, - № 5.
38. Липаев В.В. Проектирование программных средств. - М.: Высшая школа, 1990.
39. Макарова Н.В., Гуревич В.И. Работаем на персональном компьютере единой системы. - Л.:
Машиностроение, 1989.
40. Марк Джамбруно, "Трехмерная графика и анимация "(2-е изд.) , Изд-во "Вильямс", 2002г.
41. Мячев А.А. Персональные ЭВМ: краткий энциклопедический справочник. - М.: Финансы и
статистика, 1992.
42. Нортон П. Программно-аппаратная организация IBM PC. - М.: Радио и связь, 1992.
43. Основы компьютерной грамоты / Под ред. Н.В. Макаровой. - Л.: Машиностроение, Ленингр. отд-ние, 1987.
44. Петров М.Н. Молочков В.П. Компьютерная графика. – СПб: Питер, 2002.
45. Пильщиков В.Н. Программирование на языке ассемблера IBM PC. М.: Диалог-МИФИ,
1994.
46. Пильщиков В.Н. Сборник упражнений по языку Паскаль. М.: Наука, 1989.
47. Прайс Д. Программирование на языке Паскаль. Практическое руководство: Пер. с англ. М.:
Мир, 1987.
48. Программирование. Методические указания / Сост. Титовский С.Н., Титовская Н., Покидышева Л.И. Красноярск, КПИ, 1981.
49. Р. Стирнз Дж. Хартманис. О вычислительной сложности алгоритмов. М: Мир, 1967.
50. Редькина А.В. Программирование на языке Турбо-Паскаль. Учеб. пособие. Красноярск:
КГТУ, 1999.
51. Роджерс Д., Адамс Дж., Математические основы машинной графики.– М.: Мир, 2001.
52. Роджерс Д., Алгоритмические основы машинной графики. – М.: Мир, 1989с.
53. Рональд Ривест Томас Кормен, Чарльз Лэйзерсон. Алгоритмы: построение и анализ. М.:
МЦНМО, 1999.
54. Скляров ВЛ. Применение ПК. Организация и управление ресурсами ПК. - М.: Высшая
школа, 1992.
55. Справочник по языку С++. – Мурманск, МГТУ. – 2003.
56. Страуструп Б. Язык программирования C++: Пер. с англ. М.: BINOM, 1999.
57. Уинер Р. Язык Турбо Си: Пер. с англ. М.: Мир, 1991.
58. Уэйт М., Прата С., Мартин Д. Язык Си: Пер. с англ. М.: Мир, 1988.
59. Фаронов В.В. Программирование на персональных ЭВМ в среде Турбо-Паскаль. М.: Изд-во
МГТУ, 1992.
60. Холидей К. Секреты ПК. - Киев: Диалектика, 1996.
61. Шатер М. Компьютер XXI века // В мире науки (Scientific american). -1991.
62. Шилдт Г. Программирование на С и C++ для Windows95: Пер. с англ. Киев: Торговоиздательское бюро BHV, 1996.
63. Щуп Т. Решение инженерных задач на ЭВМ: Пер. с англ. М.: Мир, 1982.
Дополнительная литература
1. Абламейко С.В., Лагуновский Д.М. Обработка изображений: технология, методы, применение. Мн.: Амалфея, 2000, 304 с., ISBN 985-441-143-5
2. Аммерал Л. Программирование графики на Турбо-Си: Пер. с англ. М.: Сол систем, 1992.
3. Баженова И.Ю. Visual C++ 6.0. М.: Диалог-МИФИ, 1999.
4. Березин Б.И., Березин С.Б. Начальный курс С и C++. М.: Диалог-МИФИ, 1996.
5. Брукшир Дж.Г. Введение в компьютерные науки. – М. – СПб. Киев: Издательский дом
«Вильямс», 2001.
6. Вайнер Р., Пинсон Л. C++ изнутри: Пер. с англ. Киев: ДиаСофт, 1993.
7. Гарсия-Молина Г., Ульман Д., Уидом Д., Системы баз данных. Полный курс. : Пер. с англ.
— М.: Изд. дом "Вильямс", 2003. — 1088 с. ISBN 5-8459-0384-X (рус.)
8. Гилберт С., Маккарти Б. Программирование на Visual C++6. Этюды профессионалов: Пер.
с англ. Киев: ДиаСофт, 1999.
9. Говорухин В., Цибулин В. Компьютер в математическом исследовании: Учебный курс. –
СПб.: Питер, 2001.
10. Громов Г.Р. Национальные информационные ресурсы: проблемы промышленной эксплуатации. - М.: Наука, 1984.
11. Гулд Ч., Тобочник Я. Компьютерное моделирование в физике. М.: Мир, 1994.
12. Гуревич Н., Гуревич О. Visual C++ 5: Пер. с англ. М.: BINOM, 1999.
13. Гусева А.И. Работа в локальных сетях NetWare 3.12 - 4.1. - М.: Диалог-МИФИ, 1996.
14. Дронов В.А. JavaScript в wеb-дизайне. – СПб.: БХВ Петербург, 2002.
15. Дюк В.А., Эмануэль В.Л. Информационные технологии в медико-биологических.
16. Ефимов А.И. Информационный взрыв: проблемы реальные и мнимые. - М.: Наука, 1985.
17. Железко Б.А., Морозевич А.Н. Информационно-аналитические системы поддержки принятия решений. – Мн.: НИУ, 1999.
18. Задачи по программированию. Язык С++: учебно-методическое пособие. – Мурманск:
МГПУ, 2003. – Ч.1.
19. Информатика и математика для юристов / Под ред. Ч.А.Андриашина. – М.: Юнити Дана,
2001.
20. Керниган Б., Ритчи Д. Язык программирования Си: Пер. с англ. М.: Финансы и статистика,
1992.
21. Кондратьева С.Д. Введение в структуры данных. М.: Изд-во МГТУ, 2000.
22. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. – М.: МНЦМО, 1999.
23. Корнеев В.В. Гареев А.Ф., Васютин СВ., Райх В.В. Базы данных. Интеллектуальная обработка информации. –М.: Нолидж, 2001.
24. Краснощеков П.С., Петров А.А. Принципы построения моделей. - М.: Фазис, 2000.
25. Л. Аммерал. Интерактивная трехмерная машинная графика. -М.: "Сол систем", 1992.
26. Першиков В.И., Савинков В.М. Толковый словарь по информатике. -2-е изд., доп. -М.: Финансы и статистика, 1995.
27. Подбельский В.В. Язык C++. М.: Финансы и статистика, 1999.
28. Препарата Ф., Шаймос М., Вычислительная геометрия: введение. – М.: Мир, 1989.
29. Свириденко С.С. Современные информационные технологии. -М.: Радио и связь, 1989.
30. Суханов А.П. Информация и прогресс. - Новосибирск: Наука, 1988.
31. Фаронов В.В. Программирование на персональных ЭВМ в среде Турбо-Паскаль. М.: Изд-во
МГТУ, 1992.
32. Флинт Д. Локальные сети ЭВМ: архитектура, принципы построения, реализация. -М.: Финансы и статистика, 1983.
33. Хилл Ф ., Open GL. Программирование компьютерной графики. Для профессионалов. —
СПб.: Питер, 2002.
34. Шикин Е.В., Боресков А.В., Компьютерная графика. Полигональные модели. – М.: ДИАЛОГ-МИФИ, 2000.
35. Шикин Е.В., Плис А.И., Кривые и поверхности на экране компьютера. Руководство по
сплайнам для пользователей. — М.: ДИАЛОГ-МИФИ, 1996.
36. Шилдт Г. Программирование на С и C++ для Windows95: Пер. с англ. Киев: Торговоиздательское бюро BHV, 1996.
37. Щуп Т. Решение инженерных задач на ЭВМ: Пер. с англ. М.: Мир, 1982.
38. Эйнджел Э., Интерактивная компьютерная графика. Вводный курс на базе OpenGL, 2 изд.:
Пер. с англ. — М.: Издательский дом “Вильямс”, 2001.
39. Юань Фень, Программирование графики для Windows. — СПб.: Питер, 2002.
1.9 Материально-техническое обеспечение дисциплины.
1.9.1 Перечень используемых технических средств: компьютеры на базе процессора Intel Celeron
1.10 Гц, 128 МВ ОЗУ.
1.9.2 Перечень используемых пособий:
 Задачи по программированию. Язык С++: учебно-методическое пособие. – Мурманск:
МГПУ, 2003. – Ч.1.
 Справочник по языку С++. – Мурманск, МГТУ. – 2003.
1.9.3 Перечень видео- и аудиоматериалов программного обеспечения: руководство по выполнению заданий в электронной форме.
1.10 Примерные зачетные тестовые задания.
Тема: Рекурсивные функции
1. Написать программу, использующую функцию min(x) для определения минимального элемента
массива х, введя вспомогательную рекурсивную функцию mini(k) , находящую минимум среди последних элементов массива х, начиная с k-гo.
2. Написать программу, использующую рекурсивную функцию sort, которая сортирует одномерный массив методом разделения на части исходного массива элементов [16].
3. Написать программу, использующую рекурсивную логическую функцию sim(s, i, j) , проверяющую, является ли симметричной часть строки s, начинающейся i-м и заканчивающаяся j-м ее элементами.
4. Написать программу, использующую рекурсивную функцию для определения, является ли число "почти совершенным". "Почти совершенное" число - это число из ряда натуральных чисел, которое равно сумме своих делителей, не обязательно всех (исключая само число).
5. Имеется n населенных пунктов, перенумерованных от 1 до n (n = 10). Некоторые пары пунктов
соединены дорогами. Определить, можно ли попасть по этим дорогам из 1-го пункта в n-й. Информация о дорогах задается в виде матрицы размером nхn, содержащей нули и единицы. Нуль
или единица в i-й строке и j-м столбце означает отсутствие или наличие дороги, соединяющей i-й
населенный пункт с j-м.
6. Написать программу, использующую рекурсивную функцию root(f, a, b, eps) , которая методом
деления отрезка пополам находит с точностью eps корень уравнения f(х) = 0 на отрезке [а, b] .
Считать, что eps > 0, а < b и f(x) - непрерывная и монотонная функция на отрезке [а, b],
x 2
f ( x)  cos   ln(1  x 2 )
2 x
8. Задача о восьми ферзях: на шахматной доске расставить восемь ферзей так, чтобы они не "били"
друг друга. Написать программу, которая печатает одну из таких расстановок [18].
10. Задача "Тур конем". На шахматной доске размером nхn на поле с координатами х0, у0 находится конь - фигура, перемещающаяся по обычным шахматным правилам. Задача заключается в
поиске последовательности ходов, при которой конь точно один раз побывает на всех полях доски
(обойдет доску), т.е. нужно вычислить nхn - 1 ходов [18].
11. Задача о коммивояжере. Агент по продаже компьютеров (коммивояжер) работает на территории 20 городов. Задача состоит в том, чтобы снизить дорожные расходы коммивояжера. Исходная
информация задана в виде перечня городов и соответствующей матрицы стоимостей, т.е. двумерного массива с элементами с [i, j], равными стоимости переезда из города i в город j. Кроме того,
известно, что маршрут начинается и заканчивается в базовом городе и проходит по одному разу
через все остальные города. Результатом работы программы будет список городов, содержащий
каждый город только один раз, за исключением базового города, который стоит в списке первым и
последним, и представляющий маршрут коммивояжера с наименьшей возможной общей стоимостью проезда [17] .
12. Задача о рюкзаке. В рюкзаке объёмом V содержится запас из N предметов. Для каждого предмета заданы объем и стоимость. В рюкзак можно положить целое число различных предметов.
Нужно упаковать рюкзак так, чтобы общая стоимость упакованных предметов была наибольшей, а
их общий объём не превосходил V. Форма предметов в задаче не рассматривается [18,19].
17. Дано натуральное N. Определить количество способов представления этого числа в виде суммы натуральных чисел. Например, число 5 можно представить в виде следующих сумм:
5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1.
18. Найти минимальное число монет, сумма значений которых составит требуемую величину сдачи. Число монет каждого достоинства (всего N достоинств) не ограничено. Исходные данные
представлены списком чисел, первое из которых задает величину сдачи, второе определяет число
различных достоинств монет, а остальные являются значениями каждого достоинства.
21. Лабиринт задан с помощью массива размером NxM (0 - проход есть, 1 - прохода нет). Определить есть ли путь из точки с координатами ( i, j ) в точку с координатами ( k, 1 ) .
1.11 Примерный перечень вопросов к зачету (экзамену).
1. Классификации языков программирования и моделирования.
2. Основные методологии программирования (императивная, объектно-ориентированная,
функциональная, логическая), их методы и концепции, синтаксис и семантика.
3. Основные технологические процессы: анализ требований, проектирование, реализация, тестирование и отладка, ввод в действие, эксплуатация.
4. Элементы и структуры данных, алфавит, имена, выражения, операции, операторы.
5. Структуры программ, аппарат подпрограмм, реализация логических структур.
6. Языки высокого уровня.
7. Программирования на алгоритмическом языке высокого уровня. Реализация простейших
алгоритмов (упорядочение, отбор, сортировка и т.д.) на языке программирования С++.
8. Основные алгоритмические структуры.
9. Примеры алгоритмов: примеры задач на натуральных числах, приближенные алгоритмы,
примеры задач на графах, задачи сортировки и поиска.
10. Понятие сложности алгоритмов. Полиномиальные алгоритмы. Полиномиальность и эффективность.
11. Полиномиальные сходимости и полнота.
12. Сходимость по Куку.
13. Недетерминированные алгоритмы.
14. Сводимость по Карпу.
15. Приближенные алгоритмы с гарантированными оценками точности: жадный алгоритм в
задаче о покрытии, динамическое программирование для задачи о рюкзаке.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
Вероятностные алгоритмы. Задача упаковки.
Точность жадного алгоритма для почти всех исходных данных.
Приложение теории сложности.
Основные функциональные части компьютера.
Взаимодействие процессора и памяти при выполнении команд и программ. Принцип запоминаемой программы. Программа как последовательность действий компьютера.
Двоичная система счисления.
Понятие о машинном языке и языке Ассемблер. Код ASCII.
Исходная и объектная программа.
Трансляция как процесс преобразования исходного кода в объектный.
Архитектура компьютера. Центральные устройства. Внешние устройства: накопители на
гибких и жестких дисках, клавиатура, мышь, видеотерминал, принтер, диск CD-ROM,
стример.
Парадигма мультимедийных технологий и основы компьютерного дизайна
Математические основы машинной графики
Форматы графических данных: растровый и векторный форматы.
Цветовые модели
Цветоделение
Акселераторы и средства обработки графической информации
Средства ввода графической информации: сканеры, дигитайзеры
Средства вывода графической информации: принтеры, плоттеры. Устройства вывода 3D
графической информации
Комбинированные устройства ввода-вывода
Визуальные эффекты компьютерной графики
Основы компьютерной анимации. 3D MAX, Maya и другие программные средства
Роль визуализации в научных исследованиях
Прикладное применение визуализации в промышленном производстве: RP-технологии
быстрого проектирования и RPM-технологии быстрого прототипирования, ГИСтехнологии, визуализация в медицине
Высокопроизводительные графические системы и средства виртуальной реальности
Примеры аппаратных и программных средств высокого уровня (SGI Onyx, SGI Octane, SGI
O2 и др.)
Стандарт OpenGL
Применение графики в Internet: WEB-технологии, программирование Internet-приложений,
язык Java
Понятие интерфейса пользователя.
Диалоговые окна. Стандартные диалоговые окна: стартовые, диалоговые окна выполнения,
диалоговые окна завершения.
Редакторы интерфейса пользователя.
Технология обработки информации в системе и интерфейс пользователя.
Сетевые технологии автоматизированной обработки информации.
Анализ пользовательского интерфейса.
Моделирование интерфейса пользователя системы.
Создание интерфейса пользователя с помощью Visual C++.
1.12. Комплект экзаменационных билетов.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №1
Вопрос №1 Понятие алгоритма. Алгоритм поиска НОД. Вычислительный процесс.
Вопрос №2 Структура вычислительной системы.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №2
Вопрос №1 Свойства алгоритма. Сложность. Схема Горнера и прямой алгоритм вычисления значения полинома в заданной точке.
Вопрос №2 Основные компоненты вычислительной системы. ЦП, ОЗУ, УУВУ, Системная шина
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №3
Вопрос №1 Свойства алгоритма. Массовость. Потенциальная осуществимость (конечность, сложность), детерминированность, однозначное понимание всеми исполнителями.Класс игр. Игра
«чёт-нечет».
Вопрос №2 Основные компоненты вычислительной системы. Регистры (общего назначения, сегментные, указатель команд, регистр флагов)
Зав. кафедрой АГ и ПМ
Декан ФПМПЭ
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
Е.Е. Маренич
Е.Е. Маренич
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №4
Вопрос №1 Теорема, что для рассматриваемого класса игр всегда существует выигрышная стратегия.
Вопрос №2 Основные компоненты вычислительной системы. Система прерываний.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №5
Вопрос №1 Понятия вычислимой функции и алгоритмической системы.
Вопрос №2 Основные компоненты вычислительной системы. Буферные регистры (КЭШ). Использование расслоения памяти.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №6
Вопрос №1 Машина Тьюринга
Вопрос №2 Фрагментация память. Виртуальная память.
Зав. кафедрой АГ и ПМ
Декан ФПМПЭ
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
Е.Е. Маренич
Е.Е. Маренич
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №7
Вопрос №1 Нормальные алгоритмы Маркова.
Вопрос №2 Внешние устройства. Магнитный барабан, магнитный диск.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №8
Вопрос №1 Языки программирования и основные этапы трансляции. Процесс компиляции.
Вопрос №2 Внешние устройства. Память на магнитных доменах, каналы.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №9
Вопрос №1 Понятие синтаксиса и семантики алгоритмического языка. Синтаксические диаграммы.
Вопрос №2 Мультипрограммирование. Проблемы организации мультипрограммного режима.
Зав. кафедрой АГ и ПМ
Декан ФПМПЭ
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
Е.Е. Маренич
Е.Е. Маренич
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №10
Вопрос №1 Понятие синтаксиса и семантики алгоритмического языка. Расширенная форма Бэкуса-Наура.
Вопрос №2 Аппарат подкачки.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №11
Вопрос №1 Синтаксический анализ.
Вопрос №2 Назначение и основные функции операционной системы.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №12
Вопрос №1 Идентификаторы и основные типы языка С++.
Вопрос №2 Управление использованием времени центрального процессора.
Зав. кафедрой АГ и ПМ
Декан ФПМПЭ
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
Е.Е. Маренич
Е.Е. Маренич
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №13
Вопрос №1 Логические операции и операции сравнения.
Вопрос №2 Управление подкачкой и буфером ввода. Управление разделяемыми ресурсами.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №14
Вопрос №1 Арифметические и битовые операции.
Вопрос №2 Файлы. Основные свойства файлов.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №15
Вопрос №1 Операция присваивания, условная операция, последовательная операция(,).
Вопрос №2 Одноуровневая организация файлов непрерывными сегментами.
Зав. кафедрой АГ и ПМ
Декан ФПМПЭ
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
Е.Е. Маренич
Е.Е. Маренич
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №16
Вопрос №1 Операторы языка С++ (объявления имён, условный оператор, операторы возврата и
перехода).
Вопрос №2 Файловая система с блочной организацией файлов.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №17
Вопрос №1 Операторы цикла.
Вопрос №2 Иерархическая файловая система.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №18
Вопрос №1 Массивы и указатели.
Вопрос №2 Классификация сетей ЭВМ.
Зав. кафедрой АГ и ПМ
Декан ФПМПЭ
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
Е.Е. Маренич
Е.Е. Маренич
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №19
Вопрос №1 Функции.
Вопрос №2 Топология сетей ЭВМ.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №20
Вопрос №1 Структуры и классы.
Вопрос №2 Цветовые модели RGB, YCbCr, CMYK.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №21
Вопрос №1 Операторы языка С++ (объявления имён, условный оператор, операторы возврата и
перехода).
Вопрос №2 Топология сетей ЭВМ.
Зав. кафедрой АГ и ПМ
Декан ФПМПЭ
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
Е.Е. Маренич
Е.Е. Маренич
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №22
Вопрос №1 Функции.
Вопрос №2 Блок-схемы
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №23
Вопрос №1 Идентификаторы и основные типы языка С++.
.Вопрос №2 Сравнение BMP, JPG, PNG и GIF.
Зав. кафедрой АГ и ПМ
Е.Е. Маренич
Декан ФПМПЭ
Е.Е. Маренич
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №24
Вопрос №1 Машина Тьюринга
Вопрос №2 Блок-схемы
Зав. кафедрой АГ и ПМ
Декан ФПМПЭ
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
Е.Е. Маренич
Е.Е. Маренич
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального
образования «Мурманский государственный педагогический университет»
(МГПУ)
Кафедра: алгебры, геометрии и прикладной математики
Наименование дисциплины: Информатика, 1 курс, ПМИ, 2 семестр
Экзаменационный билет №25
Вопрос №1 Массивы и указатели.
Вопрос №2 Сравнение BMP, JPG, PNG и GIF.
Зав. кафедрой АГ и ПМ
Декан ФПМПЭ
Утверждено на заседании кафедры.
Протокол № 9 от 30.05.2007 г.
Е.Е. Маренич
Е.Е. Маренич
1.13 Примерная тематика рефератов.
Локальные технологии защиты данных
Технологии защищенной связи
Компьютерное моделирование экономических процессов
1.14. Примерная тематика курсовых работ – не предусмотрено стандартом.
1.15. Примерная тематика квалификационных (дипломных) работ - не предусмотрено
стандартом.
1.16. Методика(и) исследования (если есть) - нет.
1.17. Бально-рейтинговая система, используемая преподавателем для оценивания знаний
студентов по данной дисциплине.
Используется пятибалльная система оценивания знаний студентов.
РАЗДЕЛ 2. Методические указания по изучению дисциплины (или ее разделов) и контрольные задания для студентов заочной формы обучения.
Нет заочной формы обучения по данной дисциплине.
РАЗДЕЛ 3. Содержательный компонент теоретического материала.
3.1 Алгоритмы и алгоритмические системы
3.1.1 Алгоритм основное понятие математики
"точное предписание о порядке выполнения
действий, из заданного фиксированного
множества, для решения всех задач,
заданного класса".
3.1.2 Алгоритм Евклида нахождения наибольшего общего делителя двух
натуральных чисел
Исходные данные', n, m - натуральные числа
Результат: НОД (n, m) - натуральное число Д, такое, что
 n

m
d  max di  N ;  N 
i
di
 di

Алгоритм:
1. Положи а = n, b = т (следующий шаг)
2. Сравни а и b (следующий шаг)
3. Если a = b, то a – результат; (стоп)
иначе (следующий шаг)
4. Если а<b, то поменяй их местами; (следующий шаг)
5. Вычти b из a; (следующий шаг)
Б. Положи а = разность; (перейти к шагу 2)
значение значение
№
а
b
действия
1
3
2
1
2
3
2
2
3
3
2
3
4
3
2
4
5
3
2
5
6
1
2
6
7
1
2
2
8
1
2
3
9
2
1
4
10
2
1
5
11
1
1
6
12
1
1
2
13
1
1
3
Вычислительный процесс алгоритма Евклида для a=3, b=2



вычислительный процесс – последовательность действий, выполненных при исполнении алгоритма.
вычислительный процесс всегда для заданных исходных данных определен однозначно.
детерминированность - при одних и тех же данных результат один и тот же.
3.1.3 Действия и данные
• действия над данными (например, сравни, вычти, положи);
• действия, изменяющие "естественный" порядок вычислений (например: если - то - иначе; перейди к шагу #).
• в алгоритме могут быть использованы десятки переменных, но результат будет храниться лишь в нескольких.
• правило окончания - некоторое условие на множестве текущих значений переменных.
• Исходные данные - это значения, с которых начинается исполнение алгоритма.
• Данные представлены переменными либо константами.
• Данные - это слова в некотором алфавите (в нашем примере цифры).
Определение 1.1
Типом переменной называется множество возможных ее значений.
Определение 1.2
Состоянием на множестве переменных {vi|i=1,k} называется набор значений этих переменных.
Определение 1.3
Вычислительным процессом, порожденным алгоритмом, называется последовательность шагов алгоритма, пройденных при исполнении этого алгоритма.
Определение 1.4
Состоянием вычислительного процесса, порожденного алгоритмом А, называется состояние на множестве переменных ({vi|i=1,k}), где {vi|i=1,k} - набор всех переменных, используемых в алгоритме А.
Определение 1.5
Терминальным состоянием называется состояние вычислительного процесса, на множестве значений которого выполняется определенное условие - правило окончания алгоритма.
Определение 1.6
Результат - это определенная совокупность значений из терминального состояния вычислительного процесса алгоритма.
Определение 1.7
Действие - переход из одного состояния в другое.
3.1.4 Схема Горнера
Множество исходных данных: (an, …, a0), где aiR, bR.
(аn, аn-1, …, a1, a0) вектор из n+1 вещественных числа,
b - вещественное число.
Результат: r: r = (b), где (b) = anbn+…+a1b+a0
Переменные: i - типа целый; x, r - типа вещественный.
Константы: {аi=1, п+1}, n.
Алгоритм:
1. Положи i равным п, х равным b;
2. Положи r равным ai;
3. Умножь r на x;
4. Положи r равным произведению;
5. Положи i равным i -1;
6. Положи r равным r+ai;
7. Если i = 0, то r - результат
иначе перейди к шагу 3;
Организация вычислений по схеме Горнера
...an x  an1 x  an2 x  an3 x  ...  a1 x  a0
3.1.5 Прямой алгоритм
Исходные данные: те же, что и в предыдущем примере.
Результат: тот же.
Переменные: r, s, x - типа вещественный, r - типа целый.
Константы: ai, n.
Алгоритм:
1. Положи i равным n, s равным 0, x равным b;
2. Возведи x в степень i
3. Умножь ai на степень;
4. Положи s равной сумме s и произведения.
5. Если i = 0, то s - результат (стоп)
иначе положи i = i - 1, перейди к шагу 2.
Организацию вычислений по этому алгоритму описывает выражение
an xn    a1 x  a0
Определение 1.8
• Сложностью алгоритма называется количество действий в
вычислительном процессе этого алгоритма.
Чаще под сложностью алгоритма понимают функцию от характеристики исходных данных, значение которой есть
длина соответствующего вычислительного процесса
Сложность первого алгоритма (по схеме Горнера) в виде числа
операций сложения и умножения будет равна 2п.
Для прямого алгоритма она будет равна:
n  1 n  2  n  n
 i  1  n 
n
i 0
n
2
 3n  2
n2
n
 2n  2n
2
2
Вывод: Для решения одного и того же класса задач
существуют разные алгоритмы, разной сложности.
Всегда ли алгоритм дает точное решение?
Вычислительный процесс всегда конечен. Алгоритм всегда заканчивается.
Например, при вычислениях 20:3 и 2 , мы вынуждены довольствоваться лишь приблизительным решением.
3.1.6 Массовость
 Алгоритм предназначен "для решения всех задач заданного класса".
 Парадокс греческого философа Эвбулида "Что есть куча?"
 Массовость предполагает существование четко определенного класса объектов, которые могут быть исходными данными. Мощность этого класса - свойство класса объектов, а не алгоритма.
 Конструктивный объект - это такая сущность, которая может быть построена из некоторых элементарных, базовых объектов с помощью конечного числа применений операций из определенного множества операций.
 Примерами конструктивных объектов могут служить слова в некотором фиксированном алфавите.
 Данные - конструктивный объект.
 Вычислительный процесс - конструктивный объект.

Алгоритм - конструктивный объект.
3.1.7 Проблема построения выигрышной стратегии для определенного класса игр.
Выигрышная стратегия - это набор правил, следуя которым один из игроков обязательно выигрывает.
Класс игр, который мы будем рассматривать, определим так:
- Двое игроков ходят по очереди;
- Обязательно выигрывает только один;
- При выборе очередного хода случайность отсутствует;
- Каждый играющий знает свои ходы и ходы противника.
Дерево игры "чет-нечет"
Конечные вершины, называемые листьями, помечаются "+", если выигрывает А и "-", если - В.
Пометим все вершины в этом дереве "+" или "-" по следующему правилу:
1.Если ход А заканчивается хотя бы одним "+", то помечаем вершину, с которой начинается ход А, так же "+". В противном случае 'помечаем вершину, с которой начинается ход А, "-".
2.Если ход В заканчивается так, что обе вершины помечены "+", то вершина, с которой начинается этот ход, так же
метится "+". В противном случае ставим "-".
3.1.8 Потенциальная и практическая разрешимость
Теорема 1.1. В любой игре, из рассматриваемого класса, всегда
существует выигрышная стратегия для одного из игроков.
Доказательство:
Доказывать эту теорему будем методом индукции.
1) Для п=1 ( п - максимальное кол-во ходов в игре):
2) По индукции: пусть утверждение теоремы верно для п = S,
докажем, что оно верно и для S+1.
Эта теорема верна и для игр, где возможна ничья. Следовательно,
она верна и для шахмат!
3.1.9 Уточнение понятия алгоритма
1. Для любого алгоритма можно вылепить семь независимых,
характеризующих его параметров:
2. Совокупность возможных исходных данных (алфавит исходных данных).
3. Совокупность возможных результатов (алфавит результатов).
4. Совокупность возможных промежуточных результатов (алфавит промежуточных результатов).
5. Множество действий.
6. Правило начала.
7. Правило окончания.
Правило определения расположения результата.
• Выбор 7 классов может быть назван алгоритмической системой, если есть убеждение, что для произвольного алгоритма в интуитивном смысле с такой же областью определения и множеством результатов, может быть указан равносильный ему алгоритм из определенного данным выбором класса.
3.1.10 Выводы:
• Не для всякой массовой проблемы существует алгоритм;
• Для одной и той же проблемы могут существовать разные алгоритмы с разной сложностью;
• Алгоритм определяет последовательность действий;
• Данные, алгоритм и вычислительный процесс - конструктивные объекты;
• Исходные данные образуют класс, описываемый некоторым языком;
• Алгоритм и исходные данные определяют вычислительный процесс полностью;
• При одних и тех же исходных данных алгоритм всегда дает один и тот же результат;
• Алгоритм одинаково понимается всеми исполнителями.
• Исполнение алгоритма всегда заканчивается.
3.2 Классификация алгоритмов, их сложность и их использование для решения задач
3.2.1 Машина Тьюринга вводится как уточнение вышеперечисленных 7 параметров.
Алфавит D (один символ).
1.
Совокупность возможных исходных данных
D
2.
Совокупность возможных результатов D;
3.
Совокупность возможных промежуточных результатов DxRxQ;
4.
Правила непосредственной переработки (действия):
dp->rqw,
где
d, r - принадлежит. D (символы)
p, q- принадлежит. Q (алфавит состояний)
w- принадлежит. { Л, П, Н }
5. Правило начала:
начальное состояние.
6. Правило окончания '!' - принадлежит. Q
7. Правило извлечения результата: результат - справа от каретки до символа пустоты.
МТ была предложена Аланом Тьюрингом в 30-х годах.
МТ состоит из бесконечной ленты, разбитой на ячейки. Над лентой движется каретка, перемещаясь вправо или влево
только на одну ячейку за один шаг.
Рассматриваются следующие примеры МТ:
1.U(n) = n+1;
2.U( <n в ун. записи> ) = <n-1 в ун. записи>;
3.U( <n в ун. записи> ) = n;(строиться как композиция МТ1 и МТ2)
4. МТ для вычисления НОД.
Для каждого примера подсчитывается сложность.
1)
A
Q
А(n) = n+1
D = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, П}
Первоначально каретка находится над последним символом.
0
1ЛQ
ЛQ
1
2ЛQ
ЛQ
2
3ЛQ
ЛQ
3
4ЛQ
ЛQ
4
5ЛQ
ЛQ
5
6ЛQ
ЛQ
6
7ЛQ
ЛQ
7
8ЛQ
ЛQ
8
9ЛQ
ЛQ
9
0ЛA
ЛQ
П
1Л!
!
Сложность (кол-во выполненных правил подстановки): log10 n+1
2) Унарная запись натурального числа : D = { |, П }
A(n) = n-1
Первоначально каретка находится над последним символом ‘|’.
A
Q
|
ПЛQ
ЛQ
П
|Л!
!
Сложность: n (линейно зависит от величины исходных данных)
3) Унарная запись -> десятичная.
1. Стираем палочку
2. Влево до цифры или пустоты
3. Увеличиваем число на 1
4. Вправо до последнего '|'
5. Если ее нет, то влево до пустоты, стоп.
Тезис Тьюринга: Для любой интуитивно вычислимой функции существует МТ, ее вычисляющая.
Выводы:
•
А реализуют лишь подмножество (класс вычислимых функций) функции, рассматриваемых в курсе мат.
анализа;
•
•
Алгоритмизация решения задачи состоит в разбиении задачи на подзадачи, подзадач на подподзадачи и т.д.;
МТ можно строить из ранее построенных МТ.
Вопросы:
1.
Квадратный корень из x - вычислимая функция?
2.
Что такое вычислимая функция?
3.
Как отличить вычислимую функцию от невычислимой?
4.
Множество вещественных чисел перечислимо?
5.
Что такое перечислимое множество?
6.
Мн-во четных целых чисел разрешимо относительно мн-ва целых чисел?
7.
Сформулируйте условие разрешимости мн-ва В относительно мн-ва М.
8.
Перечислить параметры для уточнения понятия А.
9.
Как в МТ задаются исходные данные?
10.
Как в МТ задаются возможные результаты?
11.
Как в МТ задаются промежуточные результаты?
12.
Как в МТ задается правило начала работы А?
13.
Как в МТ задается правило окончания работы?
14.
Как в МТ извлекается результат?
15.
Можно ли МТ строить из других МТ?
16.
Как можно объединять несколько МТ в одну МТ?
3.2.2 Нормальные алгоритмы Маркова вводятся как уточнение 7 основных параметров А:
1. Совокупность возможных исходных данных - слова в алфавите S;
2. Совокупность возможных результатов - слова в W;
3. Совокупность возможных промежуточных результатов - SuWuV (V - вспомогательный алфавит - специальные символы)
4. Правила непосредственной переработки (действия) - правила подстановки, порядок их применения и порядок
просмотра слова; { a->b, b|->a }, где a,bSuWuV
5. Правило начала - всегда с первого правила и начала слова;
6. Правило окончания - терминальные правила и неприменимость ни одного из правил;
7. Правило извлечения результата - преобразованное слово.
Сложность измеряется в количестве примененных правил подстановки.
Рассматриваются примеры НАМ:
1. U(n) = n+1;
S = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; W=S; V={*, +};
*0 -> 0*
*1 -> 1*
...
*9 -> 9*
* -> +
0+ -> 1
1+ -> 2
...
9+ -> +0
+ -> 1
-> *
2. U( <n в ун. записи> ) = <n-1 в ун. записи>;
| |-> (Первый штрих в записи числа исчезает)
3. U( <n в ун. записи> ) = n;(строится как композиция НАМ), n>=1
1) Поставить 0 слева от слова
2) Удалить '|'
3) Увеличить число на 1
4) Если нет '|', то стоп
иначе к шагу 2
1| -> 2
2| -> 3
...
9| -> |0
| -> 1
4. МТ для вычисления НОД.
Во всех примерах подсчитывается сложность. Подчеркивается свойство НАМ - композиция нескольких НАМ в одну.
Заканчивается рассмотрение НАМ формулировкой тезиса Маркова. Обращается внимание на равномощность МТ и
НАМ в смысле мн-ва алгоритмов, которые можно описать с помощью этих А.с.
Тезис Маркова: Для любой интуитивно вычислимой функции существует НАМ, ее вычисляющий.
Построение алгоритмов из алгоритмов.
На примере МТ и НАМ была показана возможность строить А из других А. Возникает вопрос: является ли этот принцип композиции универсальным. Другими словами можно ли аккумулировать знания в форме А, так чтобы на их основе строить другие А.
Эта проблема рассматривается на примере МТ. Вводятся четыре операции
° - последовательной композиции;
N - параллельной композиции;
if_then_else- разветвление;
while_do - цикл.
Доказывается четыре теоремы о том, что если есть МТ1 и МТ2 , то существует регулярная процедура построения МТ,
эквивалентной последовательной и параллельной композиции МТ1 и МТ2 ; если есть распознающий алгоритм F, то
можно построить МТ реализующую if F then МТ1 else МТ2 ; МТ реализующую while F do МТ1.
Теорема 1.
Для любых МТ A и B можно эффективно построить МТ, С(p)=A(p)°B. (Для любого p из области применимости A)
Док-во
|-----------------|-----------------|
|
|
|
|
A
|
|
|
|
|
|-----------------|-----------------|
|
|
|
|
|
B
|
|
|
|
|-----------------|-----------------|
Алфавит полученной МТ есть объединение алфавитов исходных МТ.
'!' в МТ A , заменим на переход в начальное состояние B.
Правило параллельной композиции
Параллельной композицией A||B называется такой А, для которого неважен порядок применения (выполнения) A и B.
A(P||R)°B = B(P||R)°A = B(P) || A(R), где || - символ, не принадлежащий алфавитам A и B.
Теорема 2
Для любых МТ A и B можно эффективно построить МТ, С(P||R)=A(P) || B(R).
Вычислительная сложность МТ с полулентой не слабее МТ с полной лентой.
Разветвление алгоритма
Ф(р) = 1, если условие выполнено
0, в противном случае
=> Ф - распознающий алгоритм.
Теорема 3
Для любых МТ A, B и распознающей Ф с одинаковым алфавитом можно эффективно построить МТ, С(P) =
A(P), если Ф(р)=1
B(P), в противном случае.
Повторное применение А
Теорема 4
Для любой МТ A и распознающей Ф можно эффективно построить МТ, С(P) = { повторяй A, пока Ф }
Теорема
Любая МТ может быть построена с помощью операций последовательной и параллельной композиций,
условной и циклической конструкций.
Выводы :



Алгоритм - конструктивный объект;
Алгоритм можно строить из других алгоритмов;
°, N, if_then_else, while_do - универсальный набор действий по управлению вычислительным процессом.
Вопросы :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Что такое правило подстановки?
Зависит ли результат от порядка следования правил в НАМ?
Что происходит когда не применимо ни одно правило подстановки?
Что утверждает тезис Маркова?
Что означает равномощность А.с.?
Что такое А.с.?
Можно ли доказать тезис Маркова?
Семантика операции °?
Семантика операции N?
Семантика операции if_then_else?
Семантика операции while_do?
3.2.3 Алгоритмические проблемы и взаимосвязь алгоритмических систем.
1. Существование универсальных вычислителей.
Рассматривается проблема: А - описание, определенного множества последовательностей действий, из фиксированного множества действий. Для каждого А нужен свой исполнитель или же можно построить один способный
выполнять все алгоритмы в данной А.с.?
Эта проблема рассматривается для А.с. - МТ. Сначала рассматривается алгоритм подражания в интуитивной
форме. Требуется построить МТ:
исходные данные - функциональная схема другой МТ и данные для нее.
результат - результат, который выдала бы задаваемая МТ при работе: УМТ(МТ, Д) = МТ(Д)
1. Обозревай ячейку, под которой написана буква (состояние)
2. Отыщи в таблице строку, обозначенную этой буквой
3. В найденной строке обозревай тройку символов, которая стоит на пересечении со столбцом, обозначенным
буквой, вписанной в обозреваемую ячейку.
4. Замени букву в обозреваемой ячейке на первую букву в тройке.
5. Если третьей буквой тройки является “!”, то стоп.
6. Если в обозреваемой ячейке вторая буква “Н”, то сотри букву под обозреваемой ячейкой и запиши туда третью букву тройки (смена состояния)
7. Если в обозреваемой ячейке вторая буква “Л”, то сотри букву под обозреваемой ячейкой, сдвинься влево и
запиши туда третью букву тройки.
8. Если в обозреваемой ячейке вторая буква “П”, то сотри букву под обозреваемой ячейкой, сдвинься вправо и
запиши туда третью букву тройки.
9. Перейди к шагу 1.
Затем показывается, что для того чтобы преобразовать этот интуитивный А в форму МТ надо решить две
проблемы:
- как задать функциональную схему МТ в линейной форме?
- так как произвольная МТ может иметь произвольный алфавит, то какой алфавит будет у универсальной МТ
(УМТ)?
Дается строгое математическое решение этих двух проблем.
Запишем МТ пятерками вида
A01ЛQ
Проблема кодировки. Пример кодировки:
Л
101
Н
1001
П
10001
S1
100001
Q1
1000001
S2
10000001
Q2
100000001
S3
1000000001
Q3
10000000001
...
...
После этого алгоритм подражания переформулируется из интуитивной формы
в форму МТ.
2. Алгоритмические проблемы и взаимосвязь А.с.
Рассматривается понятие Алгоритмической проблемы. Приводятся примеры 10-ой проблемы Гильберта (решение диофантовых уравнений) как неразрешимой А.п.
Проблема выводимости
Дано: правила подстановки, слова W и S.
?Можно ли преобразовать W->S с помощью данных правил подстановки?
Ответ: Нельзя.
Алгоритм самоприменим, если он может быть применен к слову, представляющему его описание.
Теорема: Распознание самоприменимости неразрешимо.
Доказательство:
Допустим, что существует А, распознающий самоприменимость
А(U) = b, если U самоприменим
c, в противном случае.
=> можно из А построить B(U), который не останавливается, если U самоприменим и останавливается, выдавая c в
противном случае.
Рассмотрим B(B):
- если B(B)=c => B остановился => самоприменим. Но в то же время он несамоприменим. Противоречие.
- если B(B) не остановился => B несамоприменим. Но в то же время он самоприменим. Противоречие.
=> Теорема доказана.
В связи с неразрешимостью А.п. рассматривается проблема: Не может ли оказаться так, что А.п. неразрешимая в одной А.с. окажется разрешимой в другой А.п.?
Две А.с. - равномощны если они описывают одни и те же классы А. На примере МТ и НАМ Доказывается что
для равномощных А.с. если А.п. неразрешима в одной А.с., то она не разрешима и в другой. Для этого доказываются
две теоремы:
1. Для любой МТ существует эффективная процедура построения эквивалентного НАМ.
2. Для любого НАМ существует эффективная процедура построения эквивалентной МТ.
Построение НАМ из МТ.
Для каждого правила МТ строятся несколько правил НАМ:
MT
a i q j  a t Leftq s
a i q j  a t Stayq s
a i q j  a t Rightq s
a i q j  a t!
HAM
q ja i  q sa t
aq s  q sa, a a0
q ja i  q s a t
q ja i  a t q s
q ja i  a t
k
 q0
Построение МТ из НАМ.
Можно построить следующие МТ:
A * P   *P
A P *R   *PR
A ! P   P!
1||Q *a i R , if_ P  Qa i R
Fa i *P   
0||P*,else
M b i 1||Q *a i R   Qb i R
A 0 0||P *  P
Допустим, теперь нам надо построить МТ A из НАМ B:
a1 -> b1
...
ak -> bk
Для каждого такого правила (ai -> bi) построим МТ:
Ai : Если Fa i
*P ,
то
M b i 1||Q *a i R  A * A i
o
o
o
o
иначе A 0 A * A i+1
Если ai |-> bi , то вместо Ai надо писать A!
 
 o
Получили МТ A P  A P A 1 A 2 ... A k , эквивалентную НАМ B.
*
o
o
o
Выводы :
Для любой А.с. существует универсальный исполнитель, который есть интерпретатор множества действий заданной А.с.;
В силу тезиса Тьюринга любой А реализуем в терминах действий последовательной, параллельной композиций,
выбора и цикла и базового набора действий;
Проблема применимости не применима;
Если А.п. не разрешима, то она не разрешима в любой равномощной А.с.;
МТ и НАМ равномощны.
Вопросы :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Что такое интерпретация?
Что такое кодирование?
В чем проблема линеаризации Ф.с. для МТ?
Что такое универсальный исполнитель:
- он может исполнять заданный А в любой А.с.?
- он может исполнять любой А, выразимый в данной А.с.?
Как решается проблема произвольности алфавита в УМТ?
Что такое А.п.?
Самоприменимость - что это такое?
А.п. самоприменимости разрешима?
В МТ А не закончен если нет применимого правила, в НАМ в этом случае А - закончен. Как это несоответствие решается при доказательстве сводимости МТ к НАМ и наоборот?
Что означает запись:
Если Fa (*P), то M(1||Q*aR)°U*°U1 иначе U0°U*°Ui+1?
3.2.4 Подпрограммы
Подпрограммы вводятся как механизм реализации концепции построения алгоритмов из алгоритмов. (Эта концепция
была подробно рассмотрена в первой части лекций.) В языках программирования эта концепция реализуется в разной
форме. Аппарат подпрограмм - лишь одна из них, но чрезвычайно важная, в силу эффективности.
С другой стороны подпрограмма рассматривается как поименованная последовательность действий. Благодаря наличию имени эту последовательность можно неоднократно использовать и инициировать. Аппарат подпрограмм
позволяет:
•
упростить реализацию, за счет компактности записи программы;
•
упростить процесс отладки программы, за счет ясности текста программы;
•
упростить процесс разработки программы за счет структуризации программы;
•
ускорить разработку программы за счет многократного использования заготовок.
3.3 Языки программирования и структуры данных
3.3.1 Структуры данных.
1. Постановка задачи.
При разработке программ и алгоритмов важным этапом является этап подбора математической абстракции
для описания данных, используемых в формулировке задачи. Например, в случае поиска оптимальной стратегии для
игры чет-нечет таким объектом была игра, в задаче о ходе коня - шахматная доска. Будем называть представление
этих объектов-данных в виде математических абстракций Абстрактными Структурами Данных (АСД). В случае игры
в качестве АСД мы использовали дерево; в случае шахматной доски - матрицу.
Выбрав подходящую по своим математическим свойствам структуру АСД, мы приходим к другой проблеме как представить выбранную АСД в терминах тех структур данных, с которыми умеет работать исполнитель алгоритмов, которые есть в используемом языке программирования. Назовем эти структуры данных Структурами Данных
Хранения (СДХ). Например, для шахматной доски мы представили граф, представляющий доску, в виде матрицы
смежности, которую мы представили в виде соответствующей СДХ - массива.
Критерием выбора для АСД подходящей СДХ является эффективность операций над СДХ, являющихся аналогами соответствующих операций над АСД. Под эффективностью мы понимаем сложность алгоритмов над СДХ.
Итак, мы приходим к следующей проблеме: задано АСД, набор СДХ; требуется построить отображение АСД
-> СДХ так, чтобы сложность алгоритмов операций над СДХ, соответствующих надлежащим операциям над АСД,
была бы минимальной.
2.Основные понятия и определения
Структура G на множестве M - это пара (R,M) где R это отношение порядка на множестве M.
Определение.
Отношение порядка на множестве M это подмножество множества M*M обладающее следующими свойствами:
1.a<=a - рефлективность;
2.если a<=b и b<=c, то a<=c - транзитивность;
3.если a<=b и b<=a, то a=b - антисимметричность.
Если отношение не обладает свойством антисимметричности, то оно называется предпорядком.
Определение.
Отношение порядка назовется линейным, если оно определено для любых a и b из M.
Определение.
Множество называется частично упорядоченным, если на нем зафиксирован некоторый порядок.
Примеры.
1. Множество натуральных чисел с отношением <=.
2. Множество слов в алфавите с отношением лексикографического упорядочения.
3. Множество людей с отношением родства.
4. Множество людей с отношением начальник-подчиненный.
Для выбора и обозначения элементов на M используют индексацию I: I - это отображение M -> [ 1.. |M| ].
3.3.2 Абстрактные структуры данных.
Наиболее часто встречающимися абстрактами структурами данных являются строка, граф, дерево, стек, очередь, таблица.
1. Строка
Строка - конечное множество символов с отношением линейного порядка, определяющем следование символов в строке.
Примеры: текст, программа, формула.
Свойства строк:
1.Переменная длина;
2.Обращеие к элементам строки в отношении порядка, а не индексации;
3.Строка может иметь дополнительную структуру, называемую синтаксис, но это дополнительная структура.
Типичные операции:
поиск заданного символа;
вставка символа;
удаление символа;
замена заданного символа другим заданным символом.
2. Граф
Определение.
Графом G=(X,U) где X - множество, а U - отношение порядка на X.
Если U - отношение частичного порядка, то G ориентированный граф. Дело в том, что согласно определению
частичного порядка из условия (a,b)принадл.U не следует (b,a)принадл.U.
Если U - предпорядок со свойством симметричности, то G - неориентированный.
Определение.
Граф G - взвешенный, если задано отображение m:U -> R. Иногда вес называют длиной дуги.
Определение.
Граф G - размеченный (помеченный) если задано отображение W: X -> A (U->A), где A - множество меток.
Примеры.
Объект
Задача
1. Сеть дорог
Найти кратчайший маршрут
2.Блок-схема программы
Найти неиспользуемый участок
3.Электрическая схема Вычислить характеристики цепи
4.Общество
Найти взаимосвязь групп
5.Чертежи.
Сравнить
6.Химические молекулы Поиск подструктур
7.Сети ЭВМ.
Найти критический путь
8.Поставка товаров
Кто поставляет заданный товар
Способы представления графов.
Графический, матрица смежности, матрица инцидентостей.
Определение.
Степенью вершины называется число дуг входящих и исходящих из этой вершины (инцидентных данной вершине).
Степенью исхода (захода) вершины называется число вершин исходящих (входящих) в эту вершину.
Определение.
Граф называется регулярным, если степень всех его вершин - величина постоянная.
Определение.
Последовательность вершин (x1, x2, x3, ...xN) графа G называется цепью, если для любого i, принадл.[1..n] =>
{(x(i), x(i+1))принадл.U}.
Последовательность вершин (x1, x2, x3, ...xN) графа G называется путем, если для любого i, принадл.[1..n] => {(x(i),
x(i+1))принадл.U и (x(i+1), x(i))принадл.U}. Иными словами путь это цепь, рассматриваемая без учета ориентации
вершин.
При этом n - длина пути, цепи соответственно.
Если x1=xN , то путь назовется циклом.
Если x1=xN в цепи, то цикл называется ориентированным.
Определение.
Граф называется слабо связным если для любых его двух вершин есть путь их соединяющий без учета ориентации дуг
графа.
Граф называется сильно связным, если для любых его двух вершин есть путь, их соединяющий без учета ориентации
дуг графа.
Определение.
Весом пути называется m(x1, x2, x3, ...xN) = m(x1, x2) + m(x2, x3) + ... + m(x(N-1), xN).
Типичные операции с графами:
вставить вершину;
удалить вершину;
заменить вершину;
добавить дугу;
удалить дугу;
найти в графе заданный подграф.
В терминах графов строка - линейный неориентированный граф.
Раздел математики изучающий свойства графов называется теорией графов.
3.Деревья
Определение.
Дерево - связный ациклический (без циклов) граф.
Подчеркнем, что здесь в цикле ориентация дуг не учитывается.
Определение.
Одна вершина в дереве имеет степень захода 0. Эта вершина называется корнем дерева.
Одна или несколько вершин в дереве имеют степень исхода 0. Эти вершины называются листьями.
Следствием условия ацикличности является то, что все вершины в графе, кроме корня, имеют степень захода 1.
Деревья могут быть как ориентированные, так и нет.
Определение.
Высотой дерева называется самый длинный путь в дереве из корня к листу.
Примеры.
1. Группа родственников с отношением быть ребенком;
2. Дерево игры;
3. Слова в алфавите: разбиваются на классы эквивалентности по первому символу, каждый класс в свою очередь разбивается на классы эквивалентности по второму символу и т.д.
Определение.
Не связный ациклический граф называется лесом.
Рекурсивное определение дерева.
1.Множество из одной вершины - дерево;
2.Если Т1, Т2, ...ТN - деревья, то
вершина
T1 T2 T3 ... TN
- дерево
Основные операции над деревьями:
найти заданную вершину;
заменить одну заданную вершину на другую;
удалить вершину;
вставить новую вершину.
При построении алгоритмов, реализующих эти, равно как и другие операции над деревьями надо учитывать, что в
дереве возможны самые разнообразные последовательности просмотра вершин. Было бы плохо, если результат операции зависел бы от порядка обхода дерева. Основные направления обхода: сверху-вниз, снизу-вверх, справа-налево,
слева-направо.
Определение.
Дерево называется K-ичным, если все внутренние вершины в нем имеют степень исхода K.
Соответственно дерево называется единичным или линейным, если степень исхода его внутренних вершин равна 1; в
двоичном или бинарном дереве она соответственно равна 2.
Перечисление бинарных деревьев.
Попробуем подсчитать число двоичных деревьев, имеющих n вершин. Обозначим b(i) - число бинарных деревьев из i вершин. Тогда следуя рекурсивному определению дерева, можно написать
b(n)=b(0)b(n-1) +b(1)b(n-2) +b(2)b(n-3) +...+b(n-1)b(0)
Нетрудно подсчитать что b(1)=1, b(2)=2, b(3)=b(0)b(2) + b(1)b(1) + b(2)b(0) , полагая b(0)=1, получаем, что
b(3)=2+1+2=5. Соответственно b(4)=5+2+2+5=14, b(5)=14+5+4+5+14=42.
В общем случае b(n)=C(n, 2n) / (n+1) = (2*n!) / (n! * n!)
Определение.
Дерево называется совершенным (или полностью сбалансированным) если любой путь в нем от корня к листу не более чем на единицу отличается от длины самого длинного пути в этом дереве.
Следствие.
Совершенное дерево из n вершин имеет минимальную высоту среди всех деревьев, имеющих n вершин.
Подсчитаем высоту совершенного бинарного дерева из n вершин. Пусть в нем i ярусов. (Ярусом назовем
множество вершин равно отстоящих от корня дерева.) Тогда число вершин в дереве можно выразить следующим соотношением:
1 + 2 + 2^2 +...+ 2^i = n.
Отсюда получаем 2^i -1=n, i=log2 (n+1) - 1. Или в приближенно log n. Отметим, что число совершенных деревьев составляет лишь малую часть общего числа деревьев. Например, при n=4 их всего 4.
Совершенные деревья интересны, например, тем, что сложность доступа от корня к любому листу практически одна и та же. Здесь под сложностью доступа мы понимаем длину пути от корня к листу.
4. Стек
Стеком называется линейное дерево. В отличие от деревьев для операций со стеком есть ограничения. Доступ в стеке
возможен только к корню дерева, которое в случае стека называется окном стека. Поэтому чтобы посмотреть элемент
или изъять его или добавить новый - все это можно сделать только через корень. Примеры стека: подносы в столовой, патроны в обойме.
Основные операции: добавить элемент в стек, изъять элемент.
5. Очередь
Очередь - это линейное дерево, но в отличие от стека добавить элемент в очередь можно только в корень дерева, который в случае очереди называется хвостом или концом очереди, а изъять элемент из очереди можно только со стороны листа, который называется головой очереди.
Пример: банальная очередь в магазине, в столовой. Основные операции изъять элемент, добавить элемент.
6. Таблица
Упорядоченное множество пар (ключ, тело).
Примеры:
функция может быть представлена как пара (аргумент, результат),
таблица с записями о людях. В такой таблице ФИО - ключ, данные о человеке - тело. Мы здесь не будем подробно останавливаться на таблицах, так как им будет посвящено особое место в курсе.
3.3.3 Отображение АСД на СДХ.
Наша задача:
1.Найти отображение АСД -> СДХ;
2.Оценить сложность алгоритмов операций вставки, замены, поиска и удаления при различных способах
отображениях.
1. Отображения на вектор.
Будем предполагать, что мы имеем дело с неотсортированными структурами. Подробно, что означает условие
сортированности, мы рассмотрим в разделе IV "Сортировка".
1.1. Строка
Отображение строки на вектор строится так:
1. Возьмем антитранзитивное отношение R' такое, что его транзитивное замыкание дает R (для этого достаточно рассмотреть отношение линейного порядка R без условия 2 - условия транзитивности:
если (a, b) и (b, c) принадлежат R, то (a, c) тоже принадлежит R;
Ясно, что R' задает отношение соседства, т.е. (a,b) принадл. R' если и только если
Не существ. c: c принадл. M , (a, c)принадл.R' и (c, b)принадл.R'
2.Возьмем минимальный элемент в строке (он существует в силу свойства отношения линейного порядка R); пусть
это a;
3.Элементу a сопоставим первый компонент вектора: I(a)=1;
4.Паре (b,c)принадл.R' сопоставим I(c)=I(b)+1.
В одном векторе можно хранить несколько строк. Для этого существует два принципиально разных способа:
строки разделяются специальным признаком - признаком конца, которого нет среди символов строк; второй способ - в
начале каждой строки указывается ее длина.
Последний способ предпочтительней, когда мы имеем дело со строками переменной длины, а первый хорош,
когда строки фиксированной длины.
Рассмотрим сложность операций поиска, вставки, удаления и замены. Операции вставки, удаления и замены содержат
операцию поиска как составную часть.
Предполагаем, что частота встречаемости всех элементов в строке одна и та же. Тогда в среднем (когда мы
имеем дело с множеством строк, а не с одной, двумя) нам придется просмотреть половину строки, чтобы найти нужный символ:
(1/N)+(1/N)2+(1/N)3+...+(1/N)N= (N+1)/2 = ~N/2
Отсюда следует сложность поиска (количество операций сравнения) пропорциональна половине длины строки.
Для операции вставки сложность пропорциональна длине строки. Действительно, нам надо N/2 сравнений,
чтобы найти место для вставки, а затем N/2 сдвигов вправо, чтобы освободить место для нового элемента.
Сложность операции удаления равна сложности операции вставки. Рассуждения здесь аналогично предыдущим.
Нетрудно подсчитать сложность операции замены - N/2+1.
Основной вывод состоит в том, что при отображении строки на вектор все операции со строкой имеют линейную
сложность, пропорциональную длине строки.
1.2. Граф (дерево)
Отображение графа на вектор строится через матрицу смежности или матрицу инцидентностей. В ЯП, где
есть двумерные массивы такое представление графа очевидно. (См. представление лабиринта в задаче об Ариадне и
Тезее.) При отображении на вектор возможно два подхода: отображение по строкам или по столбцам.
Здесь мы рассмотрим случай отображения по строкам. Случай отображения по столбцам полностью аналогичный. При отображении по строкам элементу матрицы A[i,j] сопоставляется элемент вектора V[k], где
k=(i-1)n + j, где n - длина строки.
Теперь оценим сложность операции поиска. Нам придется просмотреть в среднем половину строк - N/2, и половину
элементов в каждой строке - N/2 при условии, что часто встречаемости всех элементов одинакова. Таким образом,
сложность операции поиска пропорциональна N^2 /4 или N^2 при больших N.
Однако при операции удаления нам не надо сдвигать все элементы как в случае со строкой. Однако операция
вставки требует изменения размерности матрицы смежности по каждому измерению с N на N+1. Для этого нам придется выполнить (N+1) операций присваивания, чтобы заполнить новую строку в векторе, плюс N+1 сдвигов строк,
чтобы добавить к каждой старой строке по новому элементу, соответствующему N+1 столбцу. Количество операций
сдвига определяется следующим соотношением:
Таким образом, сложность операции вставки будет равна
N^2/4 + N^3/2 = N^2(N+2)/2.
Следует обратить внимание, что по-прежнему значительный вклад в сложность операций с графами составляет операция поиска.
Для k-ичного дерева можно предложить специальный способ отображения на вектор. Компоненту V[0] сопоставляем корню дерева; компоненты V[1]...V[k] сопоставляем потомкам корня, затем с V[k+1] по V[2k] размещаем
потомков V[1], с V[2k+1] - V[3k] - потомков V[2] и т.д. В общем случае потомки i-ой вершины, расположенной на j
ярусе, будет размещаться в компонентах вектора
с V[k(k^j -1)/(k-1)+ (i-1)k] компонента
по V[k(k^j -1)/(k-1)+ ik] компонент.
Оценим сложность операции поиска при таком отображении дерева на вектор. Учитывая, что высота k-ичного дерева
из N вершин равна
H = log (N(k-1)+1) - 1 ~log(k) N
получаем что число листьев в таком дереве ~ N^2. Отсюда, при условии равновстречаемости элементов в дереве, нам
надо просмотреть в среднем половину путей (их число равно чмслу листьев в дереве) длины H каждый. Эти рассуждения дают нам величину
~ Nlog(k) N.
Сравнивая эту оценку с предыдущей для векторного представления графа N , можно увидеть что данное представление много эффективнее.
1.3. Стек
Поскольку стек есть по существу единичное дерево все операции, с которым осуществляются через корень, то
отображение на стека на вектор достаточно очевидно. С вектором связываем указатель p, который указывает на тот
компонент вектора, где в данный момент размещается корень дерева. Изначально p=0. Операция вставки суть
p:=p+1;V[p]:=<новый элемент>. Операция удаления: p:=p-1.
Самый важный вывод состоит в том, что операции над стеком при векторном представлении не зависят от
длины стека.
1.4. Очередь
Для векторного представления очереди нам потребуются два указателя t и h для хвоста и головы очереди соответственно. Напомним, что удаление элемента из очереди возможно только из головы очереди, а вставка - только из
хвоста.
Одно из возможных отображений очереди на вектор состоит в том, что полагаем изначально h:=N; t:=N. Тогда
изъятие элемента - h:=h-1; а вставка - t:=t-1.
Такое отображение обладает тем недостатком, что если общее число
элементов, прошедших через очередь - M>>N, при условии что длина очереди не более N, то после вставки N элементов мы исчерпаем длину вектора в указателе t.
Можно модифицировать этот метод - зафиксировать положение указателя h:=N. Тогда при изъятии элемента из очереди нам надо будет сдвигать все элементы на единицу вправо, и корректировать значение указателя t. Чем больше
средняя длина очереди, тем менее выгодно такое представление (длина сдвига увеличивается).
Третий способ представления очереди через вектор состоит в том, что мы "загибаем" вектор в кольцо. Для
этого достаточно выполнять все операции с указателями по модулю N. При таком представлении очереди сложность
операций вставки и изъятия становятся совершенно не зависимыми от размера очереди.
1.5. Таблицы
Отображение таблиц на векторную память будет рассмотрено позднее в разделе "Таблицы".
Основным недостатком векторного представления АСД - ограниченность длины вектора. Ее мы должны знать
заранее. Кроме этого, как мы видели достаточно часто, нам приходится двигать компоненты вектора при вставке и
удалении элементов в векторе.
2. Представление АСД в списковой памяти
2.1. Понятие списка
Списком называется множество звеньев вида
|------------------------------------|
|
тело ... | указатель на звено |
|------------------------------------|
увязанных в цепочку с помощью указателей друг на друга.
Поле тело предназначено для хранения собственно данных, поле указатель на звено - для ссылки на соседнее
звено. В одном звене может быть несколько полей указатель на звено. Значением этого поля - ссылка на звено.
Каждая ссылка соответствует ориентированной, упорядоченной паре в отношении некоторой структуры данных. Вдоль указателя можно двигаться только в одном направлении.
Звенья можно использовать как для представления элементов множества структуры, так и для представления
элементов отношения. Звенья можно использовать для наращивания длины поля тело, для связи звеньев между собой.
Основной недостаток списка - затраты памяти на хранение указателей. Чем сложнее структура - тем больше
указателей надо для ее представления, тем больше памяти расходуется под указатели.
Основное достоинство - неограниченности по размеру, динамичность в управлении и организации.
2.2. Представление строк
Для представления строк можно использовать звенья со следующими видами поля тело:
- односимвольные звенья;
- многосимвольные звенья;
- звенья переменной длины (в ЯП, где динамические структуры переменной длины не поддерживаются, этого
вида звенья не эффективны);
По организации поля указатель на другое звено:
-однонаправленные;
-двунаправленные;
-мультиссылочные (когда один элемент структуры связан с несколькими другими элементами).
Заметим, что в случае мультиссылочного звена по некоторым направлениям мы можем иметь двунаправленную связь между звеньями, а по некоторым - однонапрвленную.
2.3. Представление графов
При представлении графов можно использовать несколько подходов:
- использовать звенья только для представления вершин, а дуги отображать через указатели; недостатком
здесь является то, что негде отобразить информацию, например, о весе дуги, а так же - в случае неориентированного
графа одной дуге будет соответствовать два указателя.
- использовать звенья для дуг, а вершины отображать как ссылки между дугами инцидентными одной и той
же вершине; в этом подходе затруднено представление ориентированных дуг, а так же информации о вершинах;
- наконец можно ввести два вида звеньев один для представления дуг, другой для представления вершин; звенья-дуги увязываются в список, звенья-вершины также увязываются в список с перекрестными ссылками между списками.
Особый случай представляют нерегулярные графы, т.е. графы в которых степень вершин - величина переменная. В этом случае используются специальные служебные звенья из двух полей-указателей. Одно поле служит для
ссылки на другое аналогичное звено, а второе поле - для ссылки на соответствующий элемент структуры.
3.4 Архитектура ЭВМ
3.4.1 Двоичная система счисления
Система счисления – это способ представления чисел и соответствующие ему правила действий над числами. Система счисления – это знаковая система, в которой числа записываются по определенным правилам с помощью символов некоторого алфавита, называемых цифрами.
3.4.1.1 В непозиционных системах каждая цифра имеет свой вес, и ее значение не зависит от положения в числе – от
позиции. Пример – римская система. Скажем, число 76 в этой системе выглядит так:
LXXVI, где L=50, X=10, V=5, I=1.
Как видно цифрами здесь служат латинские символы.
3.4.1.2 В позиционных системах значения цифр зависят от их положения (позиции) в числе.
Так, например, человек привык пользоваться десятичной позиционной системой — числа записываются с помощью
10 цифр. Самая правая цифра обозначает единицы, левее — десятки, ещё левее — сотни и т.д.
В любой позиционной системе число может быть представлено в виде многочлена.
Покажем, как представляют в виде многочлена десятичное число.
3.4.1.3 Основанием системы счисления называется количество цифр и символов, применяющихся для изображения
числа. Например, р=10.
Двоичная система счисления является основной системой представления информации в памяти компьютера.
В этой системе счисления используются цифры: 0, 1.
В двоичной системе счисления всего две цифры, называемые двоичными (binary digits). Сокращение этого наименования привело к появлению термина бит, ставшего названием разряда двоичного числа. Веса разрядов в двоичной системе изменяются по степеням двойки. Поскольку вес каждого разряда умножается либо на 0, либо на 1, то в результате значение числа определяется как сумма соответствующих значений степеней двойки. Если какой–либо разряд
двоичного числа равен 1, то он называется значащим разрядом. Запись числа в двоичном виде намного длиннее записи в десятичной системе счисления.
3.4.1.4 Правила перевода из десятичной в двоичную систему.
Для перевода десятичного числа в двоичную систему отдельно переводят дробную и целую части.
Чтобы перевести целое число из 10-ой в 2-ую систему нужно выполнять последовательное деление числа на 2 до тех
пор, пока результат не станет меньше 2. Последний результат и остатки от деления, взятые в обратном порядке, дают
двоичное число.
Для перевода правильной дроби из 10-й системы счисления в 2-ю систему счисления нужно умножить исходную
дробь и дробные части получающихся произведений на основание 2, представленное в старой 10-системе. Целые части получающихся произведений дают последовательность цифр, которая является представлением дроби в 2-ой системе счисления.
3.4.1.5 Правила перевода из двоичной в десятичную систему.
Для перевода необходимо разложить число по основанию системы счисления и посчитать результат.
Например,
3.4.1.6 Правила сложения в двоичной системе счисление.
Запись отрицательных чисел в дополнительном коде. Для перевода в дополнительный код надо инвертировать число
и добавить единицу.
Сложение
Вычитание
Умножение
0+0=0
0-0=0
0*0=0
1+0=1
1-0=1
1*0=0
0+1=1
1-1=0
0*1=0
1+1=10
10-1=1
1*1=1
3.4.2 Архитектура ЭВМ
Архитектура – это наиболее общие принципы построения ЭВМ, реализующие программное управление работой и
взаимодействием основных ее функциональных узлов.
Общие принципы построения ЭВМ, которые относятся к архитектуре:
 • структура памяти ЭВМ;
 • способы доступа к памяти и внешним устройствам;
 • возможность изменения конфигурации компьютера;
 • система команд;
 • форматы данных;
 • организация интерфейса.
3.4.2.1 Принципы фон Неймана.
Архитектура ЭВМ, построенной на принципах фон Неймана. Сплошные линии со стрелками указывают направление потоков информации, пунктирные – управляющих сигналов от процессора к
остальным узлам ЭВМ
Основной функцией центрального процессора (ЦП) является обработка информации и взаимодействие с устройствами. Обмениваться данными ЦП может только с ОЗУ (Оперативно Запоминающее Устройство).
В ОЗУ размещается выполняемая в данный момент программа. ОЗУ состоит из ячеек памяти. Каждая ячейка
имеет свой уникальный адрес, и каждая разбита на два поля: поле внутрисистемной информации (которое, например,
может содержать бит четности) и машинное слово, содержащее команду или данные. Машинное слово состоит из некоторого количества двоичных разрядов, которое определяет разрядность системы.
ЦП выбирает из ОЗУ последовательность команд для выполнения. ЦП состоит из двух компонентов:
 Устройство Управления (УУ) принимает очередное слово из ОЗУ и разбирается - команда это или данные.
Если это команда - то УУ выполняет ее, иначе передает АУ.
 Арифметическое Устройство (АУ) занимается исключительно вычислениями.
УУ работает с регистровой памятью, время доступа к которой значительно быстрее, чем к ОЗУ, и которая используется специально для сглаживания дисбаланса в скорости обработки информации процессором и скорости доступа к
ОЗУ.
Основное качество оперативное памяти: именно в оперативной памяти лежит исполняемая в данный момент программа, и процессор все последующие команды исполняемой программы берет из оперативной памяти. Если чего-то
не хватает, идет запрос к внешним устройству, информация подкачивается в оперативную память, и опять-таки из
оперативной памяти команды поступают в процессор на обработку
3.4.2.2 Регистры. Мы начали смотреть, какие конструктивные решения есть в аппаратуре вычислительной системы,
которые предназначены для сглаживания этого дисбаланса. И первое о чем мы начали говорить - это регистры. В процессоре имеются устройства, способные хранить некоторую информацию. К этим устройствам возможен доступ прямым или косвенным способом из программы, выполняемой на машине. При этом есть группа регистров, которые
называются регистрами общего назначения, которые доступны из всех команд. Эти регистры могут обладать свойством обработки и хранения и обработки определенных типов данных - это могут быть вещественные данные, короткие целые данные, которые используются, предположим, для индексирования, это могут быть длинные целые данные. При этом скорость доступа к регистрам общего назначения соизмерима со скоростью обработки информации в
процессоре. При умелом программировании, можно использовать регистры общего назначения в целях сокращения
числа обращений к оперативной памяти. Это означает, что торможение на участке процессор - оперативная память
сокращается. Рассмотрим другие группы регистров.
3.4.2.3 Специальные регистры. К этой группе относятся две подгруппы регистров.
1. Первая подгруппа - это регистры, отвечающие за состояние исполняемой программы. К этим регистрам относится
счетчик команд. Этот регистр содержит адрес исполняемой в данный момент команды. Это тот самый регистр, который можно изменять только косвенно, передав управление куда-то. Второй регистр из этой же подгруппы - регистр
результата (flags), содержащий результат выполнения последней команды. По значению этого регистра можно организовывать те или иные действия. К этой подгруппе относится также регистр указателя стека. Есть команды, которые
работают со стеком. Эти команды обычно используются для программирования переходов из и в функцию. Стек в
системе используется для передачи параметров и организации автоматической памяти. Это память, которая занимается относительно вершины стека при входе в функцию, и, при выходе, она освобождается. Поэтому в автоматических
переменных нельзя хранить данные после выхода из функции.
2. Вторая подгруппа регистров - это регистры управления компонентами вычислительной системы, или управляющие
регистры. Практически в любой вычислительной системе имеются регистры, предназначенные для организации взаимосвязи процессора с внешним миром. Эти регистры связываются с УУВУ, и через эти регистры процессор может
организовывать управление внешними устройствами. Например, если возьмем регистр управления жесткого диска, то
у него могут быть следующие поля:
 Поле, указывающее кому предназначена информация на этом регистре в данный момент времени (процессору
или диску).
 Если эта команда находится в формате от процессора к устройству, в нем может находиться код операции
управления устройством, могут находиться некоторые операнды и т.д. Устройство пытается выполнить эту
команду, и по результату ее выполнения возвращается результат тоже в управляющий регистр (это может
быть информация о том, что обмен закончен успешно, или обмен незакончен и причина этого).
3.4.2.4 Система прерываний. К средствам, управляющим взаимосвязью с внешними устройствами, можно отнести
систему прерываний. В каждой вычислительной машине имеется предопределенный, заданный при разработке и производстве, набор некоторых событий и аппаратных реакций на возникновение каждого из этих событий. Эти события
называются прерываниями. Аппарат прерываний используется для управления внешними устройствами и для получения возможности асинхронной работы с внешними устройствами. Одним из прерываний, которые есть в системе, является прерывание по завершению обмена.
В момент возникновения прерывания, действия в аппаратуре ВС следующие:
 В некоторые специальные регистры аппаратно заносится (сохраняется) информация о выполняемой в данный
момент программе. Это минимальная информация, необходимая для начала обработки прерывания. Обычно,
в этот набор данных входит счетчик команд, регистр результата, указатель стека и несколько регистров общего назначения. (Эти действия называются малым упрятыванием).
 В некоторый специальный управляющий регистр, условно будем его называть регистром прерываний, помещается код возникшего прерывания.
 Запускается программа обработки прерываний операционной системы.
Запущенная программа в начале потребляет столько ресурсов (не более), сколько освобождено при аппаратном упрятывании информации. Эта программа производит анализ причины прерывания. Если это прерывание было фатальным
(деление на ноль, например), то продолжать выполнение программы бессмысленно и управление передается части
операционной системы, которая эту программу выкинет. Если это прерывание не фатальное, происходит дополнительный анализ, который приводит к ответу на вопрос: можно ли оперативно обработать прерывание? Пример прерывания, которое всегда можно обработать оперативно - прерывание по таймеру. Например, прерывание, связанное с
приходом информации по линии связи нельзя обработать оперативно, т.к. происходит расчищение в системе места
для программы операционной системы, которая займется обработкой этого прерывания. Происходит т.н. полное упрятывание. Теперь прячется не только информация о некоторых регистрах исполнявшейся программы, теперь все регистры сохраняются в таблицах системы (а не в аппаратных регистрах, как раньше) и фиксируется то, что пространство
оперативной памяти, занимаемое программой, может быть перенесено (при необходимости) на внешнее устройство.
Дальше идет обработка прерывания и возврат из прерывания.
Здесь надо отметить одно важное свойство: прерывания могут быть инициированы схемами контроля процессора
(например, при делении на ноль), могут быть инициированы внешним устройством (при нажатии клавиши на клавиатуре возникает прерывание, по которому процессор считывает из некоторого регистра нажатый символ).
Возвращаемся к нашей основной проблеме. ВЗУ на многие порядки более медленно, чем оперативная память, т.е.
возникает проблема торможения ВС. Если бы все обмены с внешними устройствами происходили в синхронном режиме, то производительность ВС была бы очень низкой. Одной из причин появления аппарата прерываний было
сглаживание скоростей доступа к внешним устройствам для процессора и оперативной памяти (оперативная память
здесь выступает как более высокоскоростное устройство). То, что, используя аппарат прерываний можно было работать с внешними устройствами в асинхронном режиме, т.е. задать заказ на обмен и забыть о нем до прерывания завершения обмена, позволило в целом увеличить производительность ВС.
3.4.2.5 Шина
Для связи между отдельными функциональными узлами ЭВМ используется общая шина (часто ее называют магистралью). Шина состоит из трех частей:
• шина данных, по которой передается информация;
• шина адреса, определяющая, куда передаются данные;
• шина управления, регулирующая процесс обмена информацией.
3.4.2.6 Регистры буферной памяти (Cache, КЭШ). Следующая группа регистров - регистры, относящиеся к т.н. буферной памяти. Мы возвращаемся к проблеме взаимодействия процессора и оперативной памяти и сглаживанию скоростей доступа в оперативную память.
Предположим, у нас есть некоторая программа, которая производит вычисление некоторого выражения, при этом,
процесс вычисления этого выражения будет представимо следующим образом. В какие-то моменты идут обращения
за операндами в оперативную память, в какие-то моменты, обработанные данные записываются в оперативную память. Есть один из нескольких путей, которые сглаживают несоответствие скоростей процессора и оперативной памяти, который заключается в сокращении реальных обращений к оперативной памяти. Процессоры содержат быстродействующую регистровую память, призванную буферизовать обращения к оперативной памяти.
Алгоритм чтения из оперативной памяти следующий:
1. проверяется наличие в специальном регистровом буфере строчки, в которой находится исполнительный адрес,
совпадающий с исполнительным адресом требуемого операнда. Если такая строчка имеется, то соответствующее
этому адресу значение, считается значением операнда и передается в процессор для обработки (т.е. обращение в
оперативную память не происходит).
2. Если такой строчки нет, то происходит обмен с оперативной памятью, и копия полученного значения помещается в регистровый буфер и помечается исполнительным адресом этого значения в оперативной памяти. Содержимое
операнда поступает в процессор для обработки. При этом решается проблема размещения новой строчки. Аппаратно ищется свободная строка (но она может быть только в начале работы машины), и если таковая не найдена, запускается аппаратный процесс вытеснения из этого буфера наиболее «старой» строчки. Старость определяется по некоторому предопределенному критерию. Например, признаком старения может быть количество обращений к этому
буферу, при котором нет обращений к этой строчке. В каждом таком случае число в третьем столбце таблицы увеличивается на единицу.
Исполнительный
адрес
...
Регистровый буфер
Содержимое
...
Признак
«старения»
...
Короче говоря, аппаратура решает, какую из строк надо вытолкнуть из таблицы, чтобы на ее место записать новое
содержимое. При этом учитывается информация о том, были ли обращения к данной строке с использованием
команд записи в память. Если такие обращения были, то перед выталкиванием происходит запись в ОЗУ по исполнительному адресу содержимого нашей строчки.
Алгоритм записи в оперативную память симметричен. Когда в программе встречается команда записи операнда в
память, аппаратура выполняет следующие действия. Проверяется наличие в буфере строки с заданным исполнительным адресом. Если такая строка есть, то в поле «Содержимое» записывается новое значение, и аппаратно корректируется признак старения строк. Если такой строчки нет, то запускается описанный выше процесс выталкивания, и затем
информация размещается в освободившейся строке.
Этот буфер чтения/записи служит достаточно мощным средством для минимизации обращений к ОЗУ. Наибольший эффект достигается при небольших циклах, когда все операнды размещаются в буфере, и после этого циклический процесс работает без обращений к ОЗУ. Иногда, эти буфера называют КЭШ-буферами, а также ассоциативной
памятью, потому, что доступ к этой памяти осуществляется не по адресу (как в ОЗУ), а по значению поля. Реально,
все механизмы могут быть устроены иначе, чем мы здесь изучаем, т.к. мы изучаем некоторую обобщенную систему.
3.4.2.7 Использование расслоения памяти. Физически ОЗУ представимо в виде объединения k устройств, способных хранить одинаковое количество информации и, при этом, способные взаимодействовать с процессором независимо друг от друга. При этом адресное пространство ВС организовано таким образом, что подряд идущие адреса, или
ячейки памяти, находятся в соседних устройствах (блоках) оперативной памяти.
1-й блок
0
k
...
Оперативная память
2-й блок
1
k+1
...
...
...
...
...
k-й блок
k-1
2k-1
...
Программа состоит (в большей степени) из линейных участков. Если использовать этот параллелизм, то можно организовать в процессоре еще один буфер, который организован также, но в котором размещаются машинные команды. За счет того, что есть параллельно работающие устройства, то этот буфер автоматически заполняется вперед. Т.е.
за одно обращение можно прочесть k машинных слов и разместить их в этом буфере. Далее, действия с буфером команд похожи на действия с буфером чтения/записи. Когда нужна очередная команда (ее адрес находится в счетчике
команд) происходит ее поиск (по адресу) в буфере, и если такая команда есть, то она считывается. Если такой команды нет, то опять-таки работает внутренний алгоритм выталкивания строки, и новая строка считывается из памяти и
копируется в буфер команд. Расслоение памяти в идеале увеличивает скорость доступа в k раз, плюс буфер команд
позволяет сократить обращения к ОЗУ.
3.4.2.8 Виртуальная память
В современных машинах имеется еще одно аппаратное средство, которое призвано поддерживать работу вычислительной системы. Это, так называемая, виртуальная память. На сегодняшний день все вычислительные машины (за
исключением особо раритетных) работают в мультипрограммном (мультипроцессорном) режиме. Суть его заключается в том, что имеется несколько процессов, которые одновременно выполняются в вычислительной системе. Посмотрим, как этот мультипрограммный режим влияет на использование оперативной памяти.
Оперативная память
Операционная
система
Задача №1
Задача №2
Задача №3
.
.
.
Предположим: в начальный момент времени какую-то часть оперативной памяти заняла операционная система (так
оно и происходит). После этого была загружена программа №1 , затем программы №2, №3 (и т.д.). Операционная система начала выполнять эти программы в мультипрограммном режиме. Возникает вопрос: всегда ли любую программу можно поместить в произвольный диапазон адресного пространства оперативной памяти? Обладает ли программа
свойством перемещения по памяти? Насколько задача связана с адресным пространством, на которое ее запрограммировали? Это первая проблема. Вторая проблема: этот процесс идет, и понятно, что в какие-то моменты времени какието из этих задач заканчиваются (например, Задача №2). При этом в памяти образуются свободные фрагменты.
Оперативная память
Операционная
Система
Задача №1
Оперативная память
Операционная
Система
Задача №1
Задача №6
Задача №3
Задача №3
.
.
.
.
.
.
Программа операционной системы, которая загружает задачи в память, может посмотреть, какие из задач ожидают
обработки, и если есть задача, которая помещается в один из свободных фрагментов, она может ее загрузить. Но возникает второй вопрос: а как быть, если нет такой задачи, которая поместится в освободившийся фрагмент. При этом
проблема заключается в том, что даже если найдется задача (№6), которая поместится в указанном фрагменте, то
останется еще меньший фрагмент памяти, в который уже нельзя практически ничего записать. Количество таких, никому не нужных, фрагментов постепенно увеличивается. Это процесс фрагментации памяти.
Фрагментация может происходить и в оперативной памяти, и на внешнем запоминающем устройстве. В результате
через некоторое время возникает достаточно интересная и грустная ситуация: свободного адресного пространства
много, но при этом мы не можем загрузить ни одной новой задачи. Это означает, что система в целом начинает деградировать. Например, если Вы пошлете заказ на выполнение какого-то действия, то Вам придется неоправданно долго
ждать.
Для борьбы с фрагментацией памяти, а также для решения проблемы перемещения программы по адресному пространству, используется, так называемая, виртуальная память. Суть ее работы заключается в следующем. Пусть имеется некоторое адресное пространство программы, то есть то адресное пространство, в терминах которого оперирует
программа. И имеется адресное пространство физическое, которое зависит от времени. Оно характеризует реальное
состояние физической оперативной памяти.
В машинах, поддерживающих виртуальную память, существует механизм преобразования адресов из адресного
пространства программы в физическое адресное пространство, то есть при загрузке задачи в память машины операционная система размещает реальную задачу в той оперативной памяти, которая является свободной, вне зависимости от
того, является ли этот фрагмент непрерывным, либо он фрагментирован. Это первое действие выполняет операционная система. Она знает о состоянии своих физических ресурсов, какие свободны, какие заняты.
Второе: операционная система заполняет некоторые аппаратные таблицы, которые обеспечивают соответствие размещения программы в реальной оперативной памяти с адресным пространством, используемым программой. То есть
можно определить, где в физической памяти, какая часть программы размещена, и какая часть адресного пространства
программы поставлена ей в соответствие.
После этого запускается программа, и начинает действовать аппарат (или механизм) виртуальной памяти. Устройство управления выбирает очередную команду. Из этой команды оно выбирает операнды, то есть адреса и те индексные регистры, которые участвуют в формировании адреса. Устройство управления (автоматически) вычисляет исполнительный адрес того значения, с которым надо работать в памяти. После этого автоматически (аппаратно) происходит преобразование адреса исполнительного программного (или виртуального) в адрес исполнительный физический с помощью тех самых таблиц, которые были сформированы операционной системой при загрузке данной программы в память. И продолжается выполнение команды. Аналогично выполняется и, например, команда безусловного перехода на какой-то адрес. Точно так же устройство управления вычисляет сначала адрес исполнительный, после
чего он преобразуется в адрес физический, а потом значение этого физического адреса помещается в счетчик команд.
Это и есть механизм виртуальной памяти.
Рассмотрим простейший пример организации виртуальной памяти: вычислительную систему с, так называемой,
страничной организацией памяти. Суть страничности памяти заключается в том, что аппаратно все адресное пространство оперативной памяти разделено на блоки фиксированного объема. Обычно размер таких блоков равен степени двойки. При этом сохраняется сквозная нумерация ячеек памяти. Структура адреса в данной вычислительной машине такова: адрес любой ячейки памяти представлен в виде двух полей; старшие его разряды являются номером
страницы, а младшие разряды являются смещением относительно страницы (здесь используется тот факт, что размер
страницы равен степени двойки).
Исполнительный адрес
№ Страницы
Смещение относительно страницы
Итак, мы имеем машину со страничной организацией памяти. Для управления этой страничной памятью,
процессор содержит, так называемую, таблицу приписки (ТП). Это аппаратное средство машины, реализованное с
помощью регистровой памяти. Структура этой таблицы:
Таблица приписки
№ Виртуальной
№ Физической
страницы
страницы
0
25
1
1
2
30
.
.
.
.
.
.
L-1
-1
ТП имеет L строк, где L - максимальное число страниц, адресуемых в данной машине (то есть адресное пространство программы может состоять не более чем из L страниц). Каждая строка этой таблицы соответствует виртуальной странице программы с номером, совпадающим с номером строки. Строка содержит номер физической страницы, соответствующей данной виртуальной странице.
При загрузке и запуске программы операционная система размещает виртуальные страницы в некоторых физических страницах оперативной памяти, а их соответствие устанавливается в ТП. Например, операционная система
взяла 0-ую виртуальную страницу памяти и поместила ее в 25-ую страницу физической памяти, 1-ую страницу разместила в 1-ой странице, а 2-ую - в 30-ой (и так далее распределила все страницы). После этого передается управления
на начало программы, а за тем работает тот механизм, который был описан выше: по номеру виртуальной страницы из
таблицы аппаратно выбирается соответствующая строка, и содержащийся в ней номер физической страницы аппаратно подставляется в исполнительный адрес вместо номера виртуальной страницы, то есть происходит просто замена
старших битов исполнительного адреса.
На самом деле, когда операционная система обращается к какой-то строчке таблицы, то сначала она производит контроль. В действительности, строка ТП содержит некоторый код, который является либо адресом физической
страницы, либо некоторым специальным кодом, на который схемы управления процессора реагируют определенным
образом. Например, если этот код больше, либо равен нулю, это значит, что можно продолжать работу. Если же в
этой строке содержится код меньше нуля, например -1, то обращение к ней устройств преобразования виртуального
адреса в физический, вызовет прерывание. Это прерывание обычно называется прерыванием по защите памяти. Дело
в том, что операционная система, заполняя ТП, указывает, какие из виртуальных страниц адресного пространства не
принадлежат данной программе, и если происходит выход за пределы дозволенной памяти, генерируется прерывание
по защите памяти.
Для каждой программы нужна своя таблица приписки. При переходе от одной программы к другой содержимое ТП
сохраняется операционной системой в некоторой своей программной таблице (массиве) и затем изменяются значения
в ТП.
3.4.3 Внешние устройства
Внешние устройства можно определить как все те устройства, которые отличаются от процессора и памяти. Управление внешними устройствами осуществляется через систему прерываний. Внешние устройства можно подразделить
на Внешние Запоминающие Устройства (ВЗУ) и Устройства Ввода/Вывода (УВВ) информации. ВЗУ - это устройства,
способные хранить информацию некоторое время, связанное с физическими свойствами конкретного устройства, и
обеспечивать чтение и/или запись этой информации в оперативную память. Если рассматривать ВЗУ с точки зрения
использования различными компонентами программного обеспечения, то можно выделить следующие типы
устройств:
3.4.3.1. Магнитный барабан.
Магнитный барабан - это устройство, которое характерно для больших вычислительных комплексов. Обычно оно используется операционной системой для хранения системной информации. Суть работы этого устройства состоит в
следующем.
Имеется металлический цилиндр
большого веса (вес здесь имеет значение для
поддержания стабильной скорости вращения),
который вращается вокруг своей оси. Поверхность этого цилиндра покрыта слоем материала, способного хранить информацию (с
него можно читать и на него можно записывать информацию). Над поверхностью барабана размещается p считывающих головок.
Их положение зафиксировано над поверхностями, которые называются треками (track).
Каждый трек разделен на равные части, которые называются секторами. В каждый момент времени в устройстве может работать только одна головка. Запись информации происходит по трекам магнитного барабана, начиная с определенных секторов. Координатами информации
служат следующие параметры (№Трека, №Сектора и Объем информации).
Для чтения информации с магнитного барабана производятся следующие действия: включается головка, соответствующая номеру трека, и прокручивается барабан до появления под головкой начала сектора с заданным номером.
После этого начинается обмен. Практически во всех ВЗУ, основанных на вращении носителя, существует понятие
сектора, и в каждый момент времени устройство знает, над каким сектором оно находится. Магнитные барабаны - это
устройства, имеющие одну из самых больших скоростей доступа, так как электронные и механические действия в его
работе минимальны (вращение барабана).
3.4.3.2 Магнитные диски.
Имеется несколько дисков, размещенных на одной оси, которые вращаются с некоторой постоянной скоростью.
Каждый такой диск может иметь две информационно-несущие поверхности (верхнюю и нижнюю), покрытые слоем,
способным фиксировать информацию. Диски имеют номера; поверхности каждого диска также пронумерованы (0,1).
Концентрическим окружностям одного радиуса на каждом диске соответствует условный цилиндр. Диск также разбит на сектора. Координаты информации на диске (№Диска, №Поверхности, №Цилиндра, №Сектора).
Механически управляемая штанга имеет щупы, на концах которых
находятся считывающие и записывающие головки. Количество этих щупов
может быть равно количеству дисков (считывается либо верхняя, либо
нижняя поверхность).
Обмен информацией осуществляется следующим образом: на блок
управления диском подается набор координат с требуемым объемом информации. Блок головок вводится внутрь диска между поверхностями до
заданного номера цилиндра. Затем, включается головка, читающая заданную поверхность заданного диска. После этого ожидается подход заданного сектора и начинается обмен. Здесь, в отличие от магнитного барабана,
уже два механических действия, что ухудшает скоростные свойства магнитных дисков. Примерами магнитных дисков являются винчестер и гибкие диски (floppy).
Мы с вами выяснили, что ВЗУ, такие как магнитный барабан и
магнитные диски, могут характеризоваться степенью участия механических действий в обработке заказа на обмен.
Чем больше механических действий, тем медленнее происходит обмен. Существует экзотический вид внешней памяти - память на магнитных доменах.
3.4.3.3 Память на магнитных доменах.
Так же, как элементарной единицей электричества является электрон, элементарная единица в магнетизме - магнитный домен. Он подобен простому магниту, одна сторона которого заряжена положительно, а другая - отрицательно.
Есть барабан, у которого так же есть
треки, и так же над каждым треком расположена
головка для обмена, но сам барабан не вращается,
а за счет некоторых магнитно-электрических эффектов осуществляется перемещение по треку
цепочки доменов. При этом каждый домен однозначно ориентирован, то есть либо он бежит стороной, заряженной «+», либо стороной, заряженной «-». Так кодируются ноль и единица. Эта память очень быстродейственна, так как в ней нет
никаких механических действий. Эти устройства
обычно используются во встроенных вычислительных системах. (Например, она используется в
американских ШАТТЛах).
Теперь рассмотрим ВЗУ иначе - по методам доступа. Суть почти любого запоминающего устройства заключается в
том, что информация в нем записывается некоторыми блоками, или записями. В некоторых устройствах размер блока
фиксирован и чем-то напоминает страничную организацию памяти. В некоторых устройствах размер блока может
быть переменным, и определяется некоторым начальным и конечным маркером, который можно программно записать
на носитель этого устройства. В контексте работы с блоками, ВЗУ можно подразделить на два типа: устройства прямого доступа и устройства последовательного доступа. В бытовом плане можно рассмотреть компакт диск (CD) и
аудиокассету. Воспроизведение десятой записи на компакт диске начинается почти сразу после соответствующей
команды, за счет своей системы координат, подобной системе координат магнитного диска. Это устройство прямого
доступа. Устройство последовательного доступа - это аудиокассета. Если вам надо воспроизвести пятую песню, то
приходится, перематывая кассету, искать начало, так или иначе, прослушивая предыдущие четыре. Устройства последовательного доступа, это те устройства, которые для чтения i-той записи, должны просмотреть предыдущие (i-1)-ну
запись. Прямой доступ лишен этого недостатка. Примеры устройств прямого доступа - это магнитный барабан, всевозможные вариации магнитных дисков, память на магнитных доменах и прочее. Устройства последовательного доступа - это либо магнитная лента на больших машинах, либо стримерные устройства, которые используют для организации долговременного хранения данных на маленьких машинах.
Вот два взгляда на внешние устройства. Теперь рассмотрим внешние устройства с точки зрения управления. На
ранних стадиях устройство управления внешними устройствами в большей мере являлось некоторым интерфейсом в
получении всех управляющих команд от процессора и передачи их конкретному внешнему устройству. Это означает,
что центральный процессор (ЦП) должен был отрабатывать практически все действия, предусмотренные системой
команд управления конкретного устройства. Несмотря на то, что при этом уже был реализован и использовался аппарат прерываний, позволяющий проводить обмен асинхронно с работой центрального процессора, у нас были достаточно большие потери за счет того, что процессор должен был часто прерываться на выполнение последовательности
небольших по размеру указаний для управления внешним устройством. Поэтому появились специализированные
устройства, которые называются каналами.
3.4.3.4 Каналы
Канал - это специализированная вычислительная машина, имеющая специализированный процессорный элемент и
необходимую память. Канал обычно имеет следующую структуру: у него есть высокоскоростной канал связи с оперативной памятью основной машины, управляющие каналы для взаимодействия с ЦП и имеется некоторое количество каналов для подключения внешних устройств.
Функцией канала является выполнение макрокоманд, обеспечивающих ввод/вывод. То есть ЦП подает не последовательность команд (к примеру, включить двигатель магнитных головок, переместить
магнитную головку на заданный цилиндр, дождаться нужного сектора,
произвести чтение порции данных, произвести проверку правильности
и т.п.), а макрокоманду (произвести обмен заданного объема по заданным координатам), и необходимую последовательность команд выполняет канал. Таким образом, канал разгружает ЦП.
При
этом
каналы могут быть достаточно интеллектуальны. В канале может быть
организована буферизация за счет своей внутренней памяти (аналогично буферизации при работе с оперативной памятью). Современная
вычислительная машина может иметь несколько таких каналов, которые позволяют организовывать управление внешними устройствами, а
с другой стороны освобождают процессор от лишней работы.
3.4.3.5 Мультипрограммирование
Давайте рассмотрим еще один внутрисистемный аспект, который может продемонстрировать взаимное влияние
программного обеспечения и аппаратуры. Этот аспект связан с мультипрограммированием.
Нарисуем простую диаграмму:
Ось абсцисс связана со временем.
На оси ординат отмечены выполняемые задачи. Пусть процессор работает над Задачей №1. В какой-то момент ему потребовались данные, которые находятся на ВЗУ. Формируется заказ на обмен, но данные с
устройства еще не поступили (мы
знаем, что скорость обмена низка). И
какое-то время процессор простаивает. Затем обмен завершился, и программа начала выполняться далее.
Затем эта ситуация повторяется
(опять простой и т.д.). В зависимости
от типа или класса решаемой на этой машине задачи, таких простоев может быть от 99% всего времени до единиц
процентов в том случае, если программа долго что-то вычисляет, не обращаясь к внешним устройствам. Но в любом
случае эта ситуация приводит к неэффективной работе вычислительной системы, поэтому было бы неплохо при наличии асинхронно работающих устройств (то есть тех устройств, которые работают под управлением аппарата прерываний) в промежутки времени, когда одна программа не может выполняться (так как она ожидает данные), запускать
другую программу (Задачу №2). Задача №2 будет жить по тем же правилам (то есть в периоды обмена Задачи №2 и
Задачи №1 с внешними устройствами будет запускаться третья задача, и так далее).
Режим работ программного обеспечения и аппаратуры, обеспечивающий одновременное выполнение нескольких
программ, называется мультипрограммным режимом. Изначально мультипрограммирование появилось в целях максимальной загрузки процессора, поскольку когда-то это устройство было самым дорогостоящим. На сегодняшний
день это устройство одно из самых дешевых в компьютере. Посмотрим, что нужно от аппаратуры вычислительной
системы для поддержания режима мультипрограммирования. Давайте перечислим те проблемы, которые могут возникнуть, когда, кроме некоторой управляющей программы (операционной системы) и одной программы пользователя, появилась еще одна программа пользователя. То есть, если ранее все ошибки и некорректности в отношении системы приводили к наказанию самого себя, то теперь, при появлении чужих программ в памяти возникают новые
проблемы.
Первая проблема: кто-то взял и записал в пространство моей программы свою информацию или считал из пространства моей программы мою информацию (может быть, конфиденциальную). Если программа испорчена, то будет сбой
в системе. Следовательно, возникает проблема защиты памяти, то есть в вычислительной системе должен быть реализован на аппаратном уровне механизм, обеспечивающий защиту адресного пространства каждой из программ от несанкционированного доступа других программ. Это означает, что этот механизм при выполнении доступа по исполнительным адресам будет контролировать корректность доступа.
Мы с вами рассматривали механизм виртуальной памяти на примере страничной организации памяти. Если в таблице приписки в какой-то строке находился код меньше нуля, это означало, что эта виртуальная страница недоступна.
И при попытке обратиться к этой странице, срабатывает аппарат защиты памяти. А срабатывает он таким образом: в
системе возникает прерывание по защите памяти, при обработке этого прерывания операционная система (ОС) смотрит, а действительно ли этой страницы памяти у данной программы нет (то есть это чужая страница). Если эта страница действительно чужая, то прерывание прекращает выполнение данного процесса с диагностикой обращения в
чужую память. Возможна и другая ситуация: если какие-то страницы еще не загружены в память и ОС в своих внутренних программных таблицах отметила, что на самом деле у меня есть эта страница и что, предположим, она находится на внешнем устройстве. В этом случае прерывание игнорируется, так как ошибки нет (просто нет еще достаточно информации для продолжения программы). Так устроена защита памяти.
Вторая проблема: пусть в вычислительной системе есть принтер, и есть два процесса, которым он нужен. И пусть
один из процессов обратился к внешнему устройству с командой напечатать строку (а он печатает, скажем, ведомость
на экзамен, а другой процесс печатает, предположим, докладную декану). И первая строчка напечаталась: «Ведомость». После этого другой процесс пишет: «Декану факультета ………», и тоже обращается к устройству печати.
Устройство печати печатает вторую строчку, и так далее. В итоге получается документ, который остается только
сжечь, так как там напечатан бред. Это первый пример. Второй пример: мы с вами говорили о виртуальной памяти и о
том, что таблицы приписки заполняются оперативной системой программно (существуют команды, которые позволяют записать некоторую информацию в таблицу приписки). И пусть, появились два лихих программиста, которые решили отвести себе больше памяти, и каждый из них исправил соответственно таблицу приписки, выделив себе всю
память. Но память-то одна, и получилось нехорошо. И в первом и во втором примере программам пользователя были
доступны команды управления компонентами вычислительной системы (в первом случае - команды управления
внешним устройством, во втором случае - оперативной памятью), что и привело к некорректности в работе. Это означает, что, пока эти команды доступны, то корректный режим мультипрограммирования организовать невозможно,
потому что всегда найдутся два молодца, которые чего-нибудь да испортят (даже не специально, а просто по незнанию).
Итак, вторым условием для организации мультипрограммного режима является наличие привилегированного режима в системе. Привилегированный режим - это режим работы центрального процессора, в котором программе
доступны все возможные команды. Непривилегированный режим (еще его называют пользовательским) - режим, в
котором доступно лишь некоторое подмножество команд. В пользовательском режиме программы пользователя не
смогут обратиться напрямую к управлению компонентами вычислительной системы.
Может возникнуть вопрос: а если все-таки надо печатать, и работают несколько программ, как быть? Обычно во
всех системах имеются средства обращения к ОС (ОС работает в привилегированном режиме и ей доступно все). Программа пользователя может передать заказ на некоторые действия ОС (в разных системах это реализовано поразному), например, с помощью прерываний. Вернемся к примеру с принтером. Теперь процесс не вызывает конкретную команду, а обращается с заказом напечатать строку к ОС. Она принимает заказ и строку, и буферизует эту информацию в некоторых своих программных буферах. Реальной печати при заказе не происходит, очередная строчка
просто попадает в буфер, который относится к моей программе. Печать этого буфера будет происходить только при
завершении программы, когда уже ясно, что заказов на печать больше не будет.
Третья проблема: в одной из программ появилась ошибка, программа зациклилась и система зависла. Что в этом
случае может помочь? Может помочь некоторое средство, которое будет периодически прерывать выполнение программы. Для нашего примера это должно быть прерывание по таймеру, чтобы один раз в какой-то промежуток времени процесс прерывался, и управление передавалось ОС. Она же сама должна решать, как ей поступить в этом случае.
Вот три условия на аппаратуру вычислительной системы, которые должны быть выполнены, если необходимо организовать мультипрограммный режим работы.
3.4.3.6 Аппарат подкачки
Следующая проблема: в системе, работающей в мультипрограммном режиме, находится много программ. Пусть есть
реальная оперативная память со страничной организацией. Какую-то часть памяти занимает ОС, какую-то часть занимает Задача №1, какую-то часть - Задача №2 и т.д. В простейшем случае, в системе может находиться столько программ, сколько может разместить в себе оперативная память. Это достаточно неэффективно, потому что выполняемый
в данный промежуток времени код программы локализован в нескольких виртуальных страницах (например, какой-то
цикл или функция, которые выполняются в данный момент). Если мы будем размещать в оперативной памяти весь
код и все данные нашей программы, то большая часть оперативной памяти будет простаивать, потому что мы до нее
еще должны добраться. Появляется естественное желание держать в оперативной памяти только те фрагменты адресного пространства, которые в данный момент используются. Для этого используется аппарат подкачки (или swapping).
Это программно-аппаратное средство.
Суть его заключается в следующем. Мы говорили о виртуальной памяти и о том, что в строке таблицы приписки содержится некий код. В этой строке может быть еще одно поле, характеризующее частоту обращения к странице. Это
поле формируется аппаратно. Аппарат подкачки работает примерно так же, как в буфере чтения записи в оперативную память (также собирается информация о старении страниц). По этим данным ОС может откачивать редко используемые страницы, принадлежащие конкретному процессу во внешнюю память (в больших машинах для этих целей
обычно используются магнитные барабаны). При этом если страница откачивается, то в таблицу приписки записывается отрицательный код, который, в случае обращения к ней, вызовет прерывание (оно определит, что это не чужая
страница), и страница подкачивается обратно (а в это время опять же может начать выполняться другая задача). Этот
механизм подкачки достаточно эффективен. Он позволяет держать в оперативной памяти от каждой из выполняемых
программ некоторую (самую важную) часть, а когда в памяти находится большое количество программ, то это означает, что всегда будет готова очередь программ на случай обмена.
С одной стороны, подкачка - это функция, которая поддерживается аппаратурой (старение страниц памяти без аппаратной поддержки сложно организовать), а с другой стороны все реальное управление программное.
Мы видим, что все то, о чем говорилось в предыдущих лекциях тесно взаимосвязано. То есть нельзя организовать в
системе (корректный) мультипрограммный режим без аппаратной поддержки, и наоборот, если есть аппаратная поддержка, но нет программы, которая использует эти аппаратные средства, то мультипрограммный режим также невозможен.
3.5 Язык ассемблера
Регистры – ячейки, расположенные в центральном процессоре и доступные из машинных программ. Доступ к регистрам осуществляется намного быстрее, чем к ячейкам памяти, поэтому использование регистров заметно уменьшает
время выполнения программ.
Соглашения, принятые в ПК подразумевают следующее: в регистре CS должен находиться начальный адрес сегмента
команд – той области памяти, где расположены команды программы; регистр DS должен указывать на начало сегмента данных, в котором размещаются данные программы; регистр SS должен указывать на начало области памяти, отведённой под стек.
Указатель команд.
Ещё один регистр ПК – это регистр IP (instruction pointer, указатель команд):
IP
d
CS
сегмент
команд
d
IP
текущая
команда
В этом регистре всегда находится адрес команды, которая должна быть выполнена следующей. Более точно, в IP
находится адрес этой команды, отсчитанный от начала сегмента команд, на начало которого указывает регистр CS.
Поэтому абсолютный адрес этой команды определяется парой регистров CS и IP. Изменение любого из этих регистров есть ничто иное, как переход. Поэтому содержимое регистров IP и CS можно менять только командами перехода.
3.5.1 Регистр флагов.
Флаг – это бит, принимающий значение 1 («флаг установлен»), если выполнено некоторое условие, и значение 0
(«флаг сброшен») в противном случае. В ПК используется 9 флагов, причём конструктивно они собраны в один 16
разрядный регистр, называемый регистром флагов и обозначаемый как Flags. Каждый флаг – это один из разрядов
данного регистра (некоторые разряды регистра не заняты):
Flags
0F
DF
IF
TF
SF
ZF
AF
PF
CF
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Некоторые флаги принято называть флагами условий: они автоматически меняются при выполнении команд и фиксируют те или иные свойства их результата (например, равен ли он нулю); проверка этих флагов позволяет проанализировать результаты команд. Другие флаги называются флагами состояний; сами по себе они не меняются, и менять их
должна программа; состояние этих флагов оказывает влияние на дальнейшее поведение процессора.
Флаги условий:
CF (carry flag) – флаг переноса. Наиболее полезен в арифметических операциях над числами без знака; например, если
при сложении беззнаковых чисел получилась слишком большая сумма – с единицей переноса, которой нет места в
ячейке, тогда флаг CF принимает значение 1, а если сумма «укладывается» в размер ячейки, то значением CF будет 0.
OF (overflow flag) – флаг переполнения. Полезен в арифметических операциях над числами со знаком; например, если
при сложении или вычитании знаковых чисел получился результат, по модулю превосходящий допустимую величину
(произошло переполнение мантиссы), тогда флаг принимает значение 1, а если переполнения мантиссы не было – значение 0.
ZF (zero flag) – флаг нуля. Устанавливается в 1, если результат команды оказался нулевым.
SF (sign flag) – флаг знака. Устанавливается в 1, если в операциях над знаковыми числами получился отрицательный
результат.
PF (parity flag) – флаг чётности. Равен 1, если в 8 младших битах результата очередной команды содержится чётное
количество двоичных единиц. Учитывается обычно только в операциях ввода-вывода.
AF (auxiliary carry flag) – флаг дополнительного переноса. Фиксирует особенности выполнения над двоичнодесятичными цифрами.
Флаги состояний:
DF (direction flag) – флаг направления. Устанавливает направление просмотра строк в строковых командах: при DF=0
строки просматриваются вперёд (от начала к концу), при DF =1 в обратном направлении.
IF (interrupt flag) – флаг прерываний. При IF=0 процессор перестаёт реагировать на поступающие к нему прерывания,
а при IF=1 блокировка снимается.
TF (trap flag) – флаг трассировки. При TF=1 после выполнения каждой команды процессор делает прерывание, чем
можно воспользоваться при отладке программы – для её трассировки.
3.5.2 Представление данных
3.5.2.1 Представление целых чисел
В общем случае под целое число можно отвести любое число соседних байтов памяти, однако система команд ПК
8086 поддерживает работу только с числами размером в байт, и слово, частично двойное слово. Если числа занимают
иное количество байтов, то реализовывать операции над ними требуется самому программисту. Следует заметить, что
современные процессоры поддерживают работу и с числами других размеров. Но мы будем рассматривать только
байт, слово и двойное слово. Числа могут быть знаковые и беззнаковые. В ячейку одного и того же размера можно
поместить большее число беззнакового типа, чем неотрицательного знакового типа. Например байт – от 0 до 255, а
знаковое от 0 до 127.
3.5.2.2 Целые числа без знака
Беззнаковые числа могут быть представлены в виде байта, слова или двойного слова, в зависимости от их размера.
Такие числа записываются в ячейки в двоичной системе счисления, занимая все разряды ячейки. Например, если для
целого 98 отведён байт, то содержимым байта будет двоичное число 01100010 (62h), а если отведено слово, то оно
будет иметь вид 0062h.
поскольку в ячейки из k разрядов можно записать 2^k различных комбинаций из 0 и 1, то в виде байта можно представить целые от 0 до 255, в виде слова целые от 0 до 65535, в виде двойного слова – от 0 до 4 294 967 295.
Отметим «экзотическую» особенность представления чисел в ПК: числа размером в слово и двойное слово хранятся в
перевёрнутом виде. Если на число отведено слово памяти, то старшие (левые) 8 битов числа размещаются во втором
байте слова, а младшие (правые) 8 битов – в первом байте; в терминах шестнадцатеричной системы: первые два байта
числа хранятся во втором байте слова, а две последние цифры – в первом байте. Например,
число 130 (=0082h) в виде слова хранится в памяти так:
----------| 82 | 00 |
----------(Отметим, однако, что в регистрах числа хранятся в нормальном виде:
----------AX | 00 | 82 |
----------AH AL )
"Перевернутое" представление используется и при хранении в памяти целых чисел размером в двойное слово: в
первом его байте размещаются младшие 8 битов числа, во втором байте - предыдущие 8 битов и т.д. Например, число
12345678h хранится в памяти так:
--------------------| 78 | 56 | 34 | 12 |
--------------------Другими словами, в первом слове двойного слова размещаются младшие (правые) 16 битов числа, а во втором слове - старшие 16 битов, причем
в каждом из этих двух слов в свою очередь используется "перевернутое" представление.
Такое необычное представление чисел объясняется тем, что в первых моделях ПК за раз можно было считать из
памяти только один байт и что все арифметические операции над многозначными числами начинаются с действий
над младшими цифрами, поэтому из памяти в первую очередь надо считывать младшие цифры, если сразу нельзя считать все цифры. Учитывая это, в первых ПК и стали размещать младшие цифры числа перед старшими цифрами, а
ради преемственности такое представление чисел сохранили в последующих моделях ПК.
Конечно, "перевернутое" представление неудобно для людей, однако при использовании языка ассемблера это
неудобство не чувствуется: в MASM все числа записываются в нормальном, неперевернутом виде /
3.5.2.3 Целые числа со знаком.
Эти числа также представляются в виде байта, слова и двойного слова. В виде байта записываются числа от -128
до 127, в виде слова - числа от -32768 до 32767, а в виде двойного слова - числа от -2147483648 до 2147483647.
При этом числа записываются в дополнительном коде: неотрицательное число записывается так же, как и беззнаковое
число (т.е. в прямом коде), а отрицательное число -x (x>0) представляется беззнаковым числом 2^8-x (для байтов),
2^16-x (для слов) или 2^32-x (для двойных слов). Например, дополнительным кодом числа -6 является байт FAh
(=256-6), слово FFFAh или двойное слово FFFFFFFAh. При этом байт 10000000b (=80h) трактуется как -128, а не как
+128 (слово 8000h понимается как -32678), поэтому левый бит дополнительного кода всегда играет роль знакового:
для неотрицательных чисел он равен 0, для отрицательных - 1.
Знаковые числа размером в слово и двойное слово записываются в памяти в "перевернутом" виде (при этом знаковый бит оказывается в последнем байте ячейки). Но в MASM эти числа, как и беззнаковые, записываются в нормальной форме.
Иногда число-байт необходимо расширить до слова, т.е. нужно получить такое же по величине число, но размером
в слово. Существует два способа такого расширения - без знака и со знаком. В любом случае исходное число-байт
попадает во второй (до "переворачивания") байт слова, а вот первый байт заполняется по-разному: при расширении
без знака в него записываются нулевые биты (12h -> 0012h), а при расширении со знаком в первый байт записываются нули, если число-байт было неотрицательным, и записывается восемь двоичных единиц в противном случае (81h
-> FF81h). Другими словами, при расширении со знаком в первом байте слова копируется знаковый разряд числабайта.
Аналогично происходит расширение числа-слова до двойного слова.
3.5.2.3 Особенности выполнения арифметических операций
В ПК имеются команды сложения и вычитания целых чисел размером в слово и байт. Специальных команд для
сложения и вычитания двойных слов нет, эти операции реализуются через команды сложения и вычитания слов.
Сложение и вычитание беззнаковых чисел производится по модулю 2^8 для байтов и 2^16 для слов. Это означает,
что если в результате сложения появилась единица переноса, не вмещающаяся в разрядную сетку, то она отбрасывается. Например, при сложении байтов 128 и 130 получается число 258 = 100000010b, поэтому левая двоичная единица
отбрасывается и остается число 2 = 10b, которое и объявляется результатом сложения. Ошибка здесь не фиксируется, но в флаг переноса CF записывается 1 (если переноса не было, в CF заносится 0). "Поймать" такое искажение суммы можно только последующим анализом флага CF.
Искажение результата происходит и при вычитании из меньшего числа большего. И здесь не фиксируется ошибка,
однако первому числу дается "заем единицы" (в случае байтов это число увеличивается на 256, для слов - на 2^16),
после чего и производится вычитание. Например, вычитание байтов 2 и 3 сводится к вычитанию чисел 256+2=258 и
3, в результате чего получается неправильная разность 255 (а не -1). Для того чтобы можно было обнаружить такую
ситуацию, в флаг переноса CF заносится 1 (если заёма не было, в CF записывается 0).
Сложение и вычитание знаковых целых чисел производится по тем же алгоритмам, что и для беззнаковых чисел (в
этом одно из достоинств дополнительного кода): знаковые числа рассматриваются как соответствующие беззнаковые
числа, производится операция над этими беззнаковыми числами и полученный результат интерпретируется как знаковое число. Например, сложение байтовых чисел 1 и -2 происходит так: берутся их дополнительные коды 1 и (2562)=254, вычисляется сумма этих величин 1+254=255 и она трактуется как знаковое число -1 (255=256-1). Если при
таком сложении возникла единица переноса, то она, как обычно, отбрасывается, а флаг CF получает значение 1. Однако в данном случае это отсечение не представляет интерес - результат операции будет правильным, например:
3+(-2) => 3+254(mod 256) = 257(mod 256) = 1. Зато здесь возможна иная неприятность: модуль суммы (ее мантисса)
может превзойти допустимую границу и "залезть" в знаковый разряд, испортив его. Например, при сложении байтовых чисел 127 и 2 получается величина 129 == 100001001b, представляющая дополнительный код числа
-127 (=256-129).
Хотя результат здесь получился и неправильным, процессор не фиксирует ошибку, но зато заносит 1 в флаг переполнения OF (если "переполнения мантиссы" не было, в OF записывается 0). Анализируя затем этот флаг, можно "поймать" такую ошибку. Таким образом, сложение (вычитание) знаковых и беззнаковых чисел производится по одному
и тому же алгоритму. При этом ПК не "знает", какие числа (со знаком или без) он складывает; в любом случае он
складывает их как беззнаковые числа и в любом случае формирует флаги CF и OF. А вот как интерпретировать слагаемые и сумму, на какой из этих флагов обращать внимание - это личное дело автора программы.
Что касается умножения и деления знаковых и беззнаковых чисел, то они выполняются по разным алгоритмам,
разными машинными командами. Однако и у этих операций есть ряд особенностей. При умножении байтов
(слов) первый сомножитель обязан находиться в регистре AL (AX), результатом же умножения является слово
(двойное слово), которое заносится в регистр AX (регистры DX и AX). Тем самым при умножении сохраняются все
цифры произведения. При делении байтов (слов) первый операнд (делимое) должен быть словом (двойным словом) и
обязан находиться в регистре AX (регистрах DX и AX). Результатом деления являются две величины размером в
байт (слово) - неполное частное (div) и остаток от деления (mod); неполное частное записывается в регистр AL (AX),
а остаток - в регистр AH (DX).
3.5.2.4 Представление символов и строк
На символ отводится один байт памяти, в который записывается код символа - целое от 0 до 255. В ПК используется система кодировки ASCII (American Standard Code for Information Interchange). Она, естественно, не содержит
кодов русских букв, поэтому в нашей стране применяется некоторый вариант этой системы с русскими буквами
(обычно это альтернативная кодировка ГОСТа). Некоторые особенности этих систем кодировки:
- код пробела меньше кода любой буквы, цифры и вообще любого графически представимого символа;
- коды цифр упорядочены по величине цифр и не содержат пропусков, т.е. из неравенства код('0')<=код(c)<=код('9')
следует, что c - цифра;
- коды больших латинских букв упорядочены согласно алфавиту и не содержат пропусков; аналогично с малыми
латинскими буквами;
- (в альтернативной кодировке ГОСТа) коды русских букв (как больших, так и малых) упорядочены согласно алфавиту, но между ними есть коды других символов.
Строка (последовательность символов) размещается в соседних байтах памяти (в неперевернутом виде): код первого символа строки записывается в первом байте, код второго символа - во втором байте и т.п. Адресом строки считается адрес ее первого байта.
В ПК строкой считается также и последовательность слов (обычно это последовательность целых чисел). Элементы таких строк располагаются в последовательных ячейках памяти, но каждый элемент представлен в "перевернутом"
виде.
3.5.2.5 Структура команд. Исполнительные адреса
Машинные команды ПК занимают от 1 до 6 байтов.
Код операции (КОП) занимает один или два первых байта команды. В ПК столь много различных операций, что
для них не хватает 256 различных КОПов, которые можно представить в одном байте. Поэтому некоторые опера-
ции объединяются в группу, и им дается один и тот же КОП, во втором же байте этот КОП уточняется. Кроме того,
во втором байте указываются типы и способ адресации операндов. Остальные байты команды указывают на операнды.
Команды могут иметь от 0 до 3 операндов, у большинства команд - один или два операнда. Размер операндов байт или слово (редко - двойное слово). Операнд может быть указан в самой команде (это т.н. непосредственный
операнд), либо может находиться в одном из регистров ПК и тогда в команде указывается этот регистр, либо может
находиться в ячейке памяти и тогда в команде тем или иным способом указывается адрес этой ячейки. Некоторые
команды требуют, чтобы операнд находился в фиксированном месте (например, в регистре AX), тогда операнд явно
не указывается в команде. Результат выполнения команды помещается в регистр или ячейку памяти, из которого
(которой), как правило, берется первый операнд. Например, большинство команд с двумя операндами реализуют
действие
op1 := op1 _ op2
где op1 - регистр или ячейка, а op2 - непосредственный операнд, регистр или ячейка.
Адрес операнда разрешено модифицировать по одному или двум регистрам. В первом случае в качестве регистрамодификатора разрешено использовать регистр BX, BP, SI или DI (и никакой иной). Во втором случае один из модификаторов обязан быть регистром BX или BP, а другой - регистром SI или DI; одновременная модификация по BX и
BP или SI и DI недопустима. Регистры BX и BP обычно используются для хранения базы (начального адреса) некоторого участка памяти (скажем, массива) и потому называются базовыми регистрами, а регистры SI и DI часто содержат индексы элементов массива и потому называются индексными регистрами.
Однако такое распределение ролей необязательно, и, например, в SI может находиться база массива, а в BX - индекс
элемента массива. В MASM адреса в командах записываются в виде одной из следующих конструкции:
A, A[M] или A[M1][M2],
где A - адрес, M - регистр BX, BP, SI или DI, M1 - регистр BX или BP, а M2 - регистр SI или DI. Во втором и третьем
варианте A может отсутствовать, в этом случае считается, что A=0.
При выполнении команды процессор, прежде всего, вычисляет т.н. исполнительный (эффективный) адрес - как
сумму адреса, заданного в команде, и текущих значений указанных регистров-модификаторов, причем все эти величины рассматриваются как неотрицательные и суммирование ведется по модулю 2^16 ([r] означает содержимое
регистра r):
A
: Aисп = A
A[M] : Aисп = A+[M] (mod 2^16)
A[M1][M2]: Aисп = A+[M1]+[M2] (mod 2^16)
Полученный таким образом 16-разрядный адрес определяет т.н. смещение - адрес, отсчитанный от начала некоторого сегмента (области) памяти. Перед обращением к памяти процессор еще добавляет к смещению начальный адрес
этого сегмента (он хранится в некотором сегментном регистре), в результате чего получается окончательный 20разрядный адрес, по которому и происходит реальное обращение к памяти.
3.5.2.6 Форматы команд
В ПК форматы машинных команд достаточно разнообразны. Для примера приведем лишь основные форматы команд с двумя операндами.
1) Формат "регистр-регистр" (2байта):
------------- ---------------| КОП |d|w| | 11 |reg1|reg2|
------------- ---------------7 210 7 65 32 0
Команды этого формата описывают обычно действие reg1:=reg1_reg2 или reg2:=reg2_reg1. Поле КОП первого байта
указывает на операцию (_), которую надо выполнить. Бит w определяет размер операндов, а бит d указывает, в какой
из регистров записывается результат:
w = 1 - слова
d = 1 - reg1:=reg1_reg2
= 0 - байты
= 0 - reg2:=reg2_reg1
Во втором байте два левых бита, фиксированы (для данного формата), а трехбитовые поля reg1 и reg2 указывают на
регистры, участвующие в операции, согласно следующей таблице:
reg w=1 w=0
reg w=1 w=0
--------------------------------000 AX AL
100 SP AH
001 CX CL
101 BP CH
010 DX DL
110 SI DH
011 BX BL
111 DI BH
2) Формат "регистр-память" (2-4 байта):
------------- ------------- ------------------| КОП |d|w| |mod|reg|mem| |адрес (0-2 байта)|
------------- ------------- ------------------Эти команды описывают операции reg:=reg_mem или mem:=mem_reg. Бит w
первого байта определяет размер операндов (см. выше), а бит d указывает, куда записывается результат: в регистр
(d=1) или в ячейку памяти
(d=0). Трехбитовое поле reg второго байта указывает операнд-регистр (см. выше), двухбитовое поле mod определяет, сколько байтов в команде
занимает операнд-адрес (00 - 0 байтов, 01 - 1 байт, 10 - 2 байта), а
трехбитовое поле mem указывает способ модификации этого адреса.
3) Формат "регистр-непосредственный операнд" (3-4 байта):
----------- ------------- -------------------------| КОП |s|w| |11|КОП"|reg| |непосред.операнд (1-2 б)|
----------- ------------- -------------------------Команды этого формата описывают операции reg:=reg_immed (immed - непосредственный операнд
4) Формат "память-непосредственный операнд" (3-6 байтов):
----------- -------------- -------------- ----------------| КОП |s|w| |mod|КОП"|mem| |адрес (0-2б)| |непоср.оп (1-2б)|
----------- -------------- -------------- -----------------Команды этого формата описывают операции типа mem:=mem_immed. Смысл
всех полей - тот же, что и в предыдущих форматах.
Помимо рассмотренных в ПК используются и другие форматы команды с двумя операндами; так, предусмотрен
специальный формат для команд, один из операндов которых фиксирован (обычно это регистр AX). Имеют свои
форматы и команды с другим числом операндов.
3.5.2.7 Сегментные регистры.
Первые модели ПК имели оперативную память объемом 2^16 байтов (64Кб) и потому использовали 16-битовые
адреса. В последующих моделях память была увеличена до 2^20 байтов (1Мб=1000Кб), для чего уже необходимы 20битовые адреса. Однако в этих ПК ради сохранения преемственности были сохранены 16-битовые адреса: именно такие адреса хранятся в регистрах и указываются в командах, именно такие адреса получаются в результате модификации по базовым и индексным регистрам. Как же удается 16-битовыми адресами ссылаться на 1Мб памяти?
Эта проблема решается с помощью сегментирования адресов (неявного базирования адресов). В ПК вводится понятие "сегмент памяти". Так называется любой участок памяти размером до 64Кб и с начальным адресом, кратным
16. Абсолютный (20-битовый) адрес A любой ячейки памяти можно представить как сумму 20-битового начального
адреса (базы) B сегмента, которому принадлежит ячейка, и 16-битового смещения D - адреса этой ячейки, отсчитанного от начала сегмента: A=B+D. (Неоднозначность выбора сегмента не играет существенной роли, главное - чтобы
сумма B и D давала нужный адрес.) Адрес B заносится в некоторый регистр S, а в команде, где должен быть указан
адрес A, вместо него записывается пара из регистра S и смещения D (в MASM такая пара, называемая адресной парой или указателем, записывается как S:D). Процессор же устроен так, что при выполнении команды он прежде всего по паре S:D вычисляет абсолютный адрес A как сумму содержимого регистра S и смещения D и только затем обращается к памяти по этому адресу A. Вот так, заменяя в командах абсолютные адреса на адресные пары, и удается
адресовать всю память 16-битовыми адресами (смещениями).
В качестве регистра S разрешается использовать не любой регистр, а только один из 4 регистров, называемых сегментными: CS, DS, SS и ES. В связи с этим одновременно можно работать с 4 сегментами памяти: начало одного из
них загружается в регистр CS и все ссылки на ячейки этого сегмента указываются в виде пар CS:D, начало другого
заносится в DS и все ссылки на его ячейки задаются в виде пар DS:D и т.д. Если одновременно надо работать с большим числом сегментов, тогда нужно своевременно спасать содержимое сегментных регистров и записывать в них
начальные адреса пятого, шестого и т.д. сегментов.
Отметим, что используемые сегменты могут быть расположены в памяти произвольным образом: они могут не пересекаться, а могут пересекаться и даже совпадать. Какие сегменты памяти использовать, в каких сегментных регистрах хранить их начальные адреса - все это личное дело автора машинной программы.
Как и все регистры ПК, сегментные регистры имеют размер слова. Поэтому возникает вопрос: как удается разместить в них 20-битовые начальные адреса сегментов памяти? Ответ такой. Поскольку все эти адреса кратны 16, то в
них младшие 4 бита (последняя 16-ричная цифра) всегда нулевые, а потому эти биты можно не хранить явно, а лишь
подразумевать. Именно так и делается: в сегментном регистре всегда хранятся только первые 16 битов (первые
четыре 16-ричные цифры) начального адреса сегмента (эта величина называется номером сегмента или просто сегментом). При вычислении же абсолютного адреса A по паре S:D процессор сначала приписывает справа к содержимому регистра S четыре нулевых бита (другими словами, умножает на 16) и лишь затем прибавляет смещение D,
причем суммирование ведется по модулю 2^20:
Aабс = 16*[S]+D (mod 2^20)
Если, например, в регистре CS хранится величина 1234h, тогда адресная пара 1234h:507h определяет абсолютный
адрес, равный 16*1234h+507h = 12340h+507h = 12847h.
3.5.2.7 Сегментные регистры по умолчанию
Согласно описанной схеме сегментирования адресов, замену абсолютных адресов на адресные пары надо производить во всех командах, имеющих операнд-адрес. Однако разработчики ПК придумали способ, позволяющий избежать выписывания таких пар в большинстве команд. Суть его в том, что заранее договариваются о том, какой сегментный регистр на какой сегмент памяти будет указывать, и что в командах задается только смещение: не указанный явно сегментный регистр автоматически восстанавливается согласно этой договоренности. И только при необходимости нарушить эту договоренность надо полностью указывать адресную пару.
Что это за договоренность?
Считается, что регистр CS всегда указывает на начало области памяти, в которой размещены команды программы
(эта область называется сегментом команд или сегментом кодов), и потому при ссылках на ячейки этой области
регистр CS можно не указывать явно, он подразумевается по умолчанию. (Отметим попутно, что абсолютный адрес
очередной команды, подлежащей выполнению, всегда задается парой CS:IP: в счетчике команд IP всегда находится
смещение этой команды относительно адреса из регистра CS.) Аналогично предполагается, что регистр DS указывает
на сегмент данных (область памяти с константами, переменными и другими величинами программы), и потому во
всех ссылках на этот сегмент регистр DS можно явно не указывать, т.к. он подразумевается по умолчанию. Регистр
SS, считается, указывает на стек - область памяти, доступ к которой осуществляется по принципу "последним записан - первым считан" , и потому все ссылки на стек, в которых явно не указан сегментный регистр, по умолчанию
сегментируются по регистру SS. Регистр ES считается свободным, он не привязан ни к какому сегменту памяти и его
можно использовать по своему усмотрению; чаще всего он применяется для доступа к данным, которые не поместились или сознательно не были размещены в сегменте данных.
С учетом такого распределения ролей сегментных регистров машинные программы обычно строятся так: все команды программы размещаются в одном сегменте памяти, начало которого заносится в регистр CS, а все данные
размещаются в другом сегменте, начало которого заносится в регистр DS; если нужен стек, то под него отводится
третий сегмент памяти, начало которого записывается в регистр SS. После этого практически во всех командах можно
указывать не полные адресные пары, а лишь смещения, т.к. сегментные регистры в этих парах будут восстанавливаться автоматически.
Здесь, правда, возникает такой вопрос: как по смещению определить, на какой сегмент памяти оно указывает? В
общих чертах ответ такой: ссылки на сегмент команд могут быть только в командах перехода, а ссылки практически
во всех других командах (кроме строковых и стековых) - это ссылки на сегмент данных. Например, в команде пересылки
MOV AX,X
имя X воспринимается как ссылка на данное, а потому автоматически восстанавливается до адресной пары DS:X. В
команде же безусловного перехода по адресу, находящемуся в регистре BX,
JMP BX
абсолютный адрес перехода определяется парой CS:[BX].
Итак, если в ссылке на какую-то ячейку памяти не указан явно сегментный регистр, то этот регистр берется по
умолчанию. Явно же сегментные регистры надо указывать, только если по каким-то причинам регистр по умолчанию
не подходит. Если, например, в команде пересылки нам надо сослаться на стек (скажем, надо записать в регистр AH
байт стека, помеченный именем X), тогда нас уже не будет устраивать договоренность о том, что по умолчанию операнд команды MOV сегментируется по регистру DS, и потому мы обязаны явно указать иной регистр - в нашем случае
регистр SS, т.к. именно он указывает на стек:
MOV AH,SS:X
Однако такие случаи встречаются редко и потому в командах, как правило, указываются только смещения.
Отметим, что в MASM сегментный регистр записывается в самой команде непосредственно перед смещением
(именем переменной, меткой и т.п.), однако на уровне машинного языка ситуация несколько иная. Имеется 4 специальные однобайтовые команды, называемые префиксами замены сегмента (обозначаемые как CS:, DS:, SS: и ES:).
Они ставятся перед командой, операнд-адрес которой должен быть просегментирован по регистру, отличному от
регистра, подразумеваемому по умолчанию. Например, приведенная выше символическая команда пересылки - это
на самом деле две машинные команды:
SS:
MOV AH,X
3.5.3 Переходы
В систему команд ПК входит обычный для ЭВМ набор команд перехода: безусловные и условные переходы, переходы с возвратами и др. Однако в ПК эти команды имеют некоторые особенности, которые здесь и рассматриваются.
Абсолютный адрес команды, которая должна быть выполнена следующей, определяется парой CS:IP, поэтому выполнение перехода означает изменение этих регистров, обоих или только одного (IP). Если изменяется только
счетчик команд IP, то такой переход называется внутрисегментным или близким (управление остается в том же сегменте команд), а если меняются оба регистра CS и IP, то это межсегментный или дальний переход (начинают выполняться команды из другого сегмента команд). По способу изменения счетчика команд переходы делятся на абсолютные и относительные. Если в команде перехода указан адрес (смещение) той команды, которой надо передать управление, то это абсолютный переход. Однако в команде может быть указана величина (сдвиг), которую надо добавить к
текущему значению регистра IP, чтобы получился адрес перехода, и тогда это будет относительный переход; при этом
сдвиг может быть положительным и отрицательным, так что возможен переход вперед и назад. По величине сдвига
относительные переходы делятся на короткие (сдвиг задается байтом) и длинные (сдвиг - слово). Абсолютные же
переходы делятся на прямые и косвенные: при прямом переходе адрес перехода задается в самой команде, а при косвенном - в команде указывается регистр или ячейка памяти, в котором (которой) находится адрес перехода.
3.5.3.1 Безусловные переходы.
В MASM все команды безусловного перехода обозначаются одинаково:
JMP op
но в зависимости от типа операнда, ассемблер формирует разные машинные
команды.
op – адрес или смещение, по которому будет осуществлён переход.
Если указано смещение, то переход называется относительным, если адрес то абсолютный.
Переходы также делятся на внутрисегментные и межсегментные, прямые и косвенные, короткие и длинные.
Необходимо учитывать следующую особенность регистра IP. Выполнение любой команды начинается с того, что в
IP заносится адрес следующей за ней команды, и только затем выполняется собственно команда. Для команды относительного перехода это означает, что операнд прибавляется не к адресу этой команды, а к адресу команды, следующей за ней, поэтому, к примеру, команда JMP 0 - это переход на следующую команду программы.
3.5.3.2 Условные переходы.
Практически во всех командах условного перехода проверяется значение того или иного флага (например, флага
нуля ZF) и, если он имеет определенное значение, выполняется переход по адресу, указанному в команде. Значение
флага должно быть установлено предыдущей командой, например, командой сравнения
CMP op1,op2
которая вычисляет разность op1-op2, однако результат никуда не записывает, а только меняет флаги, на которые и
будет реагировать команда условного перехода.
В MASM команды условного перехода имеют следующую форму:
Jxx op
где xx - одна или несколько букв, в сокращенном виде отражающие проверяемое условие (обычно в предположении,
что перед этой командой находится команда сравнения). Примеры некоторых мнемоник:
JE - переход "по равно" (jump if equal)
JL - переход "по меньше" (jump if less)
JNL - переход "по неменьше" (jump if not less)
Особенностью всех машинных команд условного перехода является то, что они реализуют внутрисегментный
относительный короткий переход,
т.е. добавляют к счетчику команд IP свой операнд, рассматриваемый как знаковое число от -128 до 127. В MASM этот
операнд всегда должен записываться как метка, которую ассемблер заменит на соответствующий сдвиг
Такая особенность команд условного перехода вызывает неудобство
при переходах на "дальние" команды. Например, если надо сделать переход при A<B на команду, помеченную меткой L и расположенную далеко от
команды перехода, то приходится использовать команду длинного безусловного перехода:
MOV AX,A
CMP AX,B ;сравнение A и B
JNL M
;не меньше --> M (обход команды JMP)
JMP L ;меньше --> L (длинный переход)
M: ...
3.5.3.3 Команды управление циклом
В ПК есть несколько команд, упрощающих программирование циклов с заранее известным числом повторений.
Применение этих команд требует, чтобы к началу цикла в регистр CX было занесено число шагов цикла. Сами команды размещаются в конце цикла, они уменьшают значение CX на 1 и, если CX еще не равно 0, передают управление на начало цикла. Например, найти S - сумму элементов массива X из 10 чисел-слов можно так:
MOV AX,0 ;начальное значение суммы (накапливается в AX)
MOV SI,0 ;начальное значение индексного регистра
MOV CX,10 ;число повторений цикла
L: ADD AX,X[SI] ;AX:=AX+X[i]
ADD SI,2 ;SI:=SI+2
LOOP L
;CX:=CX-1; if CX<>0 then goto L
MOV S,AX ;S:=AX
Помимо команды LOOP есть еще две "циклические" команды - LOOPZ и LOOPNZ (они имеют синонимичные
названия LOOPE и LOOPNE), которых кроме регистра CX проверяют еще и флаг нуля ZF; например, команда LOOPZ
"выходит" из цикла, если CX=0 или ZF=1. Эту команду можно, например, использовать при поиске в массиве первого
нулевого элемента, где должно быть предусмотрено два условия выхода из цикла: либо будет найден нулевой элемент (ZF=1, если перед LOOPZ поставить команду сравнения очередного элемента с 0), либо будет исчерпан весь
массив (CX=0)
Отметим, что все эти "циклические" команды реализуют короткий относительный переход, как и команды условного перехода, поэтому их можно использовать только для циклов с небольшим числом команд.
3.5.4 Строковые операции
В ПК под строкой понимается последовательность соседних байтов или слов. В связи с этим все строковые команды имеют две разновидности - для работы со строками из байтов (в мнемонику операций входит буква B) и для работы со строками из слов (в мнемонику входит W).
Имеются следующие операции над строками:
- пересылка элементов строк (в память, из памяти, память-память);
- сравнение двух строк;
- просмотр строки с целью поиска элемента, равного заданному.
Каждая из этих операций выполняется только над одним элементом строки, однако одновременно происходит
автоматическая настройка на следующий или предыдущий элемент строки. Имеются специальные команды повторения (REP и др.), которые заставляют следующую за ними строковую команду многократно повторяться (до 2^16 раз),
в связи с чем, такая пара команд позволяет обработать всю строку, причем намного быстрее, чем запрограммированный цикл.
Кроме того, строки можно просматривать вперед (от их начала к концу) и назад. Направление просмотра зависит
от флага направления DF, значение которого можно менять с помощью команд STD (DF:=1) и CLD (DF:=0). При
DF=0 все последующие строковые команды программы просматривают строки вперед, а при DF=1 - назад.
В строковых командах операнды явно не указываются, а подразумеваются. Если команда работает с одной строкой, то адрес очередного, обрабатываемого сейчас элемента строки задается парой регистров DS и SI или парой ES и
DI, а если команда работает с двумя строками, то адрес элемента одной из них определяется парой DS:SI, а адрес
элемента другой - парой ES:DI. После выполнения операции значение регистра SI и/или DI увеличивается (при
DF=0) или уменьшается (при DF=1) на 1 (для байтовых строк) или на 2 (для строк из слов).
Начальная установка всех этих регистров, а также флага DF должна быть выполнена до начала операции над строкой. Если сегментный регистр DS уже имеет нужное значение, тогда загрузить регистр SI можно с помощью команды
LEA SI,<начальный/конечный адрес строки>
Если же надо загрузить сразу оба регистра DS и SI, тогда можно воспользоваться командой
LDS SI,m32
которая в регистр SI заносит первое слово, а в регистр DS - второе слово из двойного слова, имеющего адрес m32
(таким образом, по адресу m32+2 должен храниться сегмент, а по адресу m32 - смещение начального или конечного
элемента строки). Начальную загрузку регистров ES и DI обычно осуществляют одной командой
LES DI,m32
которая действует аналогично команде LDS.
Перечислим вкратце строковые команды ПК.
Команда загрузки элемента строки в аккумулятор (LODSB или LODSW) пересылает в регистр AL или AX очередной элемент строки, на который указывает пара DS:SI, после чего увеличивает (при DF=0) или уменьшает (при
DF=1) регистр SI на 1 или 2.
Команда записи аккумулятора в строку (STOSB или STOSW) заносит содержимое регистра AL или AX в тот элемент строки, на который указывает пара ES:DI, после чего изменяет регистр DI на 1 или 2.
Команда пересылки строк (MOVSB или MOVSW) считывает элемент первой строки, определяемый парой DS:SI, в
элемент второй строки, определяемый парой ES:DI, после чего одновременно меняет регистры SI и DI.
Команда сравнения строк (CMPSB или CMPSW) сравнивает очередные элементы строк, указываемые парами
DS:SI и ES:DI, и результат сравнения (равно, меньше и т.п.) фиксирует в флагах, после чего меняет регистры SI и DI.
Команда сканирования строки (SCASB или SCASW) сравнивает элемент строки, адрес которого задается парой
ES:DI, со значением регистра AL или AX и результат сравнения фиксирует в флагах, после чего меняет содержимое
регистра DI.
Перед любой строковой командой можно поставить одну из двух команд, называемых "префиксами повторения",
которая заставит многократно повториться эту строковую команду. Число повторений (обычно это длина строки)
должно быть указано в регистре CX. Префикс повторения REPZ (синонимы - REPE, REP) сначала заносит 1 в флаг
нуля ZF, после чего, постоянно уменьшая CX на 1, заставляет повторяться следующую за ним
строковую команду до тех пор, пока в CX не окажется 0 или пока флаг ZF не изменит свое значение на 0. Другой
префикс повторения REPNZ (синоним - REPNE) действует аналогично, но только вначале устанавливает флаг ZF в
0, а при изменении его на 1 прекращает повторение строковой команды.
Пример. Пусть надо переписать 10000 байтов начиная с адреса A в другое место памяти начиная с адреса B. Если
оба этих имени относятся к сегменту данных, на начало которого указывает регистр DS, тогда эту пересылку можно
сделать так:
CLD
;DF:=0 (просмотр строки вперед)
MOV CX,1000 ;CX - число повторений
MOV AX,DS
MOV ES,AX ;ES:=DS
LEA SI,A
;ES:SI - "откуда"
LEA DI,B
;DS:DI - "куда"
REP MOVSB ;пересылка CX байтов
3.5.5 Стек
В ПК имеются специальные команды работы со стеком, т.е. областью памяти, доступ к элементам которой осуществляется по принципу "последним записан - первым считан". Но для того, чтобы можно было воспользоваться
этими командами, необходимо соблюдение ряда условий.
Под стек можно отвести область в любом месте памяти. Размер ее может быть любым, но не должен превосходить
64Кб, а ее начальный адрес должен быть кратным 16. Другими словами, эта область должна быть сегментом памяти;
он называется сегментом стека. Начало этого сегмента (первые 16 битов начального адреса) должно обязательно
храниться в сегментном регистре SS.
Хранимые в стеке элементы могут иметь любой размер, однако следует учитывать, что в ПК имеются команды
записи в стек и чтения из него только слов. Поэтому для записи байта в стек его надо предварительно расширить до
слова, а запись или чтение двойных слов осуществляются парой команд.
В ПК принято заполнять стек снизу вверх, от больших адресов к меньшим: первый элемент записывается в конец области, отведенной под стек, второй элемент - в предыдущую ячейку области и т.д. Считывается всегда элемент, записанный в стек последним. В связи с этим нижняя граница стека всегда фиксирована, а верхняя - меняется.
Слово памяти, в котором находится элемент стека, записанный последним, называется вершиной стека. Адрес вер-
шины, отсчитанный от начала сегмента стека, обязан находиться в указателе стека - регистре SP. Таким образом,
абсолютный адрес вершины стека определяется парой SS:SP.
------------SS:SP | |
SS:SP | |
SS:SP | |
| ----- запись | ----- чтение | ----| | | =======> ---->| b | =======> | | |
| ----- в стек
----- из стека | --------->| a |
|a|
---->| a |
------------Значение 0 в регистре SP свидетельствует о том, что стек полностью заполнен (его вершина "дошла" до начала
области стека). Поэтому для контроля за переполнением стека надо перед новой записью в стек проверять условие
SP=0 (сам ПК этого не делает). Для пустого стека значение SP должно равняться размеру стека, т.е. пара SS:SP должна указывать на байт, следующий за последним байтом области стека. Контроль за чтением из пустого стека, если
надо, обязана делать сама программа. Начальная установка регистров SS и SP может быть произведена в самой программе, однако в MASM предусмотрена возможность автоматической загрузки этих регистров.
3.5.5.1 Основные стековые команды
При соблюдении указанных требований в программе можно использовать команды, предназначенные для работы со
стеком. Основными из них являются следующие.
Запись слова в стек: PUSH op
Здесь op обозначает любой 16-битовый регистр (в том числе и сегментный) или адрес слова памяти. По этой команде значение регистра SP уменьшается на 2 (вычитание происходит по модулю 2^16), после чего указанное операндом слово записывается в стек по адресу SS:SP.
Чтение слова из стека: POP op
Слово, считанное из вершины стека, присваивается операнду op (регистру, в том числе сегментному, но не CS, или
слову памяти), после чего значение SP увеличивается на 2.
Переход с возвратом: CALL op
Эта команда записывает адрес следующей за ней команды в стек и затем делает переход по адресу, определяемому
операндом op. Она используется для переходов на подпрограммы с запоминанием в стеке адреса возврата. Имеются
следующие разновидности этой команды (они аналогичны вариантам команды безусловного перехода JMP):
- внутрисегментный относительный длинный переход (op - непосредственный операнд размером в слово, а в MASM
- это метка из текущего сегмента команд или имя близкой процедуры; в этом случае в стек заносится только текущее
значение счетчика команд IP, т.е. смещение следующей команды;
- внутрисегментный абсолютный косвенный переход (op - адрес слова памяти, в которой находится адрес (смещение) той команды, на которую и будет сделан переход); и здесь в стек записывается только смещение адреса возврата;
- межсегментный абсолютный прямой переход (op - непосредственный операнд вида seg:ofs, а в MASM - это FAR
PTR <метка> или имя дальней процедуры (см. ниже)); здесь в стек заносится текущие значение регистров CS и IP
(первым в стек записывается содержимое CS), т.е. абсолютный адрес возврата, после чего меняются регистры CS и IP;
- межсегментный абсолютный косвенный переход (op - адрес двойного слова, в котором находится пара seg:ofs,
задающая абсолютный адрес перехода); и здесь в стеке спасается содержимое регистров CS и IP.
Переход (возврат) по адресу из стека: RET op
Из стека считывается адрес и по нему производится переход. Если указан операнд (а это должно быть неотрицательное число), то после чтения адреса стек еще очищается на это число байтов (к SP добавляется это число). Команда
используется для возврата из подпрограммы по адресу, записанному в стек по команде CALL при вызове подпрограммы, и одновременной очистки стека от параметров, которые основная программа занесла в стек перед обращением к подпрограмме.
Команда RET имеет две разновидности (хотя в MASM они записываются одинаково): в одном случае из стека считывается только одно слово - смещение адреса возврата, а во втором - из стека считывается пара seg: ofs, указывающая абсолютный адрес возврата.
В ПК стек в основном используется для организации подпрограмм и прерываний. Однако даже если программе не
нужен стек, она все равно должна отвести под него место. Дело в том, что стеком будет неявно пользоваться операционная система при обработке прерываний, которые возникают (например, при нажатии клавиш на клавиатуре) в то
время, когда выполняется программа. Для нужд ОС рекомендуется выделять в стеке 64 байта.
3.5.6 Команда пересылки.
в ПК имеется 28 команд пересылки байтов и слов. В то же время в MASM все эти "родственные" команды записываются единообразно: например, все команды пересылки имеют одну и ту же символьную форму записи:
MOV op1,op2 (op1:=op2)
Анализируя типы операндов, ассемблер сам выбирает подходящую машинную команду.
Флаги эта команда не меняет.
3.5.7 Целочисленная арифметика.
Сложение
ADD op1, op2
op1 := op1+op2
Вычитание (subtract)
SUB op1,op2
op1 := op1-op2
Увеличение на 1 (increment): INC op
Уменьшение на 1 (decrement): DEC op
Умножение целых без знака (multiply): MUL op
AX := AL * op - для байтов
(DX,AX) := AX * op (для слов)
Деление целых без знака (divide): DIV op
AH := AX mod op, AL:= AX div op - деление слова на байт
3.6 Машинная графика
В растровом изображении каждому пикселю соответствует значение, задающее его цвет.
Каким образом числовое значение преобразуется в цвет?
Известно множество способов численного представления цветов. Система представления цветов называется цветовой моделью. Цветовые модели обычно разработаны так, чтобы использовать достоинства устройств отображения
конкретного типа.
В большинстве цветных мониторов для каждого пикселя используются три люминофора (красный, зелёный и синий) или три светоизлучателя. Настраивая яркости отдельных люминофоров, можно управлять цветом пикселя. Когда
яркость всех трёх люминофоров минимальна, пиксель выглядит чёрным. При максимальной яркости пиксель выглядит белым. Если активен только красный люминофор, пиксель выглядит красным. Когда активны только красный и
зелёный люминофоры, они комбинируются и образуют оттенки жёлтого цвета и т.д.
3.6.1 Цветовая модель RGB
Наиболее общепринятая цветовая модель, применяемая в компьютерных программах, известна как RGB (RedGreen-Blue – Красный-Зелёный-Синий). Модель RGB отражает работу компьютерных дисплеев. Цвета получаются
сложением трёх компонентов, которые представляют относительные яркости красного, зелёного и синего цветов.
Красный
Жёлтый
Пурпурный
Белый
Чёрный
Зелёный
Синий
Голубой
Диапазон цветов, которые могут быть представлены цветовой моделью, называются цветовым пространством. На
рисунке цветовым пространством RGB является куб, построенный на осях диаграммы.
При математическом описании цвета, значения компонентов часто представляют в виде действительных чисел,
нормированных относительно диапазона от 0,0 до 1,0. В программировании и форматах изображений в качестве значений компонентов почти всегда используют целые числа без знака. Диапазон значений для компонента цвета определяется точностью дискретизации (sample precision), которая равна количеству битов, используемых для представления цветового компонента. Для фотографических изображений чаще всего точность дискретизации равна 8 битам.
Тем не менее, общеупотребительны и значения 1,2,4,12 и 16 битов.
Целочисленные значения компонентов могут находиться в диапазоне от 0 до 2точность_дискретизации-1. Для перехода от
представления цвета нормированным действительным числом к представлению числом, его следует просто умножить
на 2точность_дискретизации-1.
В системе Windows точность дискретизации почти всегда равна 8 битам, поэтому ОС распознаёт 256 различных оттенков каждого основного цвета.
Другие системы могут использовать большую или меньшую точность дискретизации.
3.6.2 Полутоновая шкала
Некоторые устройства отображения, такие как лазерные принтеры, могут отображать цвета только в оттенках серого. Такие устройства относят к полутоновым устройствам. Оттенки серого могут быть представлены одним компонентом в диапазоне от 0 (чёрный цвет) до 2точность_дискретизации-1 (белый цвет). На рисунке видно, что оттенки серого цвета,
присутствующие в цветовой модели RGB, располагаются вдоль прямой, для которой R=G=B.
3.6.3 Цветовая модель YCbCr
Модель RGB не единственная используемая цветовая модель. Раньше в компьютерных системах широко применялась цветовая модель (HSB (Hue-Saturation-Brightness – Цветовой тон – насыщенность – яркость), которая до сих пор
используется в некоторых программах обработки изображений.
Изображения в формате JPEG почти всегда сохраняются с использованием трёхкомпонентного цветового пространства, известного как YCbCr. Компонент Y, или яркость (luminance) представляет яркость изображения. Компоненты
Cb и Cr определяют цветность (chrominance). Значение Cb задаёт синеву (blueess) изображения, а значение Cr задаёт
его красноту (redness).
Цветовая модель YCbCr подобна цветовой модели, используемой в телевизионных приёмниках, что обеспечивает
совместимость цветных изображений с чёрно-белыми телевизорами. В цветовой модели YCbCr компонент Y сам по
себе является полутоновым представлением цветного изображения.
Соотношение между YCbCr и RGB, используемое в формате JPEG описывается несложными уравнениями.
В отличие от цветовой модели RGB, где все компоненты примерно равнозначны, цветовая модель YCbCr концентрирует наиболее важную информацию в компоненте Y. Это позволяет добиться большего сжатия путём включения
большего объёма данных по компоненту Y, чем компонентам Cb и Cr.
3.6.4 Цветовая модель CMYK
Ещё одной известной цветовой моделью является четырёхкомпонентная модель CMYK (Cyan, magenta, yellow, black
– Голубой, пурпурный, жёлтый, чёрный). Она часто используется в цветной печати. Большинство печатных работ выполняется на белой бумаге с помощью типографской краски, добавляемой для создания более тёмных цветов. Такой
способ получения цвета противоположен методу формирования цвета на компьютерном мониторе. Цветовое пространство CMYK соответствует модели печати. Компоненты представляют четыре краски, обычно употребляемые в
цветной печати.
Цветовые модели, которые мы рассматривали до сих пор, относятся к аддитивным моделям. Это означает, что компоненты добавляют цвет в изображение. Чем выше значение компонента, тем ближе цвет к белому. Однако в модели
CMYK большие значения компонентов представляют цвета, более близкие к чёрному цвету. Такие модели известны
как субстрактивные. Голубой, пурпурный и жёлтый цвета служат дополнениями для красного, синего и зелёного цветов. Чисто голубая поверхность поглощает весь красный цвет, направленный на неё. Если комбинировать жёлтую и
пурпурную краски, они поглощают зелёный и синий свет, что приводит к красному цвету. При комбинировании голубой, пурпурной и жёлтой красок поглощается весь свет, что приводит к чёрному цвету – по крайней мере, теоретически.
На практике, при комбинировании голубой, пурпурной и жёлтой красок на листе белой бумаги не создаётся чистый
чёрный цвет. Но даже если вы сможете получить хороший оттенок, это потребует втрое больше краски, по сравнению
с использованием одного чёрного цвета. А поскольку большинство печатных работ выполняется в чёрном цвете, для
создания чёрного цвета и оттенков серого предпочтительно использовать чёрную краску.
Взаимосвязь между моделями CMYK и RGB можно выразить через уравнения. Но взаимно однозначного соответствия нет – на одно и то же значение RGB отображается множество значений CMYK.
3.6.5 Сравнение BMP, JPG, PNG и GIF
Форматы хранения изображений.
3.6.5.1 Windows BMP - простейший формат. Встроен в MS Windows. Поддерживает изображения с 1, 4, 8, 16, 24 и 32
битами на пиксель, хотя с 16 и 32 используются редко. Для изображений с 4 и 8 битами на пиксель поддерживается
простое сжатие, эффективное только при наличии больших областей одинакового цвета.
3.6.5.2 GIF 89a(Graphics Interchange Format – формат графического обмена) – использует метод сжатия LZW – эффективен для областей одного цвета, поддержка до 256 цветов, для описания которых применяется от 1 до 8 бит на пиксель, хранение в одном файле нескольких изображений, анимация, юридические препятствия (небесплатен). Был самым распространённым форматом.
3.6.5.3 PNG (Portable Network Graphics – Переносимая сетевая графика) - новый формат, использует сжатие без потерь, до 48 битов на пиксель, 1-,2-,4-,8- и 16-битовая точность дискретизации, альфа-канал для полного управления
прозрачностью, совершенное цветовое соответствие.
3.6.5.4 JPEG (Joint Photographic Expert Group – Объединённый комитет экспертов по обработке фотоизображений) –
самый распространённый формат, лучшее сжатие, кроме изображений, где много областей с одинаковым цветом, сжатие с потерями, самый сложный.
3.6.6 Отсечение отрезков
3.6.6.1 Алгоритм Сазерлэнда-Коэна
Алгоритм Сазерлэнда-Коэна осуществляет отсечение отрезка относительно прямоугольника со сторонами, параллельными координатным осям.
Пронумеруем стороны прямоугольника так, как это показано на рис.1, и классифицируем все точки в зависимости от
их положения по отношению к отсекающим прямым 1, 2, 3, 4. Для этого сопоставим каждой области, на которые разбивают плоскость прямые, 4-битный код.
Рис. 1 Алгоритм Сазерлэнда-Коэна.
Установим эти биты следующим образом:
0 бит если точка лежит левее прямой 1 (x < xлево)
1 бит если точка лежит ниже прямой 2 (y < yниз)
2 бит если точка лежит правее прямой 3 (x > xправо)
3 бит если точка лежит выше прямой 4 (y > yверх)
Тогда для отрезка AB на рис 1. будем иметь: код точки A = 0011, код точки B = 0100.
Пусть A - код точки-начала отрезка, B - код точки-конца отрезка. Рассмотрим три возможных случая.
1.
A = B = 0000. Этот случай означает, что обе точки лежат внутри прямоугольника (т. е. отсечение не требуется).
2.
. В этом случае точки лежат по одну сторону от какой-либо отсекающей линии (с внешней
ее стороны). Следовательно, отрезок полностью лежит вне окна.
Если не выполнены условия 1 или 2, то необходимо находить точки пересечения с некоторыми из отсекающих прямых (для прямых, которые пересекает AB, соответствующий бит в A xor B установлен в 1). Для этого
разобьем отрезок найденными точками пересечения и затем применим тот же анализ кодов концов для полученных подотрезков.
3.
Алгоритм Сазерлэнда-Коэна может быть обобщен на случай отсечения отрезка параллелепипедом в трехмерном пространстве. В этом случае код, конечно, уже будет длины 6 (по числу отсекающих граней).
3.6.6.2 Алгоритм средней точки
Алгоритм решает ту же задачу: отсечение отрезка относительно прямоугольника. Случаи, в которых отрезок лежит
целиком снаружи или внутри окна, выявим методом, изложенным в алгоритме Сазерлэнда-Коэна.
В общем случае возьмем среднюю точку нашего отрезка AB (обозначим ее C1) и применим к отрезкам AC1 и C1B этот
алгоритм рекурсивно. Следующие средние точки отрезков AC1 и C1B обозначим C2 и C3 соответственно, см. рис 2.
И так далее, пока размер оставшихся отрезков не станет меньше размера пикселя.
В примере на рис 2. после второй итерации отрезок AC2 будет отсечен, и для него дальнейшее половинное деление
производиться не будет; C1C3 лежит целиком внутри области отсечения, он будет нарисован, и для него дальнейшее
половинное деление также производиться не будет. Остальные части будем делить дальше.
Рис. 2. Алгоритм средней точки
Отсечь( отрезок AB )
{
if( длина AB меньше размера пикселя ) return;
if( AB лежит вне отсекающего прямоугольника ) return;
if( AB лежит внутри отсекающего прямоугольника )
{
Отобразить AB;
return;
}
Отсечь (A, (A+B)/2);
Отсечь ((A+B)/2),B);
}
Алгоритм средней точки прост, но не очень эффективен на практике, так как требует большой глубины рекурсии. В
большинстве случаев алгоритм Сазерлэнда-Коэна предпочтительнее. Прием с делением отрезка пополам может оказаться эффективным при отсечении относительно сложной непрямоугольной области, для которой проверить принадлежность точки к окну существенно проще, чем найти пересечение отрезка с границей.
Алгоритм средней точки также обобщается на случай трехмерного пространства тривиальным образом.
3.6.6.3 Алгоритм Цируса-Бека
Алгоритм Цируса-Бека отсекает отрезок P1P2, используя его параметрическое представление:
(5.1)
Данный алгоритм применим не только в случае отсечения прямоугольником со сторонами, параллельными осям координат, но и в случае, если отсекаемая область ограничена любым выпуклым многоугольником.
Рассмотрим отдельно ребро Ei отсекающего многоугольника. Нормаль к нему ориентируем во внешнюю сторону отсекающего многоугольника, для этого удобно считать, что точки отсекающего контура обходятся против часовой
стрелки; тогда если ребро - это
, то нормаль NEi будет пропорциональна (yEi2-yEi1, xEi1- xEi2), см.рис 3
Тогда область, отсекаемая прямой, на которой лежит ребро (обозначим ее Li), соответствует точкам P, для которых
((P-PEi),NEi) > 0, где PEi - любая точка на ребре Ei. Точка пересечения прямой, на которой лежит отрезок с отсекающей
прямой Li, находится из уравнения
((Ps(t) - PEi),NEi) = 0.
Разрешая его, получаем, что
(5.2)
в том случае, если
. Если же ((P2 - P1),NEi) = 0 это означает, что отсекаемый отрезок параллелен Li и не существует единственной точки их пересечения. Такие случаи алгоритм игнорирует.
Рис. 3. Пересечение отрезка с ребром.
Для алгоритма Цируса-Бека также важно в каком направлении (внутрь отсекающего многоугольника или из него)
проходит точка при движении по отрезку от P1 к P2, т.е. при изменении t от 0 до 1. Это определяется знаком ((P2 P1),NEi). Будем обозначать такие точки пересечения как:
Потенциально входящие (ПВх):
((P2 - P1),NEi) < 0
Потенциально выходящие (ПВых): ((P2 - P1,NEi) > 0
После того как рассчитаны координаты t для всех возможных пересечений с прямыми Li, следует выбрать максимальную координату из потенциально входящих пересечений tВхMax и минимальную из потенциально выходящих tВыхMin.
Если прямая, на которой лежит отрезок P1P2, пересекает отсекающий многоугольник, то tВхMax < tВыхMin. В этом случае,
если пересечение
непусто, то Ps(t1)Ps(t2) будет искомым отсеченным
отрезком. В противном случае отрезок полностью лежит вне отсекаемой области.
Рис. 4. Возможные случаи пересечений в алгоритме Цируса-Бека.
Вычислить NEi и взять PEi = PEi1 для каждого ребра.
Отсечь(отрезок P1P2)
{
if(P1 == P2)
отсечь как точку;
else
{
D = P2 - P1;
t_Вх = 0;
t_Вых = 1;
foreach( ребро Ei из отсекающего многоугольника )
{
dp = (D,NEi);
if( dp != 0 ) // случай dp == 0 игнорируется
{
if( dp < 0 )
{
if( t > t_Вх )
t_Вх = t;
}
else // dp > 0
{
if( t < t_Вых )
t_Вых = t;
}
}
}
if( t_Вх < t_Вых )
return отрезок Ps(t_Вх)Ps(t_Вых);
else
return ø
}
}
Алгоритм Цируса-Бека также может быть обобщен до случая отсечения отрезка произвольным выпуклым многогранником в трехмерном пространстве.
3.6.6.4 Алгоритм Лианга-Барского
Алгоритм Лианга-Барского является более эффективным вариантом алгоритма Цируса-Бека в случае, если отсекающий многоугольник - это прямоугольник со сторонами, параллельными осям координат. В этом случае вычисление
промежуточных величин упрощается (P1 = (x1, y1),P2 = (x2, y2)):
Ребро NEi
PEi
((P2 - P1),NEi)
левое: (-1, 0) (xлево, yверх) x1 - x2
t
x = xлево
нижнее: (0,-1) (xлево, yниз)
y1 - y2
y = yниз
правое: (1, 0) (xправо, yниз) x2 - x1
x = xправо
верхнее: (0, 1) (xправо, yверх) y2 - y1
y = yверх
// (xлево, yниз, xправо, yверх) - отсекающий прямоугольник;
Отсечь(отрезок P1P2)
{
dx = P2.x - P1.x;
dy = P2.y - P1.y;
if( dx == 0 AND dy == 0 )
отсечь как точку;
else
{
t_Вх = 0;
t_Вых = 1;
// Отсечь_t может модифицировать t_Вх и t_Вых
// (& означает передачу по адресу)
if( Отсечь_t( dx, xлево - P1.x, &t_Вх, &t_Вых ) )
if( Отсечь_t( -dx, P1.x - xправо, &t_Вх, &t_Вых ) )
if( Отсечь_t( dy, yниз - P1.y, &t_Вх, &t_Вых ) )
if( Отсечь_t( -dy, P1.y - yверх, &t_Вх, &t_Вых ) )
{
if( t_Вх > 0 )
{
P1.x = P1.x + dx*t_Вх;
P1.y = P1.y + dy*t_Вх;
}
if( t_Вых < 1 )
{
P2.x = P1.x + dx*t_Вых;
P2.y = P1.y + dy*t_Вых;
}
return отрезок P1P2;
}
return ø
}
}
// Проверить пересечение с ребром
// denom, num - 'знаменатель' и 'числитель' выражения (5.2)
// t_Вх и t_Вых передаются по адресу (обозначено *),
// они могут быть модифицированы;
// возвращает логическую переменную:
// true - продолжать отcечение
// false - закончить отcечение,
// отрезок полностью вне прямоугольника
bool Отсечь_t( denom, num, *t_Вх, *t_Вых )
{
if( denom > 0 ) // Потенциально входящее пересечение
{
t = num / denom;
if( t > t_Вых )
// t_ВхMax > t_ВыхMin: отрезок полностью снаружи
return false;
else if( t > t_Вх ) // Модифицируем t_Вх
t_Вх = t;
}
else if( denom < 0 ) // Потенциально выходящее пересечение
{
t = num / denom;
if( t < t_Вх )
// t_ВхMax > t_ВыхMin: отрезок полностью снаружи
return false;
else if( t < t_Вых ) // Модифицируем t_Вых
t_Вых = t;
}
else if( num > 0 )
// отрезок параллелен ребру и полностью снаружи
return false;
return true;
}
Эксперименты, проведенные авторами на случайных наборах данных, показали, что их алгоритм на 25-62% быстрее
алгоритма Сазерлэнда-Коэна. Поэтому в настоящее время алгоритм Лианга-Барского получил большее распространение.
3.6.6.5. Отсечение многоугольников
Рассмотрим теперь задачу отсечения многоугольника относительно прямоугольника и алгоритм СазерлэндаХоджмана , позволяющий проводить такое отсечение.
Ключевым моментом в этом алгоритме является сведение задачи отсечения прямоугольником к задаче отсечения полуплоскостями. Действительно, прямоугольник представляется в виде пересечения четырех полуплоскостей (по сути,
этим же представлением мы пользовались и в алгоритме Сазерлэнда-Коэна). Поэтому достаточно поочередно отсечь
части многоугольника, лежащие вне каждой полуплоскости.
Пусть многоугольник задан своими вершинами: P1P2 . . . PN.
ленные ребра этого многоугольника.
Относительно произвольной полуплоскости
положениях:
- направ-
каждое направленное ребро
1.
целиком внутри полуплоскости:
2.
целиком вне полуплоскости:
,
;
3.
выходить из полуплоскости:
,
;
,
;
может находиться в следующих
4.
входить в полуплоскость:
,
.
Следующий алгоритм выводит в качестве результата вершины отсеченного многоугольника, обходя исходные вершины.
Отсечь P[1]...P[N] относительно полуплоскости
{
//L - граница полуплоскости
for( i = 1; i <= N; i++ )
{
j = i+1;
if( j == N+1 )
j = 1;
if( P[i]P[j] пересекает L )
{
I = пересечение( P[i]P[j], L );
вывести(I);
}
if( P[j]видима )
вывести(P[j]);
}
}
Данный алгоритм выводит вершины отсеченного многоугольника в порядке обхода. Пример работы алгоритма Сазерлэнда-Ходжмана приведен на рис 5
После проведения отсечения четырьмя полуплоскостями получается многоугольник, отсеченный относительно прямоугольника. Заметим, что данный алгоритм очевидным образом применим для отсечения любого выпуклого многоугольного окна - достаточно представить это окно в виде пересечений полуплоскостей.
Рис. 5. Работа алгоритма Сазерлэнда-Ходжмана.
Рис. 6.
Практически единственным недостатком алгоритма Сазерлэнда-Ходжмана является не совсем корректная обработка
случаев, когда результатом отсечения являются несколько изолированных многоугольников. Результат алгоритма Сазерлэнда-Ходжмана в этом случае содержит многоугольники и связывающие их отрезки (рис.6).
РАЗДЕЛ 4. Словарь терминов (глоссарий).
Понятие алгоритма
Алгоритм
Тип переменной
Состояние на множестве переменных {vi|i=1,k}
Вычислительным процессом, порожденным алгоритмом
Состояние вычислительного процесса, порожденного алгоритмом
А
Терминальное состояние
Результат
Действие
Сложность алгоритма
Выигрышная стратегия
Конструктивный объект
точное предписание о порядке выполнения действий, из заданного фиксированного множества, для решения всех задач заданного класса
множество возможных ее значений.
набор значений этих переменных
называется последовательность шагов алгоритма, пройденных при исполнении
этого алгоритма.
называется состояние на множестве переменных ({vi|i=1,k}), где {vi|i=1,k} набор всех переменных, используемых в алгоритме А
называется состояние вычислительного процесса, на множестве значений которого выполняется определенное условие - правило окончания алгоритма
это определенная совокупность значений из терминального состояния вычислительного процесса алгоритма.
переход из одного состояния в другое
Количество
действий
в
вычислительном процессе этого алгоритма
это набор правил, следуя которым один из игроков обязательно выигрывает.
это такая сущность, которая может быть построена из некоторых элементарных, базовых объектов с помощью конечного числа применений операций из
определенного множества операций.
Классификация алгоритмов, их сложность и их использование для решения задач
Параллельная композиция
Тезис Тьюринга
Параллельной композицией A||B называется такой Алгоритм, для которого неважен порядок применения (выполнения) A и B.
Для любой интуитивно вычислимой функции существует МТ, ее вычисляющая.
Тезис Маркова
Для любой интуитивно вычислимой функции существует НАМ, ее вычисляющий.
Самоприменимый алгоритм
Алгоритм самоприменим, если он может быть применен к слову, представляющему его
описание.
Теорема
мости
Распознание самоприменимости неразрешимо.
самопримени-
Языки программирования и структуры данных
Абстрактные структуры
данных
Структуры данных хранения
Линейное
отношение
порядка
Частично упорядоченное
множество
Математическая абстракция для описания данных, используемых в формулировке задачи
Строка
Граф
Степень вершины
Дерево
Конечное множество символов с отношением линейного порядка, определяющим следование символов в строке.
G=(X,U) где X - множество, а U - отношение порядка на X.
Число дуг входящих и исходящих из этой вершины (инцидентных данной вершине).
Связный ациклический (без циклов) граф.
Высота дерева
Самый длинный путь в дереве из корня к листу.
K-ичное дерево
Дерево называется K-ичным если все внутренние вершины в нем имеют степень исхода
K
Упорядоченное множество пар (ключ,тело).
Таблица
Структуры данных, с которыми умеет работать исполнитель алгоритмов, которые есть в
используемом языке программирования
Отношение порядка называется линейным, если оно определено для любых a и b из M
Множество называется частично упорядоченным, если на нем зафиксирован некоторый
порядок.
Архитектура ЭВМ и язык ассемблера
Система счисления
Знаковая система, в которой числа записываются по определенным правилам с помощью
Основание
системы
счисления
Регистры
Внешние устройства
Флаг
Стек
Машинная графика
Цветовое пространство
Точность дискретизации
символов некоторого алфавита, называемых цифрами
Количество цифр и символов, применяющихся для изображения числа
Ячейки, расположенные в центральном процессоре и доступные из машинных программ
Устройства, которые отличаются от процессора и памяти
Бит, принимающий значение 1 («флаг установлен»), если выполнено некоторое условие,
и значение 0 («флаг сброшен») в противном случае
областью памяти, доступ к элементам которой осуществляется по принципу "последним
записан - первым считан"
Диапазон цветов, которые могут быть представлены цветовой моделью.
Количество битов, используемых для представления цветового компонента
РАЗДЕЛ 5. Практикум по решению задач по темам лекций.
Алгоритмы и алгоритмические системы
п.1 Пакетные файлы
1. Создать пакетный файл, который создаёт директорию, копирует в неё файл calc.exe, переименовывает его и запускает.
2. Создать пакетный файл, который создаёт директорию, копирует в неё файл calc.exe, переименовывает его и запускает. Имя директории и новое имя файла должно вводиться с помощью параметров.
3. Создать пакетный файл, который производит архивацию файлов с определённым расширением с максимальным сжатием. Расширение файлов передаётся в качестве параметра.
Архитектура ЭВМ
п.1. Двоичная и шестнадцатеричная системы. Перевод из одной системы в другую.
1. Перевести число из десятичной системы в двоичную.
2. Перевести число из двоичной системы в десятичную.
3. Перевести число из двоичной системы в шестнадцатеричную с помощью таблицы.
4. Перевести число из шестнадцатеричной системы в двоичную с помощью таблицы.
п.2. Представление отрицательных чисел с помощью дополнительного кода. Знаковые и беззнаковые числа.
1. Получить отрицательное число из положительного.
2. Получить положительное число из отрицательного.
3. Интерпретировать отрицательное число, как беззнаковое.
п.3. Сложение двоичных чисел и побитовые операции.
1. Сложить два положительных числа.
2. Представить вычитание двух чисел, как сложение положительного и отрицательного числа.
3. Операция ~ (not), её отличия от перевода в дополнительный код.
4. Операция | (or), вычисление выражения, содержащего данную операцию.
5. Операция & (and) , вычисление выражения, содержащего данную операцию.
6. Операция ^(xor), её отличие от сложения, вычисление выражения, содержащего данную
операцию.
7. Вычисление выражения, содержащего несколько вышеуказанных операций.
п.4. Язык Ассемблера.
1. Написать программу, выводящую имя и фамилию на русском и английском языке. Символы ввести в шестнадцатеричном виде с помощью таблицы ASCII.
2. Написать программу, преобразующую маленькие латинские буквы в большие.
3. Написать программу, преобразующую маленькие русские буквы в большие.
4. Написать программу, принимающую символы, вводимые с консоли и выводящую их на
консоль.
5. Написать программу, принимающую с консоли символы на английском и русском языках,
преобразующую все маленькие буквы в большие и выводящую их на консоль.
6. Написать программу, обеспечивающую ввод целых чисел от 0 до 999 с консоли.
7. Написать программу, обеспечивающую вывод целых чисел от 0 до 999 на консоль.
РАЗДЕЛ 6. Изменения в рабочей программе, которые произошли после утверждения программы.
Характер изменений в программе
Номер и дата протокола заседания кафедры,
на котором было принято данное решение
Подпись заведующего
кафедрой, утверждающего внесенное изменение
Подпись декана факультета
(проректора по учебной
работе), утверждающего
данное изменение
РАЗДЕЛ 7. Учебные занятия по дисциплине ведут:
Ф.И.О., ученое звание
и степень преподавателя
Попов С.Г.
Учебный
год
Факультет
Специальность
2010-2011
ФМОИП
010501 – Прикладная математика и информатика
Download