C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
динамическое выделение памяти., создание и удаление
Lougin
Отправлено: 01.12.2009, 22:39


Ученик-кочегар

Группа: Участник
Сообщений: 1



помогите пожалуйста!
Преподаватель спросил как сделать программу без этого участка
CODE
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
Rows = StrToInt (Edit1->Text);
Vect0 = new double [Rows];
Vect1 = new double [Rows];
Vect2 = new double [Rows];

}

и как исправить что бы она работала(правильно работала)
Потом пришли к вводу что работоспособность зависит от того где объявлены double *Vect0, *Vect1, *Vect2; int Rows;
Если сделать вот так должно было работать, но оказалось что она работает всегда...
Ктонибудь может сказать какая разница в том где идет объявление или посоветовать чтонибудь....очень нужно...
QUOTE

#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
double *Vect0, *Vect1, *Vect2; int Rows;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner


исходный код
QUOTE

/---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
Rows = StrToInt (Edit1->Text);
Vect0 = new double [Rows];
Vect1 = new double [Rows];
Vect2 = new double [Rows];

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Rows = StrToInt (Edit1->Text);
StringGrid1->RowCount = Rows + 1;
delete [] Vect0;
delete [] Vect1;
delete [] Vect2;
Vect0 = new double [Rows];
Vect1 = new double [Rows];
Vect2 = new double [Rows];
MyRand (Vect0);
MyRand (Vect1);
MyVectToGrid (Vect0, 0);
MyVectToGrid (Vect1, 1);
Button2->Enabled=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
MyGridToVect (Vect0, 0);
MyGridToVect (Vect1, 1);
for (int i=0; i<Rows; ++i)
Vect2 [i] = pow(Vect0 [i] + Vect1 [i],2);
MyVectToGrid (Vect2, 2);
}

h файл
CODE
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
   TStringGrid *StringGrid1;
   TButton *Button1;
   TEdit *Edit1;
   TButton *Button2;
   void __fastcall Button1Click(TObject *Sender);
   void __fastcall Button2Click(TObject *Sender);
       void __fastcall Edit1Exit(TObject *Sender);
private:        // User declarations
public:         // User declarations
   __fastcall TForm1(TComponent* Owner);
   double *Vect0, *Vect1, *Vect2; int Rows;

   void __fastcall TForm1::MyVectToGrid (double* vec, int col)
   { for (int i = 0; i < Rows; ++i)
   StringGrid1->Cells [col][i+1] = FloatToStrF(vec [i], ffFixed, 8, 2); }

   void __fastcall TForm1::MyGridToVect (double* vec, int col)
   { for (int i = 0; i < Rows; ++i)
     vec [i]= StrToFloat(StringGrid1->Cells [col][i+1]); }

   void __fastcall TForm1::MyRand (double* vec)
   {
   for (int i = 0; i < Rows; ++i) vec [i] = random (10); }
};

//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Вернуться в Вопросы программирования в C++Builder