Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование задач с применением структурированных данных. Лабораторный практикум.pdf
X
- •ВВЕДЕНИЕ
- •ОБРАБОТКА МАССИВОВ ДАННЫХ С ПРИМЕНЕНИЕМ ФУНКЦИЙ
- •1.1. Общие рекомендации по работе с динамическими массивами
- •1.2. Пример программы для работы с динамическими массивами
- •1.3. Первое задание к лабораторной работе № 1
- •1.4. Общие рекомендации по использованию функций
- •ЛАБОРАТОРНАЯ РАБОТА № 2
- •ПРОГРАММНАЯ ОБРАБОТКА СТРОК И СТРУКТУР
- •2.1. Общие рекомендации по работе со строками
- •1.5. Пример программы для работы с функциями
- •1.6. Второе задание к лабораторной работе № 1
- •1.8. Третье задание к лабораторной работе № 1
- •2.2. Пример программы для работы со строками
- •2.3. Первое задание к лабораторной работе № 2
- •2.4. Общие рекомендации по работе с данными типа string
- •2.5. Второе задание к лабораторной работе № 2
- •2.6. Общие рекомендации по работе со структурами
- •2.7. Пример программы для работы со структурами
- •2.8. Третье задание к лабораторной работе № 2
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •ПРОГРАММНЫЕ МЕТОДЫ РАБОТЫ
- •С ЦЕЛОЧИСЛЕННЫМИ ДАННЫМИ
- •3.1. Общие рекомендации
- •3.2. Первое задание к лабораторной работе № 3
- •3.3. Системы счисления и перевод чисел из одной системы в другую
- •3.4. Второе задание к лабораторной работе № 3
- •ЛАБОРАТОРНАЯ РАБОТА № 4
- •ТЕХНОЛОГИИ РАБОТЫ С ФАЙЛАМИ
- •4.1. Общие рекомендации по работе с файлами
- •4.2. Первое задание для лабораторной работы № 4
- •4.3. Пример программы для работы с файлами структур
- •4.4. Второе задание для лабораторной работы № 4
- •ЛАБОРАТОРНАЯ РАБОТА № 5
- •МЕТОДЫ СОРТИРОВКИ И ИХ ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
- •5.1. Общие рекомендации по реализации методов сортировки
- •5.2. Задания к лабораторной работе № 5
- •ЛАБОРАТОРНАЯ РАБОТА № 6
- •ЛИНЕЙНЫЕ СПИСКИ
- •6.2. Пример программы работы с линейным списком
- •6.3. Задания к лабораторной работе № 6
- •ЛАБОРАТОРНАЯ РАБОТА № 7
- •ПРОГРАММНОЕ СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ КЛАССОВ
- •7.1. Общие рекомендации по работе с классами
- •7.2. Пример программы реализации класса
- •7.3. Задания к лабораторной работе № 7
- •ЛАБОРАТОРНАЯ РАБОТА № 8
- •РАБОТА С РОДИТЕЛЬСКИМИ И ДОЧЕРНИМИ КЛАССАМИ
- •8.2. Пример программы с виртуальными функциями
- •8.3. Виртуальные функции и абстрактные классы
- •8.4. Задания к лабораторной работе № 8
- •ЛАБОРАТОРНАЯ РАБОТА № 9
- •РАБОТА С КОНТЕЙНЕРНЫМИ КЛАССАМИ И МОДУЛЯМИ
- •9.1. Общие сведения о контейнерных классах и векторах
- •9.2. Общие сведения о модулях
- •9.3. Пример программы на С++
- •9.4. Задания к лабораторной работе № 9
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ
РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное
учреждение высшего образования
«Воронежский государственный технический университет»
М. Ю. Сергеев, Н. И. Гребенникова, Т. И. Сергеева
ПРОГРАММИРОВАНИЕ ЗАДАЧ
С ПРИМЕНЕНИЕМ СТРУКТУРИРОВАННЫХ
ДАННЫХ
Лабораторный практикум
Воронеж 2023
1

УДК 681.3.06(075.8)
Сергеев, М. Ю.
ISBN 978-5-7731-1097-2
УДК 681.3.06(075.8)
ББК 32.973.2-018я7
ISBN 978-5-7731-1097-2
Сергеев М. Ю., Гребенникова Н. И.,
Сергеева Т. И., 2023
ФГБОУ ВО «Воронежский
университет», 2023
ББК 32.973.2-018я7
С322
Рецензенты:
институт цифровых и интеллектуальных систем,
Воронежский государственный лесотехнический университет
им. Г. Ф. Морозова
(директор института, д-р техн. наук, проф. В. К. Зольников);
Т. М. Леденева, д-р техн. наук, зав. кафедрой вычислительной математики
и прикладных информационных технологий
Воронежского государственного университета
Программирование задач с применением структурированных
данных: лабораторный практикум [Электронный ресурс]. – Электрон-
ные текстовые и графические данные (1,6 Мб)/ М.Ю. Сергеев,
С322
Н.И. Гребенникова, Т.И. Сергеева. – Воронеж: ФГБОУ ВО «Воронежский государственный технический университет», 2023. – 1 электрон.
опт. диск (DVD-ROM): цв. – Сиcтем. требования: ПК 500 и выше;
256 Мб ОЗУ; Windows 10; SVGA c разрешением экрана 1024х768;
Adobe Acrobat; CD-ROM дисковод; мышь. – Загл. с экрана.
Лабораторный практикум содержит теоретические сведения и варианты
заданий для проведения лабораторных работ по курсу «Объектноориентированное программирование».
Издание предназначено для студентов направления 09.03.01 «Информатика и вычислительная техника» (профиль «Вычислительные машины, комплексы, системы и сети») очной и заочной форм обучения.
Ил. 4. Табл. 12. Библиогр.: 7 назв.
Издается по решению редакционно-издательского совета
Воронежского государственного технического университета
государственный технический
2

ВВЕДЕНИЕ
Решение вычислительных задач со сложными структурами данных, является важной составляющей процесса обучения специалистов в области информатики, вычислительной техники и информационных технологий.
К сложным структурам данных можно отнести: динамические массивы,
решение вычислительных задач с применением функций, работа с упакованными данными и с данными на битовом уровне, технологии работы с файлами,
программная реализация алгоритмов сортировки, решение задач с динамическими структурами данных, создание и использование классов, работа с родительскими и дочерними классами, программирование контейнерных классов и
модулей.
В данном практикуме рассматриваются задачи программной обработки
сложных структур данных.
Первая лабораторная работа посвящена обработке динамических массивов данных с применением функций.
Вторая лабораторная работа посвящена изучению методов работы со
строковыми данными и структурами.
В третьей лабораторной работе реализуются программы обработки целочисленных данных.
Четвертая лабораторная работа изучает технологии работы с файлами и
выполнения основных операций над ними.
Пятая лабораторная работа исследует методы сортировки и алгоритмы их
программной реализации.
В шестой лабораторной работе описаны технологии программирования с
применением линейных списков.
Седьмая лабораторная работа посвящена программному созданию и использованию классов.
Восьмая работа направлена на освоение работы с родительскими и дочерними классами.
Девятая лабораторная работа рассматривает технологии работы с контейнерными классами и модулями.
Практикум снабжен большим количеством практических примеров, позволяющих освоить программную реализацию решения задач со сложными
структурами данных. Он может быть полезен всем студентам бакалавриата и
магистратуры, осваивающим программное решение разнообразных задач по
обработке данных.
Издание соответствует типовой программе по дисциплине «Объектноориентированное программирование» и предназначено для студентов бакалавриата направления подготовки 09.03.01 «Информатика и вычислительная
техника» очной и заочной форм обучения.
3

ЛАБОРАТОРНАЯ РАБОТА № 1
ОБРАБОТКА МАССИВОВ ДАННЫХ С ПРИМЕНЕНИЕМ ФУНКЦИЙ
1.1. Общие рекомендации по работе с динамическими массивами
Цель работы – приобретение практических навыков реализации про-
грамм, осуществляющих создание и обработку динамических массивов данных
с применением функций.
Динамические массивы создают с помощью операции new. При создании
массива указывают его тип и размерность. Пример создания динамического
массива:
int n = 100;
float *p=new float[n];
В примере задают размер массива (n), создают переменную типа float. В
динамической памяти при этом отводится непрерывная область, достаточная
для размещения 100 элементов вещественного типа. Адрес начала непрерывной
области записывается в указатель p. Динамические массивы нельзя при создании инициализировать, и они не обнуляются.
Память, зарезервированная под динамический массив с помощью new [],
должна освобождаться операцией delete:
delete [] p;
Освобождение памяти из-под массива выполняется с любым количеством
измерений.
Для создания динамического многомерного массива необходимо указать
в операции new все его размерности. Наиболее универсальным и безопасным
способом выделения памяти под двумерный массив является следующий:
int n = 5;
int m = 4;
int **a = new int *[n]; //1
for (int i = 0; i < n; i++) //2
a[i] = new int [m]; //3
В операторе 1 объявляется переменная типа «указатель на указатель на
int». В этом операторе выделяется память под массив указателей на строки массива (количество строк равно n).
В операторе 2 организуется цикл для выделения памяти под каждую
строку массива.
4

В операторе 3 каждому элементу массива указателей на строки присваивается адрес начала участка памяти, выделенного под строку двумерного массива. Каждая строка состоит из m элементов типа int.
Для тестирования программ, в которых требуется ввод и анализ большого
количества числовых данных (например, длинных числовых последовательностей или больших по размеру матриц) весьма удобно использовать генератор
случайных чисел для задания стартовой последовательности значений.
Для генерации случайного целого числа используется функция
rand()
Данная функция выбирается из модуля «stdlib.h», у которой есть две важных особенности:
- значение генерируется в диапазоне от 0 до константы RAND_MAX
(32767);
- если предварительно не задать начальное значение последовательности
случайных чисел, то каждый раз будет генерировать одинаковая последовательность целых чисел.
Поэтому необходимо каждый раз изменять начальное значение при по-
мощи функции srand (модуль «stdlib.h»)
srand(seed),
где seed – начальное значение генератора случайных чисел.
Чтобы не придумывать значение каждый раз заново, можно воспользоваться величиной, хранящей значение системного времени (для корректной работы требуется подключение к программе модуля «time.h»):
srand((unsigned)time(NULL));
Если нужно задать случайные числа в определенном диапазоне, то следует создать соответствующее выражение, включающее функцию генератора
случайных чисел. Например, для диапазона целых чисел функция будет выглядеть следующим образом:
rand()%(max-min+1)+min
где min – нижний предел диапазона, а max – верхний.
5

1.2. Пример программы для работы с динамическими массивами
Пример. Найти количество отрицательных элементов в целочисленной
матрице. Размерность матрицы задается пользователем. Значения элементов
матрицы задаются с помощью генератора случайных чисел, диапазон значений
также задается пользователем.
Листинг программы на С++ приведен ниже.
#include "stdafx.h" // Добавляется в в старые версии (например в 2010
// и 2015) по умолчанию (в новых версия Visual
// Studio не нужен)
#include <iostream> //Подключение заголовочного файла
// с функциями ввода-вывода
#include <iomanip> // Подключение заголовочного файла
//для управления отображением данных на экране
using namespace std; // Использование пространства имен std
int main()
{
setlocale(LC_ALL, "Russian"); // Установка кодовой страницы
//Ввод размерности матрицы
int n, m;
cout << "Введите количество строк матрицы \n";
cin >> n;
cout << "Введите количество столбцов матрицы\n";
cin >> m;
//Выделение памяти под матрицу
int** y = new int* [n];
for (int i = 0; i < n; i++)
y[i] = new int[m];
//Инициализация генератора случайных чисел (ГСЧ)
srand(time(NULL));
//Задание диапазона ГСЧ
int dmin, dmax;
cout << "Введите нижний предел ГСЧ\n";
cin >> dmin;
cout << "Введите верхний предел ГСЧ\n";
cin >> dmax;
//Заполнение матрицы случайными числами
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
y[i][j] = rand() % (dmax - dmin + 1) + dmin;
//Подсчет количества отрицательных элементов
int otr = 0;
for (int i = 0; i < n; i++)
6

for (int j = 0; j < m; j++)
Вариант
Задание
1
В целочисленной матрице найти количество строк, не содержащих
ни одного нулевого элемента.
2
В целочисленной матрице найти количество столбцов, содержащих
хотя бы один нулевой элемент.
3
В целочисленной матрице найти количество строк, сумма элементов которых больше величины, заданной пользователем.
4
В целочисленной матрице найти количество столбцов, сумма элементов которых больше нуля
if (y[i][j] < 0)
otr++;
//Вывод результатов
cout << "Массив n[" << n << "]\n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << setw(4) << y[i][j] << " ";
cout << endl;
}
cout << "\n Кол-во отрицательных элементов в матрице = " << otr <<
endl;
system("pause");
for (int i = 0; i < n; i++) //Удаление массива из динамической памяти
delete[]y[i];
return 0;
}
1.3. Первое задание к лабораторной работе № 1
Задание
При выполнении задания необходимо:
- написать и отладить программу на С++ в консольном режиме в соответ-
ствии с вариантом задания для обработки динамических массивов;
- варианты задания приведены в табл. 1; номер варианта совпадает с по-
рядковым номером студента в списке;
- проверить работу программы в консольном режиме.
Отчет
Отчет должен содержать титульный лист, вариант задания, текст про-
граммы с комментариями, скриншот результатов работы программы.
Варианты заданий для реализации работы с динамическими массивами
Таблица 1
7

Продолжение табл. 1
Вариант
Задание
5
В целочисленной квадратной матрице найти сумму модулей элементов, размещенных на главной диагонали
6
В целочисленной квадратной матрице найти сумму элементов выше главной диагонали
7
В целочисленной квадратной матрице найти количество положительных элементов на главной диагонали
8
В целочисленной матрице определить количество строк, в которых
положительных элементов больше, чем отрицательных
9
В целочисленной квадратной матрице найти максимальный по мо-
гонали
10
В целочисленной матрице найти количество строк, содержащих
значение, заданное пользователем
11
В целочисленной матрице найти количество столбцов, где четных
элементов меньше, чем нечетных
12
В целочисленной квадратной матрице найти количество нулевых
элементов, размещенных под главной диагональю
13
В целочисленной матрице найти количество столбцов, в которых
количества положительных и отрицательных элементов совпадают
14
В целочисленной матрице найти количество элементов, значения
вателем
15
В целочисленной квадратной матрице найти, где больше нечетных
элементов – над или под главной диагональю
16
В целочисленной матрице найти количество строк, где содержится
столько нулевых элементов, сколько указал пользователь
17
В целочисленной матрице найти количество положительных элементов, расположенных над главной диагональю
18
В целочисленной матрице найти сумму четных элементов, расположенных под главной диагональю
19
В целочисленной матрице найти разность между суммами элементов, расположенных над и под главной диагональю
20
В целочисленной матрице найти сумму элементов в столбце, номер
которого указал пользователь
21
В целочисленной матрице найти произведение элементов в строке,
номер которой указал пользователь
22
В целочисленной матрице найти максимальный элемент в строке,
номер которой указал пользователь
23
В целочисленной матрице найти количество столбцов, где содержится столько элементов, равных 1, сколько указал пользователь
дулю элемент, среди элементов расположенных выше главной диа-
которых входят в диапазон [a, b]. Значения a и b задаются пользо-
8

Окончание табл. 1
Вариант
Задание
24
В целочисленной квадратной матрице найти количество нечетных
положительных элементов, размещенных над главной диагональю
25
В целочисленной матрице найти количество столбцов, где содержится элемент, указанный пользователем
26
В целочисленной матрице найти количество строк, сумма элементов в которых меньше значения, указанного пользователем
27
В целочисленной квадратной матрице найти количество четных
отрицательных элементов на главной диагонали
28
В целочисленной квадратной матрице найти, где больше нулевых
элементов – над или под главной диагональю
29
В целочисленной квадратной матрице найти, где меньше четных
элементов – над или под главной диагональю
30
В целочисленной квадратной матрице найти, где больше сумма
элементов – над или под главной диагональю
31
В целочисленной квадратной матрице заменить все нулевые элементы на 100. Вывести исходную и новую матрицы.
32
В целочисленной квадратной матрице заменить все отрицательные
элементы на 0. Вывести исходную и новую матрицы.
33
В целочисленной квадратной матрице заменить все максимальные
элементы на 99. Вывести исходную и новую матрицы.
34
В целочисленной квадратной матрице заменить все минимальные
элементы на 0. Вывести исходную и новую матрицы.
35
В целочисленной квадратной матрице все нечетные элементы
умножить на два. Вывести исходную и новую матрицы.
36
В целочисленной квадратной матрице все четные элементы умножить на три. Вывести исходную и новую матрицы.
37
В целочисленной квадратной матрице заменить все положительные
элементы на 2. Вывести исходную и новую матрицы.
38
В целочисленной квадратной матрице переставить местами строки,
вую матрицы.
39
В целочисленной квадратной матрице переставить местами столб-
новую матрицы.
40
В целочисленной квадратной матрице заменить все отрицательные
номера которых заданы пользователем. Вывести исходную и но-
цы, номера которых заданы пользователем. Вывести исходную и
элементы на их модули. Вывести исходную и новую матрицы.
9

1.4. Общие рекомендации по использованию функций
Цель лабораторной работы - освоение технологии программирования
задач, использующих функции.
Функция – это именованная последовательность описаний и операторов,
выполняющая какое-либо законченное действие.
Исходные данные могут передавать в функцию через параметры. Функ-
ция имеет единственный результат и передает его через значение.
Любая программа на языке С++ состоит из набора функций. Одна из
функций должна иметь имя main. С этой функции начинается выполнение программы.
Любая функция должна быть сначала объявлена, а затем определена.
Объявлений функции может быть несколько, а определение только одно. Объявление функции должно находиться в тексте раньше ее вызова для того, чтобы
компилятор мог осуществить проверку правильности вызова. Итак, функция
начинает выполняться в момент вызова.
Объявление функции (прототип, заголовок, сигнатура) задает ее имя, тип
возвращаемого значения и список передаваемых параметров.
Определение функции содержит объявление, тело функции, представля-
ющее собой последовательность операторов и описаний в фигурных скобках:
[класс] тип имя ([список параметров])
{тело функции}
С помощью необязательного модификатора класс можно явно задать об-
ласть видимости функции, используя ключевые слова extern и static.
Слово extern обозначает глобальную видимость во всех модулях про-
граммы. Действует по умолчанию.
Слово static обозначает видимость только в пределах модуля, в котором
определена функция.
Тип значения, которое возвращает функция, может быть любым, кроме
массива и функции. Однако возвращаемое значение может быть указателем на
массив или функцию. Если функция не должна возвращать значение, то указывают тип void.
Список параметров определяет величины, которые требуется передать в
функцию при ее вызове. Элементы списка параметров разделяются запятыми.
Для каждого параметра, передаваемого в функцию, указывается его тип и имя
(в объявлении имена можно опускать).
В определении, в объявлении и при вызове одной и той же функции типы
и порядок следования параметров должны совпадать. На имена параметров
ограничений по соответствию не накладывается, поскольку функцию можно
вызывать с различными аргументами.
Тип возвращаемого значения и типы параметров совместно определяют
тип функции.
10
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
