Двоичный циклический код Хэмминга
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
<=15, то Pbo=(1-P)^i, Poo=0, k=1, иначе переходим к шагу 14;
, иначе переходим к шагу 12;
M[i+10]=(Pdop-Pls), i=i+1;
, иначе переходим к шагу 19;
M[i+10]=(Pdop-Pls), i=i+1;
, иначе переходим к шагу 26;
M[i+10]=(Pdop-Pls), i=i+1;
, иначе переходим к шагу 33;
M[i+10]=(Pdop-Pls), i=i+1;
Распечатка программы
Программа написана на языке С++.
#include
#include
#include
#include
#include
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
float P = 0.0006;
float Pdop = 0.0000002;
using namespace std;
float M[61];
vectorH;
char B[128];
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
float C(int n,int m)
{float c=1.0;
for(int i=n;i>=n-m+1;i--)c*=i;
for(int i=1;i<=m;i++)c/=i;
return (int)c;
}
void __fastcall TForm1::ComboBox1Select(TObject *Sender)
{int i=0, k;
double Pbo,Poo,Pno,Pls,lgPls;
AnsiString s;
ListBox1->Clear();
ListBox2->Clear();
ListBox3->Clear();
ListBox4->Clear();
ListBox5->Clear();
ListBox6->Clear();
ListBox7->Clear();
//d=2
if(ComboBox1->ItemIndex==0)
for(i=11;i<=31;i++)
{s="("+IntToStr(i)+","+IntToStr(i-1)+")";
ListBox1->Items->Add(s);
Pbo=pow(1-P,i);
sprintf(B,"%.8f",Pbo);
ListBox2->Items->Add(B);
Poo=0;
Poo=C(i,1)*pow(P,1)*pow(1-P,i-1);
sprintf(B,"%.8f",Poo);
ListBox3->Items->Add(B);
Pno=1-Pbo-Poo;
sprintf(B,"%.8f",Pno);
ListBox4->Items->Add(B);
Pls=Pno/(1-Poo);
sprintf(B,"%.8f",Pls);
ListBox5->Items->Add(B);
lgPls=log10(Pls);
sprintf(B,"%.2f",lgPls);
ListBox6->Items->Add(B);
Series1->AddXY(i,lgPls,s,clRed);
M[i-11]=(Pdop-Pls);
}
//d=3
if(ComboBox1->ItemIndex==1)
{for(i=11;i<=15;i++)
{s="("+IntToStr(i)+","+IntToStr(i-4)+")";
ListBox1->Items->Add(s);
Pbo=pow(1-P,i);
sprintf(B,"%.8f",Pbo);
ListBox2->Items->Add(B);
Poo=0;
for(k=1;k<=2;k++)
Poo+=C(i,k)*pow(P,k)*pow(1-P,i-k);
sprintf(B,"%.8f",Poo);
ListBox3->Items->Add(B);
Pno=1-Pbo-Poo;
sprintf(B,"%.8f",Pno);
ListBox4->Items->Add(B);
Pls=Pno/(1-Poo);
sprintf(B,"%.8f",Pls);
ListBox5->Items->Add(B);
lgPls=log10(Pls);
sprintf(B,"%.2f",lgPls);
ListBox6->Items->Add(B);
Series2->AddXY(i,lgPls,s,clLime);
M[i+10]=(Pdop-Pls);
}
for(i=17;i<=31;i++)
{s="("+IntToStr(i)+","+IntToStr(i-5)+")";
ListBox1->Items->Add(s);
Pbo=pow(1-P,i);
sprintf(B,"%.8f",Pbo);
ListBox2->Items->Add(B);
Poo=0;
for(k=1;k<=2;k++)
Poo+=C(i,k)*pow(P,k)*pow(1-P,i-k);
sprintf(B,"%.8f",Poo);
ListBox3->Items->Add(B);
Pno=1-Pbo-Poo;
sprintf(B,"%.8f",Pno);
ListBox4->Items->Add(B);
Pls=Pno/(1-Poo);
sprintf(B,"%.8f",Pls);
ListBox5->Items->Add(B);
lgPls=log10(Pls);
sprintf(B,"%.2f",lgPls);
ListBox6->Items->Add(B);
Series2->AddXY(i,lgPls,s,clLime);
M[i+9]=(Pdop-Pls);
}
}
//d=4
if(ComboBox1->ItemIndex==2)
{for(i=11;i<=15;i++)
{s="("+IntToStr(i)+","+IntToStr(i-5)+")";
ListBox1->Items->Add(s);
Pbo=pow(1-P,i);
sprintf(B,"%.8f",Pbo);
ListBox2->Items->Add(B);
Poo=0;
for(k=1;k<=3;k++)
Poo+=C(i,k)*pow(P,k)*pow(1-P,i-k);
sprintf(B,"%.8f",Poo);
ListBox3->Items->Add(B);
Pno=1-Pbo-Poo;
sprintf(B,"%.8f",Pno);
ListBox4->Items->Add(B);
Pls=Pno/(1-Poo);
sprintf(B,"%.8f",Pls);
ListBox5->Items->Add(B);
lgPls=log10(Pls);
sprintf(B,"%.2f",lgPls);
ListBox6->Items->Add(B);
Series3->AddXY(i,lgPls,s,clYellow);
M[i+30]=(Pdop-Pls);
}
for(i=17;i<=31;i++)
{s="("+IntToStr(i)+","+IntToStr(i-6)+")";
ListBox1->Items->Add(s);
Pbo=pow(1-P,i);
sprintf(B,"%.8f",Pbo);
ListBox2->Items->Add(B);
Poo=0;
for(k=1;k<=3;k++)
Poo+=C(i,k)*pow(P,k)*pow(1-P,i-k);
sprintf(B,"%.8f",Poo);
ListBox3->Items->Add(B);
Pno=1-Pbo-Poo;
sprintf(B,"%.8f",Pno);
ListBox4->Items->Add(B);
Pls=Pno/(1-Poo);
sprintf(B,"%.8f",Pls);
ListBox5->Items->Add(B);
lgPls=log10(Pls);
sprintf(B,"%.2f",lgPls);
ListBox6->Items->Add(B);
Series3->AddXY(i,lgPls,s,clYellow);
M[i+29]=(Pdop-Pls);
}
}
int h=0;
for (i=0;i<=60;i++)
if (M[i]>0) h++;
H.resize(h);
k=0;
for (i=0; i<=60;i++)
if (M[i]>0) {H[k]=M[i]; k++;}
for (i=0;i<=60;i++)
if (M[i]==*min_element(H.begin(),H.end()))
{if (i>=0&&i<=20)
{s="("+IntToStr(i+11)+","+IntToStr(i+10)+")-код с d=2";
ListBox7->Items->Add(s);}
if (i>=21&&i<=25)
{s="("+IntToStr(i-10)+","+IntToStr(i-14)+")-код с d=3";