Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <deque>
- #include <vector>
- #include <string>
- int main() {
- setlocale(LC_ALL, "ru");
- std::ifstream in("ships.txt");
- std::ofstream out("out.txt");
- if (!in.is_open()) {
- out << "Not open\n";
- return 1;
- }
- if (in.peek() == EOF) {
- out << "Fail empty\n";
- return 1;
- }
- in.seekg(0, in.end);
- auto size = in.tellg();
- in.seekg(0, in.beg);
- int numStop;
- in >> numStop;
- std::vector<std::string> stops(numStop);
- std::deque<std::string> line;
- while (!in.eof())
- {
- auto pos = in.tellg();
- int cmd = 0;
- in >> cmd;
- switch (cmd) {
- // Считывает и записывает в очередь имя корабля
- case 1:
- {
- std::string shipName;
- getline(in, shipName);
- auto it = std::find(stops.begin(), stops.end(), "");
- if (it != stops.cend())
- *it = shipName;
- else
- line.push_back(shipName);
- }
- break;
- // корабль покинул порт, первая позиция в очереди освобождается
- case 2:
- {
- size_t indx = 0;
- in >> indx;
- if (indx < stops.size()) {
- auto& stop = stops.at(indx);
- stop = "";
- if (!line.empty()) {
- stop = line.front();
- line.pop_front();
- }
- }
- }
- break;
- case 3: // Возвращает количество кораблей в очереди
- {
- out << "Состояние рейда на текущий момент\n"
- << "Количество в очереди : " << line.size() << "\n";
- for (size_t i = 0; i < line.size(); i++)
- out << "Номер " << i + 1 << " судно: " << line.at(i) << "\n";
- }
- break;
- case 4: // Выводит текущее состояние причалов
- {
- for (size_t i = 0; i < stops.size(); ++i)
- {
- auto& stop = stops.at(i);
- out << "Номер причала " << i + 1;
- if (!stop.empty())
- out << " Занят судном " << stop << "\n";
- else
- out << " Свободен" << "\n";
- }
- }
- break;
- default:
- out << "Что-то пошло не так\n";
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement