redmanexe

Lab2Challenge1CPP

Oct 18th, 2024
7
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.95 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. constexpr int TOWER_HEIGHT_MIN = 1;
  6. constexpr int TOWER_HEIGHT_MAX = 1000;
  7. constexpr int TOWER_X_MIN = 1;
  8. constexpr int TOWER_X_MAX = 1000;
  9.  
  10. int main()
  11. {
  12. int* towers = new int[TOWER_X_MAX + 1];
  13. int n, i;
  14. bool isInCorrect;
  15.  
  16. isInCorrect = true;
  17. while (isInCorrect)
  18. {
  19. cout << "Количество башен (число должно быть от " << TOWER_X_MIN << " и до " << TOWER_X_MAX << "): ";
  20. cin >> n;
  21. if (cin.fail())
  22. {
  23. cout << "Введите число, а не строку или что-то иное!\n";
  24. cin.clear();
  25. cin.ignore(numeric_limits<streamsize>::max(), '\n');
  26. }
  27. else if (n < TOWER_X_MIN || n > TOWER_X_MAX)
  28. cout << "Значение должно находится в границах от " << TOWER_X_MIN << " до " << TOWER_X_MAX << "!\n";
  29. else
  30. isInCorrect = false;
  31. }
  32.  
  33. isInCorrect = true;
  34. while (isInCorrect)
  35. {
  36. cout << "Высота башни в (0, 0) (число должно быть от " << TOWER_HEIGHT_MIN << " и до " << TOWER_HEIGHT_MAX << "): ";
  37. cin >> towers[0];
  38. if (cin.fail())
  39. {
  40. cout << "Введите число, а не строку или что-то иное!\n";
  41. cin.clear();
  42. cin.ignore(numeric_limits<streamsize>::max(), '\n');
  43. }
  44. else if (towers[0] < TOWER_HEIGHT_MIN || towers[0] > TOWER_HEIGHT_MAX)
  45. cout << "Значение должно находится в границах от " << TOWER_HEIGHT_MIN << " до " << TOWER_HEIGHT_MAX << "!\n";
  46. else
  47. isInCorrect = false;
  48. }
  49.  
  50. for (i = 0; i < n; i++)
  51. {
  52. isInCorrect = true;
  53. int curr;
  54. curr = 0;
  55. while (isInCorrect)
  56. {
  57. cout << "Координата X башни #" << i + 1 << " (число должно быть от " << TOWER_X_MIN << " и до " << TOWER_X_MAX << "): ";
  58. cin >> curr;
  59. if (cin.fail())
  60. {
  61. cout << "Введите число, а не строку или что-то иное!\n";
  62. cin.clear();
  63. cin.ignore(numeric_limits<streamsize>::max(), '\n');
  64. }
  65. else if (curr < TOWER_X_MIN || curr > TOWER_X_MAX)
  66. cout << "Значение должно находится в границах от " << TOWER_X_MIN << " до " << TOWER_X_MAX << "!\n";
  67. else if (towers[curr] > 0)
  68. cout << "Башня уже стоит на этой координате!\n";
  69. else
  70. isInCorrect = false;
  71. }
  72.  
  73. isInCorrect = true;
  74. while (isInCorrect)
  75. {
  76. cout << "Высота башни #" << i + 1 << " (число должно быть от " << TOWER_HEIGHT_MIN << " и до " << TOWER_HEIGHT_MAX << "): ";
  77. cin >> towers[curr];
  78. if (cin.fail())
  79. {
  80. cout << "Введите число, а не строку или что-то иное!\n";
  81. cin.clear();
  82. cin.ignore(numeric_limits<streamsize>::max(), '\n');
  83. }
  84. else if (towers[curr] < TOWER_HEIGHT_MIN || towers[curr] > TOWER_HEIGHT_MAX)
  85. cout << "Значение должно находится в границах от " << TOWER_HEIGHT_MIN << " до " << TOWER_HEIGHT_MAX << "!\n";
  86. else
  87. isInCorrect = false;
  88. }
  89. }
  90.  
  91. int visibleTowers;
  92. visibleTowers = 0;
  93. for (i = 1; i < TOWER_X_MAX + 1; i++) {
  94. if (towers[i] > 0)
  95. visibleTowers += 1;
  96.  
  97. if (towers[i] + 1 > towers[0])
  98. i = TOWER_X_MAX + 1;
  99. }
  100.  
  101. cout << "\nС башни (0, 0) будет видно башен: " << visibleTowers;
  102.  
  103. delete[] towers;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment