C/C++
Структуры и массивы структур C++
Определить структурный тип, описывающий расписание полетов самолетов (пункт назначения, время отправления, время прибытия, стоимость билета). Вывести данные о полете (полетах) с максимальным временем полета.
#include <iostream>
#include <iomanip>
#include <vector>
#include <Windows.h>
using namespace std;
struct flight
{
string place{}; //город
uint16_t cost{}; //стоимость
uint16_t timein{}, timeout{};//время вылета - прилета в минутах от полуночи
};
void times(uint16_t ti)
{
int hour = ti/60;
int minuts = ti - hour*60;
cout << setfill('0') << setw(2) << hour << ":" << setw(2) << minuts << setfill(' ');
}
void print(vector<flight>& vec, uint16_t* a = nullptr, uint16_t size = 0)
{
cout << setw(15) << "Назначение" << setw(7) << "Цена" << "\t" << "Вылет" << "\t" << "Прилет" << endl;
if (!a)
for (auto& i : vec)
{
cout << setw(15) << i.place << setw(7) << i.cost << "\t";
times(i.timein); cout << "\t";
times(i.timeout); cout << endl;
}
else
for(uint16_t i=0;i<size;i++)
{
cout << setw(15) << vec[a[i]].place << setw(7) << vec[a[i]].cost << "\t";
times(vec[a[i]].timein); cout << "\t";
times(vec[a[i]].timeout); cout << endl;
}
}
uint16_t full(uint16_t& l, uint16_t& r)
{
int dt = 1440 - l;
if (l >= r) return r + dt;
return r-l;
}
flight generator()
{
static string dest[]{ "Москва","Пекин","Париж","Мюнхен","Алма-ата","Чебоксары","Челябинск","Омск","Вильнюс","Дубаи","Санкт-Петербург","Милан" };
bool imale = rand() % 2;
string name = dest[rand() % 12];
uint16_t in = rand() % 1440;
uint16_t out = rand() % 1440;
uint16_t cost = 100 + rand() % 501;
flight res{ name,cost,in,out };
return res;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(static_cast<unsigned int>(time(nullptr)));
size_t size;
cout << "Сколько рейсов?\n";
cin >> size;
vector<flight>flights(size);
for (auto& i : flights) i = generator();
print(flights);
size = 1;
int it = 0;
uint16_t list[100]{}; //а вдруг 100 максимальных времен полетов!
for (int i = 0; i < flights.size(); i++)
{
uint16_t dist1 = full(flights[i].timein, flights[i].timeout);
uint16_t dist2 = full(flights[list[0]].timein, flights[list[0]].timeout); //нулевое - максимум
if (dist1 > dist2)
{
it = 0; size = 1;
list[it] = i; //если текущее значение больше максимума заменить и установить размер в 1.
}
else if (dist1 == dist2) { it++; size++; list[it] = i; } //иначе если равно текущему макс - добавить следующий элемент
}
cout << "Рейс(ы) с максимальным временем полета: "; times(full(flights[list[0]].timein, flights[list[0]].timeout)); cout << endl;
print(flights, list, size);
}
#include <iomanip>
#include <vector>
#include <Windows.h>
using namespace std;
struct flight
{
string place{}; //город
uint16_t cost{}; //стоимость
uint16_t timein{}, timeout{};//время вылета - прилета в минутах от полуночи
};
void times(uint16_t ti)
{
int hour = ti/60;
int minuts = ti - hour*60;
cout << setfill('0') << setw(2) << hour << ":" << setw(2) << minuts << setfill(' ');
}
void print(vector<flight>& vec, uint16_t* a = nullptr, uint16_t size = 0)
{
cout << setw(15) << "Назначение" << setw(7) << "Цена" << "\t" << "Вылет" << "\t" << "Прилет" << endl;
if (!a)
for (auto& i : vec)
{
cout << setw(15) << i.place << setw(7) << i.cost << "\t";
times(i.timein); cout << "\t";
times(i.timeout); cout << endl;
}
else
for(uint16_t i=0;i<size;i++)
{
cout << setw(15) << vec[a[i]].place << setw(7) << vec[a[i]].cost << "\t";
times(vec[a[i]].timein); cout << "\t";
times(vec[a[i]].timeout); cout << endl;
}
}
uint16_t full(uint16_t& l, uint16_t& r)
{
int dt = 1440 - l;
if (l >= r) return r + dt;
return r-l;
}
flight generator()
{
static string dest[]{ "Москва","Пекин","Париж","Мюнхен","Алма-ата","Чебоксары","Челябинск","Омск","Вильнюс","Дубаи","Санкт-Петербург","Милан" };
bool imale = rand() % 2;
string name = dest[rand() % 12];
uint16_t in = rand() % 1440;
uint16_t out = rand() % 1440;
uint16_t cost = 100 + rand() % 501;
flight res{ name,cost,in,out };
return res;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(static_cast<unsigned int>(time(nullptr)));
size_t size;
cout << "Сколько рейсов?\n";
cin >> size;
vector<flight>flights(size);
for (auto& i : flights) i = generator();
print(flights);
size = 1;
int it = 0;
uint16_t list[100]{}; //а вдруг 100 максимальных времен полетов!
for (int i = 0; i < flights.size(); i++)
{
uint16_t dist1 = full(flights[i].timein, flights[i].timeout);
uint16_t dist2 = full(flights[list[0]].timein, flights[list[0]].timeout); //нулевое - максимум
if (dist1 > dist2)
{
it = 0; size = 1;
list[it] = i; //если текущее значение больше максимума заменить и установить размер в 1.
}
else if (dist1 == dist2) { it++; size++; list[it] = i; } //иначе если равно текущему макс - добавить следующий элемент
}
cout << "Рейс(ы) с максимальным временем полета: "; times(full(flights[list[0]].timein, flights[list[0]].timeout)); cout << endl;
print(flights, list, size);
}
Борис Костырко
Сергей помогите мне пожалуйста у меня в профиле вопрос есть. Заплачу вам
Alexandra Apostol
можете сделать так, чтобы сразу был вывод 10 полетов, без "сколько полетов?"
Похожие вопросы
- Сложности с массивами структур c++
- Как правильно запихнуть в поле структуры саму структуру? C++
- Функция заполняющая структуру, C++
- Шаблон структур C++
- Помогите пожалуйста - создать 4 массива на c++
- Нужно решить задачу с массивами на C++
- Написать массив на C(не C++) пожалуйста!!! простым языком с пояснениями
- Массив функции c++ помогите
- Функторы и массивы в C++
- Как удалить элемент массива в C++