Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №4 / CBuilder6 / Main
.cpp#include <vcl.h>
#pragma hdrstop
#include "Main.h"
#include <stdio.h>
#include <conio.h>
#pragma package(smart_init)
#pragma resource "*.dfm"
double **qk(int n, int k, double **q)
{
double **qk = new double*[n+1];
for (int i=1; i <= n; i++)
{
qk[i] = new double[n+1];
for (int j=1; j <= n; j++)
{
if (i < j)
{
if (i==k-1) qk[i][j] = q[1][j+1] * q[k][j+1];
else qk[i][j] = q[i+1][j+1];
}
else qk[i][j] = 0.0;
}
}
return qk;
}
double p(int n, double** q)
{
if (n==2) return 1.0 - q[1][n];
else
{
double sum = 0.0;
for (int k = 2; k <= n; k++)
{
double prod = 1.0;
for (int i = 2; i <= k-1; i++)
prod *= q[1][i];
sum += (1.0-q[1][k]) * prod * p(n-1, qk(n-1, k, q));
}
return sum;
}
}
TfrmMain *frmMain;
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
mmInput->Lines->LoadFromFile("input.txt");
FILE *input_file = fopen("input.txt", "r");
double val = 1.0;
fscanf(input_file, "%lf", &val);
int n = 0;
double **q = 0;
int sample = 1;
while (fscanf(input_file, "%d", &n)!=EOF)
{
q = new double*[n+1];
for (int i=1; i<=n; i++)
{
q[i] = new double[n+1];
for (int j=1; j<=n; j++)
{
double tmp = 0.0;
fscanf(input_file, "%lf", &tmp);
q[i][j] = tmp * val;
}
}
mmResult->Lines->Add("P(q)="+FloatToStr(p(n,q)));
for (int i=1; i<=n; i++) {
delete[] q[i];
}
delete[] q;
sample++;
}
}
void __fastcall TfrmMain::btnCloseClick(TObject *Sender)
{
Close();
}