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

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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
