0
#pragma once

namespace PointerArray {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

    /// <summary>
    /// Summary for Form1
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }

    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Label^  label1;
    protected: 
    private: System::Windows::Forms::Label^  label2;
    private: System::Windows::Forms::Label^  label3;
    private: System::Windows::Forms::Label^  label4;
    private: System::Windows::Forms::Label^  label5;
    private: System::Windows::Forms::Label^  label6;
    private: System::Windows::Forms::Label^  label7;
    private: System::Windows::Forms::Label^  label8;
    private: System::Windows::Forms::TextBox^  textBox1;
    private: System::Windows::Forms::TextBox^  textBox2;
    private: System::Windows::Forms::TextBox^  textBox3;
    private: System::Windows::Forms::TextBox^  textBox4;
    private: System::Windows::Forms::TextBox^  textBox5;
    private: System::Windows::Forms::TextBox^  textBox6;
    private: System::Windows::Forms::TextBox^  textBox7;
    private: System::Windows::Forms::TextBox^  textBox8;
    private: System::Windows::Forms::TextBox^  textBox9;
    private: System::Windows::Forms::TextBox^  textBox10;
    private: System::Windows::Forms::TextBox^  textBox11;
    private: System::Windows::Forms::TextBox^  textBox12;
    private: System::Windows::Forms::TextBox^  textBox13;
    private: System::Windows::Forms::TextBox^  textBox14;
    private: System::Windows::Forms::TextBox^  textBox15;
    private: System::Windows::Forms::TextBox^  textBox16;
    private: System::Windows::Forms::Label^  label9;
    private: System::Windows::Forms::Label^  label10;
    private: System::Windows::Forms::Button^  btnData;

    private: System::Windows::Forms::Button^  btnSort;
    private: System::Windows::Forms::Button^  btnSearch;
    private: System::Windows::Forms::Label^  label11;
    private: System::Windows::Forms::TextBox^  txtTarget;

    private:
        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        void InitializeComponent(void)
        {
            this->label1 = (gcnew System::Windows::Forms::Label());
            this->label2 = (gcnew System::Windows::Forms::Label());
            this->label3 = (gcnew System::Windows::Forms::Label());
            this->label4 = (gcnew System::Windows::Forms::Label());
            this->label5 = (gcnew System::Windows::Forms::Label());
            this->label6 = (gcnew System::Windows::Forms::Label());
            this->label7 = (gcnew System::Windows::Forms::Label());
            this->label8 = (gcnew System::Windows::Forms::Label());
            this->textBox1 = (gcnew System::Windows::Forms::TextBox());
            this->textBox2 = (gcnew System::Windows::Forms::TextBox());
            this->textBox3 = (gcnew System::Windows::Forms::TextBox());
            this->textBox4 = (gcnew System::Windows::Forms::TextBox());
            this->textBox5 = (gcnew System::Windows::Forms::TextBox());
            this->textBox6 = (gcnew System::Windows::Forms::TextBox());
            this->textBox7 = (gcnew System::Windows::Forms::TextBox());
            this->textBox8 = (gcnew System::Windows::Forms::TextBox());
            this->textBox9 = (gcnew System::Windows::Forms::TextBox());
            this->textBox10 = (gcnew System::Windows::Forms::TextBox());
            this->textBox11 = (gcnew System::Windows::Forms::TextBox());
            this->textBox12 = (gcnew System::Windows::Forms::TextBox());
            this->textBox13 = (gcnew System::Windows::Forms::TextBox());
            this->textBox14 = (gcnew System::Windows::Forms::TextBox());
            this->textBox15 = (gcnew System::Windows::Forms::TextBox());
            this->textBox16 = (gcnew System::Windows::Forms::TextBox());
            this->label9 = (gcnew System::Windows::Forms::Label());
            this->label10 = (gcnew System::Windows::Forms::Label());
            this->btnData = (gcnew System::Windows::Forms::Button());
            this->btnSort = (gcnew System::Windows::Forms::Button());
            this->btnSearch = (gcnew System::Windows::Forms::Button());
            this->label11 = (gcnew System::Windows::Forms::Label());
            this->txtTarget = (gcnew System::Windows::Forms::TextBox());
            this->SuspendLayout();
            // 
            // label1
            // 
            this->label1->AutoSize = true;
            this->label1->Location = System::Drawing::Point(335, 55);
            this->label1->Name = L"label1";
            this->label1->Size = System::Drawing::Size(35, 13);
            this->label1->TabIndex = 0;
            this->label1->Text = L"label1";
            // 
            // label2
            // 
            this->label2->AutoSize = true;
            this->label2->Location = System::Drawing::Point(335, 91);
            this->label2->Name = L"label2";
            this->label2->Size = System::Drawing::Size(35, 13);
            this->label2->TabIndex = 1;
            this->label2->Text = L"label2";
            // 
            // label3
            // 
            this->label3->AutoSize = true;
            this->label3->Location = System::Drawing::Point(335, 123);
            this->label3->Name = L"label3";
            this->label3->Size = System::Drawing::Size(35, 13);
            this->label3->TabIndex = 2;
            this->label3->Text = L"label3";
            // 
            // label4
            // 
            this->label4->AutoSize = true;
            this->label4->Location = System::Drawing::Point(335, 155);
            this->label4->Name = L"label4";
            this->label4->Size = System::Drawing::Size(35, 13);
            this->label4->TabIndex = 3;
            this->label4->Text = L"label4";
            // 
            // label5
            // 
            this->label5->AutoSize = true;
            this->label5->Location = System::Drawing::Point(335, 188);
            this->label5->Name = L"label5";
            this->label5->Size = System::Drawing::Size(35, 13);
            this->label5->TabIndex = 4;
            this->label5->Text = L"label5";
            // 
            // label6
            // 
            this->label6->AutoSize = true;
            this->label6->Location = System::Drawing::Point(335, 221);
            this->label6->Name = L"label6";
            this->label6->Size = System::Drawing::Size(35, 13);
            this->label6->TabIndex = 5;
            this->label6->Text = L"label6";
            // 
            // label7
            // 
            this->label7->AutoSize = true;
            this->label7->Location = System::Drawing::Point(335, 254);
            this->label7->Name = L"label7";
            this->label7->Size = System::Drawing::Size(35, 13);
            this->label7->TabIndex = 6;
            this->label7->Text = L"label7";
            // 
            // label8
            // 
            this->label8->AutoSize = true;
            this->label8->Location = System::Drawing::Point(335, 290);
            this->label8->Name = L"label8";
            this->label8->Size = System::Drawing::Size(35, 13);
            this->label8->TabIndex = 7;
            this->label8->Text = L"label8";
            // 
            // textBox1
            // 
            this->textBox1->Location = System::Drawing::Point(229, 52);
            this->textBox1->Name = L"textBox1";
            this->textBox1->Size = System::Drawing::Size(100, 20);
            this->textBox1->TabIndex = 8;
            // 
            // textBox2
            // 
            this->textBox2->Location = System::Drawing::Point(229, 88);
            this->textBox2->Name = L"textBox2";
            this->textBox2->Size = System::Drawing::Size(100, 20);
            this->textBox2->TabIndex = 9;
            // 
            // textBox3
            // 
            this->textBox3->Location = System::Drawing::Point(229, 120);
            this->textBox3->Name = L"textBox3";
            this->textBox3->Size = System::Drawing::Size(100, 20);
            this->textBox3->TabIndex = 10;
            // 
            // textBox4
            // 
            this->textBox4->Location = System::Drawing::Point(229, 155);
            this->textBox4->Name = L"textBox4";
            this->textBox4->Size = System::Drawing::Size(100, 20);
            this->textBox4->TabIndex = 11;
            // 
            // textBox5
            // 
            this->textBox5->Location = System::Drawing::Point(229, 185);
            this->textBox5->Name = L"textBox5";
            this->textBox5->Size = System::Drawing::Size(100, 20);
            this->textBox5->TabIndex = 12;
            // 
            // textBox6
            // 
            this->textBox6->Location = System::Drawing::Point(229, 218);
            this->textBox6->Name = L"textBox6";
            this->textBox6->Size = System::Drawing::Size(100, 20);
            this->textBox6->TabIndex = 13;
            // 
            // textBox7
            // 
            this->textBox7->Location = System::Drawing::Point(229, 251);
            this->textBox7->Name = L"textBox7";
            this->textBox7->Size = System::Drawing::Size(100, 20);
            this->textBox7->TabIndex = 14;
            // 
            // textBox8
            // 
            this->textBox8->Location = System::Drawing::Point(229, 283);
            this->textBox8->Name = L"textBox8";
            this->textBox8->Size = System::Drawing::Size(100, 20);
            this->textBox8->TabIndex = 15;
            // 
            // textBox9
            // 
            this->textBox9->Location = System::Drawing::Point(30, 52);
            this->textBox9->Name = L"textBox9";
            this->textBox9->Size = System::Drawing::Size(100, 20);
            this->textBox9->TabIndex = 23;
            // 
            // textBox10
            // 
            this->textBox10->Location = System::Drawing::Point(30, 85);
            this->textBox10->Name = L"textBox10";
            this->textBox10->Size = System::Drawing::Size(100, 20);
            this->textBox10->TabIndex = 22;
            // 
            // textBox11
            // 
            this->textBox11->Location = System::Drawing::Point(30, 120);
            this->textBox11->Name = L"textBox11";
            this->textBox11->Size = System::Drawing::Size(100, 20);
            this->textBox11->TabIndex = 21;
            // 
            // textBox12
            // 
            this->textBox12->Location = System::Drawing::Point(30, 155);
            this->textBox12->Name = L"textBox12";
            this->textBox12->Size = System::Drawing::Size(100, 20);
            this->textBox12->TabIndex = 20;
            // 
            // textBox13
            // 
            this->textBox13->Location = System::Drawing::Point(30, 185);
            this->textBox13->Name = L"textBox13";
            this->textBox13->Size = System::Drawing::Size(100, 20);
            this->textBox13->TabIndex = 19;
            // 
            // textBox14
            // 
            this->textBox14->Location = System::Drawing::Point(30, 218);
            this->textBox14->Name = L"textBox14";
            this->textBox14->Size = System::Drawing::Size(100, 20);
            this->textBox14->TabIndex = 18;
            // 
            // textBox15
            // 
            this->textBox15->Location = System::Drawing::Point(30, 251);
            this->textBox15->Name = L"textBox15";
            this->textBox15->Size = System::Drawing::Size(100, 20);
            this->textBox15->TabIndex = 17;
            // 
            // textBox16
            // 
            this->textBox16->Location = System::Drawing::Point(30, 283);
            this->textBox16->Name = L"textBox16";
            this->textBox16->Size = System::Drawing::Size(100, 20);
            this->textBox16->TabIndex = 16;
            // 
            // label9
            // 
            this->label9->AutoSize = true;
            this->label9->Location = System::Drawing::Point(52, 24);
            this->label9->Name = L"label9";
            this->label9->Size = System::Drawing::Size(67, 13);
            this->label9->TabIndex = 24;
            this->label9->Text = L"Pointer Array";
            // 
            // label10
            // 
            this->label10->AutoSize = true;
            this->label10->Location = System::Drawing::Point(247, 24);
            this->label10->Name = L"label10";
            this->label10->Size = System::Drawing::Size(57, 13);
            this->label10->TabIndex = 25;
            this->label10->Text = L"Data Array";
            // 
            // btnData
            // 
            this->btnData->Location = System::Drawing::Point(31, 391);
            this->btnData->Name = L"btnData";
            this->btnData->Size = System::Drawing::Size(75, 23);
            this->btnData->TabIndex = 26;
            this->btnData->Text = L"Data";
            this->btnData->UseVisualStyleBackColor = true;
            this->btnData->Click += gcnew System::EventHandler(this, &Form1::btnData_Click);
            // 
            // btnSort
            // 
            this->btnSort->Location = System::Drawing::Point(146, 391);
            this->btnSort->Name = L"btnSort";
            this->btnSort->Size = System::Drawing::Size(75, 23);
            this->btnSort->TabIndex = 27;
            this->btnSort->Text = L"Sort";
            this->btnSort->UseVisualStyleBackColor = true;
            this->btnSort->Click += gcnew System::EventHandler(this, &Form1::btnSort_Click);
            // 
            // btnSearch
            // 
            this->btnSearch->Location = System::Drawing::Point(255, 391);
            this->btnSearch->Name = L"btnSearch";
            this->btnSearch->Size = System::Drawing::Size(75, 23);
            this->btnSearch->TabIndex = 28;
            this->btnSearch->Text = L"Search";
            this->btnSearch->UseVisualStyleBackColor = true;
            this->btnSearch->Click += gcnew System::EventHandler(this, &Form1::btnSearch_Click);
            // 
            // label11
            // 
            this->label11->AutoSize = true;
            this->label11->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
                static_cast<System::Byte>(0)));
            this->label11->Location = System::Drawing::Point(27, 334);
            this->label11->Name = L"label11";
            this->label11->Size = System::Drawing::Size(110, 20);
            this->label11->TabIndex = 29;
            this->label11->Text = L"Target Integer";
            // 
            // txtTarget
            // 
            this->txtTarget->Location = System::Drawing::Point(143, 336);
            this->txtTarget->Name = L"txtTarget";
            this->txtTarget->Size = System::Drawing::Size(100, 20);
            this->txtTarget->TabIndex = 30;
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(467, 641);
            this->Controls->Add(this->txtTarget);
            this->Controls->Add(this->label11);
            this->Controls->Add(this->btnSearch);
            this->Controls->Add(this->btnSort);
            this->Controls->Add(this->btnData);
            this->Controls->Add(this->label10);
            this->Controls->Add(this->label9);
            this->Controls->Add(this->textBox9);
            this->Controls->Add(this->textBox10);
            this->Controls->Add(this->textBox11);
            this->Controls->Add(this->textBox12);
            this->Controls->Add(this->textBox13);
            this->Controls->Add(this->textBox14);
            this->Controls->Add(this->textBox15);
            this->Controls->Add(this->textBox16);
            this->Controls->Add(this->textBox8);
            this->Controls->Add(this->textBox7);
            this->Controls->Add(this->textBox6);
            this->Controls->Add(this->textBox5);
            this->Controls->Add(this->textBox4);
            this->Controls->Add(this->textBox3);
            this->Controls->Add(this->textBox2);
            this->Controls->Add(this->textBox1);
            this->Controls->Add(this->label8);
            this->Controls->Add(this->label7);
            this->Controls->Add(this->label6);
            this->Controls->Add(this->label5);
            this->Controls->Add(this->label4);
            this->Controls->Add(this->label3);
            this->Controls->Add(this->label2);
            this->Controls->Add(this->label1);
            this->Name = L"Form1";
            this->Text = L"Pointer Array Program";
            this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
            this->ResumeLayout(false);
            this->PerformLayout();

        }
#pragma endregion
        int* arr;
        int** ptr;
        Graphics^ g;
        Pen^ blackPen; 
        private: String^ strTarget;


private: void swap(int** a, int** b)
{
    int* temp;
    temp = *a;
    *a = *b;
    *b = temp;
}


private: void displayPtr()
{
    // Display ptr values in textBox9 - textBox16
    textBox9->Text = ((int) ptr[0]).ToString();
    textBox10->Text = ((int) ptr[1]).ToString();
    textBox11->Text = ((int) ptr[2]).ToString();
    textBox12->Text = ((int) ptr[3]).ToString();
    textBox13->Text = ((int) ptr[4]).ToString();
    textBox14->Text = ((int) ptr[5]).ToString();
    textBox15->Text = ((int) ptr[6]).ToString();
    textBox16->Text = ((int) ptr[7]).ToString();

    // Assigns textBox values to corresponding labels
    label1->Text = ((int) ptr[0]).ToString();
    label2->Text = ((int) ptr[1]).ToString();
    label3->Text = ((int) ptr[2]).ToString();
    label4->Text = ((int) ptr[3]).ToString();
    label5->Text = ((int) ptr[4]).ToString();
    label6->Text = ((int) ptr[5]).ToString();
    label7->Text = ((int) ptr[6]).ToString();
    label8->Text = ((int) ptr[7]).ToString();
}


private: void drawLines()
{
    // Calculate start points (ptrX, ptrY)
    int ptrX = textBox9->Location.X + textBox9->Width;
    int ptrY = textBox9->Location.Y + textBox9->Height/2;

    // Calculate end point (arrX)
    int arrX = textBox1->Location.X;
    int arrY;
    int startY = textBox1->Location.Y + textBox1->Height/2;
    // Refresh the form and draw lines 
    this->Refresh();
    for (int i = 0; i < 8; i++)
    {
        arrY = startY + ((ptr[i] - &(arr[0])) * 32);
        g->DrawLine(blackPen, ptrX, ptrY, arrX, arrY);
        ptrY += 32;
    }
}

private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
             arr = new int[8];
             ptr = new int*[8];
             g = this->CreateGraphics();
             blackPen = gcnew System::Drawing::Pen(Color::Black);
             btnSort->Enabled = false;
             }

private: System::Void btnData_Click(System::Object^  sender, System::EventArgs^  e) {
             // Declare Variables and Create Random Number Generator
             int i; // Loop Control Variable
             Random^ randomNumber;
             DateTime now = DateTime::Now;
             randomNumber = gcnew Random(now.Millisecond);

             // Assign random numbers to arr
             for (i = 0; i < 8; i++) 
                 arr[i] = randomNumber->Next(0, 100);

             // Display arr values in textBox1 - textBox8
             textBox1->Text = arr[0].ToString();
             textBox2->Text = arr[1].ToString();
             textBox3->Text = arr[2].ToString();
             textBox4->Text = arr[3].ToString();
             textBox5->Text = arr[4].ToString();
             textBox6->Text = arr[5].ToString();
             textBox7->Text = arr[6].ToString();
             textBox8->Text = arr[7].ToString();

             // Assign element addresses to ptr
             for (int i = 0; i < 8; i++) ptr[i] = &arr[i];


             // Display the pointer array values
             displayPtr();

             // Draw lines connecting the pointer and data arrays
             drawLines();

             // Turn on Sort Button
             btnSort->Enabled = true;
         }
private: System::Void btnSort_Click(System::Object^  sender, System::EventArgs^  e) {
             // Declare Variables
             String^ output = "";
             int i, j;
             int arrTotal;
             // Bubble sort the ptr array
             for (i = 0; i < 7; i++)
                 for (j = 0; j < 7; j++)
                     if (*ptr[j] > *ptr[j+1])
                         swap(&(ptr[j]), &(ptr[j+1]));

             // Display pointers with their new address contents
             displayPtr();
             // Concatenate values in sorted order onto output String
             for (i = 0; i < 8; i++) output += (*ptr[i]).ToString() + "\r\n";
             // Draw lines connecting pointer array and data array
             drawLines();
             // Display sorted data in MessageBox

             arrTotal = arr[0] + arr[1] + arr[2] + arr[3] + arr[4] + arr[5] + arr[6] + arr[7];
             MessageBox::Show(output, "Sorted Data");
             MessageBox::Show("Sorted Data Sum = " + arrTotal.ToString());

             // Draw lines again after MessageBox is closed
             drawLines();
         }

private: System::Void btnSearch_Click(System::Object^  sender, System::EventArgs^  e) {
             // Declare and Initalize Variables
             String^ output = "";
             int i; 
             bool found = false;
             // Read the Target

ここでエラー ------------------------------------------------ -------------

ユーザーがtxtTargetテキストボックスに入力した数値に移動するはずのときに、forループが最後にジャンプする理由がわかりません(「整数を入力してください」と言います)この問題を修正する方法がわかりません。私のループは理にかなっていると言えますが、すべての助けが高く評価されているかどうかはわかりません

             for (i = 0; i < 8; i++) output = (*ptr[i]).ToString(); + "\r\n";
             MessageBox::Show(output->ToString());
             MessageBox::Show(output, "Target Found "); 
         }
};
}
4

1 に答える 1

0

この時点で不良ポインターが含まれている可能性ptr[i]があります-クラッシュするためNULLではありませんが、スタックベースのカウンターを壊しているポインターがぶら下がっていますiか? それは私の推測です。加えて:

あなたのスワップ関数は、二重ポインターを使用しているため、少し怖がっています。 std::swapのほうがいい。

これ:

        // Bubble sort the ptr array
         for (i = 0; i < 7; i++)
             for (j = 0; j < 7; j++)
                 if (*ptr[j] > *ptr[j+1])
                     swap(&(ptr[j]), &(ptr[j+1]));

非常に貧弱なソートであり、書かれているはずの作業を 2 倍にするため、おそらく間違っています。ここ使えstd::sort()ますか?

        // Display sorted data in MessageBox

         arrTotal = arr[0] + arr[1] + arr[2] + arr[3] + arr[4] + arr[5] + arr[6] + arr[7];

配列に別の値を追加する場合は、代わりに for ループまたはアルゴリズム呼び出しを使用してください。

次に、これ:

private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
         arr = new int[8];
         ptr = new int*[8];

これらの 8 は魔法の数字であり、将来のトラブルを求めています。RAII を使用して割り当てを処理すると、よりクリーンで安全になります。

最後に今のところ:

textBox9->Text = ((int) ptr[0]).ToString();

64 ビットでは安全ではないため、警告をスローする必要があります。

コンパイラの警告を高いレベルに設定して、すべて修正しましたか? 彼らはおそらく私がまだ見たことのない他の間違ったことをあなたに示すでしょう.

于 2013-06-07T18:04:55.433 に答える