Настройка компонент StringGrid

Для компоненты StringGrid1 значения ColCount и RowCount установите равными, например, 3 – три столбца и три строки, а FixedCols и FixedRows – 1.

Так как компоненты StringGrid2 и StringGrid3 имеют только один столбец, то у них ColCount = 1, RowCount = 3, а FixedCols = 0 и FixedRows = 1.

В свойстве Options строку goEditing для компонент StringGrid1 и StringGrid2 установите в положение true.

Для изменения размера n используется функция-обработчик EditChange, полученная двойным щелчком по компоненте Edit.

 

Рис. 6.1

 

 

Текст программы может иметь следующий вид:

. . .

int n = 3; // Глобальная переменная n

 

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Edit1->Text=IntToStr(n);

StringGrid1->ColCount = n+1; StringGrid1->RowCount = n+1;

StringGrid2->RowCount = n+1; StringGrid3->RowCount = n+1;

//---------- Ввод в левую верхнюю ячейку таблицы названия массивов -----------

StringGrid1->Cells[0][0] = "Матрица A";

StringGrid2->Cells[0][0] = "Массив B";

StringGrid3->Cells[0][0] = "Массив Y";

for(int i=1; i<=n;i++){

StringGrid1->Cells[0][i]="i="+IntToStr(i);

StringGrid1->Cells[i][0]="j="+IntToStr(i);

}

}

 

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

void __fastcall TForm1::Edit1Change(TObject *Sender)

{

int i;

n=StrToInt(Edit1->Text);

StringGrid1->ColCount = n+1;

StringGrid1->RowCount = n+1;

StringGrid2->RowCount = n+1;

StringGrid3->RowCount = n+1;

for(i=1; i<=n;i++){

StringGrid1->Cells[0][i]="i="+IntToStr(i);

StringGrid1->Cells[i][0]="j="+IntToStr(i);

}

}

 

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double **a, *b, s; // Декларация указателей

int i, j;

a = new double*[n]; // Захват памяти под указатели

for(i=0; i<n;i++)

a[i] = new double[n]; // Захват памяти под элементы

b = new double[n];

// Заполнение массивов А и В элементами из таблиц StringGrid1 и StringGrid2

for(i=0; i<n;i++) {

for(j=0; j<n;j++)

a[i][j]=StrToFloat(StringGrid1->Cells[j+1][i+1]);

b[i]=StrToFloat(StringGrid2->Cells[0][i+1]);

}

// Умножение строки матрицы А на вектор В и вывод результата s в StringGrid3

for(i=0; i<n;i++){

for(s=0, j=0; j<n;j++)

s += a[i][j]*b[j];

StringGrid3->Cells[0][i+1] = FloatToStrF(s, ffFixed,8,2);

}

for(i=0; i<n;i++) delete []a[i];

delete []a;

delete []b;

}

 

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Close();

}