Скачиваний:
0
Добавлен:
31.05.2025
Размер:
236.14 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра ИИСТ

отчет

по индивидуальному домашнему заданию №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++, их архитектуру и принцип работы.

Задания:

  1. Создать класс Race, описывающий результат заезда произвольного числа машин.

  2. В качестве данных членов класса задать:

    1. Количество машин в заезде.

    2. Массив машин участников заезда, в соответствии с количеством из пункта 2.1

    3. В качестве типа элементов массива использовать структуру Car из ИДЗ 1.

    4. В структуру Car добавить поле обозначающее время в заезде (в секундах) тип float.

  1. Функции члены класса Race:

    1. Функция вывода таблицы результатов заезда. Вывести на экран следующее:

      1. Количество машин в заезде.

      2. Список машин в заезде, формат вывода: №пп, Бренд, Марка, Цвет, Время

      3. Наибыстрейшее время заезда. Время выводить в формате ЧЧ:ММ:СС.МС (ЧЧ - часы, ММ - минуты, СС - секунды МС - миллисекунды (с точностью до 0.001с).

    2. Функция заполнения списка машин. Обеспечить заполнение поля время случайным числом в пределах до 00:02:00.000 до 00:03:00.000.

    3. Функция ввода значения структуры (можно имплементировать функционал из ИДЗ 1 пункт 2).

Протокол выполнения заданий

  1. Создать класс Race, описывающий результат заезда произвольного числа машин.

Создал класс Race (строчки 4-6 описывают его).

  1. В качестве данных членов класса задать: количество машин в заезде, массив машин участников заезда, в соответствии с количеством из пункта 2.1, в качестве типа элементов массива использовать структуру Car из ИДЗ 1, в структуру Car добавить поле обозначающее время в заезде (в секундах) тип float.

Задал данные членов класса: в строчку 16 поместил переменную, которая будет принимать количество машин в заезде (целочисленный тип int), строчка 17 содержит в себе массив машин участников, с указателем на структуру Car, что и требовалось; структура взята из первого ИДЗ, отредактирована под дальнейшие цели (оставлены бренд, модель и цвет машины для дальнейшего вывода, добавлена переменная типа float – «time», которая также сыграет свою роль в последующих заданиях по хранению времени заезда для каждого участника, переменная min типа int поможет при пересчёте времени под миллисекунды).

Строчки 18-24 содержат конструктор, деструктор класса Race, а также функции, которые потребуются для вывода необходимых результатов далее. Функции помещаю в public, для возможности корректной работы с ними по всей программе, конструктор и деструктор должны лежать там по определению.

  1. Функции члены класса Race

    1. Функция ввода значения структуры

Строчки 40-50 содержат в себе выполненный код по заданию из данного подпункта, аналогично второму подпункту первого ИДЗ, однако, стоит отметить, что здесь же появляется и случайное (использую rand()) заполнение времени для каждой машины, за которую она преодолела дистанцию (см. алгоритм на скриншоте).

Строчки 27-38 описывают запуск конструктора и деструктора класса, чтобы мы могли работать с его данными.

    1. Функция заполнения списка машин

Строчки 52-56 описывают вторую функцию, которая «перенаправляет» наши принятые данные на отдельную машину из массива «list», тем самым заполняя списки машин. Обеспечение заполнения поля время случайным числом в пределах, описанных в задании, выполняет мой алгоритм, который расположен на строчках 48-49 (см. скриншот пункта 3.1).

    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;

}

Вывод

  1. Создал класс Race, описывающий результат заезда произвольного числа машин, который включил в себя 2 приватные переменные, публичный конструктор, деструктор и четыре функции.

  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()) заполнение времени для каждой машины, за которую она преодолела дистанцию (см. алгоритм на скриншоте).

Соседние файлы в папке ИДЗ Беляев