- •Раздел 1. Вопросы по общепрофессиональным дисциплинам
- •1)Понятие программирования. Жизненный цикл по. Восходящее и нисходящее проектирование по.
- •2) Основные структуры программирования. Операторы языка си Базовые структуры программирования
- •3)Функции. Шаблоны функций, перегрузка функций.
- •4) Пользовательские типы данных: назначение, ввод-вывод.
- •5)Статические и динамическое распределение памяти.
- •6) Динамические структуры данных (стек, очередь, список).
- •7)Объектно-ориентированное программирование. Классы. Конструкторы. Деструкторы.
- •8)Паттерны проектирования и программирования
- •9) Общая классификация видов информационных технологий и их реализация в технических областях.
- •10)Процессы передачи, обработки и накопления данных в информационных системах.
- •11) Фон Неймановская архитектура вычислительных машин. Принципы фон Неймана. Состав и устройство персонального компьютера.
- •12)Чипсет и шинно-мостовая архитектура системной платы.
- •13)Микроархитектура процессоров Intel Core. Исполнение программного кода на основе конвейерной обработки
- •14)Архитектура оперативного запоминающего устройства на основе динамической памяти с произвольным доступом
- •15)Принцип работы электронной памяти различных типов. Параметры микросхем памяти.
- •16)Архитектура графической подсистемы. Принцип расчета трехмерного изображения. Рендеринг.
- •17)Структура и принцип действия накопителя на жестких магнитных дисках. Последовательная шина sata.
- •18)Структура и принцип действия оптических приводов cd и dvd.
- •19) Внутренние и внешние параллельные и последовательные компьютерные шины
- •20) Средства передачи информации – кабельные и беспроводные каналы связи
- •21)Основы теории управления. Общие принципы системной организации.
- •22)Рабочие операции и операции управления.
- •23 ) Характеристики объекта управления: устойчивость, управляемость, наблюдаемость.
- •24)Использование микропроцессоров и эвм в системах управления.
- •25)Общее информационное представление системы управления.
- •26)Понятие операционной системы, основные функции и назначение. Классификация ос.
- •27)Файловые системы: примеры, функции и назначение. Методы физической организации файлов
- •28) Архитектура операционной системы. Ядро и вспомогательные модули, функции и назначение. Загружаемые модули ядра.
- •29) Концепции построения структур хранилищ данных
5)Статические и динамическое распределение памяти.
Рассмотрим простую программу:
#include <stdio.h>
void main()
{
int a;
scanf("%d", &a);
printf("Вывели :%d", a);
}
a объявлена как локальная переменная в функции main. Выделением памяти под нее занимается компилятор в процессе компиляции. Такой способ распределения памяти мы называем статическим, поскольку данная память не может быть освобождена в процессе работы программы. Если речь идет о массивах, то при их объявлении, необходимо указывать размер в явном виде:
float b[100];
char buf[255];
Статические массивы не могут менять свой размер в процессе работы программы, что создает массу сложностей для программиста. Приходится заранее выделять память, которая может быть не полностью использована, осуществлять проверки по выходу заграницы массива и т.п.
Динамическое распределение памяти происходит во время выполнения программы и позволяет избавиться от ряда проблем, свойственных статическому распределению. Общий подход заключается в том, чтобы создать статический указатель на требуемый тип, а в нужный момент запросить у операционной системы память требуемого размера, причем этот размер может стать, известен только в процессе исполнения.
Недостатком использования динамической памяти служит требование внимательного обращения с ней и возможность так называемых “утечек“, которые могут привести к сбоям в работе.
Основные принципы динамического распределения памяти
После выделения динамической памяти она сохраняется до ее явного освобождения. Если память не была освобождена до окончательного выполнения программы, то она освобождается автоматически при завершении. Тем не менее, явное освобождение ставшей уже ненужной памяти является признаком хорошего стиля программирования.
В процессе выполнения программы участок динамической памяти доступен везде, где доступен указатель, адресующий этот участок. Таким образом, возможны три варианта работы с динамической памятью, выделяемой в некотором блоке:
• указатель определен как локальный объект. В этом случае динамическая память будет недоступна при выходе за пределы блока, и ее нужно освободить перед выходом из блока;
• указатель определен как локальный объект с ключевым словом static. Динамическая память, выделенная однократно в блоке, доступна через указатель при каждом входе в блок. Память нужно освободить по окончании ее использования;
• указатель является глобальным объектом по отношению к блоку. Динамическая память доступна по всему тексту программы. Память нужно освободить только по окончанию ее использования.
Способы работы с динамической памятью
В С++ существуют два способа работы с динамической памятью: функциональный и операторный. Функциональный способ активно использовался в С, операторный появился позже, в С++. Оба способа предлагают набор средств для выделения и освобождения памяти имеют свои недостатки и преимущества. Рассмотрим сначала функциональный способ.
6) Динамические структуры данных (стек, очередь, список).
Если до начала работы с данными невозможно определить, сколько памяти потребуется для их хранения, память следует распределять во время выполнения программы по мере необходимости отдельными блоками. Блоки связываются друг с другом с помощью указателей. Такой способ организации данных называется динамической структурой данных, поскольку она размещается в динамической памяти и ее размер изменяется во время выполнения программы.
Из динамических структур в программах чаще всего используются линейные списки, стеки, очереди и бинарные деревья. Они различаются способами связи отдельных элементов и допустимыми операциями. Динамическая структура, может занимать несмежные участки оперативной памяти.
Динамические структуры широко применяют и для более эффективной работы с данными, размер которых известен, особенно для решения задач сортировки, поскольку упорядочивание динамических структур не требует перестановки элементов, а сводится к изменению указателей на эти элементы.
Элемент динамической структуры состоит из двух частей: информационной, ради хранения которой и создается структура, и указателей, обеспечивающих связь элементов друг с другом.
Стек является простейшей динамической структурой. Добавление элементов в стек и выборка из него выполняются из одного конца, называемого вершиной стека. Другие операции со стеком не определены. При выборке элемент исключается из стека.
Стеки широко применяются в системном программном обеспечении, компиляторах, в различных рекурсивных алгоритмах.
Для работы со стеком используются две статические переменные: указатель на вершину стека и вспомогательный указатель.
var top, p : pnode;
Тип указателей должен соответствовать типу элементов стека.
Очередь — это динамическая структура данных, добавление элементов в которую выполняется в один конец, а выборка — из другого конца. Другие операции с очередью не определены. При выборке элемент исключается из очереди. Говорят, что очередь реализует принцип обслуживания FIFO (first in — first out, первым пришел — первым обслужен). В программировании очереди применяются очень широко — например, при моделировании, буферизованном вводе-выводе или диспетчеризации задач в операционной системе.
Для работы с очередью используются указатели на ее начало и конец, а также вспомогательный указатель:
var beg, fin, p : pnode;
Тип указателей должен соответствовать типу элементов, из которых состоит очередь.
В линейном списке каждый элемент связан со следующим и, возможно, с предыдущим. В первом случае список называется односвязным, во втором — двусвязным. Также применяются термины "однонаправленный" и "двунаправленный". Если последний элемент связать указателем с первым, получится кольцевой список.
Каждый элемент списка содержит ключ, идентифицирующий этот элемент. Ключ обычно бывает либо целым числом, либо строкой и является частью поля данных. В качестве ключа в процессе работы со списком могут выступать разные части поля данных. Например, если создается линейный список из записей, содержащих фамилию, год рождения, стаж работы и пол, любая часть записи может выступать в качестве ключа. При упорядочивании списка по алфавиту ключом будет фамилия, а при поиске, например, ветеранов труда — стаж. Ключи разных элементов списка могут совпадать.
Над списками можно выполнять следующие операции:
начальное формирование списка (создание первого элемента);
добавление элемента в конец списка;
чтение элемента с заданным ключом;
вставка элемента в заданное место списка (до или после элемента с заданным ключом);
удаление элемента с заданным ключом;
упорядочивание списка по ключу.
Стек и очередь представляют собой частные случаи линейного списка с ограниченным набором допустимых операций.
При чтении элемент списка не удаляется, в отличие от элемента, выбираемого из стека и очереди. Для работы со списком в программе требуется определить указатель на его начало. Чтобы упростить добавление новых элементов в конец списка, можно также завести указатель на конец списка.
