- •Учебное пособие по дисциплине «программирование»
- •11.03.02 «Инфокоммуникационные технологии и системы связи»
- •1. Основные структуры управления 8
- •12. Стандартная библиотека шаблонов 264
- •13. Обработка исключительных ситуаций. 284
- •15. Многопоточное программирование, thread-safety 298
- •19. Работа с базой данных 400
- •20. Разработка сетевых приложений 435
- •21. Жизненный цикл программы 449
- •22. Методы отладки и тестирования программы 478
- •Введение
- •Основные структуры управления
- •Краткая теория Описание среды разработки Microsoft Visual Studio
- •Создание простейшего приложения
- •Этапы компиляции
- •Цель и порядок работы
- •Примеры
- •Контрольные вопросы
- •Задание
- •Содержание отчета
- •Краткая теория
- •Идентификатор
- •Константы и переменные
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Основные типы данных
- •Операторы языка программирования
- •1 Присваивание
- •2 Ввод-вывод данных с использованием библиотеки потокового ввода вывода
- •3 Манипуляторы и форматирование ввода-вывода
- •4 Ввод вывод с использованием стандартной библиотеки ввода-вывода stdio.H
- •5 Математические функции
- •Операции
- •Приоритеты операций в выражениях
- •Примеры программ Пример программы нахождения среднего арифметического из двух целых чисел и одного вещественного числа:
- •Программа вычисления значения выражения:
- •Лабораторная работа № 2. Проектирование программ линейной структуры Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •Содержание отчета
- •Операторы ветвления и выбора Краткая теория
- •Оператор ветвления
- •Оператор выбора
- •Оператор switch
- •2 Цикл с предусловием (do while)
- •3 Цикл с параметром (for)
- •2 Операторы передачи управления
- •1 Оператор безусловного перехода (goto)
- •2 Оператор возврата из функции (return)
- •3 Оператор выхода из цикла (break)
- •4 Оператор перехода к следующей итерации цикла (continue)
- •2 Вложенные циклы
- •3 Итерационные циклы
- •Лабораторная работа № 5. Итерационные и арифметические циклы. Вложенные циклы Цель и порядок работы
- •Контрольные вопросы
- •Содержание отчета
- •Массивы
- •Массивы.
- •Базовый_тип имя_массива [размерность];
- •Int a[100];//массив из 100 элементов целого типа
- •2 Многомерные массивы
- •3. Сортировка массивов
- •3.1. Сортировка с помощью включения
- •3.2. Сортировка методом простого выбора
- •3.3. Сортировка методом простого обмена
- •2 Многомерные массивы (матрицы)
- •Операции с указателями
- •Указатели и массивы
- •Динамические массивы
- •Примеры программ
- •Лабораторная работа № 7. Указатели и ссылки. Имя массива как указатель. Динамические массивы Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •1 Указатели
- •2 Имя массива как указатель
- •Содержание отчета
- •Функции Краткая теория
- •1 Описание функций
- •2 Параметры функции
- •3 Передача массивов в функцию
- •4 Указатели на функции
- •Лабораторная работа № 8. Функции Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •1 Функции, параметры функций
- •2 Передача массивов в функцию (одномерные массивы)
- •3 Передача массивов в функцию (многомерные массивы)
- •Содержание отчета
- •Краткая теория
- •1 Понятие отладки
- •2 Разновидности ошибок
- •2.1 Ошибки этапа компиляции
- •2.2 Ошибки этапа выполнения
- •2.3 Логические ошибки
- •3 Методы отладки
- •3.1 Установка точки прерывания
- •3.2 Выполнение программы до точки прерывания
- •3.3 Прекращение отладки
- •3.4 Пошаговое выполнение программы и трассировка
- •3.5 Выполнение программы до курсора
- •3.6 Отслеживание значений переменных во время выполнения программы
- •3.7 Создание условной точки останова
- •4 Работа с отладчиком
- •4.1 Выполнение программы по шагам без захода в функцию
- •4.2 Выполнение программы по шагам с заходом в функцию (трассировка)
- •Цель и порядок работы
- •Контрольные вопросы
- •Задание
- •Задание для выполнения работы
- •1 Часть первая
- •2 Часть вторая
- •2 Перечисления (enum)
- •3 Структуры (struct)
- •4 Объединения (union)
- •5 Битовые поля
- •6 Пример
- •Лабораторная работа № 10. Типы данных, определяемые пользователем. Структуры и объединения Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •Содержание отчета
- •Краткая теория
- •1.1 Ввод-вывод строк
- •1.2 Операции со строками
- •Ввод и вывод русских букв в консоли можно сделать разными способами.
- •1.3 Некоторые Стандартные функции работы со троками
- •Режимы открытия файлов
- •Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •2 Рекурсивные функции
- •3 Шаблоны функций
- •4 Функции с переменным количеством параметров
- •Лабораторная работа № 12. Перегрузка функций. Шаблоны функций Цель и порядок работы
- •Контрольные вопросы
- •Варианты заданий
- •1 Перегрузка функций
- •2 Добавление новых файлов в проект в среде разработки Visual Studio 2008
- •3 Пример работы с многофайловыми проектами
- •4 Препроцессор
- •Лабораторная работа № 13. Модули. Многофайловые проекты. Препроцессор. Цель и порядок работы
- •Контрольные вопросы
- •Задание
- •Варианты заданий
- •Содержание отчета
- •Введение в OpenGl.
- •Работа с OpenGl при помощи
- •Библиотеки glut
- •Создание консольного приложения, использующего OpenGl
- •Лабораторная работа №14. Создание приложения с использованием OpenGl. Рисование примитивов. Цель работы:
- •Задания
- •Примеры рисования многоугольников:
- •Конструктор копирования и операция присваивания Конструктор копирования
- •Перегруженная операция присваивания
- •Лабораторная работа № 15. Классы Цель работы:
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Перегрузка операций и дружественные функции. Указатели на функции, методы и члены данных Перегрузка операций и дружественные функции.
- •Указатели на функции
- •В заданиях 11 – 20 перегрузить операции ввода и вывода исходных данных.
- •Виртуальные функции. Абстрактные классы.
- •Пространства имен
- •Лабораторная работа № 17. Наследование. Открытое и закрытое наследование. Цель работы:
- •Контрольные вопросы
- •Задания на самостоятельное выполнение
- •Содержание отчета
- •Шаблоны (На самостоятельное изучение)
- •Шаблон класса
- •Шаблонные функции.
- •Шаблонные методы
- •Стандартная библиотека шаблонов
- •Stl Строки
- •Строковые потоки
- •Итераторы
- •Итераторы обеспечивают доступ к элементам в коллекции
- •Алгоритмы
- •Предикаты
- •Заключение
- •Лабораторная работа № 18. Стандартная библиотека шаблонов Цель.
- •Порядок выполнения работы.
- •Содержание отчета.
- •Варианты заданий.
- •Обработка исключительных ситуаций. Теория
- •Введение
- •"Создание" исключений
- •Операторы throw без параметров
- •Заключение
- •Цель работы:
- •Контрольные вопросы
- •Задание
- •Содержание отчета
- •Краткая теория
- •Многопоточное программирование, thread-safety
- •Инициализация потока
- •Id потока
- •Пространство имен this_thread
- •Одновременный доступ к ресурсам
- •Содержание отчета
- •Механизмы синхронизации Вводные понятия синхронизации потоков
- •Работа с потоками с помощью функций WinApi Несинхронизированные потоки
- •Критические секции
- •Мьютексы (взаимоисключения)
- •События
- •Потокобезапасность
- •Типовые задачи синхронизации
- •Механизм семафоров
- •Семафорное решение задачи о философах
- •Лабораторная работа № 21. Семафоры: защита критических секций, условная синхронизация Цели и задачи:
- •Порядок выполнения лабораторной работы
- •Варианты заданий
- •Содержание отчета
- •Создание проекта библиотеки динамической компоновки (dll)
- •Добавление класса в библиотеку динамической компоновки
- •Создание приложения, ссылающегося на библиотеку динамической компоновки
- •Использование функциональных возможностей библиотеки классов в консольном приложении
- •Запуск приложения
- •Создание проекта статической библиотеки
- •Добавление класса в статическую библиотеку
- •Создание приложения, ссылающегося на статическую библиотеку
- •Использование функциональных возможностей статической библиотеки в консольном приложении
- •Запуск приложения
- •Создание нового проекта библиотеки классов
- •Добавление класса в библиотеку классов
- •Создание приложения, ссылающегося на библиотеку классов
- •Использование функциональных возможностей библиотеки классов в консольном приложении
- •Запуск приложения
- •Создание dll
- •Использование dll без библиотеки импорта. Динамическое подключение.
- •Результаты работы dllrun02.Exe
- •Цель работы:
- •Постановка задачи
- •Варианты
- •Методические указания
- •Содержание отчета
- •Краткая теория
- •Метасимволы в регулярных выражениях
- •Поиск в тексте по шаблону
- •Редактирование текста
- •Цель работы:
- •Задание
- •Содержание отчета
- •Краткая теория Философия .Net Framework
- •Библиотека Windows Forms
- •Класс Form, MessageBox и компоненты Класс Form
- •Диалог MessageBox
- •Компоненты и панель ToolBox
- •Работа с элементами управления
- •Цель работы:
- •Задания
- •Содержание отчета
- •Пример 1.
- •Пример 2.
- •Редактирование таблицы базы данных ms Access в среде Visual Studio без написания программного кода
- •Чтение всех записей из таблицы бд ms Access на консоль с помощью объектов классов Command и DataReader
- •Создание базы данных ms Access в программном коде
- •Добавление записей в таблицу базы данных ms Access
- •Чтение всех записей из таблицы базы данных c помощью объектов классов Command, DataReader и элемента управления DataGridView
- •Чтение данных из бд в сетку данных DataGridView с использованием объектов классов Command, Adapter и DataSet
- •Обновление записей в таблице базы данных ms Access
- •Удаление записей из таблицы базы данных с использованием sql-запроса и объекта класса Command
- •Лабораторная работа № 25. Работа с базой данных Цель работы:
- •Порядок выполнения работы
- •Методические указания
- •Варианты заданий
- •1. Библиотека
- •2. Университет
- •3. Оптовая база
- •4. Производство
- •5. Сеть магазинов
- •6. Авторемонтные мастерские
- •7. Деканат
- •8. Договорная деятельность организации
- •9. Поликлиника
- •10. Телефонная станция
- •11. Спорт
- •12. Сельскохозяйственные работы
- •13. Городской транспорт
- •14. География
- •15. Домоуправление
- •16. Аэропорт
- •7. Прикладной
- •1. Аппаратный (Физический)
- •Общая схема работы с сокетами в Windows
- •Пример. Клиентское и серверное приложение
- •Клиент:
- •Сервер:
- •Лабораторная работа № 26. Разработка сетевых приложений Цель работы:
- •Порядок выполнения работы
- •Задания:
- •Варианты
- •Содержание отчета
- •Жизненный цикл программы
- •Программный продукт и определение требований к продукту Программный продукт
- •Определение требований к продукту
- •Требования к функционированию продукта
- •Требования к надежности продукта
- •Условия эксплуатации продукта
- •Требования к техническим средствам
- •Требования к установке продукта
- •Техническое задание
- •Упражнения
- •Лабораторная работа №27. Разработка технического задания на программный продукт Цель работы:
- •Задание
- •Варианты заданий
- •Контрольные вопросы
- •Содержание отчета
- •Проектирование программного продукта
- •Разработка эскизного проекта
- •Разработка технического проекта
- •Рабочий проект
- •Упражнения
- •Задание
- •Отладка
- •Тестирование
- •Сопровождение продукта
- •Модификация продукта
- •Цикличность разработки продукта
- •Контрольные вопросы
- •Лабораторная работа №29. Проектирование структуры приложения Цель работы:
- •Задание
- •Методические указания Контрольные вопросы
- •Лабораторная работа №30. Разработка пользовательского интерфейса Цель работы:
- •Задание
- •Методические указания Контрольные вопросы
- •Методы отладки и тестирования программы Теоретические сведения
- •Обнаружение ошибки
- •Программа не дает результатов
- •Программа дает неверные результаты
- •Программа дает правдоподобные результаты
- •Устранение ошибки
- •Средства отладки
- •Упражнения
- •Тестирование
- •Unit-тестирование
- •Методики тестирования
- •Функциональное тестирование
- •Тестирование обращений к базам данных
- •Тестирование бизнес-логики программы
- •Нагрузочное тестирование
- •Стрессовое тестирование
- •Тестирование интерфейса пользователя
- •Тестирование безопасности и прав доступа
- •Тестирование инсталляции программного продукта
- •Наборы тестов
- •Процесс тестирования
- •Особенности тестирования объектно-ориентированных программ
- •Средства тестирования
- •Обеспечение качества программного продукта
- •Упражнения
- •Контрольные вопросы
- •Лабораторная работа № 31. Тестирование и отладка приложения Цель работы:
- •Задание
- •Методические указания Контрольные вопросы
- •Boost::threads. Многопоточное программирование Создание потока
- •Мьютексы
- •Условные переменные
- •Локальная память потока
- •Однократно вызываемые функции
- •Инициализация параметров
- •Основные алгоритмы
- •Небольшое отступление от алгоритма, для описания его параметров. Эти параметры используются во всех алгоритмах, но рассмотрим их только здесь.
- •Вспомогательные средства
- •Содержание отчета
- •Boost::bind (на самостоятельное изучение) Использование с глобальной функцией
- •Использование с указателями на функции члены
- •Использование с указателем на член данных
- •Каскадное использование связывателей
- •Перегруженные операторы
- •Использование ссылок
- •Пример использования.
- •Boost::asio (::io_service) (Самостоятельное изучение) boost::asio основы
- •Boost::asio асинхронный
- •Использование boost::asio
- •Асинхронное программирование
- •Необходимость работать асинхронно
- •Список источников
3. Сортировка массивов
Сортировка – это процесс перегруппировки заданного множества объектов в некотором установленном порядке.
3.1. Сортировка с помощью включения
Элементы массива делятся на уже готовую последовательность и исходную. При каждом шаге, начиная с I=2, из исходной последовательности извлекается i-ый элемент и вставляется на нужное место готовой последовательности, затем i увеличивается на 1 и т. д.
44 |
55 |
12 |
42 |
94 |
18 |
В процессе поиска нужного места осуществляются пересылки элементов больше выбранного на одну позицию вправо, т. е. выбранный элемент сравнивают с очередным элементом отсортированной части, начиная с j:=i-1. Если выбранный элемент больше a[i], то его включают в отсортированную часть, в противном случае a[j] сдвигают на одну позицию, а выбранный элемент сравнивают со следующим элементом отсортированной последовательности. Процесс поиска подходящего места заканчивается при двух различных условиях:
если найден элемент a[j]>a[i];
достигнут левый конец готовой последовательности.
int i,j,x;
for(i=1;i<n;i++)
{
x=a[i];//запомнили элемент, который будем вставлять
j=i-1;
while(x<a[j]&&j>=0)//поиск подходящего места
{
a[j+1]=a[j];//сдвиг вправо
j--;
}
a[j+1]=x;//вставка элемента
}
3.2. Сортировка методом простого выбора
Выбирается минимальный элемент массива и меняется местами с первым элементом массива. Затем процесс повторяется с оставшимися элементами и т. д.
44 |
55 |
12 |
42 |
94 |
18 |
1 |
|
мин |
|
|
|
int i,min,n_min,j;
for(i=0;i<n-1;i++)
{
min=a[i];n_min=i;//поиск минимального
for(j=i+1;j<n;j++)
if(a[j]<min)
{
min=a[j];
n_min=j;
}
a[n_min]=a[i];//обмен
a[i]=min;
}
3.3. Сортировка методом простого обмена
Сравниваются и меняются местами пары элементов, начиная с последнего. В результате самый маленький элемент массива оказывается самым левым элементом массива. Процесс повторяется с оставшимися элементами массива.
44 |
55 |
12 |
|
94 |
18 |
|
|
|
|
|
|
for(int i=1;i<n;i++)
for(int j=n-1;j>=i;j--)
if(a[j]<a[j-1])
{
int r=a[j];
a[j]=a[j-1];
a[j-1]=r;}
}
ПРИМЕР
//2. Дан одномерный массив, состоящий из N целочисленных элементов.
//2.1.Заполнить массив случайными числами.
//2.2.Найти минимальный элемент.
//2.3.Вычислить сумму элементов массива.
//2.4.Вывести положительные элементы на экран.
//2.5.Отсортировать массив по убыванию и вывести на экран
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
const int MAX_SIZE = 100;
int mas[MAX_SIZE];
//1. формирование массива с помощью датчика случайных чисел
int n, m, k, g, i, j, x;
cout << "\nВведите размер массива < " << MAX_SIZE << ": ";
cin >> n;
srand((unsigned)time(NULL)); //Запуск генератора случайных чисел
for (i = 0; i < n; i++)
mas[i] = rand() % 100 - 50;
//Печать полученного массива
cout << "1. Печать массива:\n";
for (i = 0; i<n; i++)
cout << " " << mas[i];
//2. поиск минимального элемента
k = 0;
int iMin = mas[0];
for (i = 1; i<n; i++) {
if (iMin > mas[i])
iMin = mas[i];
k++;
}
cout << "\n\n2.Минимальный элемент равен " << iMin << endl;
//3.Вычислить сумму элементов массива.
int S = 0;
for (i = 0; i < n; i++)
S += mas[i];
cout << "\n3.Сумма эл-ов масива = " << S << endl;
//4.Вывести положительные элементы на экран.
cout << "\n4. Список положительных элементов: ";
for (i = 0; i < n; i++)
if (mas[i] > 0)
cout << mas[i] << "; ";
//5.Отсортировать массив по убыванию и вывести на экран
cout << "\n\n5.Сортировка массива по убыванию (сортировка с помощью включения):";
for (i = 1; i<n; i++)
{
x = mas[i];//запомнили элемент, который будем вставлять
j = i - 1;
while (x>mas[j] && j >= 0)//поиск подходящего места
{
mas[j + 1] = mas[j];//сдвиг вправо
j--;
}
mas[j + 1] = x;//вставка элемента
}
for (i = 0; i<n; i++)
cout << " " << mas[i];
cout << endl;
system("pause");
return 0;
}
Лабораторная работа № 6. Массивы
Цель и порядок работы
Цель работы – получение практических навыков алгоритмизации и программирования вычислительных процессов с использованием массивов.
Порядок выполнения работы:
ознакомиться с описанием лабораторной работы;
получить задание у преподавателя, согласно своему варианту;
написать программу и отладить ее на ЭВМ;
оформить отчет.
Контрольные вопросы
Как определить массив?
Как проинициализировать массив?
Какие варианты объявления с инициализацией вы знаете?
Как обратиться к элементу массива?
Как объявить многомерный массив?
Как проинициализировать многомерный массив?
Как определить размер одномерного массива, зная его имя?
Задание
Написать программу в соответствии с вариантом задания
Отладить и протестировать программу.
Написать программу в соответствии с вариантом.
Отладить и протестировать программу.
Оформить отчёт.
Варианты заданий
1 Одномерные массивы (векторы)
Дан одномерный массив, состоящий из N целочисленных элементов.
Ввести массив с клавиатуры.
Найти максимальный элемент.
Вычислить среднеарифметическое элементов массива.
Вывести массив на экран в обратном порядке.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N целочисленных элементов.
Заполнить массив случайными числами.
Найти минимальный элемент.
Вычислить сумму элементов массива.
Вывести положительные элементы на экран.
Отсортировать массив по убыванию и вывести на экран
Дан одномерный массив, состоящий из N вещественных элементов.
Ввести массив с клавиатуры.
Найти максимальный элемент.
Вычислить среднеарифметическое положительных элементов массива.
Вывести отрицательные элементы на экран в обратном порядке.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N вещественных элементов.
Заполнить массив случайными числами.
Найти минимальный положительный элемент.
Вычислить произведение не нулевых элементов массива.
Вывести ненулевые элементы на экран в обратном порядке.
Отсортировать массив по убыванию и вывести на экран
Дан одномерный массив, состоящий из N целочисленных элементов.
Ввести массив с клавиатуры.
Найти максимальный отрицательный элемент.
Вычислить сумму отрицательных элементов массива.
Вывести положительные элементы на экран.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N целочисленных элементов.
Заполнить массив случайными числами.
Найти максимальный положительный элемент.
Вычислить сумму элементов массива.
Вывести ненулевые элементы на экран в обратном порядке.
Отсортировать массив по убыванию и вывести на экран
Дан одномерный массив, состоящий из N вещественных элементов.
Ввести массив с клавиатуры.
Найти максимальный элемент.
Вычислить среднее арифметическое отрицательных элементов массива.
Вывести массив на экран в обратном порядке.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N вещественных элементов.
Заполнить массив случайными числами.
Найти минимальный элемент.
Вычислить произведение не нулевых элементов массива.
Вывести положительные элементы на экран в обратном порядке.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N целочисленных элементов.
Ввести массив с клавиатуры.
Найти минимальный положительный элемент.
Вычислить сумму положительных элементов массива, кратных 3.
Вывести не нулевые элементы на экран.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N целочисленных элементов.
Заполнить массив случайными числами.
Найти максимальный положительный элемент.
Вычислить произведение элементов массива.
Вывести положительные элементы на экран.
Отсортировать массив по убыванию и вывести на экран
Дан одномерный массив, состоящий из N вещественных элементов.
Ввести массив с клавиатуры.
Найти максимальный элемент.
Вычислить сумму четных элементов массива.
Вывести отрицательные элементы на экран в обратном порядке.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N вещественных элементов.
Заполнить массив случайными числами.
Найти минимальный отрицательный элемент.
Вычислить среднеарифметическое положительных элементов массива.
Вывести положительные элементы на экран.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N целочисленных элементов.
Ввести массив с клавиатуры.
Найти максимальный отрицательный элемент.
Вычислить произведение отрицательных элементов массива.
Вывести ненулевые элементы на экран в обратном порядке.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N целочисленных элементов.
Заполнить массив случайными числами.
Найти максимальный элемент.
Вычислить среднеарифметическое нечетных элементов массива.
Вывести отрицательные элементы на экран.
Отсортировать массив по убыванию и вывести на экран
Дан одномерный массив, состоящий из N вещественных элементов.
Ввести массив с клавиатуры.
Найти минимальный положительный элемент.
Вычислить сумму четных элементов массива.
Вывести массив на экран в обратном порядке.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N вещественных элементов.
Заполнить массив случайными числами.
Найти минимальный отрицательный элемент.
Вычислить произведение ненулевых элементов массива, кратных 3.
Вывести отрицательные элементы на экран в обратном порядке.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N целочисленных элементов.
Ввести массив с клавиатуры.
Найти максимальный отрицательный элемент.
Вычислить среднеарифметическое четных элементов массива.
Вывести ненулевые элементы на экран в обратном порядке.
Отсортировать массив по возрастанию и вывести на экран
Дан одномерный массив, состоящий из N целочисленных элементов.
Заполнить массив случайными числами.
Найти минимальный элемент.
Вычислить сумму положительных нечетных элементов массива.
Вывести положительные элементы на экран.
Отсортировать массив по возрастанию и вывести на экран

42