Advertisement
Guest User

Untitled

a guest
Feb 27th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <deque>
  4. #include <vector>
  5. #include <string>
  6.  
  7. int main() {
  8.  
  9. setlocale(LC_ALL, "ru");
  10.  
  11. std::ifstream in("ships.txt");
  12. std::ofstream out("out.txt");
  13.  
  14. if (!in.is_open()) {
  15. out << "Not open\n";
  16. return 1;
  17. }
  18.  
  19. if (in.peek() == EOF) {
  20. out << "Fail empty\n";
  21. return 1;
  22. }
  23.  
  24. in.seekg(0, in.end);
  25. auto size = in.tellg();
  26. in.seekg(0, in.beg);
  27.  
  28. int numStop;
  29. in >> numStop;
  30.  
  31. std::vector<std::string> stops(numStop);
  32. std::deque<std::string> line;
  33.  
  34. while (!in.eof())
  35. {
  36. auto pos = in.tellg();
  37.  
  38. int cmd = 0;
  39. in >> cmd;
  40. switch (cmd) {
  41.  
  42. // Считывает и записывает в очередь имя корабля
  43. case 1:
  44. {
  45. std::string shipName;
  46. getline(in, shipName);
  47. auto it = std::find(stops.begin(), stops.end(), "");
  48. if (it != stops.cend())
  49. *it = shipName;
  50. else
  51. line.push_back(shipName);
  52. }
  53. break;
  54.  
  55. // корабль покинул порт, первая позиция в очереди освобождается
  56. case 2:
  57. {
  58. size_t indx = 0;
  59. in >> indx;
  60. if (indx < stops.size()) {
  61. auto& stop = stops.at(indx);
  62. stop = "";
  63. if (!line.empty()) {
  64. stop = line.front();
  65. line.pop_front();
  66. }
  67. }
  68. }
  69. break;
  70.  
  71. case 3: // Возвращает количество кораблей в очереди
  72. {
  73. out << "Состояние рейда на текущий момент\n"
  74. << "Количество в очереди : " << line.size() << "\n";
  75.  
  76. for (size_t i = 0; i < line.size(); i++)
  77. out << "Номер " << i + 1 << " судно: " << line.at(i) << "\n";
  78. }
  79. break;
  80.  
  81. case 4: // Выводит текущее состояние причалов
  82. {
  83. for (size_t i = 0; i < stops.size(); ++i)
  84. {
  85. auto& stop = stops.at(i);
  86. out << "Номер причала " << i + 1;
  87. if (!stop.empty())
  88. out << " Занят судном " << stop << "\n";
  89. else
  90. out << " Свободен" << "\n";
  91. }
  92. }
  93. break;
  94.  
  95. default:
  96. out << "Что-то пошло не так\n";
  97. break;
  98. }
  99. }
  100.  
  101. return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement