Advertisement
Tark_Wight

Untitled

Apr 3rd, 2023
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.40 KB | None | 0 0
  1. #pragma once
  2.  
  3. namespace TriangleApp {
  4.  
  5. using namespace System;
  6. using namespace System::ComponentModel;
  7. using namespace System::Collections;
  8. using namespace System::Windows::Forms;
  9. using namespace System::Data;
  10. using namespace System::Drawing;
  11.  
  12. // Структура для хранения координат точки
  13. public value struct TPoint {
  14. double x;
  15. double y;
  16. };
  17.  
  18. // Структура для хранения информации о треугольнике
  19. public value struct Treug {
  20. TPoint t1;
  21. TPoint t2;
  22. double a, b, c;
  23. double S;
  24. };
  25.  
  26. public ref class MainForm : public System::Windows::Forms::Form
  27. {
  28. private:
  29. array<TPoint>^ points; // массив точек
  30. array<Treug>^ treugols; // массив треугольников
  31. int n; // количество треугольников
  32. int count; // счетчик вводимых точек
  33.  
  34. public:
  35. MainForm(void)
  36. {
  37. InitializeComponent();
  38. n = 0;
  39. count = 0;
  40. points = gcnew array<TPoint>(0);
  41. treugols = gcnew array<Treug>(0);
  42. }
  43.  
  44. protected:
  45. ~MainForm()
  46. {
  47. if (components)
  48. {
  49. delete components;
  50. }
  51. }
  52.  
  53. private: System::Windows::Forms::Label^ label1;
  54. private: System::Windows::Forms::TextBox^ txtPoints;
  55.  
  56. private: System::Windows::Forms::Button^ btnPoints;
  57. private: System::Windows::Forms::Label^ label2;
  58. private: System::Windows::Forms::TextBox^ txtTreugols;
  59.  
  60. private: System::Windows::Forms::Button^ btnTreugols;
  61. private: System::ComponentModel::Container^ components;
  62.  
  63.  
  64. #pragma region Windows Form Designer generated code
  65. void InitializeComponent(void)
  66. {
  67. this->label1 = (gcnew System::Windows::Forms::Label());
  68. this->txtPoints = (gcnew System::Windows::Forms::TextBox());
  69. this->btnPoints = (gcnew System::Windows::Forms::Button());
  70. this->label2 = (gcnew System::Windows::Forms::Label());
  71. this->txtTreugols = (gcnew System::Windows::Forms::TextBox());
  72. this->btnTreugols = (gcnew System::Windows::Forms::Button());
  73. this->SuspendLayout();
  74. //
  75. // label1
  76. //
  77. this->label1->AutoSize = true;
  78. this->label1->Location = System::Drawing::Point(12, 20);
  79. this->label1->Name = L"label1";
  80. this->label1->Size = System::Drawing::Size(65, 13);
  81. this->label1->TabIndex = 0;
  82. this->label1->Text = L"Enter points";
  83. //
  84. // txtPoints
  85. //
  86. // btnPoints
  87. //
  88. this->btnPoints->Location = System::Drawing::Point(189, 15);
  89. this->btnPoints->Name = L"btnPoints";
  90. this->btnPoints->Size = System::Drawing::Size(75, 23);
  91. this->btnPoints->TabIndex = 2;
  92. this->btnPoints->Text = L"OK";
  93. this->btnPoints->UseVisualStyleBackColor = true;
  94. this->btnPoints->Click += gcnew System::EventHandler(this, &MainForm::btnPoints_Click);
  95. //
  96. // label2
  97. //
  98. this->label2->AutoSize = true;
  99. this->label2->Location = System::Drawing::Point(12, 59);
  100. this->label2->Name = L"label2";
  101. this->label2->Size = System::Drawing::Size(100, 13);
  102. this->label2->TabIndex = 3;
  103. this->label2->Text = L"Number of treugols:";
  104. //
  105. // txtTreugols
  106. //
  107. this->txtTreugols->Location = System::Drawing::Point(118, 56);
  108. this->txtTreugols->Name = L"txtTreugols";
  109. this->txtTreugols->Size = System::Drawing::Size(100, 20);
  110. this->txtTreugols->TabIndex = 4;
  111. //
  112. // btnTreugols
  113. //
  114. this->btnTreugols->Location = System::Drawing::Point(224, 54);
  115. this->btnTreugols->Name = L"btnTreugols";
  116. this->btnTreugols->Size = System::Drawing::Size(75, 23);
  117. this->btnTreugols->TabIndex = 5;
  118. this->btnTreugols->Text = L"OK";
  119. this->btnTreugols->UseVisualStyleBackColor = true;
  120. this->btnTreugols->Click += gcnew System::EventHandler(this, &MainForm::btnTreugols_Click);
  121. //
  122. // MainForm
  123. //
  124. this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
  125. this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
  126. this->ClientSize = System::Drawing::Size(316, 99);
  127. this->Controls->Add(this->btnTreugols);
  128. this->Controls->Add(this->txtTreugols);
  129. this->Controls->Add(this->label2);
  130. this->Controls->Add(this->btnPoints);
  131. this->Controls->Add(this->txtPoints);
  132. this->Controls->Add(this->label1);
  133. this->Name = L"MainForm";
  134. this->Text = L"TriangleApp";
  135. this->ResumeLayout(false);
  136. this->PerformLayout();
  137. }
  138. #pragma endregion
  139. private:
  140. System::Void btnPoints_Click(System::Object^ sender, System::EventArgs^ e) {
  141. try {
  142. // Считывание координат точки из текстового поля
  143. double x = Convert::ToDouble(txtPoints->Text->Split(',')[0]);
  144. double y = Convert::ToDouble(txtPoints->Text->Split(',')[1]);
  145.  
  146. // Добавление точки в массив
  147. Array::Resize(points, count + 1);
  148. points[count].x = x;
  149. points[count].y = y;
  150. count++;
  151.  
  152. // Очистка текстового поля
  153. txtPoints->Text = "";
  154. }
  155. catch (Exception^ ex) {
  156. MessageBox::Show(ex->Message);
  157. }
  158. }
  159.  
  160. void MainForm::btnPoints_Click(System::Object^ sender, System::EventArgs^ e)
  161. {
  162. if (!Int32::TryParse(txtPoints->Text, n) || n <= 0) {
  163. MessageBox::Show("Incorrect data entered!");
  164. return;
  165. }
  166. Array::Resize(points, 2 * n);
  167.  
  168. count = 0;
  169. for (int i = 0; i < 2 * n; i += 2) {
  170. count++;
  171. String^ msg = "Enter x and y for point " + ((count + 1) / 2) + ": ";
  172. double x, y;
  173. if (Double::TryParse(Microsoft::VisualBasic::Interaction::InputBox(msg), x) && Double::TryParse(Microsoft::VisualBasic::Interaction::InputBox(msg), y)) {
  174. points[i].x = x;
  175. points[i].y = y;
  176. points[i + 1].x = x;
  177. points[i + 1].y = y;
  178. }
  179. else {
  180. MessageBox::Show("Incorrect data entered!");
  181. count--;
  182. i -= 2;
  183. }
  184. }
  185.  
  186. btnTreugols->Enabled = true;
  187. }
  188.  
  189. // Функция для вычисления длины стороны треугольника
  190. double GetLength(TPoint a, TPoint b)
  191. {
  192. return Math::Sqrt(Math::Pow(a.x - b.x, 2) + Math::Pow(a.y - b.y, 2));
  193. }
  194.  
  195. // Функция для вычисления площади треугольника
  196. double GetS(Treug t)
  197. {
  198. double p = (t.a + t.b + t.c) / 2;
  199. return Math::Sqrt(p * (p - t.a) * (p - t.b) * (p - t.c));
  200. }
  201.  
  202. System::Void btnTreugols_Click(System::Object^ sender, System::EventArgs^ e) {
  203. try {
  204. // Парсим количество треугольников из текстового поля
  205. n = System::Convert::ToInt32(txtTreugols->Text);
  206.  
  207. // Проверяем, что количество треугольников неотрицательное
  208. if (n <= 0) {
  209. throw gcnew System::ArgumentException("Number of treugols should be positive");
  210. }
  211.  
  212. // Обновляем размер массива треугольников
  213. Array::Resize(treugols, n);
  214.  
  215. // Обнуляем счетчик вводимых точек
  216. count = 0;
  217.  
  218. // Очищаем текстовое поле для ввода точек
  219. txtPoints->Text = "";
  220. } catch (System::Exception^ ex) {
  221. // Если произошла ошибка, выводим сообщение об ошибке
  222. MessageBox::Show(ex->Message);
  223. }
  224. }
  225.  
  226. double p = 0, s = 0;
  227. for (int i = 0; i < n; i++) {
  228. p += treugols[i].a;
  229. }
  230.  
  231. double pp = p / 2;
  232. for (int i = 0; i < n; i++) {
  233. s += GetArea(treugols[i], pp);
  234. }
  235.  
  236. MessageBox::Show("Perimeter: " + p + "\nArea: " + s);
  237. }
  238.  
  239.  
  240.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement