65daysofstatic
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору прога создает массив, вводимый целиком в edit на form1, сортирует его пузырьком по возрастанию или убыванию в зависимости от радикнопки. отсортировав, массив должен быть выведен на form2. ENTR.cpp: Код: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "ENTR.h" #include "RSLT.h" #include "Error.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { exit(0); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { try{ AnsiString text = Form1->Edit1->Text; int i = 0, t = 0, k = 0, p = 0, l = text.Length(); for (i = 0; i < l; i++) {if ((text[i] == ',') || (text [i] == '.')) k++;} // - определение длины массива k int *pMas; pMas = new int[k]; // - динамическое обьявление массива длиной k i = 0; while (i < l) // заполнение массива { while ((text[i+t] != ',') || (text[i+t] != '.')) t++; pMas[p] = text.SubString(i, i+t).ToInt(); p++; i+=t; t = 0; } if (Form1->RadioButton2->Checked == true) RVRS(pMas, k); SORT(pMas, k); // - собственно сортировка if (Form1->RadioButton2->Checked == true) RVRS(pMas, k); Form2->Visible = true; for (i = 0; i < k-1; i++) Form2->Edit1->Text += pMas[i] + ","; Form2->Edit1->Text += "."; } catch (...) { Form3->Visible = true; } } //--------------------------------------------------------------------------- void TForm1::RVRS(int pMas[], int k) { for (int i = 0; i < k; i++) pMas[i] *= -1; } //--------------------------------------------------------------------------- void TForm1::SORT(int pMas[], int k) { int i = 0; for (int s = 0; s < k-1; s++) { for (i; i < k-1; i++) { if (pMas[i] > pMas[i+1]) { pMas[i] += pMas[i+1]; pMas[i+1] = pMas[i] - pMas[i+1]; pMas[i] = pMas[i] - pMas[i+1]; } } i = 0; } } //--------------------------------------------------------------------------- void TForm1::DELT(int pMas[]) {delete pMas;} //--------------------------------------------------------------------------- | ENTR.h: Код: //--------------------------------------------------------------------------- #ifndef ENTRH #define ENTRH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TLabel *Label1; TEdit *Edit1; TButton *Button1; TButton *Button2; TRadioGroup *RadioGroup1; TRadioButton *RadioButton1; TRadioButton *RadioButton2; void __fastcall Button2Click(TObject *Sender); void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations void RVRS(int pMas[], int k); void SORT(int pMas[], int k); void DELT(int pMas[]); __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif | эти функции мною написанные, т.е. не билдеровский events, поэтому для них надо прописывать все самостоятельно: void TForm1::RVRS(int pMas[], int k) void TForm1::SORT(int pMas[], int k) void TForm1::DELT(int pMas) допустим, обьявить у меня даже получилось и прога вроде компилируется, но теперь в другом косяк. при нажатии кнопки вылезает ошибка: "Project Massiv.exe raised exception class EAccessViolation with message 'Access violation at adress 40009720. Read of address 77682603'. Process stopped. Use Step or Run to continue." поставила try catch, чтобы отловить ошибку, но исключение даже не успевает сработать, то есть мое сообщение об ошибке показывается уже после подолжения процесса. как бороться с такой ошибкой, я уже не понимаю ( |