Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- namespace TriangleApp {
- using namespace System;
- using namespace System::ComponentModel;
- using namespace System::Collections;
- using namespace System::Windows::Forms;
- using namespace System::Data;
- using namespace System::Drawing;
- // Структура для хранения координат точки
- public value struct TPoint {
- double x;
- double y;
- };
- // Структура для хранения информации о треугольнике
- public value struct Treug {
- TPoint t1;
- TPoint t2;
- double a, b, c;
- double S;
- };
- public ref class MainForm : public System::Windows::Forms::Form
- {
- private:
- array<TPoint>^ points; // массив точек
- array<Treug>^ treugols; // массив треугольников
- int n; // количество треугольников
- int count; // счетчик вводимых точек
- public:
- MainForm(void)
- {
- InitializeComponent();
- n = 0;
- count = 0;
- points = gcnew array<TPoint>(0);
- treugols = gcnew array<Treug>(0);
- }
- protected:
- ~MainForm()
- {
- if (components)
- {
- delete components;
- }
- }
- private: System::Windows::Forms::Label^ label1;
- private: System::Windows::Forms::TextBox^ txtPoints;
- private: System::Windows::Forms::Button^ btnPoints;
- private: System::Windows::Forms::Label^ label2;
- private: System::Windows::Forms::TextBox^ txtTreugols;
- private: System::Windows::Forms::Button^ btnTreugols;
- private: System::ComponentModel::Container^ components;
- #pragma region Windows Form Designer generated code
- void InitializeComponent(void)
- {
- this->label1 = (gcnew System::Windows::Forms::Label());
- this->txtPoints = (gcnew System::Windows::Forms::TextBox());
- this->btnPoints = (gcnew System::Windows::Forms::Button());
- this->label2 = (gcnew System::Windows::Forms::Label());
- this->txtTreugols = (gcnew System::Windows::Forms::TextBox());
- this->btnTreugols = (gcnew System::Windows::Forms::Button());
- this->SuspendLayout();
- //
- // label1
- //
- this->label1->AutoSize = true;
- this->label1->Location = System::Drawing::Point(12, 20);
- this->label1->Name = L"label1";
- this->label1->Size = System::Drawing::Size(65, 13);
- this->label1->TabIndex = 0;
- this->label1->Text = L"Enter points";
- //
- // txtPoints
- //
- // btnPoints
- //
- this->btnPoints->Location = System::Drawing::Point(189, 15);
- this->btnPoints->Name = L"btnPoints";
- this->btnPoints->Size = System::Drawing::Size(75, 23);
- this->btnPoints->TabIndex = 2;
- this->btnPoints->Text = L"OK";
- this->btnPoints->UseVisualStyleBackColor = true;
- this->btnPoints->Click += gcnew System::EventHandler(this, &MainForm::btnPoints_Click);
- //
- // label2
- //
- this->label2->AutoSize = true;
- this->label2->Location = System::Drawing::Point(12, 59);
- this->label2->Name = L"label2";
- this->label2->Size = System::Drawing::Size(100, 13);
- this->label2->TabIndex = 3;
- this->label2->Text = L"Number of treugols:";
- //
- // txtTreugols
- //
- this->txtTreugols->Location = System::Drawing::Point(118, 56);
- this->txtTreugols->Name = L"txtTreugols";
- this->txtTreugols->Size = System::Drawing::Size(100, 20);
- this->txtTreugols->TabIndex = 4;
- //
- // btnTreugols
- //
- this->btnTreugols->Location = System::Drawing::Point(224, 54);
- this->btnTreugols->Name = L"btnTreugols";
- this->btnTreugols->Size = System::Drawing::Size(75, 23);
- this->btnTreugols->TabIndex = 5;
- this->btnTreugols->Text = L"OK";
- this->btnTreugols->UseVisualStyleBackColor = true;
- this->btnTreugols->Click += gcnew System::EventHandler(this, &MainForm::btnTreugols_Click);
- //
- // MainForm
- //
- this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
- this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
- this->ClientSize = System::Drawing::Size(316, 99);
- this->Controls->Add(this->btnTreugols);
- this->Controls->Add(this->txtTreugols);
- this->Controls->Add(this->label2);
- this->Controls->Add(this->btnPoints);
- this->Controls->Add(this->txtPoints);
- this->Controls->Add(this->label1);
- this->Name = L"MainForm";
- this->Text = L"TriangleApp";
- this->ResumeLayout(false);
- this->PerformLayout();
- }
- #pragma endregion
- private:
- System::Void btnPoints_Click(System::Object^ sender, System::EventArgs^ e) {
- try {
- // Считывание координат точки из текстового поля
- double x = Convert::ToDouble(txtPoints->Text->Split(',')[0]);
- double y = Convert::ToDouble(txtPoints->Text->Split(',')[1]);
- // Добавление точки в массив
- Array::Resize(points, count + 1);
- points[count].x = x;
- points[count].y = y;
- count++;
- // Очистка текстового поля
- txtPoints->Text = "";
- }
- catch (Exception^ ex) {
- MessageBox::Show(ex->Message);
- }
- }
- void MainForm::btnPoints_Click(System::Object^ sender, System::EventArgs^ e)
- {
- if (!Int32::TryParse(txtPoints->Text, n) || n <= 0) {
- MessageBox::Show("Incorrect data entered!");
- return;
- }
- Array::Resize(points, 2 * n);
- count = 0;
- for (int i = 0; i < 2 * n; i += 2) {
- count++;
- String^ msg = "Enter x and y for point " + ((count + 1) / 2) + ": ";
- double x, y;
- if (Double::TryParse(Microsoft::VisualBasic::Interaction::InputBox(msg), x) && Double::TryParse(Microsoft::VisualBasic::Interaction::InputBox(msg), y)) {
- points[i].x = x;
- points[i].y = y;
- points[i + 1].x = x;
- points[i + 1].y = y;
- }
- else {
- MessageBox::Show("Incorrect data entered!");
- count--;
- i -= 2;
- }
- }
- btnTreugols->Enabled = true;
- }
- // Функция для вычисления длины стороны треугольника
- double GetLength(TPoint a, TPoint b)
- {
- return Math::Sqrt(Math::Pow(a.x - b.x, 2) + Math::Pow(a.y - b.y, 2));
- }
- // Функция для вычисления площади треугольника
- double GetS(Treug t)
- {
- double p = (t.a + t.b + t.c) / 2;
- return Math::Sqrt(p * (p - t.a) * (p - t.b) * (p - t.c));
- }
- System::Void btnTreugols_Click(System::Object^ sender, System::EventArgs^ e) {
- try {
- // Парсим количество треугольников из текстового поля
- n = System::Convert::ToInt32(txtTreugols->Text);
- // Проверяем, что количество треугольников неотрицательное
- if (n <= 0) {
- throw gcnew System::ArgumentException("Number of treugols should be positive");
- }
- // Обновляем размер массива треугольников
- Array::Resize(treugols, n);
- // Обнуляем счетчик вводимых точек
- count = 0;
- // Очищаем текстовое поле для ввода точек
- txtPoints->Text = "";
- } catch (System::Exception^ ex) {
- // Если произошла ошибка, выводим сообщение об ошибке
- MessageBox::Show(ex->Message);
- }
- }
- double p = 0, s = 0;
- for (int i = 0; i < n; i++) {
- p += treugols[i].a;
- }
- double pp = p / 2;
- for (int i = 0; i < n; i++) {
- s += GetArea(treugols[i], pp);
- }
- MessageBox::Show("Perimeter: " + p + "\nArea: " + s);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement