Добавил:
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
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

32. Создать массив из 3-5 структур, каждая из которых содержит следу-
Номер ко-
Марка
Цена за
Кол-во
литров
Стоимость
бензина
Итого
Название те-
Количество
студентов
Количество
тест
Процент
тест
Итого
Модель
Мощность
Кол-во
Цена
Стоимость
на складе
Итого
ющие поля: номер колонки, марка бензина, цена за литр, количество проданных
литров. Рассчитать стоимость проданного бензина и составить ведомость такого типа:
Отчет по продажам бензина
лонки
бензина
литр
проданных
проданного
33. Создать массив из 3-5 структур, каждая из которых содержит следующие поля: название теста, количество тестируемых студентов, количество не
прошедших тест. Рассчитать процент прошедших тест и составить ведомость
такого типа:
Отчет по тестированию
ста
тестируемых
не прошедших
прошедших
34. Создать массив из 3-5 структур, каждая из которых содержит следующие поля: модель автомобиля, мощность двигателя, количество на складе, цена автомобиля. Рассчитать стоимость автомобилей на складе и составить ведомость такого типа:
Отчет по складу автомобилей
автомобиля
двигателя
на складе
41
автомобиля
автомобилей

35. Создать массив из 3-5 структур, каждая из которых содержит следу-
Адрес
квартиры
Этаж
Цена за м2
Площадь
Стоимость
квартиры
Итого
Номер
автомобиля
Модель
Дата
продажи
Цена
Скидка
Цена
продажи
Итого
Факультет
Шифр
Кол-во
Кол-во
кафедре
Процент
подготовкой
Итого
Номер
Номер
Дата
Кол-во
Средняя
за рейс
Выручка
Итого
2
ющие поля: адрес квартиры, этаж, цена за м
, площадь. Рассчитать стоимость
квартиры и составить ведомость такого типа:
Отчет по стоимости квартир
36. Создать массив из 3-5 структур, каждая из которых содержит следующие поля: номер автомобиля, модель, дата продажи, цена, скидка. Рассчитать
стоимость продажи с учетом скидки и составить ведомость такого типа:
Отчет по стоимости продаж
37. Создать массив из 3-5 структур, каждая из которых содержит следующие поля: факультет, шифр группы, количество студентов, количество студентов на военной кафедре. Рассчитать процент студентов с военной подготовкой и составить ведомость такого типа:
Отчет по группам студентов
группы
студентов
студентов
на военной
студентов
с военной
38. Создать массив из 3-5 структур, каждая из которых содержит следующие поля: номер автобуса, номер маршрута, дата работы, количество рейсов,
средняя выручка за рейс. Рассчитать выручку за день и составить ведомость такого типа:
Отчет о выручке за день
автобуса
маршрута
работы
42
рейсов
выручка
за день

39. Создать массив из 3-5 структур, каждая из которых содержит следу-
Номер
Модель
Дата
Цена
Стоимость
услуг
Цена
Итого
Адрес
Кол-во
Цена
Жилая
дома
Стоимость
площади
Итого
ющие поля: номер автомобиля, модель, дата продажи, цена, скидка. Рассчитать
цену продажи с учетом стоимости дополнительных услуг и составить ведомость такого типа:
Отчет по стоимости продаж автомобилей
автомобиля
продажи
дополнительных
продажи
40. Создать массив из 3-5 структур, каждая из которых содержит следующие поля: адрес дома, количество квартир, цена за м
2
, жилая площадь дома.
Рассчитать стоимость жилой площади дома и составить ведомость такого типа:
Отчет по стоимости жилой площади домов
дома
квартир
за м2
площадь
жилой
43

ЛАБОРАТОРНАЯ РАБОТА № 3
ПРОГРАММНЫЕ МЕТОДЫ РАБОТЫ
С ЦЕЛОЧИСЛЕННЫМИ ДАННЫМИ
3.1. Общие рекомендации
Цель лабораторной работы - освоение методик программирования задач
обработки целочисленных данных.
Битовые операции и упакованные данные
Обычно при программировании на языке высокого уровня минимальным
размером данных является байт. Однако есть задачи по обработке целочисленных данных на битовом уровне. Например, в задаче программного управления
устройствами необходимо анализировать регистр устройства. В регистре
устройства каждый бит может иметь самостоятельное значение (чтение - запись, готов - не готов и т.д.).
Чтобы работать на битовом уровне, надо уметь менять значения бита,
например, устанавливать в бит 1, сбрасывать бит в 0, определять значение отдельного бита целочисленной переменной, не меняя при этом остальных битов.
Биты в числе принято номеровать справа налево, начиная с 0.
Для установки в единицу отдельного бита целочисленной переменной
необходимо выполнить операцию ИЛИ (операция OR, на языке C записывается
|) со специально подобранным целым, которое принято называть маской. Для
установки бита номер n в маске в соответствующей позиции должна стоять 1, а
все остальные биты должны быть 0.
Пусть, например, необходимо установить в единицу 5-ый бит целочисленной байтовой переменной x. В качестве маски нам потребуется комбинация
битов 00100000, что на языке C можно записать с помощью шестнадцатеричной константы 0х20. Имеем:
x |= 0x20;
Сброс бита выполняется операцией И (операция AND, на языке C записывается &) с маской, в которой все 1, кроме одного 0, находящегося в соответствующей позиции (11011111):
x &= 0xDF;
Для определения значения бита сначала следует скопировать число во
временную переменную (чтобы не испортить основное значение), затем сбросить (обнулить) все биты, кроме нужного, т.е. выполнить операцию И с маской,
состоящей из нулей и единственной единицей в нужной позиции. Если в результате получится 0 – значит, в исходной переменной был 0. Иначе – 1.
44

y = x;
y & = 0x20;
if (y > 0)
cout << 1
else
cout << 0;
Для определения значения бита можно также использовать операции
сдвига:
i << j – сдвиг содержимого i на j разрядов влево; освободившиеся младшие разряды заполняются нулями;
i >> j – сдвиг содержимого i на j разрядов вправо; освободившиеся старшие разряды заполняются нулями.
y = x;
y <<=2 >>=7; // уничтожение всех битов, кроме нужного бита
if (y > 0) cout << 1 else cout << 0;
Здесь важно, чтобы переменная y была объявлена как беззнаковая. Иначе
при сдвиге вправо освобождающиеся биты будут заполняться не нулями, а единицами.
Упакованные данные
Размер самой «маленькой» переменной составляет 8 бит. Но для хранения
некоторой информации достаточно данных меньшего объема. Например, информацию о поле человека можно записать всего в 1 бит. Можно хранить несколько значений в одной целочисленной переменной. Например, можно упаковать дату в 16 бит: 7 бит использовать для года, 4 бита - для месяца, 5 бит –
для дня. В таком случае необходимо уметь записывать значения в часть переменной и извлекать их оттуда. Очевидно, что оператор присваивания в этом
случае не сработает.
Пусть, например, имеется 16-разрядное число, значение которого надо
хранить в четырех битах, с 3-го по 6-ой.
Чтобы извлечь из числа значение, следует скопировать его в промежуточную переменную (которую можно будет менять). Затем следует обнулить в
ней все биты, кроме нужных битов (т.е. с 0 по 2 и с 7 по 15). Для обнуления
можно использовать операцию И со специально подобранным числом-маской
или операции сдвига. После этого следует сдвинуть разряды, используя операцию >>, вправо так, чтобы младший разряд нужного значения попал в нулевой
бит (в данном примере, на 3 бита вправо). Значение выделено.
Для записи необходимо использовать следующий порядок действий:
- очистить старое значение (т.е. обнулить биты 3-7, используя логическую
операцию И уже с другой, инвертированной маской;
- присвоить вспомогательной переменной нужное значение, сдвинуть его
влево на требуемое число бит (операция <<);
- выполнить логическую операцию ИЛИ.
45

3.2. Первое задание к лабораторной работе № 3
Вариант
Тип данных для упаковки
Поля данных (слева направо, от
старших битов к младшим)
1
Дата (год – две последних
- год – 7 бит
- день – 5 бит.
2
Дата (год – две последних
- день – 5 бит
- год – 7 бит
3
Дата (год – две последних
- месяц – 4 бита
- день – 5 бит
4
Дата (год – две последних
- день – 5 бит
- месяц – 4 бита
5
Дата (год – две последних
- месяц – 4 бита
- год – 7 бит
6
Дата (год – две последних
- год – 7 бит
- месяц – 4 бита
7
Данные о человеке
- психотип – 2 бита (сангвиник,
- вес – 7 бит (<=127)
Задание
Написать программу позволяющую работать с упакованными данными.
Она должна реализовывать следующие функции:
– ввод данных, которые требуется упаковать, пользователем с клавиатуры
(варианты заданий приведены в табл. 8);
– упаковку данных в целое 16-разрядное число (тип данных – unsigned
short);
– распаковку данных из числа (как всех данных сразу, так и отдельного
поля данных по выбору пользователя).
Операции распаковки и упаковки данных должны быть оформлены от-
дельными функциями.
Отчет
Отчет должен содержать титульный лист, вариант задания, текст программы с комментариями, скриншоты результатов работы программы.
Варианты первого задания для лабораторной работы № 3
Таблица 8
цифры)
цифры)
цифры)
цифры)
цифры)
цифры)
- месяц – 4 бита
- месяц – 4 бита
- год – 7 бит
- год – 7 бит
- день – 5 бит
- день – 5 бит
меланхолик, холерик, флегматик)
- рост – 7 бит (<=127)
46

Продолжение табл. 8
Вариант
Тип данных для упаковки
Поля данных (слева направо, от
старших битов к младшим)
8
Данные о человеке
- вес – 7 бит (<=127).
меланхолик, холерик, флегматик)
9
Данные о человеке
- вес – 7 бит (<=127).
- рост – 7 бит (<=127)
10
Данные о квартире
- номер квартиры – 9 бит
- подъезд – 3 бита
11
Данные о квартире
- этаж – 4 бита
- номер квартиры – 9 бит
12
Данные о квартире
- этаж – 4 бита
- подъезд – 3 бита
13
Данные о квартире
- подъезд – 3 бита
- номер квартиры – 9 бит
14
Данные о квартире
- номер квартиры – 9 бит
- этаж – 4 бита
15
Данные о квартире
- подъезд – 3 бита
- этаж – 4 бита
16
Данные о студенте
- курс – 3 бита
- возраст – 6 бит (<=63)
17
Данные о студенте
- год поступления – 7 бит (две
- курс – 3 бита
18
Данные о студенте
- возраст – 6 бит (<=63)
цифры)
- рост – 7 бит (<=127)
- психотип – 2 бита (сангвиник,
- психотип – 2 бита (сангвиник,
меланхолик, холерик, флегматик)
- этаж – 4 бита
- подъезд – 3 бита
- номер квартиры – 9 бит
- этаж – 4 бита
- подъезд – 3 бита
- номер квартиры – 9 бит
- год поступления – 7 бит (две
цифры)
цифры)
- возраст – 6 бит (<=63)
- курс – 3 бита
- год поступления – 7 бит (две
47

Продолжение табл. 8
Вариант
Тип данных для упаковки
Поля данных (слева направо, от
старших битов к младшим)
19
Данные о студенте
- год поступления – 7 бит (две
- возраст – 6 бит (<=63)
20
Данные о студенте
- возраст – 6 бит (<=63)
- курс – 3 бита
21
Время
- часы (1-12) – 4 бита
- секунды (0-59) – 6 бит
22
Время
- минуты (0-59) – 6 бит
- секунды (0-59) – 6 бит
23
Время
- минуты (0-59) – 6 бит
- часы (1-12) – 4 бита
24
Время
- часы (1-12) – 4 бита
- минуты (0-59) – 6 бит
25
Время
- секунды (0-59) – 6 бит
- часы (1-12) – 4 бита
26
Время
- секунды (0-59) – 6 бит
- минуты (0-59) – 6 бит
27
Данные о студенте
- курс – 3 бита
цифры)
28
Данные о человеке
- рост – 7 бит (<=127)
меланхолик, холерик, флегматик)
29
Данные о габаритах груза
- вес – 11 бит (<=1424)
- длина – 3 бита (<=7)
цифры)
- курс – 3 бита
- год поступления – 7 бит (две
цифры)
- минуты (0-59) – 6 бит
- часы (1-12) – 4 бита
- секунды (0-59) – 6 бит
- секунды (0-59) – 6 бит
- минуты (0-59) – 6 бит
- часы (1-12) – 4 бита
- возраст – 6 бит (<=63)
- год поступления – 7 бит (две
- вес – 7 бит (<=127).
- психотип – 2 бита (сангвиник,
- ширина – 2 бита (<= 3)
48

Продолжение табл. 8
Вариант
Тип данных для упаковки
Поля данных (слева направо, от
старших битов к младшим)
30
Данные об автомобиле
- цвет – 5 бит (белый -0, черный -
- кол-во дверей – 4 бит (<=5)
31
Данные о габаритах груза
- ширина – 2 бита (<= 3)
- вес – 11 бит (<=1424)
32
Данные об автомобиле
- модель – 4 бит (Opel - 0, Mazda -
33
Данные об АЗС
- номер АЗС – 7 бит (<= 127)
- 2, Воронеж - 3, Краснодар - 4)
34
Данные о товаре
- цена – 8 бит
вый – 1, второй -2)
35
Данные о товаре
- сорт – 2 бита (высший – 0, пер-
- количество в упаковке – 6 бит
36
Данные о мебели
- производитель – 4 бита (отече-
3, кухня - 4)
1, красный -2, синий - 3, серый -
4)
- год производства – 7 бит (две
цифры)
- длина – 3 бита (<=7)
1, Mercedes - 2, Ford - 4)
- марка бензина 5 бит (АИ-98 - 0,
АИ-95 - 1, АИ-92 - 2)
- год производства – 7 бит (две
цифры)
- вид топлива – 2 бита (бензин - 0,
газ - 1)
- регион -7 бит (Москва - 0,
Санкт-Петербург - 1, Новосибирск
- количество в упаковке – 6 бит
- сорт – 2 бита (высший – 0, пер-
вый – 1, второй -2)
- цена – 8 бит
ственный - 0, импортный - 1)
- год производства – 8 бит (две
цифры)
- тип мебели – 4 бита (стенка - 0,
спальня - 1, детская - 2, гостиная -
49

Окончание табл. 8
Вариант
Тип данных для упаковки
Поля данных (слева направо, от
старших битов к младшим)
37
Данные о мебели
- тип мебели – 4 бита (стенка - 0,
0, Белоруссия – 1, Казахстан – 2)
38
Данные о пациенте
- год рождения – 7 бит (две циф-
- 3, стенокардия - 4)
39
Данные о враче
- специализация – 6 бит (хирург -
- пол – 4 бита (мужской, женский)
40
Данные о враче
- пол – 4 бита (мужской - 0, жен-
- стаж работы – 6 бита (<=50)
спальня - 1, детская - 2, гостиная 3, кухня - 4)
- год производства – 8 бит (две
цифры)
- производитель – 4 бита (Россия -
ры)
- пол – 2 бита (мужской - 0, женский - 1)
- заболевание -7 бит (гипертония 0, диабет - 1, аритмия - 2, ишемия
3.3. Системы счисления и перевод чисел из одной системы в другую
Системы счисления
Позиционные системы счисления — это системы счисления, в которых
значение цифры напрямую зависит от её положения в числе.
Например, число 01 обозначает единицу, 10 – два (в двоичной системе
счисления).
Позиционные системы счисления позволяют легко производить арифметические расчёты.
Представление чисел с помощью арабских цифр — самая распространённая позиционная система счисления, она называется «десятичной системой
счисления». Десятичной системой она называется потому, что использует десять цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9.
0, терапевт - 1, кардиолог - 2, ревматолог - 3, окулист - 4)
- стаж работы – 6 бита (<=50)
ский - 1)
- специализация – 6 бит (терапевт
– 0, хирург - 1, кардиолог - 2, рев-
матолог - 3, окулист - 4)
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
