Advertisement
Ifrail

Less3 Task4

Nov 20th, 2019
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.70 KB | None | 0 0
  1. /*Подработка курьером - 1*/
  2.  
  3. /*
  4. Вы прекрасно научились ориентироваться в настоящем двухмерном космосе и даже смогли вернуться живым из обзорного полета. Пришло время использовать полученные навыки, чтобы заработать немного галактических кредитов! Работа курьером подойдет для вас идеально. Все, что требуется развозить письма по заданным координатам, да складывать кредиты на счет. Заведите счет, привязанный к вашему кораблю и зачисляйте на него заработанные деньги!
  5.  
  6. Кроме космокредитов, в ходу также Проторианские буллы (их курс составляет 3 кредита = 1 буллу) и Орионские звезды (их курс составляет 2 кредита = 5 звездам).
  7.  
  8. Входные данные:
  9. * Имя корабля (string)
  10. * Текущее количество топлива (int)
  11. * Максимальное количество топлива (int)
  12. * Координаты корабля X и Y (int)
  13. * Количество денег на счету (int)
  14.  
  15. Выходные данные:
  16. Так как у вас теперь есть официальная лицензия курьера, то вы должны подавать рапорты в общегалактической форме:
  17. STATUS: "имя корабля"
  18. Cordinates: x="х" y="y"
  19. Fuel: "осталось топлива" from "всего топлива"
  20. Account: "количество кредитов" credits
  21.  
  22. Внимательно посмотрите на примеры!
  23. */
  24. #include <iostream>
  25. #include <cmath>
  26. #include <string>
  27.  
  28. using namespace std;
  29.  
  30. // координаты объекта в космосе
  31. class SpacePoint {
  32. public:
  33.     int X, Y;
  34.  
  35.     int distance(SpacePoint point) {
  36.         return sqrt(pow(X - point.X, 2) + pow(Y - point.Y, 2));
  37.     }
  38.  
  39.     void read() {
  40.         cin >> X >> Y;
  41.     }
  42.  
  43.     void print() {
  44.         cout << "Cordinates: x=" << X << " y=" << Y << endl;
  45.     }
  46. };
  47.  
  48. // Денежный счет
  49. class CreditAccount {
  50. public:
  51.     // Галактические кредиты
  52.     int credits;
  53.  
  54.     void putCredits(int count) {
  55.         credits += count;
  56.     }
  57.  
  58.     void putProtorianBools(int count) {
  59.         credits += (count * 3);
  60.     }
  61.  
  62.     void putOrionStars(int count) {
  63.         credits += (count * 2 / 5);
  64.     }
  65.  
  66.     void printSatus() {
  67.         cout << "Account: " << credits << " credits" << endl;
  68.     }
  69. };
  70.  
  71. class SpaceShip {
  72. public:
  73.     // Остаток топлива
  74.     int fuelLeft;
  75.     // Вместимость топливного бака (максимум топлива)
  76.     int fuelMax;
  77.     // Название корабля
  78.     string name;
  79.     //Координаты корабля
  80.     SpacePoint pos;
  81.     // Денежный счет
  82.     CreditAccount account;
  83.  
  84.     void printStatus() {
  85.         cout << "STATUS: " << name << endl;
  86.         pos.print();
  87.         cout << "Fuel: " << fuelLeft << " from " << fuelMax << endl;
  88.         account.printSatus();
  89.     }
  90.  
  91.     void flight(SpacePoint pt) {
  92.         fuelLeft -= pos.distance(pt);
  93.         if (fuelLeft < 0)
  94.             fuelLeft = 0;
  95.         pos = pt;
  96.     }
  97.  
  98.  
  99.     void prepare() {
  100.         cin >> name >> fuelLeft >> fuelMax;
  101.         pos.read();
  102.         cin >> account.credits;
  103.     }
  104. };
  105.  
  106. int main() {
  107.  
  108.     SpaceShip ship;
  109.     ship.prepare();
  110.  
  111.     int comCount;
  112.     cin >> comCount;
  113.  
  114.     for (int i = 0; i < comCount; i++) {
  115.         string com;
  116.         cin >> com;
  117.  
  118.         if (com == "flight") {
  119.             SpacePoint pt;
  120.             pt.read();
  121.             ship.flight(pt);
  122.         }
  123.  
  124.         if (com == "cache") {
  125.             int count;
  126.             string name;
  127.             cin >> count >> name;
  128.             if (name == "credits")
  129.                 ship.account.putCredits(count);
  130.             if (name == "bools")
  131.                 ship.account.putProtorianBools(count);
  132.             if (name == "stars")
  133.                 ship.account.putOrionStars(count);
  134.         }
  135.  
  136.         if (com == "status")
  137.             ship.printStatus();
  138.     }
  139. }
  140. /*
  141. Тест 1
  142. Ввод:
  143. Nostromo 56 78 12 12 756
  144. 4
  145. flight 0 12
  146. cache 112 stars
  147. cache 13 bools
  148. status
  149. Вывод:
  150. STATUS: Nostromo
  151. Cordinates: x=0 y=12
  152. Fuel: 44 from 78
  153. Account: 839 credits
  154.  
  155. Тест 2
  156. Ввод:
  157. Enterprise 120 120 167 120 0
  158. 7
  159. flight 130 114
  160. cache 100 credits
  161. flight 115 102
  162. cache 300 bools
  163. flight 90 80
  164. cache 1300 credits
  165. status
  166. Вывод:
  167. STATUS: Enterprise
  168. Cordinates: x=90 y=80
  169. Fuel: 31 from 120
  170. Account: 2300 credits
  171.  
  172. Тест 3
  173. Ввод:
  174. Lexx 100 300 0 40 50
  175. 5
  176. flight 44 65
  177. cache 120 stars
  178. flight 40 50
  179. cache 200 stars
  180. status
  181. Вывод:
  182. STATUS: Lexx
  183. Cordinates: x=40 y=50
  184. Fuel: 35 from 300
  185. Account: 178 credits
  186. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement