Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
02.05.2014
Размер:
1.92 Кб
Скачать
#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();    
}

Соседние файлы в папке CBuilder6