- •1.Технология программирования. Основные понятия и подходы 8
- •Технология программирования. Основные понятия и подходы
- •1.1. Технология программирования и основные этапы ее развития
- •1.2. Жизненный цикл и этапы разработки программного обеспечения
- •Контрольные вопросы
- •2.Разработкаструктуры программы и модульное программирование
- •2.1. Цель модульного программирования
- •2.2. Основные характеристики программного модуля
- •2.3. Методы разработки структуры программы
- •Контрольные вопросы
- •3.Тестирование и отладка программного средСтВа
- •3.1. Принципы и виды отладки программного средства
- •3.2. Заповеди отладки программного средства
- •3.3. Автономная отладка программного средства
- •3.3. Комплексная отладка программного средства
- •Контрольные вопросы
- •4. Обеспечение качества программного средства
- •4.1. Общая характеристика процесса обеспечения качества программного средства
- •4.2. Обеспечение легкости применения программного средства
- •4.3. Обеспечение эффективности программного средства
- •4.4. Обеспечение сопровождаемости программного средства
- •Контрольные вопросы
- •5. Документирование программных средств составление программной документации
- •5.1. Виды программных документов
- •5.2. Пояснительная записка
- •5.3. Руководство пользователя
- •5.4. Руководство системного программиста
- •5.5. Основные правила оформления программной документации
- •Контрольные вопросы
- •6. Объектный подход к разработке программных средств
- •6.1. Объекты и отношения в программировании. Сущность объектного подхода к разработке программных средств
- •6.2. Особенности объектного подхода к разработке внешнего описания программного средства
- •6.3. Особенности объектного подхода на этапе конструирования программного средства
- •Контрольные вопросы
- •7. Постановка и алгоритмизация задач
- •7.1. Понятие алгоритма
- •7.2. Способы описания алгоритмов
- •Условные обозначения блоков
- •7.3. Структурные схемы алгоритмов
- •Контрольные вопросы
- •8. Основы языка
- •8.1. Алфавит языка
- •8.2. Структура программы
- •Контрольные вопросы
- •9. Типы данных
- •9.1. Целые типы
- •9.2. Вещественные типы
- •9.3. Логический тип
- •9.4. Символьный тип
- •9.5. Выражения
- •Арифметические операции
- •Операция отрицания
- •Операции конъюнкция, дизъюнкция, «исключающее» или
- •Приоритет операций
- •9.6. Константы
- •9.7. Совместимость типов данных
- •Контрольные вопросы
- •10. Линейные алгоритмы
- •10.1. Пустой и составной операторы
- •10.2. Оператор присваивания
- •10.3. Простейший ввод и вывод
- •Контрольные вопросы
- •11. Разветвляющиеся алгоритмы
- •11.1. Оператор перехода
- •11.2. Условный оператор
- •11.3. Оператор выбора
- •Контрольные вопросы
- •12. Циклические алгоритмы
- •12.1. Циклы с параметром
- •12.2. Циклы с условием
- •Контрольные вопросы
- •13. Пользовательские типы данных
- •13.1. Перечисляемый тип
- •13.2. Тип - диапазон
- •13.3. Массивы
- •13.4. Записи
- •13.5. Множества
- •Контрольные вопросы
- •14. Работа со строками
- •Контрольные вопросы
- •15. Процедуры и функции
- •15.1. Параметры-значения
- •15.2. Параметры-переменные
- •15.3. Параметры-константы
- •15.4. Открытые параметры-массивы
- •15.5. Бестиповые параметры
- •15.6. Процедурные типы
- •15.7. Рекурсия
- •Контрольные вопросы
- •16. Типизированные константы
- •Контрольные вопросы
- •17. Модули
- •Interface
- •Implementation
- •Interface
- •18.2. Поиск с барьером
- •83.3. Двоичный (бинарный) поиск
- •Контрольные вопросы
- •19. Алгоритмы сортировки
- •19.1. Сортировка выбором
- •19.2.Сортировка обменом (методом «пузырька»)
- •19.3. Сортировка включением
- •Контрольные вопросы
- •20. Файлы
- •20.1. Текстовые файлы
- •20.2. Компонентные файлы
- •20.3. Бестиповые файлы
- •20.4. Последовательный и прямой доступ
- •Контрольные вопросы
- •21.Программирование с использованием динамической памяти
- •21.1. Указатели и операции над ними
- •21.2. Процедуры и функции, работающие с указателями
- •Контрольные вопросы
- •22. Модуль crt (основные возможности)
- •Контрольные вопросы
- •22. Модуль graph (основные возможности)
- •22.1. Базовые процедуры и функции
- •22.2. Экран и окно в графическом режиме
- •22.3. Вывод точки
- •22.4. Вывод линии
- •22.5. Построение прямоугольников
- •22.6. Построение многоугольников
- •22.7. Построение дуг и окружностей
- •22.8. Работа с текстом
- •Контрольные вопросы
- •Заключение
- •Библиографический список
Контрольные вопросы
Сформулируйте понятие файлового типа.
Перечислите виды файлов.
Охарактеризуйте текстовые файлы.
Охарактеризуйте компонентные файлы.
Охарактеризуйте бестиповые файлы.
21.Программирование с использованием динамической памяти
Переменные, распределение памяти под которые выделяется автоматически, называются статическими. Под эту категорию попадают все переменные, объявленные в области описания программных блоков. Однако Borland Pascal дает возможность создавать новые переменные во время работы программы и уничтожать их, когда надобность пропадает.
Переменные, созданием и уничтожением которых может явно управлять программист, называются динамическими.
21.1. Указатели и операции над ними
Наименьшей адресуемой единицей памяти компьютера, построенного на базе микропроцессоров фирмы Intel и их аналогов, является байт. Таким образом, память представляет собой последовательность нумерованных байтов. Для обращения к конкретному байту необходимо знать его номер, который называется его физическим адресом.
Память принято делить на слова (2 байта), двойные слова (4 байта) и параграфы (16 байт).
При работе с памятью используется адресация по схеме «база + смещение» (рис.21.1). При этом адрес конкретного байта М определяется как адрес некоторого заданного байта Аб (адрес базы) + расстояние до требуемого байта Асм (смещение).
Рис.21.1. Адресация по схеме «база + смещение»
В микропроцессорах фирмы Intel в качестве адреса базы используют адреса, кратные 16. Четыре последних бита такого адреса равны 0, и их не хранят, а аппаратно добавляют при вычислении физического адреса.
Непрерывный участок памяти, имеющий длину не более 64 Кб и начинающийся с адреса, кратного 16, называется сегментом. Адрес начала сегмента принимают за базу для всего сегмента.
Сегментный адрес и смещение имеют размер по 16 бит (слово). Физический адрес, получаемый при их сложении с учетом отброшенных четырех бит, имеет размер 20 бит и может адресовать память объемом 220байт или 1 Мб (рис. 21.2.).
Рис.21.2. Получение физического адреса
Максимальное смещение равно 216-1, что соответствует 64 Кб памяти. Таким образом, относительно одной базы можно адресовать не более 64 Кб памяти, что ограничивает размер сегмента.
Программа и данные хранятся в памяти фрагментами, каждый из которых расположен в своем сегменте. Различают 3 вида сегментов: кодов (хранится собственно программа), данных (размещаются глобальные переменные и константы), стека (при вызове подпрограмм в стек записывается адрес возврата, в нем размещаются локальные переменные, копии параметров–значений, адреса параметров–переменных и т.п.).
В процессе работы сегментные адреса хранятся в специальных сегментных регистрах:
CS – адрес базы сегментов кодов;
DS – адрес базы сегментов данных;
SS – адрес базы сегмента стека.
Доступ к конкретным участкам сегмента осуществляется через соответствующие смещения.
Для работы с адресами используется специальный тип данных – указатель. Различают указатели двух типов: типизированные и нетипизированные. Типизированные содержат адреса, по которым в памяти размещаются данные определенных типов. Используя эти указатели с данными указанных типов, можно выполнить операции, предусмотренные базовым типом.
Например:
type tpi = ^integer; {объявляем тип «указатель на целое»}
var p : tpi; {объявляем переменную этого типа}
Или
var p: ^integer;
Нетипизированные указатели хранят просто адреса, которые не связаны с данными конкретных типов. Для их объявления используют зарезервированное слово pointer. Например:
var p: pointer; …
Над значениями указателей возможны следующие операции (рис. 21.3):
присваивание. При выполнении этой операции указателю присваивается значение другого указателя или nil.
Например:
var p1 , p2 : ^integer;
p3 : ^real;
p : pointer;
…
{допустимые операции}
p1:=p2; p:= p3; p1:=p; p1:=nil; p:= nil;
{недопустимые операции}
p3:=p2; p1:=p3; …
получение адреса. Операция получения адреса – одноместная, ее операнд может иметь любой тип, результатом является типизированный (в соответствии с типом операнда) указатель, содержащий адрес объекта–операнда.
Например:
var i: integer;
p: ^integer;
p:=@i; {указатель p будет содержать адрес переменной i}
доступ к данным по указателю (операция разыменования). Чтобы получить доступ к переменной по указателю, необходимо после переменной–типизированного указателя поставить знак «^». Полученное значение имеет тип, совпадающий с базовым типом указателя. Нетипизированные указатели разыменовать нельзя.
Например:
J:=p^; {переменной j присваивается значение целого, расположенного по адресу p}
операции отношения. Из всех возможных операций отношения допускаются проверки равенства(=) и неравенства (< >).
Рис.21.3. Операции с указателями.