Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual C++ _ зертханалық жұмыс.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
831.46 Кб
Скачать

6.2. Есептің жасалу мысалы

массив көбейтіндісін есептеп шығару керек, мұндағы А- өлшемі NxN квадраттық матрица, ал Y және BN элементтен тұратын бір өлшемді массив. Y векторының элементтері

формуласымен есептеледі.

6.2.1. Терезе қосымшасын құру мысалы

N санын Edit арқылы, A және B массивтерін StringGrid компонентінен енгізу. Нәтижені StringGrid компонентіне шығарыңыз.

Сұхбат панелі және программа нәтижесі 6.1 суретінде көрсетілген.

6.1 сурет

StringGrid компонентін баптау

StringGrid компоненті үшін ColCount және RowCount мәндерін тең қылып бекітіңіз, мысалы, 3 – үш баған және үш жол, ал FixedCols және FixedRows – 1.

StringGrid2 және StringGrid3 компоненттері тек қана бір бағанға ие болғандықтан, оларда ColCount =1, RowCount =3 , ал FixedCols=0, FixedRows=1 болады.

StringGrid1және StringGrid2 компоненттері үшін Options қасиетінде goEditing жолын true мәнінде бекітіңіз.

N өлшемін өзгерту үшін EditChange функция-өңдегіш қолданылады, ол Edit батырмасын екі рет шерткенде пайда болады.

Программа мәтіні төмендегідей болуы мүмкін:

//---------------------- Ауқымды айнымалылар -------------------

int n = 3;

double **a, *b; //көрсеткіштерді декларациялау

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

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 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]);

}

//А матрицасын В векторына көбейту және нәтижені 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);

}

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

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

delete []a; delete []b;

ShowMessage("Память освобождена!");

Close();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]