Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование задач с применением структурированных данных. Лабораторный практикум.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
20. Составить программу, которая обрабатывает информацию о таксопарке. Сведения о такси содержат: – номер машины (ключ); – ФИО водителя; – марка машины; – стаж водителя.
21. Составить программу, которая обрабатывает информацию об авиаполке. Сведения об авиаполке содержат:
– номер полка (ключ); – ФИО командира; – количество самолетов; – количество боеготовых самолетов.
22. Составить программу, которая обрабатывает информацию об учебной
дисциплине.
Сведения об учебной дисциплине содержат:
– шифр дисциплины (ключ); – название дисциплины; – количество лекционных часов; – количество часов на лабораторные работы.
23. Составить программу, которая обрабатывает информацию о товарах. Сведения о товарах содержат:
– индекс товара (ключ); – название товара; – цена товара.
24. Составить программу, которая обрабатывает информацию о счетах. Сведения о счете содержат:
– номер счета (ключ); – ФИО клиента; – годовой процент.
25. Составить программу, которая обрабатывает информацию о сотруд-
никах.
Сведения о сотруднике содержат:
– табельный номер (ключ); – ФИО сотрудника; – должность.
91
26. Составить программу, которая обрабатывает информацию о студентах. Сведения о студенте содержат:
– номер зачетки (ключ); – ФИО студента; – группа.
27. Составить программу, которая обрабатывает информацию о файлах. Сведения о файле содержат:
– название файла (ключ); – тип файла; – размер файла.
28. Составить программу, которая обрабатывает информацию об обору-
довании.
Сведения об оборудовании содержат:
– серийный номер (ключ); – название оборудования; – тип оборудования; – стоимость оборудования.
29. Составить программу, которая обрабатывает информацию о принтерах. Сведения о принтерах содержат:
– серийный номер (ключ); – модель; – скорость печати в стр./мин.;
- стоимость принтера.
30. Составить программу, которая обрабатывает информацию о мониторах. Сведения о мониторах содержат:
– серийный номер (ключ); – модель; – длина диагонали;
- разрешение.
31. Составить программу, которая обрабатывает информацию о цен-
тральном процессоре.
Сведения о процессоре содержат:
– серийный номер (ключ); – тактовая частота в МГц; – разрядность (32/64 бит);
- цена.
92
32. Составить программу, которая обрабатывает информацию о видеокартах. Сведения о видеокарте содержат:
– серийный номер (ключ); – объем видеопамяти в Mb, или Gb; – тип видеопамяти (возможные значения - GDDR2, GDDR3, GDDR4 или
GDDR5);
- цена.
33. Составить программу, которая обрабатывает информацию о материн-
ской плате.
Сведения о материнской плате содержат:
– серийный номер (ключ); – форм-фактор (возможные значения - E-ATX, Standard ATX или просто
ATX, micro-ATX, mini-ITX или mini-STX);
– производитель (Intel, AMD);
- цена.
34. Составить программу, которая обрабатывает информацию о жестком
диске.
Сведения о жестком диске содержат:
– серийный номер (ключ); – интерфейс (стандарт обмена данными), возможные значения - ATA
(IDE, PATA), SATA;
– объем данных в ГБ или ТБ;
- цена.
35. Составить программу, которая обрабатывает информацию об опера-
тивной памяти компьютера.
Сведения об оперативной памяти содержат:
– серийный номер (ключ); – тип памяти (например, DDR3 SDRAM, DDR4 SDRAM, DDR5 SDRAM); – тактовая частота шины (возможные значения находятся в интервале от
800 до 8400 МГц;
- цена.
36. Составить программу, которая обрабатывает информацию о характе-
ристиках компьютера.
Сведения о характеристиках компьютера содержат:
– серийный номер (ключ); – тип процессора (Pentium MMX, Pentium II, Pentium III и Pentium IV и
т.д.);
– объем оперативной памяти;
- цена.
93
37. Составить программу, которая обрабатывает информацию о характе-
ристиках компьютерной мыши.
Сведения о характеристиках мыши содержат:
– серийный номер (ключ); – тип (механическая, оптическая, дистанционная); – разъем для подключения (к порту РС/2, USB-порту);
- цена.
38. Составить программу, которая обрабатывает информацию о характе-
ристиках клавиатуры.
Сведения о характеристиках клавиатуры содержат:
– серийный номер (ключ); – количество кнопок (стандартное – 105, нестандартное); – тип клавиатуры (мембранная, механическая);
- цена.
39. Составить программу, которая обрабатывает информацию о характе-
ристиках сканеров.
Сведения о характеристиках сканеров содержат:
– серийный номер (ключ); – оптическое разрешение (количество точек на дюйм), возможные значе-
ния - от 600 dpi до 1200 dpi;
– скорость сканирования (количество страниц в минуту);
- цена.
40. Составить программу, которая обрабатывает информацию о характе-
ристиках смартфонов.
Сведения о характеристиках смартфонов содержат:
– серийный номер (ключ); – разрешение экрана, возможные значения – от 480х800 пикселей до
1920х1080 пикселей;
– диагональ экрана, возможные значения – 3,5, 5, 6 дюймов;
- цена.
94

ЛАБОРАТОРНАЯ РАБОТА № 7

ПРОГРАММНОЕ СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ КЛАССОВ

7.1. Общие рекомендации по работе с классами

Цель лабораторной работы - освоение технологий программирования
задач, связанных с созданием и использованием классов.
Класс является абстрактным типом данных, который определяется поль-
зователем. Класс – это модель реального объекта. Класс определяется набором данных и списком функций для работы с этими данными.
Данные класса называют полями, а функции класса – методами. Поля и
методы образуют элементами класса. Описание класса в общем виде записы­вают так:
class <имя класса>{ [ private: ] <описание скрытых элементов класса> public: <описание доступных элементов класса>
};
Спецификаторы доступа private и publiс управляют видимостью элемен-
тов класса. Элементы, описанные после служебного слова private, видимы только внутри класса. Этот вид доступа принят в классе по умолчанию. Интер­фейс класса описывается после спецификатора public. Действие любого спе­цификатора распространяется до следующего спецификатора или до конца класса. Можно задавать несколько секций private и public, порядок их следова­ния значения не имеет.
Правила описания полей класса: – имеют любой тип, кроме типа этого же класса (но могут быть указате-
лями или ссылками на этот класс);
– в большинстве случаев описывают с модификатором const, при этом
поля инициализируют только один раз (с помощью конструктора) и не могут изменяться;
– могут быть, описаны модификатором static. Инициализация полей при описании не допускается. В каждом классе есть хотя бы один метод, имя которого совпадает с име-
нем класса. Он называется конструктором и вызывается автоматически при создании объекта класса.
Конкретные переменные типа «класс» называются экземплярами клас-
са, или объектами. Время жизни и видимость объектов зависит от вида и места их описания и подчиняются общим правилам С++.
95
При создании каждого объекта выполняются два действия: выделение
памяти под класс, достаточной для хранения всех его полей; автоматический вызов конструктора, который выполняет их инициализацию.
Доступ к элементам объекта аналогичен доступу к полям структуры.
Для доступа используют операцию «точка» при обращении к элементу через имя объекта и операцию «->» при обращении через указатель.
Методы класса не тиражируются. При выходе объекта из области дей-
ствия он уничтожается, при этом автоматически вызывается деструктор.
Деструктор – это особый вид метода, применяющийся для освобождения
памяти, занимаемой объектом. Деструктор вызывается автоматически, когда объект выходит из области видимости.
Имя деструктора начинается с тильды (~), непосредственно за которой
следует имя класса.
Деструктор:
– не имеет аргументов и возвращаемого значения; – не может быть объявлен, как const или static; – не наследуется.
Если деструктор явным образом не определен, компилятор автоматически
создает пустой деструктор.
Деструктор описывают в классе явным образом, когда объект содержит
указатели на память, выделяемую динамически. В противном случае, при уни­чтожении объекта память, на которую ссылались его поля-указатели, не будет помечена как свободная. Указатель на деструктор определить нельзя.

7.2. Пример программы реализации класса

Пример. Составить программу, формирующую сведения об отправлении
поездов.
Каждый поезд описывается с помощью класса, содержащего следующие
поля:
– номер поезда (ключ списка); – пункт назначения; – время отправления.
Данные хранятся в виде двунаправленного линейного списка. Программа должна реализовывать следующие операции в виде отдельных
функций или методов класса:
– формирование меню для выбора действия пользователем; – ввод данных в список, отсортированный по ключу; – вывод данных из списка в виде таблицы; – поиск элемента в списке по различным критериям (номеру поезда, име-
ни пункта назначения, времени отправления);
– удаление элемента из списка по заданному ключу.
96
Текст программы приведен ниже. #include <iostream>
#include <iomanip> #include <string> #include <Windows.h> using namespace std;
class List { //Класс для задания линейного списка public:
class Train { //Класс для задания элемента списка private: int train_num; //Номер поиска string p_nazn; //Пункт назначения string v_otpr; //Время отправления Train* prev; //Указатель на предыдущий узел Train* next; //Указатель на следующий узел public: //Конструктор Train(int t_num = 0, string p_naz = 0, string v_otp = 0) { train_num = t_num; p_nazn = p_naz; v_otpr = v_otp; next = 0; prev = 0; } //Функции для получения значений свойств объекта int get_train_num() const { return train_num; } string get_p_nazn() const { return p_nazn; } string get_v_otpr() const { return v_otpr; } Train* get_prev() const { return prev; } Train* get_next() const { return next; }
//Функции для установки значений свойств объекта void set_train_num(int new_train_num) { train_num = new_train_num; } void set_p_nazn(string new_p_nazn) { p_nazn = new_p_nazn; } void set_v_otpr(string new_v_otpr) { v_otpr = new_v_otpr; } void set_prev(Train* new_prev) { prev = new_prev; } void set_next(Train* new_next) { next = new_next; } }; private: Train* pbeg, * pend; //Указатели на начало и конец списка public: List() { pbeg = 0; pend = 0; } //Конструктор ~List(); //Деструктор
97
//Метод для проверки списка на пустоту bool is_empty(); //Метод для упорядоченной вставки элемента в список void add_sort(int t_num, string p_naz, string v_otp); //Метод для поиска элемента списка по ключу Train* find(int t_num); //Метод для поиска элемента по неключевым полям bool find_data(string field_name, string key); //Метод для удаления элемента из списка bool remove(int key); //Метод для печати списка void print(); private: //Метод для проведения горизонтальной линии //при печати списка void hline();
};
void menu(); //Функция для печати меню void vvod(List* L); //Функция для ввода данных void vivod(List* L); //Функция для вывода данных void search(List* L); //Функция для поиска данных void del(List* L); //Функция для удаления записи void vihod(List* L); //Функция для выхода из программы
typedef void (*pf)(List*); //Указатель на функцию //Массив для привязки функций к пунктам меню pf menu_list[] = { &vvod, &vivod, &search, &del, &vihod };
//Реализация метода для проверки списка на пустоту bool List::is_empty()
{ if (!pbeg) return true; else return false; }
//Реализация метода для упорядоченной вставки элемента //в список void List::add_sort(int t_num, string p_naz, string v_otp)
{ Train* pv = new Train(t_num, p_naz, v_otp); if (!pbeg) //Вставка первого элемента в список {
98
pbeg = pend = pv; pv->set_prev(0); } else { Train* pt = pbeg; while (pt) { //Просмотр списка if (t_num < pt->get_train_num()) { pv->set_next(pt); if (pt == pbeg) //Вставка в начало //списка { pv->set_prev(0); pbeg = pv; } else //Вставка в середину списка { (pt->get_prev())->set_next(pv); pv->set_prev(pt->get_prev()); } pt->set_prev(pv); return; } pt = pt->get_next(); } pv->set_next(0); //Вставка в конец списка pv->set_prev(pend); pend->set_next(pv); pend = pv; } }
//Реализация метода поиска элемента по ключу List::Train* List::find(int t_num) {
Train* pv = pbeg; while (pv) { if (pv->get_train_num() == t_num) break; pv = pv->get_next(); } return pv; }
//Реализация метода для поиска элементов по не ключевым полям
99
bool List::find_data(string field_name, string key)
{ bool find = false; Train* pv = pbeg; while (pv) { if ((field_name == "p_nazn" && pv->get_p_nazn() == key) || (field_name == "v_otpr" && pv->get_v_otpr() == key)) { find = true; //Вывод на экран найденного элемента cout << setw(5) << pv->get_train_num() << setw(20) << pv->get_p_nazn() << setw(10) << pv->get_v_otpr() << endl; } pv = pv->get_next(); } return find; }
//Реализация метода удаления элемента из списка bool List::remove(int key)
{ if (Train* pkey = find(key)) { if (pbeg == pend) { //Удаление единственного // элемента из списка pbeg = pend = 0; } else if (pkey == pbeg) { //Удаление первого //элемента из списка pbeg = pbeg->get_next(); pbeg->set_prev(0); } else if (pkey == pend) { //Удаление последнего элемента из списка pend = pend->get_prev(); pend->set_next(0); } else //Удаление элемента из середины списка { (pkey->get_prev())->set_next(pkey->get_next()); (pkey->get_next())->set_prev(pkey->get_prev()); } delete pkey;
100
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]