- •Учебно-методический комплекс дисциплины «Системное программирование»
- •Алматы, 2016
- •Опись содержания учебно-методического комплекса дисциплины
- •1. Цели и задачи дисциплины.
- •2. Содержание дисциплины
- •2.1.Лекционный курс
- •2.3. Лабораторные занятия
- •2.4. Самостоятельная работа студентов под руководством преподавателя
- •2.5. Самостоятельная работа студентов
- •3. Учебно-методические материалы по дисциплине
- •3.1.Список рекомендуемой литературы
- •3.2. Вопросы для подготовки к экзамену
- •1. Информация о дисциплине
- •2. Краткое описание дисциплины
- •4. Литература для изучения
- •5. Критерии оценки
- •Карта учебно-методической обеспеченности
- •Тезисы лекций
- •Лекция 2. Базовые конструкции структурного программирования
- •Лекция 3. Указатели и массивы
- •Лекция 4. Типы данных, определяемые пользователем
- •Лекция 5. Модульное программирование
- •Лекция 6. Объектно-ориентированное программирование
- •Лекция 7. Операционные системы и их интерфейсы
- •Лекция 8. Управление потоками и процессами
- •Лекция 9. Синхронизация потоков и процессов
- •Лекция 10. Обмен данными между параллельными процессами
- •Лекция 11. Структурная обработка исключений
- •Лекция 12. Работа с виртуальной памятью
- •Лекция 13. Динамически подключаемые библиотеки
- •Планы семинарских, практических, лабораторных и студийных занятий
- •4.1. Индивидуальное задание:
- •4.2. Описание метода решения
- •4.3. Описание логической структуры
- •4.4. Данные для тестирования
- •4.5. Текст программы
- •5.1. Описание методов решения
- •5.1.1. Представление в памяти
- •5.1.2. Модульная структура программного изделия
- •5.2. Описание логической структуры
- •5.2.1. Общие переменные
- •5.3. Программа пользователя
- •5.4. Тексты программных модулей
- •5.5. Варианты.
- •5. Варианты индивидуальных заданий
- •6. Пример решения задачи
- •6.1. Индивидуальное задание:
- •6.2. Описание методов решения
- •6.3. Описание логической структуры
- •6.4. Текст программы
- •5.1. Структура данных программы
- •5.2. Структура программы
- •5.3. Описание переменных
- •5.4. Описание алгоритма программы
- •5.5. Текст программы
- •5.6. Результаты работы программы
- •5.1. Индивидуальное задание.
- •5.2. Разработка алгоритма
- •5.3. Текст программы
- •5.4. Результаты работы программы
- •4. Порядок выполнения
- •5. Индивидуальные задания
- •6. Пример решения задачи
- •6.3. Индивидуальное задание.
- •6.4. Разработка алгоритма решения
- •6.4.1. Структура программы
- •6.5. Текст программы
- •6.6. Результаты работы программы
- •4. Порядок выполнения
- •5. Пример решения задачи
- •5.1. Индивидуальное задание.
- •5.4. Разработка алгоритм решения
- •5.5. Текст программы
- •5.6. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.2. Текст программы
- •5.3. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.1.3. Описание алгоритм программы
- •5.2. Текст программы
- •5.3. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.1.3. Описание алгоритма программы
- •5.2. Текст программы
- •5.6. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.1.3. Описание алгоритма программы
- •5.2. Текст программы
- •5.3. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.3. Описание алгоритма программы
- •5.2. Текст программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.3. Результаты работы программы
- •5.1.3. Описание алгоритма программы
- •5.2 Текст программы
- •5.3. Результаты работы программы
- •Материалы для мониторинга и контроля образованности обучающихся (уровня сформированности предметных компетенций):
- •Методические разработки (рекомендации)
- •Официально изданные преподавателями учебные и учебно-методические пособия (при условии публикации)
- •Перечень:
- •Учебная литература и/или материалы на электронных носителях
Тезисы лекций
Лекция 1. Состав языка C++. Типы данных C++
В тексте на любом естественном языке можно выделить четыре основных элемента: символы, слова, словосочетания и предложения. Подобные элементы содержит и язык программирования, только слова называют лексемами (элементарными конструкциями), словосочетания - выражениями, а предложения - операторами.
Алфавит языка
Все тексты на языке пишутся с помощью его алфавита. Алфавит C++ включает:
прописные и строчные латинские буквы и символ подчеркивания (_), который употребляется наряду с буквами;
арабские цифры от 0 до 9;
специальные символы, например +, *, { и &;
пробельные символы - пробел, символы табуляции, символы перевода строки и формата.
Алфавит языка в стандарте называется базовым набором символов. Кроме того, существует понятие " набор символов реализации " - все множество символов, доступных на данном компьютере. Этот набор содержит базовый набор в качестве подмножества.
Из символов базового набора составляются лексемы языка и директивы препроцессора. Символы из набора реализации используются для написания комментариев. Компилятор комментарии игнорирует.
Лексемы
Существуют следующие виды лексем:
имена (идентификаторы);
ключевые слова;
знаки операций;
разделители;
литералы (константы).
Границы лексем определяются другими лексемами, такими, как разделители или знаки операций.
Лексемы языка программирования аналогичны словам естественного языка. Например, лексемами являются константа 128 (но не ее часть 12), имя Vasia, ключевое слово goto и знак операции сложения +. Из лексем составляются выражения и операторы.
Выражение задает правило вычисления некоторого значения. Например, выражение a + b задает правило вычисления суммы величин a и b.
Оператор задает законченное описание некоторого действия.
Операторы делят на исполняемые и неисполняемые, простые и составные. Исполняемые операторы задают действия над данными. Неисполняемые операторы служат для описания данных, поэтому их часто называют операторами описания или просто описаниями. Например, int a ; - это оператор описания целочисленной переменной a.
Составной оператор или блок - это группа операторов, заключенная в фигурные скобки. Блоки могут быть вложенными.
Каждый элемент языка определяется синтаксисом и семантикой. Синтаксические определения устанавливают правила построения элементов языка, а семантика определяет их смысл и правила использования.
Объединенная единым алгоритмом совокупность описаний и операторов образует программу.
Имена (идентификаторы)
Идентификатор - это имя программного объекта. В идентификаторе могут использоваться латинские буквы, цифры и знак подчеркивания. Прописные и строчные буквы различаются. Первым символом идентификатора может быть буква или знак подчеркивания.
Длина идентификатора по стандарту не ограничена. Идентификатор создается на этапе объявления переменной, функции, типа и т.п., после этого его можно использовать в последующих операторах программы. При выборе идентификатора необходимо иметь в виду следующее:
идентификатор не должен совпадать с ключевыми словами и именами используемых стандартных объектов языка;
не рекомендуется начинать идентификаторы с символа подчеркивания;
на идентификаторы, используемые для определения внешних переменных, налагаются ограничения компоновщика.
Ключевые слова
Ключевые слова - это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены.
Знаки операций
Знак операции - это один или более символов, определяющих действие над операндами. Внутри знака операции пробелы не допускаются. Символы, составляющие знак операции, могут быть как специальными, например, &&, | и <, так и буквенными, такими как reinterpret_cast или new.
Операции делятся на унарные, бинарные и тернарную по количеству участвующих в них операндов. Большинство стандартных операций может быть переопределено (перегружено).
Константы
Константами называют неизменяемые величины. Есть логические, целые, вещественные, символьные и строковые константы. Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду. Программист может задать тип константы и явным образом.
Таблица 1.1. Константы языка С++Константа Формат Примеры
Логическая Обозначается ключевым словом true или false true, false
Целая Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль 8, 0, 199226
Восьмеричный: нуль, за которым следуют восьмеричные цифры (0, 1, 2, 3, 4, 5, 6, 7) 01, 020, 07155
Шестнадцатеричный: 0х или 0Х, за которым следуют шестнадцатеричные цифры (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F) 0xA, 0x1B8, 0X00FF, 0X00ff
Вещественная Десятичный: [цифры].[цифры] 5.7, 0.001, 35
Экспоненциальный: [цифры][.][цифры]{E|e}[+|-][цифры] 0.2E6, .11e-3, 5E10, 1.22E-10
Символьная Один или более символов, заключенных в апострофы 'A', 'ю', '*', 'db', 'A', '\n', '\012', '\x07\x07'
Строковая Последовательность символов, заключенная в кавычки "Здесь был Vasia", "\tСумма =\xF5\n"
Допустимые диапазоны значений целых и вещественных констант приведены в таблице 1.2.
Таблица 1.2. Диапазоны значений основных типов данных для IBM PC
Тип |
Диапазон значений |
Размер (байт) |
bool |
true и false |
1 |
signed char |
-128 … 127 |
1 |
unsigned char |
0 … 255 |
1 |
signed short int |
-32 768 … 32 767 |
2 |
unsigned short int |
0 … 65 535 |
2 |
signed int |
-2 147 483 648 … 2 147 483 647 |
4 |
unsigned int |
0 … 4 294 967 295 |
4 |
signed long int |
-2 147 483 648 … 2 147 483 647 |
4 |
unsigned long int |
0 … 4 294 967 295 |
4 |
float |
3.4e-38 … 3.4e+38 |
4 |
double |
1.7e-308 … 1.7e+308 |
8 |
long double |
3.4e-4932 … 3.4e+4932 |
10 |
Директивы препроцессора и комментарии
Директивы препроцессора предназначены для обработки исходного текста программы перед компиляцией. Любая директива должна начинаться с символа #. На каждой строке может располагаться только одна директива. Например, по директиве
#include "myfile"
в текст программы будет вставлено содержимое так называемого заголовочного файла с именем myfile. Заголовочные файлы содержат различную информацию, необходимую для успешной компиляции программы.
Комментарии предназначены для записи пояснений к программе. В С++ есть два вида комментариев: однострочные и многострочные. Первый вид начинается с двух символов // ("прямая косая черта") и занимает одну строку. Второй вид комментариев начинается с двух символов /* и завершается двумя символами */.
Внутри комментария можно использовать любые символы из набора реализации. Внутри многострочного комментария можно размещать однострочный комментарий.
Типы данных С++
Основная цель любой программы состоит в обработке данных. Данные, с которыми работают машинные команды, хранятся в оперативной памяти. Компилятору для формирования команд необходимо точно знать, сколько места занимают данные, как именно закодированы и какие действия с ними можно выполнять. Все это задается при описании данных с помощью типа. Каждая константа, переменная, результат вычисления выражения или функции должны иметь конкретный тип.
Тип данных однозначно определяет:
множество их возможных значений (связанное с внутренним представлением данных в памяти компьютера);
допустимые действия над данными (операции и функции).
Программист задает тип каждой величины, используемой в программе, исходя из характеристик реальных объектов, которые представляют эти величины. Обязательное указание типа позволяет компилятору проверять, правильно ли используется объект в конструкциях языка. От типа величины зависят машинные команды, которые будут использоваться для обработки данных.
Объем памяти, выделяемый для величин, тоже зависит от типа. По стандарту единицей памяти в С++ является байт.
Типы языка С++ делятся на элементарные (базовые, основные) и составные. Элементарные типы данных являются неделимыми и позволяют описывать целые, вещественные, символьные и логические величины. На основе этих типов программист может конструировать составные типы. Составной тип - это тип, определенный в терминах другого типа. К составным типам относятся массивы, структуры, объединения, перечисления, ссылки, указатели и классы. Внутреннее представление данных всех типов, их размеры и диапазоны величин определяются конкретной платформой.
Рисунок 1.1 помогает окинуть взглядом все разнообразие типов данных, определенных в стандарте языка С++.
Рис. 1.1. Типы данных стандартного С++
Базовые типы данных
Элементарные типы данных, если исключить из них тип void, часто называют арифметическими,поскольку их можно использовать в арифметических операциях. Для их описания определены следующие ключевые слова:
bool (логический);
char (символьный);
wchar_t (широкий символьный);
int (целый);
float (вещественный);
double (вещественный с двойной точностью).
Первые четыре типа называют интегральными (целыми), последние два - типами с плавающей точкой. Код, который формирует компилятор для обработки целых величин, отличается от кода для величин с плавающей точкой.
Существует четыре ключевых слова, уточняющих внутреннее представление и диапазон значений стандартных типов: short (короткий); long (длинный); signed (знаковый); unsigned (беззнаковый).
Сочетания перечисленных ключевых слов формируют 14 различных арифметических типов, приведенных на рис. 1.1. Например, char, signed char и unsigned char - это три равноправных различных типа.
Логический тип
Величины логического типа могут принимать только значения true и false, являющиеся ключевыми словами. Величины логического типа могут участвовать в арифметических операциях. При преобразовании к целому типу true имеет значение 1, false - нуль. Размер логического типа в стандарте не определен и зависит от реализации.
Символьные типы
В стандарте языка определено три различных символьных типа: char, signed char и unsigned char. Внутренним представлением символа является его код - целое число. Под величину любого символьного типа отводится одна единица памяти - байт:
sizeof(char) = sizeof(signed char) = sizeof(unsigned char) = 1
Размер байта зависит от реализации, однако этот размер должен быть достаточен, чтобы вместить код любого символа из набора символов реализации для данного компьютера. Наличие знака у типа char тоже зависит от реализации: он может совпадать либо с signed char, либо с unsigned char.
Величины символьных типов применяются также для хранения целых чисел, не превышающих границы указанных диапазонов, и могут участвовать в арифметических операциях, поэтому их также относят к целым типам.
Целые типы
В языке С++ определено 8 типов для хранения целочисленных величин: четыре знаковых ( signed char, short int, int, long int ) и четыре беззнаковых ( unsigned char, unsigned short int, unsigned int, unsigned long int ). По умолчанию все целочисленные типы считаются знаковыми, поэтому спецификатор signed можно не указывать. Ключевое слово unsigned позволяет представлять неотрицательные целые числа.
Типы с плавающей точкой
Стандарт С++ определяет три типа данных для хранения вещественных значений: float, double и long double. Все они имеют знак.
Внутреннее представление вещественного числа состоит из мантиссы и порядка. Длина мантиссы определяет точность числа, а длина порядка - его диапазон.
Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f ( float ) и L, l ( long ). Например, константа 2E+6L имеет тип long double.
Для вещественных типов в таблице приведены абсолютные величины минимальных и максимальных значений.
Тип void
Тип void используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, как базовый тип для указателей и в операции приведения типов.
