Татарченко А. С. ІН-91
Практична робота № 3
Завдання:
Один рибалка ловив рибу двох типів: язь та плотва. Ймовірність появи кожної з риб не залежать один від одної. До 20 числа кожного місяця по парним числам ловилася тільки плотва з однаковою імовірністю, а по непарнім язь з однаковою імовірністю. Також рибалка знайшов третю величину f(x,y)=|2X-3Y|, якщо позначати імовірність вилову плотви через х, а імовірність вилову язю через у. Обчислити наступні величини: H(X), H(Y), H(f(X,Y)), H(Z,X), H(Z,Y), I(Z,X), I(Z,Y).
Програмна реалізація:
#include "stdafx.h"
#include <math.h>
using namespace System;
using namespace System::IO;
ref class inform
{public:
template<typename T> T kol_inform(T x)
{ T l=2;
if(x>0)
return -log(x)/log(l);
}
template<typename T> T entropia(array<T>^x)
{T sum=0;
T l=2;
for(int i=0;i<x->Length;i++)
{if(x[i]>0)
{sum=sum+x[i]*(log(x[i])/log(l));}}
return -sum;
}
template<typename T> T stat_nadlish(array<T>^x, T k)
{ T l=2;
T P;
P=1-entropia(x)/(log(l)/log(k));
return P;
}
};
int main(array<System::String ^> ^args)
{String^s;
int nx,ny,a,b,st1,st2;
Console::WriteLine("Enter nx=");
s=Console::ReadLine();
nx=Convert::ToInt32(s);
Console::WriteLine("Enter ny=");
s=Console::ReadLine();
ny=Convert::ToInt32(s);
Console::WriteLine("Enter a=");
s=Console::ReadLine();
a=Convert::ToInt32(s);
Console::WriteLine("Enter b=");
s=Console::ReadLine();
b=Convert::ToInt32(s);
Console::WriteLine("Enter st1=");
s=Console::ReadLine();
st1=Convert::ToInt32(s);
Console::WriteLine("Enter st2=");
s=Console::ReadLine();
st2=Convert::ToInt32(s);
array<double>^arr_x=gcnew array<double>(nx);
array<double>^arr_y=gcnew array<double>(ny);
array<double>^arr_px=gcnew array<double>(nx);
array<double>^arr_py=gcnew array<double>(ny);
array<double>^arr_xy=gcnew array<double>(nx*ny);
array<double>^arr_pxy=gcnew array<double>(nx*ny);
StreamReader^sr=gcnew StreamReader("G:\\4.txt");
for(double i=0;i<nx;i++)
{s=sr->ReadLine();
arr_x[i]=Convert::ToDouble(s);
Console::WriteLine("x={0}",arr_x[i]);}
for(double i=0;i<ny;i++)
{s=sr->ReadLine();
arr_y[i]=Convert::ToDouble(s);
Console::WriteLine("y={0}",arr_y[i]);}
for(double i=0;i<nx;i++)
{s=sr->ReadLine();
arr_px[i]=Convert::ToDouble(s);
Console::WriteLine("px={0}",arr_px[i]);}
for(double i=0;i<ny;i++)
{s=sr->ReadLine();
arr_py[i]=Convert::ToDouble(s);
Console::WriteLine("py={0}",arr_py[i]);}
double k=0;
for(double i=0;i<nx;i++)
{for(double j=0;j<ny;j++)
{arr_xy[k]=abs(a*pow(arr_x[i],st1))+abs(b*pow(arr_y[j],st2));
k++;}
}
for(double i=0;i<k;i++)
{Console::WriteLine("xy[{0}]={1}",i,arr_xy[i]);}
Console::WriteLine();
double pk=0;
for(double i=0;i<arr_px->Length;i++)
{for(double j=0;j<arr_py->Length;j++)
{arr_pxy[pk]=arr_px[i]*arr_py[j];
pk++;}
}
for(double i=0;i<pk;i++)
{Console::WriteLine("pxy[{0}]={1}",i,arr_pxy[i]);}
Console::WriteLine();
inform^xz=gcnew inform;
Console::WriteLine("Энтропия: H[X]={0} бит/символ",xz->entropia(arr_px));
Console::WriteLine("Энтропия: H[Y]={0} бит/символ",xz->entropia(arr_py));
Console::WriteLine("Энтропия: H[Z]={0} бит/символ",xz->entropia(arr_pxy));
}
Скріншоти роботи програми:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.