Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //---------------------------------------------------------------------------
- //
- // Name: HamingFrm.cpp
- // Author: Chromik
- // Created: 2.12.2010 15:34:39
- // Description: HamingFrm class implementation
- //
- //---------------------------------------------------------------------------
- #include "HamingFrm.h"
- //Do not add custom headers between
- //Header Include Start and Header Include End
- //wxDev-C++ designer will remove them
- ////Header Include Start
- #include "Images/Self_HamingFrm_XPM.xpm"
- ////Header Include End
- //----------------------------------------------------------------------------
- // HamingFrm
- //----------------------------------------------------------------------------
- //Add Custom Events only in the appropriate block.
- //Code added in other places will be removed by wxDev-C++
- ////Event Table Start
- BEGIN_EVENT_TABLE(HamingFrm,wxFrame)
- ////Manual Code Start
- ////Manual Code End
- EVT_CLOSE(HamingFrm::OnClose)
- EVT_BUTTON(ID_WXBUTTON2,HamingFrm::WxButton2Click)
- EVT_TEXT(ID_WXEDIT5,HamingFrm::WxButton2Click)
- EVT_TEXT(ID_WXEDIT1,HamingFrm::WxButton1Click)
- EVT_BUTTON(ID_WXBUTTON1,HamingFrm::WxButton1Click)
- END_EVENT_TABLE()
- ////Event Table End
- HamingFrm::HamingFrm(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style)
- : wxFrame(parent, id, title, position, size, style)
- {
- CreateGUIControls();
- }
- HamingFrm::~HamingFrm()
- {
- }
- void HamingFrm::CreateGUIControls()
- {
- //Do not add custom code between
- //GUI Items Creation Start and GUI Items Creation End
- //wxDev-C++ designer will remove them.
- //Add the custom code before or after the blocks
- ////GUI Items Creation Start
- wxInitAllImageHandlers(); //Initialize graphic format handlers
- WxPanel1 = new wxPanel(this, ID_WXPANEL1, wxPoint(0, 0), wxSize(851, 679));
- WxButton1 = new wxButton(WxPanel1, ID_WXBUTTON1, wxT("OK"), wxPoint(365, 52), wxSize(50, 22), 0, wxDefaultValidator, wxT("WxButton1"));
- WxEdit1 = new wxTextCtrl(WxPanel1, ID_WXEDIT1, wxT(""), wxPoint(10, 52), wxSize(355, 22), 0, wxDefaultValidator, wxT("WxEdit1"));
- WxEdit1->SetMaxLength(16);
- WxEdit1->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
- WxStaticText1 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT1, wxT("Zadejte BIN vstupní data (max. 16b):"), wxPoint(10, 35), wxDefaultSize, 0, wxT("WxStaticText1"));
- WxStaticText1->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
- WxEdit2 = new wxTextCtrl(WxPanel1, ID_WXEDIT2, wxT(""), wxPoint(10, 148), wxSize(405, 22), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit2"));
- WxEdit2->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
- WxStaticText2 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT2, wxT("Z vstupních dat se vytvoří informační data:"), wxPoint(10, 130), wxDefaultSize, 0, wxT("WxStaticText2"));
- WxStaticText2->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
- WxInfo = new wxStaticText(WxPanel1, ID_WXINFO, wxT(""), wxPoint(15, 74), wxDefaultSize, 0, wxT("WxInfo"));
- WxInfo->SetForegroundColour(wxColour(0,0,0));
- WxInfo->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
- WxStaticText3 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT3, wxT("Mezi tyto data se umístí paritní bity tak, aby jejich pozice byly mocniny 2:"), wxPoint(10, 180), wxDefaultSize, 0, wxT("WxStaticText3"));
- WxStaticText3->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
- WxEdit3 = new wxTextCtrl(WxPanel1, ID_WXEDIT3, wxT(""), wxPoint(12, 198), wxSize(405, 22), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit3"));
- WxEdit3->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
- WxEdit4 = new wxTextCtrl(WxPanel1, ID_WXEDIT4, wxT(""), wxPoint(10, 475), wxSize(405, 25), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit4"));
- WxEdit4->SetFont(wxFont(11, wxSWISS, wxNORMAL, wxNORMAL, false));
- WxStaticText4 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT4, wxT("Hammingův kód je:"), wxPoint(9, 458), wxDefaultSize, 0, wxT("WxStaticText4"));
- WxStaticText4->SetForegroundColour(wxColour(0,0,255));
- WxStaticText4->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
- WxMemo1 = new wxTextCtrl(WxPanel1, ID_WXMEMO1, wxEmptyString, wxPoint(10, 248), wxSize(405, 200), wxTE_READONLY | wxTE_MULTILINE, wxDefaultValidator, wxT("WxMemo1"));
- WxMemo1->SetMaxLength(0);
- WxEdit5 = new wxTextCtrl(WxPanel1, ID_WXEDIT5, wxT(""), wxPoint(435, 53), wxSize(355, 22), 0, wxDefaultValidator, wxT("WxEdit5"));
- WxEdit5->SetMaxLength(31);
- WxEdit5->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
- WxButton2 = new wxButton(WxPanel1, ID_WXBUTTON2, wxT("OK"), wxPoint(789, 53), wxSize(50, 22), 0, wxDefaultValidator, wxT("WxButton2"));
- WxEdit6 = new wxTextCtrl(WxPanel1, ID_WXEDIT6, wxT(""), wxPoint(435, 319), wxSize(405, 22), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit6"));
- WxEdit6->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
- WxStaticText5 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT5, wxT("Dekódování Hammingova kódu"), wxPoint(435, 5), wxDefaultSize, 0, wxT("WxStaticText5"));
- WxStaticText5->SetForegroundColour(wxColour(0,0,0));
- WxStaticText5->SetFont(wxFont(14, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Tahoma")));
- WxEdit7 = new wxTextCtrl(WxPanel1, ID_WXEDIT7, wxT(""), wxPoint(435, 420), wxSize(405, 25), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit7"));
- WxEdit7->SetFont(wxFont(11, wxSWISS, wxNORMAL, wxNORMAL, false));
- WxMemo2 = new wxTextCtrl(WxPanel1, ID_WXMEMO2, wxEmptyString, wxPoint(435, 148), wxSize(64, 90), wxTE_READONLY | wxTE_MULTILINE, wxDefaultValidator, wxT("WxMemo2"));
- WxMemo2->SetMaxLength(0);
- WxMemo2->SetForegroundColour(wxColour(000,000,000));
- WxMemo2->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
- WxStaticText6 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT6, wxT("Nesouhlasí paritní bity:"), wxPoint(435, 130), wxDefaultSize, 0, wxT("WxStaticText6"));
- WxStaticText6->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
- WxStaticText7 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT7, wxT("které mají společné to, že pracují s bitem na pozici:"), wxPoint(435, 248), wxDefaultSize, 0, wxT("WxStaticText7"));
- WxStaticText7->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
- WxEdit8 = new wxTextCtrl(WxPanel1, ID_WXEDIT8, wxT(""), wxPoint(435, 266), wxSize(50, 25), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit8"));
- WxEdit8->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
- WxStaticText9 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT9, wxT("Negací tohoto bitu se kód opraví na:"), wxPoint(435, 301), wxDefaultSize, 0, wxT("WxStaticText9"));
- WxStaticText9->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
- WxStaticText8 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT8, wxT(""), wxPoint(435, 79), wxDefaultSize, 0, wxT("WxStaticText8"));
- WxStaticText8->SetForegroundColour(wxColour(255,0,0));
- WxStaticText8->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxBOLD, false));
- WxStaticText10 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT10, wxT("Po dekódování dostaneme informační data:"), wxPoint(435, 390), wxDefaultSize, 0, wxT("WxStaticText10"));
- WxStaticText10->SetForegroundColour(wxColour(0,0,255));
- WxStaticText10->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
- WxStaticText11 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT11, wxT("Podle následujících rovnic se vypočítají paritní bity:"), wxPoint(10, 230), wxDefaultSize, 0, wxT("WxStaticText11"));
- WxStaticText11->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
- WxStaticText12 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT12, wxT("jejichž tvar po úpravě na BIN je:"), wxPoint(437, 457), wxDefaultSize, 0, wxT("WxStaticText12"));
- WxStaticText12->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
- WxEdit9 = new wxTextCtrl(WxPanel1, ID_WXEDIT9, wxT(""), wxPoint(435, 475), wxSize(405, 25), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit9"));
- WxEdit9->SetFont(wxFont(11, wxSWISS, wxNORMAL, wxNORMAL, false));
- WxStaticText13 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT13, wxT("Zadejte Hammingův kód:"), wxPoint(435, 35), wxDefaultSize, 0, wxT("WxStaticText13"));
- WxStaticText13->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
- WxStaticText14 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT14, wxT("Kódování na Hammingův kód"), wxPoint(8, 5), wxDefaultSize, 0, wxT("WxStaticText14"));
- WxStaticText14->SetForegroundColour(wxColour(0,0,0));
- WxStaticText14->SetFont(wxFont(14, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Tahoma")));
- WxStaticLine1 = new wxStaticLine(WxPanel1, ID_WXSTATICLINE1, wxPoint(425, -4), wxSize(-1, 513), wxLI_VERTICAL);
- WxStaticBitmap1 = new wxStaticBitmap(WxPanel1, ID_WXSTATICBITMAP1, wxBitmap("tab.png", wxBITMAP_TYPE_PNG), wxPoint(3, 512), wxSize(846, 155) );
- WxEdit1->SetFocus();
- SetTitle(wxT("Demonstrace Hammingova kódu"));
- SetIcon(Self_HamingFrm_XPM);
- SetSize(8,8,867,717);
- Center();
- ////GUI Items Creation End
- }
- void HamingFrm::OnClose(wxCloseEvent& event)
- {
- Destroy();
- }
- int PocetP1,PocetP2,PocetP3,PocetP4,PocetP5;
- /*
- * WxButton1Click
- */
- void HamingFrm::WxButton1Click(wxCommandEvent& event)
- {
- //ULOŽENÍ VSTUPU DO PROMĚNNÉ
- wxString StrVstup = WxEdit1->GetValue();
- //OSTATNÍ PROMĚNNÉ
- int konec=0;
- //PROGRAM
- //Úprava informačních bitů na požadovaný počet míst
- wxString StrVstupKod;
- wxString StrHamming1;
- WxInfo->SetLabel("");
- int IntVelikost = strlen(StrVstup)-1;
- switch(IntVelikost) { case 0:
- StrVstupKod=" ";
- StrHamming1=" ";
- for (int i=0;i<(1-IntVelikost);i++) {StrVstupKod[i]='0';}
- for (int i=(0-IntVelikost);i<=1;i++) {StrVstupKod[i]=StrVstup[konec];konec=konec+1;}
- IntVelikost = strlen(StrVstupKod)-1;
- WxInfo->SetLabel("Budou použity:\n 1bit informační\n 2bity kontrolní");
- PocetP1=2;
- PocetP2=2;
- PocetP3=0;
- PocetP4=0;
- PocetP5=0;
- WxInfo->SetForegroundColour(wxColour(0,0,0));
- break;
- case 1:
- case 2:
- case 3:
- StrVstupKod=" ";
- StrHamming1=" ";
- for (int i=0;i<(3-IntVelikost);i++) {StrVstupKod[i]='0';}
- for (int i=(3-IntVelikost);i<=3;i++) {StrVstupKod[i]=StrVstup[konec];konec=konec+1;}
- IntVelikost = strlen(StrVstupKod)-1;
- WxInfo->SetLabel("Budou použity:\n 4bity informační\n 3bity kontrolní");
- PocetP1=4;
- PocetP2=4;
- PocetP3=4;
- PocetP4=0;
- PocetP5=0;
- WxInfo->SetForegroundColour(wxColour(0,0,0));
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- case 9:
- case 10:
- StrVstupKod=" ";
- StrHamming1=" ";
- for (int i=0;i<(10-IntVelikost);i++) {StrVstupKod[i]='0';}
- for (int i=(10-IntVelikost);i<=11;i++) {StrVstupKod[i]=StrVstup[konec];konec=konec+1;}
- IntVelikost = strlen(StrVstupKod)-1;
- WxInfo->SetLabel("Bude použito:\n 11bitů informačních\n 4bity kontrolní");
- PocetP1=8;
- PocetP2=8;
- PocetP3=8;
- PocetP4=8;
- PocetP5=0;
- WxInfo->SetForegroundColour(wxColour(0,0,0));
- break;
- case 11:
- case 12:
- case 13:
- case 14:
- case 15:
- StrVstupKod=" ";
- StrHamming1=" ";
- for (int i=0;i<(25-IntVelikost);i++) {StrVstupKod[i]='0';}
- for (int i=(25-IntVelikost);i<=25;i++) {StrVstupKod[i]=StrVstup[konec];konec=konec+1;}
- IntVelikost = strlen(StrVstupKod)-1;
- WxInfo->SetLabel("Bude použito:\n 26bitů informačních\n 5bitů kontrolních");
- PocetP1=16;
- PocetP2=16;
- PocetP3=16;
- PocetP4=16;
- PocetP5=16;
- WxInfo->SetForegroundColour(wxColour(0,0,0));
- break;
- }
- WxEdit2->SetValue(StrVstupKod);
- //Začátek ověření BIN
- int IntPocetBin = 0;
- for(int i=0;i<=IntVelikost;i++){
- if ( (StrVstupKod[i]!='0') and (StrVstupKod[i]!='1') ) {IntPocetBin=IntPocetBin+1;};
- };
- if (IntPocetBin>=1)
- {
- WxEdit2->SetValue("Chyba! Kód není ve tvaru BIN");
- WxEdit3->SetValue("Chyba! Kód není ve tvaru BIN");
- WxEdit4->SetValue("Chyba! Kód není ve tvaru BIN");
- WxInfo->SetLabel("Vstupní data nejsou ve tvaru BIN!");
- WxMemo1->SetValue("Vstupní data nejsou ve tvaru BIN!");
- WxInfo->SetForegroundColour(wxColour(255,0,0));
- ;}
- //Konec ověření BIN
- else
- ////////////////VSUP JE BIN////////////////
- //ZAČÁTEK Převod do StrHamming1
- {
- int x = 0;
- for (int i=0;i<=IntVelikost;i++) {if (x==0) {StrHamming1[x]='P';x=x+1;StrHamming1[x]='P';x=x+1;}
- else {
- if ( (x==3) or (x==7) or (x==15) ) {StrHamming1[x]='P'; x=x+1;}
- }
- StrHamming1[x]=StrVstupKod[i];x=x+1;
- }
- WxEdit3->SetValue(StrHamming1);
- //KONEC Převod do StrHamming1
- //Pokračuju
- wxString StrHamming2=StrHamming1;
- int IntDelkaSH2=strlen(StrHamming2);
- int IntIndex;
- int IntPocitadlo;
- if (IntDelkaSH2==0)
- {StrHamming2=' ';}
- else
- {
- //P1
- IntPocitadlo=0;
- for (int i=1;i<=PocetP1;i++)
- {
- IntIndex=(2*i)-1;
- if (StrHamming2[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
- }
- if (IntPocitadlo%2==0)
- {StrHamming2[0]='0';} else {StrHamming2[0]='1';}
- //P1
- //P2
- IntPocitadlo=0;
- int iP2[16]={2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31};
- for (int i=1;i<=PocetP2;i++)
- {
- IntIndex=iP2[i-1];
- if (StrHamming2[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
- }
- if (IntPocitadlo%2==0)
- {StrHamming2[1]='0';} else {StrHamming2[1]='1';}
- //P2
- //P3
- IntPocitadlo=0;
- for (int i=1;i<=PocetP3;i++)
- {
- if (i<=4) {IntIndex=i+3;}
- if (i>4 and i<=8) {IntIndex=i+7;}
- if (i>8 and i<=12) {IntIndex=i+11;}
- if (i>12 and i<=16) {IntIndex=i+15;}
- if (StrHamming2[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
- }
- if (PocetP3!=0) {
- if (IntPocitadlo%2==0)
- {StrHamming2[3]='0';} else {StrHamming2[3]='1';}
- }
- //P3
- //P4
- IntPocitadlo=0;
- for (int i=1;i<=PocetP4;i++)
- {
- if (i<=8) {IntIndex=i+7;}
- if (i>8 and i<=16) {IntIndex=i+15;}
- if (StrHamming2[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
- }
- if (PocetP4!=0) {
- if (IntPocitadlo%2==0)
- {StrHamming2[7]='0';} else {StrHamming2[7]='1';}
- }
- //P4
- //P5
- IntPocitadlo=0;
- for (int i=1;i<=PocetP5;i++)
- {
- IntIndex=i+15;
- if (StrHamming2[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
- }
- if (PocetP5!=0) {
- if (IntPocitadlo%2==0)
- {StrHamming2[15]='0';} else {StrHamming2[15]='1';}
- }
- }
- WxEdit4->SetValue(StrHamming2);
- //VZORCE
- /////MM
- //P1
- if (IntDelkaSH2==0) {WxMemo1->SetValue(" ");}
- if (IntVelikost==0 or IntVelikost==3 or IntVelikost==10 or IntVelikost==25) {WxMemo1->SetValue("P1 = b3");}
- if (IntVelikost==3 or IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText(" + b5 + b7");}
- if (IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText(" + b9 + b11 + b13 + b15");}
- if (IntVelikost==25) {WxMemo1->AppendText(" + b17 + b19 + b21 + b23 + b25 + b27 + b29 + b31");}
- WxMemo1->AppendText(" = ");
- WxMemo1->AppendText(StrHamming2[0]);
- //P2
- if (IntDelkaSH2==0) {WxMemo1->SetValue(" ");}
- if (IntVelikost==0 or IntVelikost==3 or IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText("\n\nP2 = b3");}
- if (IntVelikost==3 or IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText(" + b6 + b7");}
- if (IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText(" + b10 + b11 + b14 + b15");}
- if (IntVelikost==25) {WxMemo1->AppendText(" + b18 + b19 + b22 + b23 + b26 + b27 + b30 + b31");}
- WxMemo1->AppendText(" = ");
- WxMemo1->AppendText(StrHamming2[1]);
- //P3
- if (IntDelkaSH2==0) {WxMemo1->SetValue(" ");}
- if (IntVelikost==3 or IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText("\n\nP3 = b5 + b6 + b7");}
- if (IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText(" + b12 + b13 + b14 + b15");}
- if (IntVelikost==25) {WxMemo1->AppendText(" + b20 + b21 + b22 + b23 + b28 + b29 + b30 + b31");}
- if (IntVelikost>=3) {WxMemo1->AppendText(" = ");
- WxMemo1->AppendText(StrHamming2[3]);}
- //P4
- if (IntDelkaSH2==0) {WxMemo1->SetValue(" ");}
- if (IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText("\n\nP4 = b9 + b10 + b11 + b12 + b13 + b14 + b15");}
- if (IntVelikost==25) {WxMemo1->AppendText(" + b24 + b25 + b26 + b27 + b28 + b29 + b30 + b31");}
- if (IntVelikost>=10) {WxMemo1->AppendText(" = ");
- WxMemo1->AppendText(StrHamming2[7]);}
- //P5
- if (IntDelkaSH2==0) {WxMemo1->SetValue(" ");}
- if (IntVelikost==25) {WxMemo1->AppendText("\n\nP5 = b17 + b18 + b19 + b20 + b21 + b22 + b23 + b24 + b25 + b26 + b27 + b28 + b29 + b30 + b31");}
- if (IntVelikost>=25) {WxMemo1->AppendText(" = ");
- WxMemo1->AppendText(StrHamming2[15]);}
- ////////////////VSUP JE BIN////////////////
- }
- }
- /*
- * WxButton2Click
- */
- void HamingFrm::WxButton2Click(wxCommandEvent& event)
- {
- wxString HammingVstup = WxEdit5->GetValue();
- int VelHammingVstup = strlen(HammingVstup);
- WxMemo2->SetLabel("");
- WxEdit8->SetValue("");
- WxEdit6->SetValue("");
- WxEdit9->SetValue("");
- wxString DecodeHamming;
- bool overeniH=0;
- switch (VelHammingVstup)
- {
- case 3: DecodeHamming= " ";
- overeniH=1;
- PocetP1=2;
- PocetP2=2;
- PocetP3=0;
- PocetP4=0;
- PocetP5=0;
- break;
- case 7: DecodeHamming= " ";
- overeniH=1;
- PocetP1=4;
- PocetP2=4;
- PocetP3=4;
- PocetP4=0;
- PocetP5=0;
- break;
- case 15:DecodeHamming= " ";
- overeniH=1;
- PocetP1=8;
- PocetP2=8;
- PocetP3=8;
- PocetP4=8;
- PocetP5=0;
- break;
- case 31:DecodeHamming= " ";
- overeniH=1;
- PocetP1=16;
- PocetP2=16;
- PocetP3=16;
- PocetP4=16;
- PocetP5=16;
- break;
- }
- if (overeniH!=1)
- {
- WxEdit8->Show(true);
- WxEdit6->Show(true);
- WxMemo2->Show(true);
- WxStaticText6->Show(true);
- WxStaticText7->Show(true);
- WxStaticText8->Show(true);
- WxStaticText9->Show(true);
- WxStaticText8->SetForegroundColour(wxColour(255,0,0));
- if (VelHammingVstup==0){ WxStaticText8->SetLabel(""); } else {WxStaticText8->SetLabel("Není zadán Hammingův kód.");}
- WxEdit7->SetValue("");
- }
- else
- { bool overeniB=0;
- for (int i=1;i<=VelHammingVstup;i++)
- {
- if (HammingVstup[i-1] != '0' and HammingVstup[i-1] != '1') {overeniB=1;}
- }
- if (overeniB !=0)
- {
- WxEdit8->Show(true);
- WxEdit6->Show(true);
- WxMemo2->Show(true);
- WxStaticText6->Show(true);
- WxStaticText7->Show(true);
- WxStaticText8->Show(true);
- WxStaticText9->Show(true);
- WxStaticText8->SetForegroundColour(wxColour(255,0,0));
- WxStaticText8->SetLabel("Není zadán Hammingův kód.");
- WxEdit7->SetValue("");
- }
- else
- {
- //VSTUP JE HAMMING A BIN//
- int IntIndex;
- int IntPocitadlo;
- int Oprava=0;
- WxMemo2->SetValue("");
- //P1
- IntPocitadlo=0;
- for (int i=1;i<=PocetP1;i++)
- {
- IntIndex=(2*i)-1;
- if (HammingVstup[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
- }
- //kontrola spravnosti souctu
- if (IntPocitadlo%2 != 0)
- {Oprava=Oprava+1;WxMemo2->AppendText("P1\n");}
- //P1
- //P2
- IntPocitadlo=0;
- int iP2[16]={2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31};
- for (int i=1;i<=PocetP2;i++)
- {
- IntIndex=iP2[i-1];
- if (HammingVstup[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
- }
- //kontrola spravnosti souctu
- if (IntPocitadlo%2 != 0)
- {Oprava=Oprava+2;WxMemo2->AppendText("P2\n");}
- //P2
- //P3
- IntPocitadlo=0;
- for (int i=1;i<=PocetP3;i++)
- {
- if (i<=4){IntIndex=i+3;}
- if (i>4 and i<=8){IntIndex=i+7;}
- if (i>8 and i<=12) {IntIndex=i+11;}
- if (i>12 and i<=16) {IntIndex=i+15;}
- if (HammingVstup[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
- }
- //kontrola spravnosti souctu
- if (IntPocitadlo%2 != 0)
- {Oprava=Oprava+4;WxMemo2->AppendText("P3\n");}
- //P3
- //P4
- IntPocitadlo=0;
- for (int i=1;i<=PocetP4;i++)
- {
- if (i<=8) {IntIndex=i+7;}
- if (i>8 and i<=16) {IntIndex=i+15;}
- if (HammingVstup[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
- }
- //kontrola spravnosti souctu
- if (IntPocitadlo%2 != 0)
- {Oprava=Oprava+8;WxMemo2->AppendText("P4\n");}
- //P4
- //P5
- IntPocitadlo=0;
- for (int i=1;i<=PocetP5;i++)
- {
- IntIndex=i+15;
- if (HammingVstup[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
- }
- //kontrola spravnosti souctu
- if (IntPocitadlo%2 != 0)
- {Oprava=Oprava+16;WxMemo2->AppendText("P5");}
- //P5
- if (Oprava!=0)
- //KÓD OBSAHUJE CHYBU
- //Oprava chybného bitu (proměnná "Oprava" je číslo bitu, který je třeba invertovat
- {
- if (HammingVstup[Oprava-1]=='1') {HammingVstup[Oprava-1]='0';} else {HammingVstup[Oprava-1]='1';}
- char PoziceChyb[2];
- itoa(Oprava,PoziceChyb,10);
- WxEdit8->SetValue(PoziceChyb);
- WxEdit6->SetValue(HammingVstup);
- WxEdit8->Show(true);
- WxEdit6->Show(true);
- WxMemo2->Show(true);
- WxStaticText6->Show(true);
- WxStaticText7->Show(true);
- WxStaticText8->Show(true);
- WxStaticText9->Show(true);
- WxStaticText8->SetForegroundColour(wxColour(255,0,0));
- WxStaticText8->SetLabel("Zadaný kód obsahuje 1 chybu.");
- //CHYBA JE V PARITNÍM BITU
- if (Oprava == 1 or Oprava == 2 or Oprava == 4 or Oprava == 8 or Oprava == 16)
- {
- WxStaticText6->SetLabel("Nesouhlasí paritní bit:");
- WxStaticText7->SetLabel("nacházíjí se na pozici:");
- }
- //CHYBA JE V INFORMAČNÍM BITU
- else
- {
- WxStaticText6->SetLabel("Nesouhlasí paritní bity:");
- WxStaticText7->SetLabel("které všechny pracují s bitem na pozici:");
- }
- }
- else
- //VSTUPNÍ KÓD JE BEZ CHYBY
- {
- WxEdit8->Show(false);
- WxEdit6->Show(false);
- WxMemo2->Show(false);
- WxStaticText6->Show(false);
- WxStaticText7->Show(false);
- WxStaticText8->Show(true);
- WxStaticText8->SetForegroundColour(wxColour(0,0,0));
- WxStaticText8->SetLabel("Zadaný kód je v pořádku. Neobsahuje žádnou chybu.");
- WxStaticText9->Show(false);
- }
- int x=0;
- for (int i=1;i<=VelHammingVstup;i++)
- {
- if (i==1) {i=i+2;}
- if (i==4 or i==8 or i==16 or i==32) {i=i+1;}
- DecodeHamming[x] = HammingVstup[i-1];
- x=x+1;
- }
- WxEdit7->SetValue(DecodeHamming);
- ////UPRAVA NA BIN (mazání 0 na začátku)
- int kontrola = 0;
- int ZacatekDat;
- int VelDecodeHamming=strlen(DecodeHamming)-1;
- for (int i=0;i<=VelDecodeHamming;i++)
- {
- if (kontrola == 0)
- { if (DecodeHamming[i]=='1') {ZacatekDat=i;kontrola = 1;} }
- }
- if (kontrola==0)
- {WxEdit9->SetValue("0");}
- else
- {
- char CharBinHamm[VelDecodeHamming-ZacatekDat+1];
- for (int i=ZacatekDat;i<=VelDecodeHamming+1;i++)
- {
- CharBinHamm[i-ZacatekDat] = DecodeHamming[i];
- }
- WxEdit9->SetValue(CharBinHamm);
- }
- //VSTUP JE HAMMING A BIN
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement