用c++编写汉明码【(7,4)汉明码】生成程序

用c++编写汉明码【(7,4)汉明码】生成程序,第1张

hanmingma=round(rand(7,4))hanmingma_wucha=hanmingmafor i=1:4row=ceil(rand*7) hanmingma_wucha(row,i)=~(hanmingma_wucha(row,i))end

这个是函数表示:

做成函数的形式hanmingma_wucha=function(hanmingma)hanmingma_wucha=hanmingmafor i=1:4row=ceil(rand*7) hanmingma_wucha(row,i)=~(hanmingma_wucha(row,i))end保存成一个m文件即可

程序改为如下:

S=ones(7,3)%要加的部分

A=[1 1 0 1 1 0 0]

[r,l]=size(A)

E=[0 0 0 0 0 0 00 0 0 0 0 0 10 0 0 0 0 1 00 0 0 0 1 0 00 0 0 1 0 0 00 0 1 0 0 0 00 1 0 0 0 0 01 0 0 0 0 0 0]%%%%%求校正子,然后将其转化成十进制数

for i=1:r 

    Sx=S(i,1)*4+S(i,2)*2+S(i,3)

end%%%%下面是(7,4)码检错

for i=1:r 

    switch(Sx)

        case 0 

            disp('此接收码字没错') 

        case 1 

            disp('注意:此接收码字的第一位有错,请纠正') 

        case 2 

            disp('注意:此接收码字的第二位有错,请纠正')

        case 4 

            disp('注意:此接收码字的第三位有错,请纠正') 

        case 3 

            disp('注意:此接收码字的第四位有错,请纠正') 

        case 5 

            disp('注意:此接收码字的第五位有错,请纠正') 

        case 6

            disp('注意:此接收码字的第六位有错,请纠正') 

        case 7 

            disp('注意:此接收码字的第七位有错,请纠正') 

    end

end

%%%下面为在知道哪位出错的情况下,进行纠正

for i=1:r 

    switch(Sx)

        case 0 

            B(i,:)=A(i,:)+E(1,:)

        case 1

            B(i,:)=A(i,:)+E(2,:)

        case 2 

            B(i,:)=A(i,:)+E(3,:) 

        case 4

            B(i,:)=A(i,:)+E(4,:)

        case 3

            B(i,:)=A(i,:)+E(5,:)

        case 5

            B(i,:)=A(i,:)+E(6,:) 

        case 6

            B(i,:)=A(i,:)+E(7,:)

        case 7

            B(i,:)=A(i,:)+E(8,:) 

    end

end

B=rem(B,2)

disp('纠错后的码字')

disp(B)

结果:

注意:此接收码字的第七位有错,请纠正

纠错后的码字

     0     1     0     1     1     0     0

20分钟内的作品……不过想剪枝想了好久结果发现不用……

var

  a:array[1..64] of integer

  n,b,d:integer

  i,j:integer

function haiming(a,b:integer):integer

var x:integer

begin

  x:=a xor b

  haiming:=(x and 1)+(x shr 1 and 1)+(x shr 2 and 1)+(x shr 3 and 1)+(x shr 4 and 1)+(x shr 5 and 1)+(x shr 6 and 1)+(x shr 7 and 1) 

end

function t(i,j:integer):boolean

var k:integer

begin

  for k:=1 to i-1 do if haiming(a[k],j)<d then exit(true)

  exit(false)

end

procedure print

var i:integer

begin

  for i:=1 to n do

    if i mod 10=0 then writeln(a[i])else write(a[i],' ')

  if n mod 10>0 then writeln

end

begin

  read(n,b,d)a[1]:=0

  for i:=2 to n do

    begin

      j:=a[i-1]+1while (j<1 shl b) and t(i,j) do inc(j)

      if j=1 shl b then begin writeln('Exception:no valid answer')haltend

      a[i]:=j

    end

  print

end.

要注释版本再说……价值15,注释5


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8059369.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存