Advertisement
Guest User

Untitled

a guest
Jun 21st, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 28.52 KB | None | 0 0
  1. //---------------------------------------------------------------------------
  2. //
  3. // Name:        HamingFrm.cpp
  4. // Author:      Chromik
  5. // Created:     2.12.2010 15:34:39
  6. // Description: HamingFrm class implementation
  7. //
  8. //---------------------------------------------------------------------------
  9.  
  10. #include "HamingFrm.h"
  11.  
  12. //Do not add custom headers between
  13. //Header Include Start and Header Include End
  14. //wxDev-C++ designer will remove them
  15. ////Header Include Start
  16. #include "Images/Self_HamingFrm_XPM.xpm"
  17. ////Header Include End
  18.  
  19. //----------------------------------------------------------------------------
  20. // HamingFrm
  21. //----------------------------------------------------------------------------
  22. //Add Custom Events only in the appropriate block.
  23. //Code added in other places will be removed by wxDev-C++
  24. ////Event Table Start
  25. BEGIN_EVENT_TABLE(HamingFrm,wxFrame)
  26.     ////Manual Code Start
  27.     ////Manual Code End
  28.    
  29.     EVT_CLOSE(HamingFrm::OnClose)
  30.     EVT_BUTTON(ID_WXBUTTON2,HamingFrm::WxButton2Click)
  31.    
  32.     EVT_TEXT(ID_WXEDIT5,HamingFrm::WxButton2Click)
  33.    
  34.     EVT_TEXT(ID_WXEDIT1,HamingFrm::WxButton1Click)
  35.     EVT_BUTTON(ID_WXBUTTON1,HamingFrm::WxButton1Click)
  36. END_EVENT_TABLE()
  37. ////Event Table End
  38.  
  39. HamingFrm::HamingFrm(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style)
  40. : wxFrame(parent, id, title, position, size, style)
  41. {
  42.     CreateGUIControls();
  43. }
  44.  
  45. HamingFrm::~HamingFrm()
  46. {
  47. }
  48.  
  49. void HamingFrm::CreateGUIControls()
  50. {
  51.     //Do not add custom code between
  52.     //GUI Items Creation Start and GUI Items Creation End
  53.     //wxDev-C++ designer will remove them.
  54.     //Add the custom code before or after the blocks
  55.     ////GUI Items Creation Start
  56.  
  57.     wxInitAllImageHandlers();   //Initialize graphic format handlers
  58.  
  59.     WxPanel1 = new wxPanel(this, ID_WXPANEL1, wxPoint(0, 0), wxSize(851, 679));
  60.  
  61.     WxButton1 = new wxButton(WxPanel1, ID_WXBUTTON1, wxT("OK"), wxPoint(365, 52), wxSize(50, 22), 0, wxDefaultValidator, wxT("WxButton1"));
  62.  
  63.     WxEdit1 = new wxTextCtrl(WxPanel1, ID_WXEDIT1, wxT(""), wxPoint(10, 52), wxSize(355, 22), 0, wxDefaultValidator, wxT("WxEdit1"));
  64.     WxEdit1->SetMaxLength(16);
  65.     WxEdit1->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
  66.  
  67.     WxStaticText1 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT1, wxT("Zadejte BIN vstupní data (max. 16b):"), wxPoint(10, 35), wxDefaultSize, 0, wxT("WxStaticText1"));
  68.     WxStaticText1->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
  69.  
  70.     WxEdit2 = new wxTextCtrl(WxPanel1, ID_WXEDIT2, wxT(""), wxPoint(10, 148), wxSize(405, 22), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit2"));
  71.     WxEdit2->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
  72.  
  73.     WxStaticText2 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT2, wxT("Z vstupních dat se vytvoří informační data:"), wxPoint(10, 130), wxDefaultSize, 0, wxT("WxStaticText2"));
  74.     WxStaticText2->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
  75.  
  76.     WxInfo = new wxStaticText(WxPanel1, ID_WXINFO, wxT(""), wxPoint(15, 74), wxDefaultSize, 0, wxT("WxInfo"));
  77.     WxInfo->SetForegroundColour(wxColour(0,0,0));
  78.     WxInfo->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
  79.  
  80.     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"));
  81.     WxStaticText3->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
  82.  
  83.     WxEdit3 = new wxTextCtrl(WxPanel1, ID_WXEDIT3, wxT(""), wxPoint(12, 198), wxSize(405, 22), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit3"));
  84.     WxEdit3->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
  85.  
  86.     WxEdit4 = new wxTextCtrl(WxPanel1, ID_WXEDIT4, wxT(""), wxPoint(10, 475), wxSize(405, 25), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit4"));
  87.     WxEdit4->SetFont(wxFont(11, wxSWISS, wxNORMAL, wxNORMAL, false));
  88.  
  89.     WxStaticText4 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT4, wxT("Hammingův kód je:"), wxPoint(9, 458), wxDefaultSize, 0, wxT("WxStaticText4"));
  90.     WxStaticText4->SetForegroundColour(wxColour(0,0,255));
  91.     WxStaticText4->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
  92.  
  93.     WxMemo1 = new wxTextCtrl(WxPanel1, ID_WXMEMO1, wxEmptyString, wxPoint(10, 248), wxSize(405, 200), wxTE_READONLY | wxTE_MULTILINE, wxDefaultValidator, wxT("WxMemo1"));
  94.     WxMemo1->SetMaxLength(0);
  95.  
  96.     WxEdit5 = new wxTextCtrl(WxPanel1, ID_WXEDIT5, wxT(""), wxPoint(435, 53), wxSize(355, 22), 0, wxDefaultValidator, wxT("WxEdit5"));
  97.     WxEdit5->SetMaxLength(31);
  98.     WxEdit5->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
  99.  
  100.     WxButton2 = new wxButton(WxPanel1, ID_WXBUTTON2, wxT("OK"), wxPoint(789, 53), wxSize(50, 22), 0, wxDefaultValidator, wxT("WxButton2"));
  101.  
  102.     WxEdit6 = new wxTextCtrl(WxPanel1, ID_WXEDIT6, wxT(""), wxPoint(435, 319), wxSize(405, 22), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit6"));
  103.     WxEdit6->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
  104.  
  105.     WxStaticText5 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT5, wxT("Dekódování Hammingova kódu"), wxPoint(435, 5), wxDefaultSize, 0, wxT("WxStaticText5"));
  106.     WxStaticText5->SetForegroundColour(wxColour(0,0,0));
  107.     WxStaticText5->SetFont(wxFont(14, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Tahoma")));
  108.  
  109.     WxEdit7 = new wxTextCtrl(WxPanel1, ID_WXEDIT7, wxT(""), wxPoint(435, 420), wxSize(405, 25), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit7"));
  110.     WxEdit7->SetFont(wxFont(11, wxSWISS, wxNORMAL, wxNORMAL, false));
  111.  
  112.     WxMemo2 = new wxTextCtrl(WxPanel1, ID_WXMEMO2, wxEmptyString, wxPoint(435, 148), wxSize(64, 90), wxTE_READONLY | wxTE_MULTILINE, wxDefaultValidator, wxT("WxMemo2"));
  113.     WxMemo2->SetMaxLength(0);
  114.     WxMemo2->SetForegroundColour(wxColour(000,000,000));
  115.     WxMemo2->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
  116.  
  117.     WxStaticText6 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT6, wxT("Nesouhlasí paritní bity:"), wxPoint(435, 130), wxDefaultSize, 0, wxT("WxStaticText6"));
  118.     WxStaticText6->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
  119.  
  120.     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"));
  121.     WxStaticText7->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
  122.  
  123.     WxEdit8 = new wxTextCtrl(WxPanel1, ID_WXEDIT8, wxT(""), wxPoint(435, 266), wxSize(50, 25), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit8"));
  124.     WxEdit8->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxNORMAL, false));
  125.  
  126.     WxStaticText9 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT9, wxT("Negací tohoto bitu se kód opraví na:"), wxPoint(435, 301), wxDefaultSize, 0, wxT("WxStaticText9"));
  127.     WxStaticText9->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
  128.  
  129.     WxStaticText8 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT8, wxT(""), wxPoint(435, 79), wxDefaultSize, 0, wxT("WxStaticText8"));
  130.     WxStaticText8->SetForegroundColour(wxColour(255,0,0));
  131.     WxStaticText8->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxBOLD, false));
  132.  
  133.     WxStaticText10 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT10, wxT("Po dekódování dostaneme informační data:"), wxPoint(435, 390), wxDefaultSize, 0, wxT("WxStaticText10"));
  134.     WxStaticText10->SetForegroundColour(wxColour(0,0,255));
  135.     WxStaticText10->SetFont(wxFont(10, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
  136.  
  137.     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"));
  138.     WxStaticText11->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
  139.  
  140.     WxStaticText12 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT12, wxT("jejichž tvar po úpravě na BIN je:"), wxPoint(437, 457), wxDefaultSize, 0, wxT("WxStaticText12"));
  141.     WxStaticText12->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
  142.  
  143.     WxEdit9 = new wxTextCtrl(WxPanel1, ID_WXEDIT9, wxT(""), wxPoint(435, 475), wxSize(405, 25), wxTE_READONLY, wxDefaultValidator, wxT("WxEdit9"));
  144.     WxEdit9->SetFont(wxFont(11, wxSWISS, wxNORMAL, wxNORMAL, false));
  145.  
  146.     WxStaticText13 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT13, wxT("Zadejte Hammingův kód:"), wxPoint(435, 35), wxDefaultSize, 0, wxT("WxStaticText13"));
  147.     WxStaticText13->SetFont(wxFont(9, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Segoe UI Semibold")));
  148.  
  149.     WxStaticText14 = new wxStaticText(WxPanel1, ID_WXSTATICTEXT14, wxT("Kódování na Hammingův kód"), wxPoint(8, 5), wxDefaultSize, 0, wxT("WxStaticText14"));
  150.     WxStaticText14->SetForegroundColour(wxColour(0,0,0));
  151.     WxStaticText14->SetFont(wxFont(14, wxSWISS, wxNORMAL, wxBOLD, false, wxT("Tahoma")));
  152.  
  153.     WxStaticLine1 = new wxStaticLine(WxPanel1, ID_WXSTATICLINE1, wxPoint(425, -4), wxSize(-1, 513), wxLI_VERTICAL);
  154.  
  155.     WxStaticBitmap1 = new wxStaticBitmap(WxPanel1, ID_WXSTATICBITMAP1, wxBitmap("tab.png", wxBITMAP_TYPE_PNG), wxPoint(3, 512), wxSize(846, 155) );
  156.  
  157.         WxEdit1->SetFocus();
  158.  
  159.     SetTitle(wxT("Demonstrace Hammingova kódu"));
  160.     SetIcon(Self_HamingFrm_XPM);
  161.     SetSize(8,8,867,717);
  162.     Center();
  163.    
  164.     ////GUI Items Creation End
  165. }
  166.  
  167. void HamingFrm::OnClose(wxCloseEvent& event)
  168. {
  169.     Destroy();
  170. }
  171.  
  172. int PocetP1,PocetP2,PocetP3,PocetP4,PocetP5;
  173. /*
  174.  * WxButton1Click
  175.  */
  176. void HamingFrm::WxButton1Click(wxCommandEvent& event)
  177. {
  178.                            
  179. //ULOŽENÍ VSTUPU DO PROMĚNNÉ
  180. wxString StrVstup = WxEdit1->GetValue();
  181.  
  182. //OSTATNÍ PROMĚNNÉ
  183. int konec=0;
  184.  
  185. //PROGRAM
  186. //Úprava informačních bitů na požadovaný počet míst
  187. wxString StrVstupKod;
  188. wxString StrHamming1;
  189. WxInfo->SetLabel("");
  190. int IntVelikost = strlen(StrVstup)-1;
  191. switch(IntVelikost) { case 0:
  192.                         StrVstupKod=" ";
  193.                         StrHamming1="   ";
  194.                         for (int i=0;i<(1-IntVelikost);i++) {StrVstupKod[i]='0';}
  195.                         for (int i=(0-IntVelikost);i<=1;i++) {StrVstupKod[i]=StrVstup[konec];konec=konec+1;}
  196.                         IntVelikost = strlen(StrVstupKod)-1;
  197.                         WxInfo->SetLabel("Budou použity:\n 1bit informační\n 2bity kontrolní");
  198.                         PocetP1=2;
  199.                         PocetP2=2;
  200.                         PocetP3=0;
  201.                         PocetP4=0;
  202.                         PocetP5=0;
  203.                         WxInfo->SetForegroundColour(wxColour(0,0,0));
  204.                         break;
  205.                       case 1:
  206.                       case 2:
  207.                       case 3:
  208.                         StrVstupKod="    ";
  209.                         StrHamming1="       ";
  210.                         for (int i=0;i<(3-IntVelikost);i++) {StrVstupKod[i]='0';}
  211.                         for (int i=(3-IntVelikost);i<=3;i++) {StrVstupKod[i]=StrVstup[konec];konec=konec+1;}
  212.                         IntVelikost = strlen(StrVstupKod)-1;
  213.                         WxInfo->SetLabel("Budou použity:\n 4bity informační\n 3bity kontrolní");
  214.                         PocetP1=4;
  215.                         PocetP2=4;
  216.                         PocetP3=4;
  217.                         PocetP4=0;
  218.                         PocetP5=0;
  219.                         WxInfo->SetForegroundColour(wxColour(0,0,0));
  220.                         break;
  221.                       case 4:
  222.                       case 5:
  223.                       case 6:
  224.                       case 7:
  225.                       case 8:
  226.                       case 9:
  227.                       case 10:
  228.                         StrVstupKod="           ";
  229.                         StrHamming1="               ";
  230.                         for (int i=0;i<(10-IntVelikost);i++) {StrVstupKod[i]='0';}
  231.                         for (int i=(10-IntVelikost);i<=11;i++) {StrVstupKod[i]=StrVstup[konec];konec=konec+1;}
  232.                         IntVelikost = strlen(StrVstupKod)-1;
  233.                         WxInfo->SetLabel("Bude použito:\n 11bitů informačních\n 4bity kontrolní");
  234.                         PocetP1=8;
  235.                         PocetP2=8;
  236.                         PocetP3=8;
  237.                         PocetP4=8;
  238.                         PocetP5=0;
  239.                         WxInfo->SetForegroundColour(wxColour(0,0,0));
  240.                         break;
  241.                       case 11:
  242.                       case 12:
  243.                       case 13:
  244.                       case 14:
  245.                       case 15:
  246.                         StrVstupKod="                          ";
  247.                         StrHamming1="                               ";
  248.                         for (int i=0;i<(25-IntVelikost);i++) {StrVstupKod[i]='0';}
  249.                         for (int i=(25-IntVelikost);i<=25;i++) {StrVstupKod[i]=StrVstup[konec];konec=konec+1;}
  250.                         IntVelikost = strlen(StrVstupKod)-1;
  251.                         WxInfo->SetLabel("Bude použito:\n 26bitů informačních\n 5bitů kontrolních");
  252.                         PocetP1=16;
  253.                         PocetP2=16;
  254.                         PocetP3=16;
  255.                         PocetP4=16;
  256.                         PocetP5=16;
  257.                         WxInfo->SetForegroundColour(wxColour(0,0,0));
  258.                         break;
  259.                     }                
  260. WxEdit2->SetValue(StrVstupKod);
  261.  
  262.  
  263. //Začátek ověření BIN            
  264. int IntPocetBin = 0;
  265.  
  266. for(int i=0;i<=IntVelikost;i++){
  267.     if ( (StrVstupKod[i]!='0') and (StrVstupKod[i]!='1') ) {IntPocetBin=IntPocetBin+1;};
  268. };
  269.  
  270.  
  271. if (IntPocetBin>=1)
  272. {
  273. WxEdit2->SetValue("Chyba! Kód není ve tvaru BIN");
  274. WxEdit3->SetValue("Chyba! Kód není ve tvaru BIN");
  275. WxEdit4->SetValue("Chyba! Kód není ve tvaru BIN");
  276. WxInfo->SetLabel("Vstupní data nejsou ve tvaru BIN!");
  277. WxMemo1->SetValue("Vstupní data nejsou ve tvaru BIN!");
  278. WxInfo->SetForegroundColour(wxColour(255,0,0));
  279. ;}
  280. //Konec ověření BIN
  281. else
  282. ////////////////VSUP JE BIN////////////////
  283.  
  284. //ZAČÁTEK Převod do StrHamming1
  285.  {
  286. int x = 0;
  287. for (int i=0;i<=IntVelikost;i++) {if (x==0) {StrHamming1[x]='P';x=x+1;StrHamming1[x]='P';x=x+1;}
  288.                                              else {
  289.                                                    if ( (x==3) or (x==7) or (x==15) ) {StrHamming1[x]='P'; x=x+1;}
  290.                                                   }
  291.                                              StrHamming1[x]=StrVstupKod[i];x=x+1;
  292.                                  }
  293. WxEdit3->SetValue(StrHamming1);
  294. //KONEC Převod do StrHamming1
  295.  
  296. //Pokračuju
  297. wxString StrHamming2=StrHamming1;
  298. int IntDelkaSH2=strlen(StrHamming2);
  299. int IntIndex;
  300. int IntPocitadlo;
  301.  
  302. if (IntDelkaSH2==0)
  303.    {StrHamming2=' ';}  
  304. else
  305.    {
  306.         //P1
  307.         IntPocitadlo=0;
  308.         for (int i=1;i<=PocetP1;i++)
  309.             {
  310.              IntIndex=(2*i)-1;
  311.              if (StrHamming2[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
  312.             }
  313.         if (IntPocitadlo%2==0)
  314.         {StrHamming2[0]='0';} else {StrHamming2[0]='1';}
  315.         //P1
  316.        
  317.  
  318.        
  319.         //P2
  320.         IntPocitadlo=0;
  321.         int iP2[16]={2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31};
  322.         for (int i=1;i<=PocetP2;i++)
  323.             {  
  324.                 IntIndex=iP2[i-1];
  325.                 if (StrHamming2[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
  326.             }        
  327.         if (IntPocitadlo%2==0)
  328.         {StrHamming2[1]='0';} else {StrHamming2[1]='1';}
  329.         //P2
  330.        
  331.         //P3
  332.         IntPocitadlo=0;
  333.         for (int i=1;i<=PocetP3;i++)
  334.             {
  335.               if (i<=4)          {IntIndex=i+3;}
  336.               if (i>4 and i<=8)  {IntIndex=i+7;}
  337.               if (i>8 and i<=12) {IntIndex=i+11;}
  338.               if (i>12 and i<=16) {IntIndex=i+15;}
  339.                
  340.               if (StrHamming2[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
  341.             }
  342.         if (PocetP3!=0) {
  343.                             if (IntPocitadlo%2==0)
  344.                                {StrHamming2[3]='0';} else {StrHamming2[3]='1';}
  345.                         }
  346.         //P3
  347.        
  348.         //P4
  349.         IntPocitadlo=0;
  350.         for (int i=1;i<=PocetP4;i++)
  351.             {
  352.               if (i<=8)          {IntIndex=i+7;}
  353.               if (i>8 and i<=16)  {IntIndex=i+15;}
  354.  
  355.               if (StrHamming2[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
  356.             }
  357.         if (PocetP4!=0) {
  358.                             if (IntPocitadlo%2==0)
  359.                             {StrHamming2[7]='0';} else {StrHamming2[7]='1';}
  360.                         }
  361.         //P4
  362.        
  363.         //P5
  364.         IntPocitadlo=0;
  365.         for (int i=1;i<=PocetP5;i++)
  366.             {
  367.              IntIndex=i+15;
  368.              if (StrHamming2[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
  369.             }
  370.         if (PocetP5!=0) {
  371.                             if (IntPocitadlo%2==0)
  372.                             {StrHamming2[15]='0';} else {StrHamming2[15]='1';}
  373.                         }
  374.     }
  375.    
  376. WxEdit4->SetValue(StrHamming2);
  377.  
  378. //VZORCE
  379. /////MM
  380. //P1
  381. if (IntDelkaSH2==0) {WxMemo1->SetValue(" ");}
  382. if (IntVelikost==0 or IntVelikost==3 or IntVelikost==10 or IntVelikost==25) {WxMemo1->SetValue("P1 = b3");}
  383. if (IntVelikost==3 or IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText("  + b5  + b7");}
  384. if (IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText("  + b9  + b11 + b13 + b15");}
  385. if (IntVelikost==25) {WxMemo1->AppendText(" + b17 + b19 + b21 + b23 + b25 + b27 + b29 + b31");}
  386.  
  387. WxMemo1->AppendText(" = ");
  388. WxMemo1->AppendText(StrHamming2[0]);
  389.  
  390. //P2
  391. if (IntDelkaSH2==0) {WxMemo1->SetValue(" ");}
  392. if (IntVelikost==0 or IntVelikost==3 or IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText("\n\nP2 = b3");}
  393. if (IntVelikost==3 or IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText("  + b6  + b7");}
  394. if (IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText("  + b10 + b11 + b14 + b15");}
  395. if (IntVelikost==25) {WxMemo1->AppendText(" + b18 + b19 + b22 + b23 + b26 + b27 + b30 + b31");}
  396.  
  397. WxMemo1->AppendText(" = ");
  398. WxMemo1->AppendText(StrHamming2[1]);
  399.  
  400. //P3
  401. if (IntDelkaSH2==0) {WxMemo1->SetValue(" ");}
  402. if (IntVelikost==3 or IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText("\n\nP3 = b5  + b6  + b7");}
  403. if (IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText("  + b12 + b13 + b14 + b15");}
  404. if (IntVelikost==25) {WxMemo1->AppendText(" + b20 + b21 + b22 + b23 + b28 + b29 + b30 + b31");}
  405.  
  406. if (IntVelikost>=3) {WxMemo1->AppendText(" = ");
  407.                      WxMemo1->AppendText(StrHamming2[3]);}
  408.  
  409. //P4
  410. if (IntDelkaSH2==0) {WxMemo1->SetValue(" ");}
  411. if (IntVelikost==10 or IntVelikost==25) {WxMemo1->AppendText("\n\nP4 = b9  + b10 + b11 + b12 + b13 + b14 + b15");}
  412. if (IntVelikost==25) {WxMemo1->AppendText(" + b24 + b25 + b26 + b27 + b28 + b29 + b30 + b31");}
  413.  
  414. if (IntVelikost>=10) {WxMemo1->AppendText(" = ");
  415.                       WxMemo1->AppendText(StrHamming2[7]);}
  416.  
  417. //P5
  418. if (IntDelkaSH2==0) {WxMemo1->SetValue(" ");}
  419. if (IntVelikost==25) {WxMemo1->AppendText("\n\nP5 = b17 + b18 + b19 + b20 + b21 + b22 + b23 + b24 + b25 + b26 + b27 + b28 + b29 + b30 + b31");}
  420.  
  421. if (IntVelikost>=25) {WxMemo1->AppendText(" = ");
  422.                       WxMemo1->AppendText(StrHamming2[15]);}
  423.  
  424. ////////////////VSUP JE BIN////////////////
  425.  }
  426.  
  427.  
  428. }
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436. /*
  437.  * WxButton2Click
  438.  */
  439. void HamingFrm::WxButton2Click(wxCommandEvent& event)
  440. {
  441. wxString HammingVstup = WxEdit5->GetValue();
  442. int VelHammingVstup = strlen(HammingVstup);
  443.  
  444. WxMemo2->SetLabel("");
  445. WxEdit8->SetValue("");
  446. WxEdit6->SetValue("");
  447. WxEdit9->SetValue("");
  448.  
  449.  
  450. wxString DecodeHamming;
  451. bool overeniH=0;
  452. switch (VelHammingVstup)
  453.        {
  454.        case 3: DecodeHamming= " ";
  455.                overeniH=1;
  456.                PocetP1=2;
  457.                PocetP2=2;
  458.                PocetP3=0;
  459.                PocetP4=0;
  460.                PocetP5=0;
  461.                break;
  462.        case 7: DecodeHamming= "    ";
  463.                overeniH=1;
  464.                PocetP1=4;
  465.                PocetP2=4;
  466.                PocetP3=4;
  467.                PocetP4=0;
  468.                PocetP5=0;
  469.                break;
  470.        case 15:DecodeHamming= "           ";
  471.                overeniH=1;
  472.                PocetP1=8;
  473.                PocetP2=8;
  474.                PocetP3=8;
  475.                PocetP4=8;
  476.                PocetP5=0;
  477.                break;
  478.        case 31:DecodeHamming= "                          ";
  479.                overeniH=1;
  480.                PocetP1=16;
  481.                PocetP2=16;
  482.                PocetP3=16;
  483.                PocetP4=16;
  484.                PocetP5=16;
  485.                break;
  486.        }
  487.  
  488.  
  489. if  (overeniH!=1)
  490.     {
  491.         WxEdit8->Show(true);
  492.         WxEdit6->Show(true);
  493.         WxMemo2->Show(true);
  494.         WxStaticText6->Show(true);
  495.         WxStaticText7->Show(true);
  496.         WxStaticText8->Show(true);
  497.         WxStaticText9->Show(true);
  498.         WxStaticText8->SetForegroundColour(wxColour(255,0,0));
  499.         if (VelHammingVstup==0){ WxStaticText8->SetLabel(""); } else {WxStaticText8->SetLabel("Není zadán Hammingův kód.");}
  500.         WxEdit7->SetValue("");
  501.     }
  502. else    
  503.     {   bool overeniB=0;
  504.         for (int i=1;i<=VelHammingVstup;i++)
  505.            {
  506.             if (HammingVstup[i-1] != '0' and HammingVstup[i-1] != '1') {overeniB=1;}
  507.            }
  508.  
  509.         if  (overeniB !=0)
  510.             {                          
  511.                 WxEdit8->Show(true);
  512.                 WxEdit6->Show(true);
  513.                 WxMemo2->Show(true);
  514.                 WxStaticText6->Show(true);
  515.                 WxStaticText7->Show(true);
  516.                 WxStaticText8->Show(true);
  517.                 WxStaticText9->Show(true);
  518.                 WxStaticText8->SetForegroundColour(wxColour(255,0,0));
  519.                 WxStaticText8->SetLabel("Není zadán Hammingův kód.");
  520.                 WxEdit7->SetValue("");
  521.             }
  522.         else
  523.             {
  524.             //VSTUP JE HAMMING A BIN//
  525.                 int IntIndex;
  526.                 int IntPocitadlo;
  527.                 int Oprava=0;
  528.                 WxMemo2->SetValue("");
  529.                
  530.                 //P1
  531.                 IntPocitadlo=0;
  532.  
  533.                     for (int i=1;i<=PocetP1;i++)
  534.                         {
  535.                             IntIndex=(2*i)-1;
  536.                             if (HammingVstup[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
  537.                         }
  538.                     //kontrola spravnosti souctu  
  539.                     if (IntPocitadlo%2 != 0)
  540.                        {Oprava=Oprava+1;WxMemo2->AppendText("P1\n");}
  541.                    
  542.                 //P1
  543.  
  544.  
  545.                 //P2
  546.                 IntPocitadlo=0;
  547.                 int iP2[16]={2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31};
  548.                
  549.                     for (int i=1;i<=PocetP2;i++)
  550.                         {
  551.                             IntIndex=iP2[i-1];
  552.                             if (HammingVstup[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
  553.                         }
  554.                 //kontrola spravnosti souctu
  555.                 if (IntPocitadlo%2 != 0)
  556.                    {Oprava=Oprava+2;WxMemo2->AppendText("P2\n");}
  557.                
  558.                 //P2
  559.  
  560.  
  561.                 //P3
  562.                 IntPocitadlo=0;
  563.  
  564.                     for (int i=1;i<=PocetP3;i++)
  565.                         {
  566.                             if (i<=4){IntIndex=i+3;}
  567.                             if (i>4 and i<=8){IntIndex=i+7;}
  568.                             if (i>8 and i<=12) {IntIndex=i+11;}
  569.                             if (i>12 and i<=16) {IntIndex=i+15;}
  570.  
  571.                             if (HammingVstup[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
  572.                         }
  573.                     //kontrola spravnosti souctu
  574.                     if (IntPocitadlo%2 != 0)
  575.                        {Oprava=Oprava+4;WxMemo2->AppendText("P3\n");}
  576.                    
  577.                 //P3
  578.  
  579.  
  580.                 //P4
  581.                 IntPocitadlo=0;
  582.  
  583.                     for (int i=1;i<=PocetP4;i++)
  584.                         {
  585.                             if (i<=8) {IntIndex=i+7;}
  586.                             if (i>8 and i<=16) {IntIndex=i+15;}
  587.  
  588.                             if (HammingVstup[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
  589.                         }
  590.                     //kontrola spravnosti souctu
  591.                     if (IntPocitadlo%2 != 0)
  592.                        {Oprava=Oprava+8;WxMemo2->AppendText("P4\n");}
  593.                     //P4
  594.  
  595.  
  596.                 //P5
  597.                 IntPocitadlo=0;
  598.                
  599.                     for (int i=1;i<=PocetP5;i++)
  600.                         {
  601.                             IntIndex=i+15;
  602.                             if (HammingVstup[IntIndex-1]=='1') {IntPocitadlo=IntPocitadlo+1;}
  603.                         }
  604.                     //kontrola spravnosti souctu
  605.                     if (IntPocitadlo%2 != 0)
  606.                        {Oprava=Oprava+16;WxMemo2->AppendText("P5");}
  607.                 //P5
  608.                
  609.                 if  (Oprava!=0)
  610.                 //KÓD OBSAHUJE CHYBU
  611.                 //Oprava chybného bitu (proměnná "Oprava" je číslo bitu, který je třeba invertovat
  612.                     {
  613.                         if (HammingVstup[Oprava-1]=='1') {HammingVstup[Oprava-1]='0';} else {HammingVstup[Oprava-1]='1';}
  614.                         char PoziceChyb[2];
  615.                         itoa(Oprava,PoziceChyb,10);
  616.                         WxEdit8->SetValue(PoziceChyb);
  617.  
  618.                         WxEdit6->SetValue(HammingVstup);  
  619.                                                  
  620.                         WxEdit8->Show(true);
  621.                         WxEdit6->Show(true);
  622.                         WxMemo2->Show(true);
  623.                         WxStaticText6->Show(true);
  624.                         WxStaticText7->Show(true);
  625.                         WxStaticText8->Show(true);
  626.                         WxStaticText9->Show(true);
  627.                         WxStaticText8->SetForegroundColour(wxColour(255,0,0));
  628.                         WxStaticText8->SetLabel("Zadaný kód obsahuje 1 chybu.");
  629.                        
  630.                         //CHYBA JE V PARITNÍM BITU
  631.                         if (Oprava == 1 or Oprava == 2 or Oprava == 4 or Oprava == 8 or Oprava == 16)
  632.                            {
  633.                                 WxStaticText6->SetLabel("Nesouhlasí paritní bit:");
  634.                                 WxStaticText7->SetLabel("nacházíjí se na pozici:");
  635.                            }
  636.                         //CHYBA JE V INFORMAČNÍM BITU
  637.                         else
  638.                            {
  639.                                 WxStaticText6->SetLabel("Nesouhlasí paritní bity:");
  640.                                 WxStaticText7->SetLabel("které všechny pracují s bitem na pozici:");
  641.                            }
  642.                         }
  643.                 else
  644.                 //VSTUPNÍ KÓD JE BEZ CHYBY
  645.                     {
  646.                         WxEdit8->Show(false);
  647.                         WxEdit6->Show(false);
  648.                         WxMemo2->Show(false);
  649.                         WxStaticText6->Show(false);
  650.                         WxStaticText7->Show(false);
  651.                         WxStaticText8->Show(true);
  652.                         WxStaticText8->SetForegroundColour(wxColour(0,0,0));
  653.                         WxStaticText8->SetLabel("Zadaný kód je v pořádku. Neobsahuje žádnou chybu.");
  654.                         WxStaticText9->Show(false);
  655.                     }
  656.                    
  657.                    
  658.                 int x=0;
  659.                 for (int i=1;i<=VelHammingVstup;i++)
  660.                     {
  661.                         if (i==1) {i=i+2;}
  662.                         if (i==4 or i==8 or i==16 or i==32) {i=i+1;}
  663.                         DecodeHamming[x] = HammingVstup[i-1];
  664.                         x=x+1;
  665.                     }
  666.                    
  667.                 WxEdit7->SetValue(DecodeHamming);                
  668.                
  669.                 ////UPRAVA NA BIN (mazání 0 na začátku)
  670.                 int kontrola = 0;
  671.                 int ZacatekDat;
  672.                 int VelDecodeHamming=strlen(DecodeHamming)-1;
  673.                 for (int i=0;i<=VelDecodeHamming;i++)
  674.                     {  
  675.                         if (kontrola == 0)
  676.                             { if (DecodeHamming[i]=='1') {ZacatekDat=i;kontrola = 1;} }
  677.                     }
  678.                    
  679.                 if (kontrola==0)
  680.                    {WxEdit9->SetValue("0");}
  681.                 else
  682.                    {
  683.                         char CharBinHamm[VelDecodeHamming-ZacatekDat+1];
  684.                         for (int i=ZacatekDat;i<=VelDecodeHamming+1;i++)
  685.                             {
  686.                                 CharBinHamm[i-ZacatekDat] = DecodeHamming[i];
  687.                             }
  688.                         WxEdit9->SetValue(CharBinHamm);
  689.                    }
  690.                 //VSTUP JE HAMMING A BIN
  691.                 }
  692.     }
  693. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement