Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование задач с применением структурированных данных. Лабораторный практикум.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]