
2 семестр ФИБС / Информатика / ИДЗ Беляев / идз2
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра ИИСТ
отчет
по индивидуальному домашнему заданию №2
по дисциплине «Информатика»
Тема: «Классы C++»
Студент |
|
|
Преподаватель |
|
Беляев Ф.Я. |
Санкт-Петербург
2020
Оглавление
Задания: 3
Протокол выполнения заданий 4
1. Создать класс Race, описывающий результат заезда произвольного числа машин. 4
2. В качестве данных членов класса задать: количество машин в заезде, массив машин участников заезда, в соответствии с количеством из пункта 2.1, в качестве типа элементов массива использовать структуру Car из ИДЗ 1, в структуру Car добавить поле обозначающее время в заезде (в секундах) тип float. 4
3. Функции члены класса Race 5
3.1 Функция ввода значения структуры 5
3.2 Функция заполнения списка машин 5
3.3 Функция вывода таблицы результатов заезда 6
3.1.2 Список машин в заезде 6
3.1.3 Наибыстрейшее время заезда 6
Код 7
Вывод 9
Цель работы: изучить классы в C++, их архитектуру и принцип работы.
Задания:
Создать класс Race, описывающий результат заезда произвольного числа машин.
В качестве данных членов класса задать:
Количество машин в заезде.
Массив машин участников заезда, в соответствии с количеством из пункта 2.1
В качестве типа элементов массива использовать структуру Car из ИДЗ 1.
В структуру Car добавить поле обозначающее время в заезде (в секундах) тип float.
Функции члены класса Race:
Функция вывода таблицы результатов заезда. Вывести на экран следующее:
Количество машин в заезде.
Список машин в заезде, формат вывода: №пп, Бренд, Марка, Цвет, Время
Наибыстрейшее время заезда. Время выводить в формате ЧЧ:ММ:СС.МС (ЧЧ - часы, ММ - минуты, СС - секунды МС - миллисекунды (с точностью до 0.001с).
Функция заполнения списка машин. Обеспечить заполнение поля время случайным числом в пределах до 00:02:00.000 до 00:03:00.000.
Функция ввода значения структуры (можно имплементировать функционал из ИДЗ 1 пункт 2).
Протокол выполнения заданий
Создать класс Race, описывающий результат заезда произвольного числа машин.
Создал класс Race (строчки 4-6 описывают его).
В качестве данных членов класса задать: количество машин в заезде, массив машин участников заезда, в соответствии с количеством из пункта 2.1, в качестве типа элементов массива использовать структуру Car из ИДЗ 1, в структуру Car добавить поле обозначающее время в заезде (в секундах) тип float.
Задал данные членов класса: в строчку 16 поместил переменную, которая будет принимать количество машин в заезде (целочисленный тип int), строчка 17 содержит в себе массив машин участников, с указателем на структуру Car, что и требовалось; структура взята из первого ИДЗ, отредактирована под дальнейшие цели (оставлены бренд, модель и цвет машины для дальнейшего вывода, добавлена переменная типа float – «time», которая также сыграет свою роль в последующих заданиях по хранению времени заезда для каждого участника, переменная min типа int поможет при пересчёте времени под миллисекунды).
Строчки 18-24 содержат конструктор, деструктор класса Race, а также функции, которые потребуются для вывода необходимых результатов далее. Функции помещаю в public, для возможности корректной работы с ними по всей программе, конструктор и деструктор должны лежать там по определению.
Функции члены класса Race
Функция ввода значения структуры
Строчки 40-50 содержат в себе выполненный код по заданию из данного подпункта, аналогично второму подпункту первого ИДЗ, однако, стоит отметить, что здесь же появляется и случайное (использую rand()) заполнение времени для каждой машины, за которую она преодолела дистанцию (см. алгоритм на скриншоте).
Строчки 27-38 описывают запуск конструктора и деструктора класса, чтобы мы могли работать с его данными.
Функция заполнения списка машин
Строчки 52-56 описывают вторую функцию, которая «перенаправляет» наши принятые данные на отдельную машину из массива «list», тем самым заполняя списки машин. Обеспечение заполнения поля время случайным числом в пределах, описанных в задании, выполняет мой алгоритм, который расположен на строчках 48-49 (см. скриншот пункта 3.1).
Функция вывода таблицы результатов заезда
Строчка 73 выводит количество участников заезда, что требовалось в пункте
3.1.1 Количество машин в заезде
Значение берётся через указатель («this->») на приватную переменную класса Race (класс указывается на строчке 71 при вызове функции) – «car_count», которая и хранит в себе данную информацию.
Строчки 58-69 «подготавливают» информацию на вывод по каждой машине, следуя указаниям пункта
3.1.2 Список машин в заезде
обрабатывая её в правильной последовательности и редактируя формат времени под заданный. В цикле на строчках 75-81 нас интересует интервал 77-78, где принимаются и выводятся «подготовленные» на вывод значения результатов заезда по каждой машине и происходит нумерация позиций (строчка 77), как и требует задание.
3.1.3 Наибыстрейшее время заезда
Дальнейшие строчки (74 и 79-89) отвечают за корректную обработку и вывод наилучшего по времени результата заезда (пересчёт по циклу на строчках 79-80), который в дальнейшем выводится на экран в том же формате, что и выше, с указанием характеристик машины, которой это время и принадлежит, что удовлетворяет требованию задания 3.1.3.
Код
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
struct Car {
char brand[30];
char model[30];
char color[30];
float time;
int min;
};
class Race {
int car_count;
Car* list;
public:
Race();
~Race();
void InputList();
void InputCar(Car*);
void OutputList();
void OutputCar(Car*);
};
//конструктор
Race::Race() {
cout<<"Сколько машин участвовало в заезде?";
cin>>this->car_count;
this->list = new Car[this->car_count];
}
//деструктор
Race::~Race()
{
delete this->list;
}
void Race::InputCar(Car* ptr)
{
cout << "Бренд машины?"<< endl;
cin>>ptr->brand;
cout<<"Модель:" << endl;
cin>>ptr->model;
cout<<"Цвет:"<< endl;
cin>>ptr->color;
float n = 120000 + (rand() % 60001);
ptr->time = n / 1000;
}
void Race::InputList()
{
for (int i = 0; i < this->car_count; i++)
this->InputCar(&this->list[i]);
}
void Race::OutputCar(Car* ptr)
{
cout << ptr->brand << " " <<ptr->model << " " <<ptr->color << " ";
ptr->min = ptr->time / 60;
ptr->time -= ptr->min * 60;
if (ptr->time < 10)
{
printf("00:0%d:0%2.3f\n", ptr->min, ptr->time);
}
else
printf("00:0%d:%2.3f\n", ptr->min, ptr->time);
}
void Race::OutputList()
{
cout <<"В заезде приняло участие " << this->car_count<< " машин. Результаты следующие: "<<endl;
int fast = 0;
for (int i = 0; i < this->car_count; i++)
{
cout << endl << i + 1 << ". ";
this->OutputCar(&this->list[i]);
if (this->list[i].time < this->list[fast].time)
fast = i;
}
cout<<endl<< "Лучший результат: ";
if (this->list[fast].time < 10)
{
printf("00:0%d:0%2.3f\n", this->list[fast].min, this->list[fast].time);
}
else
printf("00:0%d:%2.3f\n", this->list[fast].min, this->list[fast].time);
}
int main(int argc, char** argv) {
system("chcp 1251 > nul");
srand(time(0));
Race* ptrRace = new Race();
ptrRace->InputList();
ptrRace->OutputList();
delete ptrRace;
return 0;
}
Вывод
Создал класс Race, описывающий результат заезда произвольного числа машин, который включил в себя 2 приватные переменные, публичный конструктор, деструктор и четыре функции.
В качестве данных членов класса задал:
2.1) Количество машин в заезде с переменной «car_count»;
2.2) Массив машин участников заезда, в соответствии с количеством из пункта 2.1, с указателем на структуру Car и названием «list»;
2.3) В качестве типа элементов массива использовал структуру Car из ИДЗ 1 через указатель;
2.4) В структуру Car добавил поле, обозначающее время в заезде (в секундах) типа float с названием «time» и вспомогательную переменную целочисленного вида «min», которая впоследствии пригодилась для алгоритма по правильному пересчёту времени заезда в миллисекунды;
3) Функции члены класса Race:
3.1) Функция вывода таблицы результатов заезда. Вывел на экран следующее:
3.1.1) Количество машин в заезде – идёт прием значения переменной из пункта 2.1;
3.1.2) Список машин в заезде, по формату вывода: №пп, Бренд, Марка, Цвет, Время через функцию, которая обрабатывает информацию в правильной последовательности и редактирует формат времени под заданный;
3.1.3) Наибыстрейшее время заезда. Время вывел в формате ЧЧ:ММ:СС.МС (ЧЧ - часы, ММ - минуты, СС - секунды МС - миллисекунды (с точностью до 0.001с), за что отвечает функция OutputList() и вспомогательный цикл с пересчётом наименьшего времени и вспомогательной переменной fast(см. код выше);
3.2) Функция заполнения списка машин - InputList(). Обеспечил заполнение поля время случайным числом в пределах до 00:02:00.000 до 00:03:00.000 по своему алгоритму обработки времени (см. код, строчки 48-49 и выше);
3.3) Функция ввода значения структуры – InputCar(), здесь же появляется и случайное (использую rand()) заполнение времени для каждой машины, за которую она преодолела дистанцию (см. алгоритм на скриншоте).