- •Раздел 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) Концепции построения структур хранилищ данных
4) Пользовательские типы данных: назначение, ввод-вывод.
К пользовательским типам данных относятся нестандартные данные, о структуре которых система не имеет представления, и операции над которыми стандартом языка C не определены. Структура таких данных становится известной компилятору только по описанию, содержащемуся в тексте исходной программы. К пользовательским данным такого типа относятся массивы (о них речь шла в предыдущем разделе), структуры (в других алгоритмических языках они известны под термином записи), перечисления (в некоторых книгах по языкам C, C++ их относят к целочисленным данным) и объединения
Типы данных, определяемые пользователем, являются важнейшим инструментом в современном программировании. Стандартные (встроенные) типы, такие как int, char, double и т.д. являются примитивными, поскольку оперируют с числами и символами, в то время как существующие структуры данных намного сложнее. Вторая причина, из-за которой следует переходить к пользовательским типам данных, заключается в том, что стандартные типы не информативны. int a; может означать целое число яблок, студентов, координат у пикселя, номер открытого файла. Несмотря на то, что все эти понятия имеют характер целых чисел, их желательно не смешивать, используя один тип.
Перечисления
При написании программ часто возникает потребность определить несколько именованных констант, для которых требуется, чтобы все они имели различные значения. Для этого можно воспользоваться перечислимым типом данных, все значения которого задаются списком именованных констант
Структуры - это набор из одной или более переменных, возможно различных типов, сгруппированных под одним именем для удобства обработки. В отличие от массива, который является однородным объектом, структура может быть неоднородной.
Традиционным примером структуры является учетная карточка работника: “служащий“ описывается набором атрибутов таких, как фамилия, имя, отчество, адрес, код социального обеспечения, зарплата и т.д. Некоторые из этих атрибутов сами могут оказаться структурами: адрес.
Объединение можно рассматривать как структуру, все элементы которой имеют нулевое смещение от начала, то есть имеет место перекрытие элементами друг друга в памяти. Тем самым объединения обеспечивают возможность доступа к одному и тому же участку памяти с помощью элементов разного типа. Такая возможность полезна, если нужно выделить из внутреннего представления целого числа его отдельные байты.
Массив представляет собой набор однотипных элементов, располагающихся в памяти последовательно. У набора есть общее имя, а доступ к конкретной ячейке осуществляется через индекс, или смещение. При объявлении массива необходимо указать тип элемента, имя и количество элементов (ячеек).
К пользовательским типам данных относятся нестандартные данные, о структуре которых система не имеет представления, и операции над которыми стандартом языка C не определены. Структура таких данных становится известной компилятору только по описанию, содержащемуся в тексте исходной программы. К пользовательским данным такого типа относятся массивы (о них речь шла в предыдущем разделе), структуры (в других алгоритмических языках они известны под термином записи ), перечисления (в некоторых книгах по языкам C, C++ их относят к целочисленным данным) и объединения.
9.1. Структуры
Первоначальным образом для данных типа структур явились строки таблиц, с которыми знаком любой человек. Характерным для таблиц любого содержания является наличие столбцов, в каждом из которых хранятся однотипные данные. Однако в соседних столбцах типы данных могут отличаться. Если специфической особенностью массивов является использование одного и того же типа для всех элементов массива, то строки таблиц можно представлять как последовательность полей данных разного типа. Для каждого поля строки таблицы известно наименование соответствующего столбца таблицы и тип размещаемого в этом поле значения. Например, поле "Фамилия" заполняется текстовой информацией, поле "Год рождения" хранит целочисленные данные, на поле "Пол" достаточно записывать единственный символ 'М' или 'Ж' и т.д.
9.1.1. Объявление и инициализация структур
То, что принято называть "шапкой" таблицы в языках программирования носит название шаблона структуры. Например, шаблон структуры, описывающей данные о книге, может быть устроен следующим образом:
struct book {
char title[40]; //наименование
char authors[30]; //авторы
char publishing_house[15]; //издательство
int year; //год издания
int pages; //количество страниц
float price; //цена
}
Идентификатор book выполняет функцию имени шаблона или типа структуры. В дальнейшем им можно пользоваться для объявления конкретных переменных – структур типа book:
struct book b1,b2,b3; //три переменных типа book
В языке C++ служебное слово struct можно опускать:
book b1,b2,b3;
Обратите внимание на то, что строковые поля в структурах имеют фиксированные размеры. Это существенно упрощает обработку данных, т.к. работа с полями переменной длины могла бы привести к очень медленно работающим программам.
Вообще говоря, объявление шаблона структуры и переменных, связанных с этой структурой, можно совместить:
struct book {
char title[40];
char authors[30];
char publishing_house[15];
int year;
int pages;
float price;
} b1,b2,b3;
Более того, в объявлении шаблона структуры можно опустить имя шаблона:
struct {
char title[40];
char authors[30];
char publishing_house[15];
int year;
int pages;
float price;
} b1,b2,b3;
Однако если данная структура должна выступить в качестве параметра какой-либо функции, то и в заголовке этой функции и в ее прототипе без имени шаблона не обойтись.
Для доступа к соответствующим полям структур используются составные имена, образованные из имени структуры и имени поля:
strcpy(b1.title,"C++:Экспресс курс");
strcpy(b1.authors,"В.Лаптев");
cout << b1.title;
b1.year=2004;
Если мы имеем дело с указателем, который настроен на адрес структуры, то составные имена записываются с использованием двух символов "->":
struct book *p=&b1; //указатель на структуру
strcpy(p->title,"C++:Экспресс курс"
strcpy(p->authors,"В.Лаптев");
cout << p->title;
p->year=2004;
Структуры могут объединяться в массивы:
struct book c[20]; //массив структур
И тогда для доступа к полям соответствующего элемента используются индексированные составные имена:
strcpy(с[2].title,"Язык C++ "
strcpy(c[2].authors,"В.В.Подбельский");
cout << c[2].title;
c[2].year=1996;
struct book *pс=с;
strcpy(pс[2]->title,"C++:Экспресс курс"
strcpy(pс[2]->authors,"В.Лаптев");
cout << pс[2]->title;
pс[2]->year=2004;
При объявлении переменных типа структура их поля могут быть проинициализированы довольно естественным способом:
struct book a={"Programming Languages", "Jean E.Sammet",
"Prentice-Hall", 1969,785,49.99};
Для структур, объявленных с использованием одного и того же шаблона, допустима операция присваивания:
b1=a; //все поля структуры a копируются в структуру b1
К сожалению, одноименные поля строкового типа у структур так копировать нельзя – необходимо прибегать к услугам функций типа strcpy:
strcpy(b1.authors,a.authors); //копируем поле "авторы"
Над содержимым числовых полей структур можно выполнять все операции, доступные для соответствующего типа данных.
Некоторые числовые поля структур могут быть объявлены как битовые шкалы с указанным количеством двоичных разрядов. С одной стороны, это предоставляет возможность компоновать в рамках машинных слов некоторые группы данных и располагать их более компактно в оперативной памяти. С другой стороны, такая возможность избавляет программиста от забот по выделению и вклеиванию соответствующих групп двоичных разрядов. Однако на расположение битовых полей в структурах оказывает дополнительное влияние установка компилятора – признак выравнивания данных на границу байта, слова, двойного слова. Длины битовых шкал при объявлении структур задаются следующим образом:
struct qq{ int a:10; int b:14; } xx, *px;
xx.a=127;
px=&xx;
px->b=9;
В зависимости от признака выравнивания границ данных эти значения могут быть расположены в оперативной памяти по-разному:
С целью принудительного расположения битовых полей в таких структурах допускается вставка безымянных полей:
struct { int a:10;
int :6;
int b:14; } yy;
9.1.3.Функции, возвращающие структуры
Функции могут не только получать структуры в качестве своих параметров, но и возвращать результаты в виде структур. И это означает, что функция, возвращающая значение может иметь в качестве результата своей работы совокупность значений полей соответствующей структуры.
9.1.4. Структуры в языке C++
В языке C++ структуры послужили прообразом классов. Их основное отличие от структур языка C в том, что теперь структуры могут объединять разнородные данные с функциями – методами их обработки. Часть компонент структуры может быть доступна всем пользователям, другая часть может быть сокрыта, т.к. предназначена для выполнения внутренних задач. Однако со всеми этими особенностями структур мы будем знакомиться после изучения основ объектно-ориентированного программирования.
9.2.
Перечисления
Перечисления представляют собой список идентификаторов, введенных пользователем:
enum name_list {name1,name2,...};
За каждым таким именем по умолчанию закрепляются целочисленные константы:
имени name1 соответствует константа 0;
имени name2 соответствует константа 1;
.....................................
В чем смысл замены целочисленных констант такими символьными обозначениями? Дело в том, что в конкретных прикладных задачах удобно иметь дело с мнемоническими обозначениями характеристик некоторых объектов. Например, имея дело с цветами радуги, было бы удобно ввести обозначение для палитры радуги ( rainbow ) и перечислить в ней цвета в том порядке, как они упорядочены в природе (" каждый охотник желает знать, где сидят фазаны " – красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый):
enum rainbow {red, orange, yellow, green, aqua, blue, purple};
9.3. Объединения
Объединения – это такие наборы данных, которые компилятор должен разместить в оперативной памяти, начиная с одного и того же места. Впервые такое совмещение разных данных появилось в языке ФОРТРАН, где для этой цели использовался оператор EQUIVALENCE (эквивалентность). Основным назначением этого оператора была попытка экономии оперативной памяти за счет размещения вновь используемых массивов на месте уже отработавших массивов. В последующем этот оператор использовался и для совместного доступа к одним и тем же полям оперативной памяти как к данным разного типа. Наконец, еще одна дополнительная услуга со стороны оператора EQUIVALENCE состояла в том, что программисты, создающие разные фрагменты программы могли использовать разные имена для обозначения одних и тех же физических величин. Эквивалентность двух разных имен позволяла свести к минимуму переделки при объединении фрагментов программ.
В языках C, C++ объединения создаются с помощью оператора union. В рамках MS-DOS, где нехватка оперативной памяти давала себя знать, с помощью объединений можно наложить друг на друга массивы, используемые в разное время. Однако наиболее важная цель объединений – расположить в одном и том же месте данные разного типа. Это позволяет обращаться к тем или иным полям, используя переменные разного типа. Наиболее характерным объектом такого типа является ячейка электронной таблицы, в которой пользователь может разместить текст или числовое выражение того или иного типа.
