- •Лекция 1 Создание консольного приложения
- •2. Консоль. Построение консольного проекта
- •3. Запуск приложения
- •4. Сохранение и редактирование проекта
- •Лекция 2
- •4. Функции форматированного ввода и вывода
- •4.1. Функция форматированного ввода с клавиатуры
- •4.2. Функция форматированного вывода на экран
- •5. Математические функции
- •Лекция 3 Линейные вычислительные процессы
- •1. Алгоритм. Управляющие структуры
- •2. Линейные вычислительные алгоритмы
- •Лекция 4 Разветвляющиеся вычислительные процессы
- •1. Управляющая структура «развилка». Логические операции и операции отношения
- •2.1. Условный оператор if()
- •2.2. Условное выражение
- •2.3. Оператор выбора switch()
- •Лекция 5 Программирование разветвляющихся вычислительных процессов
- •Лекция 6 Циклические вычислительные процессы.
- •1. Типы циклов
- •3. Операторы безусловного перехода
- •Лекция 7 Вычисление последовательностей
- •4. Примеры вычисления последовательностей
- •5. Структура алгоритмов вычисления рекуррентных последовательностей
- •Лекция 8 Одномерные массивы
- •1. Массивы
- •1.1. Примеры программ обработки одномерных массивов
- •Лекция 9 Алгоритмы сортировки одномерных массивов
- •1. Сортировка одномерных массивов
- •1.1. Метод пузырька (метод обменной сортировкой с выбором)
- •1.2. Сортировка выбором
- •1.3. Сортировка простыми вставками
- •Лекция 10 Двухмерные массивы
- •1. Двухмерные массивы
- •Лекция 11 Алгоритмы матричной алгебры
- •1. Алгоритмы матричной алгебры
- •Лекция 12 Динамические массивы
- •1. Память компьютера. Адресное пространство
- •2. Динамическая память
- •3. Адреса и указатели
- •4. Указатели и массивы. Динамические массивы
- •5. Проблемы, связанные с указателями
- •6. Поразрядные операции
- •Лекция 13
- •1.2. Способы объявления и обращения к элементам двухмерных массивов
- •Лекция 14 Символы и строки
- •1. Символьный тип данных
- •2. Строки
- •Лекция 15 Структуры
- •1. Понятие структуры
- •2. Определение нового имени типа
- •3. Массивы структур. Указатели на структуры
- •3.1. Определение статического массива структур
- •3.1. Определение динамического массива из n структур
- •Лекция 16 Файлы
- •1. Потоковый ввод-вывод данных
- •3. Понятие файла. Функции работы с файлами
- •Лекция 17 Файлы
- •Лекция 18 Функции пользователя
- •I. Приёмы построения алгоритмов
- •2. Понятие функции
- •2.1. Определение функции
- •2.2. Область видимости переменных
- •2.3. Параметры функции
- •2.4. Описание функции
- •2.5. Организация вызова функции
- •2.5. Передача параметров в функцию
- •Лекция 19 Многофайловые программы
- •1. Создание многофайловой программы. Создание и добавление головного файла в проект
- •3. Рекурсия
- •Лекция 20 Нахождение приближенного значения корня нелинейного уравнения
- •На отрезке [a;b] с заданной точностью eps
- •1.1. Метод дихотомии (половинного деления)
- •1.2. Метод хорд
- •1.3. Метод касательных (Ньютона)
- •Лекция 21 Нахождение приближенного значения определенного интеграла
- •1. Нахождение приближенного значения определенного интеграла с заданной точностью
- •Лекция 22 Объектно-ориентированное программирование
- •Полиморфизм – это свойство класса, позволяющее определить одно и то же по имени, но разное по смыслу действие. Основные этапы ооп:
- •Уточнённое имя принадлежит классу (т.Е. Компонентной) функции
- •Лекция 23 Объектно-ориентированное программирование
- •1. Конструкторы и деструкторы
- •Лекция 24 Объектно-ориентированное программирование
- •1. Компонентные данные и компонентные функции
- •1.1. Компонентные данные
- •1.2. Определение компонентных функций
- •Лекция 25 Объектно-ориентированное программирование
- •1. Свойства классов
- •1.1. Наследование классов
- •1.2. Полиморфизм
- •Библиографический список
Лекция 12 Динамические массивы
Цели:
получить представление о понятиях: «память», «адрес» и об адресном пространстве компьютера;
получить представление о динамической памяти;
познакомиться с определением указателя, динамического массива и функциями работы с динамической памятью;
получить представление о поразрядных (побитовых) операциях.
1. Память компьютера. Адресное пространство
Память компьютера разбивается на две части: оперативная и внешняя. Внешняя память предназначается для долговременного хранения информации на каком-либо носителе: жестком диске, дискете, компакт-дисках и т.п. Внешняя память компьютера энергонезависима, т.е. при отключении компьютера от электропитания информация с внешних носителей не исчезает. Оперативная память (ОП), наоборот энергозависима, т.е. для сохранения информации требуется постоянное электропитание. Вся ОП разбивается на ячейки одинакового размера, в которых хранится информация. Каждой ячейке поставлено в соответствие конкретное число, называемое адресом ячейки ОП. Особая роль ОП объясняется тем, что процессор может выполнять команды программы только в том случае, когда они загружены в ОП. Кроме того, в ОП загружаются не только инструкции программы, но и ее данные (переменные). Для распознавания переменных и команд приложения на разных этапах его жизненного цикла используются символьные имена, виртуальные и физические адреса. Символьные имена переменных задает программист на этапе написания программы. Виртуальные адреса называют логическими, так как они определяются на этапе трансляции программы в машинный код. Поскольку на этом этапе неизвестно, в каком участке ОП будет размещена программа, то переменным и командам программы транслятор присваивает условные (логические) адреса, считая при этом начальный адрес программы нулевым адресом. Физические адреса – номера (конкретные адреса) ячеек ОП, в которых будут располагаться команды и переменные программы во время ее работы.
Совокупность всех виртуальных адресов приложения называется виртуальным пространством. При загрузке приложения в ОП виртуальные адреса преобразуются в физические. Процесс преобразования виртуальных адресов в физические заключается в запоминании адреса ячейки ОП, начиная с которой в ОП загружается вся программа для выполнения. Далее адреса команд и переменных, которые установил транслятор, будут представлять собой пару чисел (seg,off), где seg – адрес ячейки, с которой начинает располагаться загруженная программа (сегмент), а off – смещение внутри сегмента (логический адрес, полученный командой или переменной на этапе трансляции).
Участок ОП, выделенный для выполнения программы, называется адресным пространством этой программы. Таким образом, каждое приложение работает в своем адресном пространстве.
2. Динамическая память
При решении задач из предыдущих разделов рассматривались переменные, память под которые отводилась на этапе компиляции программы и сохранялась в течение всей работы программы. Эти величины называют статическими, а выделенную таким образом ОП – статической.
Существует другой способ выделения памяти под переменные. В языке С++ память под переменные можно выделять в процессе выполнения программы. Данный способ выделения памяти называют динамическим, переменные, под которые ОП выделялась динамически, – динамическими, а выделенная таким способом память – динамической памятью или кучей. Динамически распределяемая память (куча) – это свободная область ОП, которая не используется программой при ее загрузке в ОП, операционной системой и другими приложениями. Использование динамической памяти дает дополнительные, по сравнению со статической памятью, возможности: 1) при подключении динамической памяти можно увеличить объем обрабатываемых данных; 2) размер динамических данных можно изменять (или вообще динамические переменные удалить в случае их ненадобности).
В то же время динамические переменные не требуют описания в программе, так как память под них выделяется динамически, т.е. в процессе выполнения программы, что делается при помощи указателей.