1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
#include <chrono>
#include <fstream>
#include <iostream>
#include <random>
#include <string>
#include <vector>
struct Keleivis
{
std::string pavarde;
int bagazo_kiekis {};
int * vieneto_mase { nullptr };
};
// Generate random integers:
int genRndInt( int min, int max )
{
static std::mt19937 eng {
static_cast<unsigned>(
std::chrono::high_resolution_clock::now().time_since_epoch().count()
)
};
std::uniform_int_distribution<> dst( min, max );
return dst( eng );
}
// Provide random mames from a list:
std::string getRndName()
{
static std::vector<std::string> names {
"Adelaide",
"Denisse",
"Lennon",
"Ximena",
"Sebastian",
"Norah",
"Celia",
"Freddy",
"Ayden",
"Tiffany",
"Harrison",
"Justin"
};
return names.at( genRndInt(0, names.size() - 1 ) );
}
// Load passengers data in passengers array. Returns array size
// Beware!! All parameters are uninitialize, so arguments contain garbage.
int skaitytiFaila( Keleivis * const arr,
int& max_weight,
int& x,
int& y )
{
/*
std::ifstream in("duomenys.txt");
if (!in) {
std::cerr << "Cannot open 'duomenys.txt'.\n";
// deal with the problem
}
*/
int keleivis_num;
// in >> keleivis_num;
keleivis_num = genRndInt( 5, 8 );
/*
in.ignore(80, '\n'); // Please show an example from the file
*/
std::cout << "Generating " << keleivis_num << " passengers:\n";
for (int i {}; i < keleivis_num; ++i) {
// in >> arr[i].pavarde >> arr[i].bagazo_kiekis;
arr[i].pavarde = getRndName();
arr[i].bagazo_kiekis = genRndInt( 1, 4 );
arr[i].vieneto_mase = new int[arr[i].bagazo_kiekis] {};
std::cout << "\narr[" << i << "].pavarde: " << arr[i].pavarde
<< "\narr[" << i << "].bagazo_kiekis: "
<< arr[i].bagazo_kiekis << '\n';
for (int j {}; j < arr[i].bagazo_kiekis; ++j) {
// in >> arr[j].vieneto_mase;
arr[i].vieneto_mase[j] = genRndInt( 1, 20 );
std::cout << "\tarr[" << i << "].vieneto_mase[" << j << "]: "
<< arr[i].vieneto_mase[j] << '\n';
}
// in.ignore(80, '\n'); // // Please show an example from the file
}
// in >> m >> x >> y;
max_weight = genRndInt( 10, 15 );
x = genRndInt( 11, 20 );
y = genRndInt( 21, 30 );
return keleivis_num;
}
// Print on screen passenger details:
void tikrintiKeleivius( const Keleivis * const arr,
int size,
int max_weight,
[[maybe_unused]] int x,
[[maybe_unused]] int y )
{
int kiek_keleiviu {};
for (int i {}; i < size; ++i) {
if (arr[i].bagazo_kiekis <= max_weight) {
kiek_keleiviu++;
}
}
std::cout << "\nPassenger summary:\nNumber: " << kiek_keleiviu << '\n';
for(int i {}; i < size; ++i) {
std::cout << "arr[" << i << "]: ";
for(int j {}; j < arr[i].bagazo_kiekis; ++j) {
std::cout << "vieneto_mase[" << j << "]: "
<< arr[i].vieneto_mase[j] << ' ';
}
std::cout << '\n';
}
}
int main()
{
int max_luggage_weight, x, y;
Keleivis keleivis[100];
int keleivis_num { skaitytiFaila(keleivis, max_luggage_weight, x, y) };
tikrintiKeleivius(keleivis, keleivis_num, max_luggage_weight, x, y);
}
| |