Двоичный циклический код Хэмминга

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

<=15, то Pbo=(1-P)^i, Poo=0, k=1, иначе переходим к шагу 14;

  • Выводим Pbo;
  • Если k<=2, то Poo=

    , иначе переходим к шагу 12;

  • k=k+1, переходим к шагу 10;
  • Pno=1-Pbo-Poo, Pls=Pno/(1-Poo), lgPls=log10(Pls),
  • M[i+10]=(Pdop-Pls), i=i+1;

  • Выводим Poo, Pno, Pls, lgPls, переходим к шагу 8;
  • i=17;
  • Если i<=31, то Pbo=(1-P)^i, Poo=0, k=1, иначе переходим к шагу 35;
  • Выводим Pbo;
  • Если k<=2, то Poo=

    , иначе переходим к шагу 19;

  • k=k+1, переходим к шагу 17;
  • Pno=1-Pbo-Poo, Pls=Pno/(1-Poo), lgPls=log10(Pls),
  • M[i+10]=(Pdop-Pls), i=i+1;

  • Выводим Poo, Pno, Pls, lgPls, переходим к шагу 15;
  • Если d=4, то i=11, иначе переходим к шагу 35;
  • Если i<=15, то Pbo=(1-P)^i, Poo=0, k=1, иначе переходим к шагу 28;
  • Выводим Pbo;
  • Если k<=3, то Poo=

    , иначе переходим к шагу 26;

  • k=k+1, переходим к шагу 24;
  • Pno=1-Pbo-Poo, Pls=Pno/(1-Poo), lgPls=log10(Pls),
  • M[i+10]=(Pdop-Pls), i=i+1;

  • Выводим Poo, Pno, Pls, lgPls, переходим к шагу 22;
  • i=17;
  • Если i<=31, то Pbo=(1-P)^i, Poo=0, k=1, иначе переходим к шагу 35;
  • Выводим Pbo;
  • Если k<=3, то Poo=

    , иначе переходим к шагу 33;

  • k=k+1, переходим к шагу 31;
  • Pno=1-Pbo-Poo, Pls=Pno/(1-Poo), lgPls=log10(Pls),
  • M[i+10]=(Pdop-Pls), i=i+1;

  • Выводим Poo, Pno, Pls, lgPls, переходим к шагу 29;
  • h=0, i=0;
  • Если i<=60, то переходим к шагу 37, иначе переходим к шагу 38;
  • Если M[i]>0, то h=h+1, i=i+1, иначе i=i+1 и переходим к шагу 36;
  • Выделяем память под массив Н из h элементов.
  • Если i<=60, то переходим к шагу 40, иначе переходим к шагу 41;
  • Если M[i]>0, то H[k]=M[i], k=k+1, i=i+1, иначе i=i+1 и переходим к шагу 39;
  • i=0;
  • Ищем минимальный элемент в массиве Н;
  • Если i<=60, то переходим к шагу 44, иначе переходим к шагу 50;
  • Если M[i]=минимальному элементу, то и переходим к шагу 45, иначе i=i+1 и переходим к шагу 43;
  • Если i>=0 и i<=20, то выводим (i+11,i+10)-код, иначе переходим к шагу 46;
  • Если i>=21 и i<=25, то выводим (i-10,i-14)-код, иначе переходим к шагу 47;
  • Если i>=26 и i<=40, то выводим (i-9,i-14)-код, иначе переходим к шагу 48;
  • Если i>=41 и i<=45, то выводим (i-30,i-35)-код, иначе переходим к шагу 49;
  • Если i>=46 и i<=60, то выводим (i-29,i-35)-код, иначе i=i+1 и переходим к шагу 39;
  • Выводим минимальный элемент из массива Н, как минимум разницы Рдоп-Рлс;
  • Конец.
  • Распечатка программы

    Программа написана на языке С++.

    #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";