英数字をモールス信号に変換して2進数表現する

HOME > Programing > Pascal > 英数字をモールス信号に変換して2進数表現する

注意

  • このサイトの利用によって生じた損害については当方では責任を負いかねますのでご了承ください。

仕様

  • 数字の1は「トン」を表します。
  • 数字の2は「ツー」を表します。

コード

                    program MorseCoding(input, output);
                    type MorseCode = array [1 .. 128] of integer;
                    
                    {モールス符号への変換表の作成(3進数)}
                    procedure InitMorseCode(var m : MorseCode);
                    var i : integer;
                    begin
                        for i := 1 to 128 do
                            m[i] := 0;
                    
                        {Definition}
                        {0 <-> none}
                        {1 <-> .}
                        {2 <-> -}
                    
                        {0 .. 9}
                        m[48] := 242;
                        m[49] := 161;
                        m[50] := 134;
                        m[51] := 125;
                        m[52] := 122;
                        m[53] := 121;
                        m[54] := 202;
                        m[55] := 229;
                        m[56] := 238;
                        m[57] := 241;
                    
                        {A .. Z}
                        m[65] := 5;
                        m[66] := 67;
                        m[67] := 70;
                        m[68] := 22;
                        m[69] := 1;
                        m[70] := 43;
                        m[71] := 25;
                        m[72] := 40;
                        m[73] := 4;
                        m[74] := 53;
                        m[75] := 23;
                        m[76] := 49;
                        m[77] := 8;
                        m[78] := 7;
                        m[79] := 26;
                        m[80] := 52;
                        m[81] := 77;
                        m[82] := 16;
                        m[83] := 13;
                        m[84] := 2;
                        m[85] := 14;
                        m[86] := 41;
                        m[87] := 17;
                        m[88] := 68;
                        m[89] := 71;
                        m[90] := 76;
                    
                        {a .. z}
                        m[97] := 5;
                        m[98] := 67;
                        m[99] := 70;
                        m[100] := 22;
                        m[101] := 1;
                        m[102] := 43;
                        m[103] := 25;
                        m[104] := 40;
                        m[105] := 4;
                        m[106] := 53;
                        m[107] := 23;
                        m[108] := 49;
                        m[109] := 8;
                        m[110] := 7;
                        m[111] := 26;
                        m[112] := 52;
                        m[113] := 77;
                        m[114] := 16;
                        m[115] := 13;
                        m[116] := 2;
                        m[117] := 14;
                        m[118] := 41;
                        m[119] := 17;
                        m[120] := 68;
                        m[121] := 71;
                        m[122] := 76
                    end;
                    
                    {0以外の数を出力する}
                    procedure PrintNonZero(x : integer);
                    begin
                        if (x mod 3) <> 0 then
                            write(x mod 3)
                    end;
                    
                    {10進数を3進数展開して出力}
                    procedure TransDig(x : integer);
                    begin
                        if x < 3 then
                            PrintNonZero(x)
                        else
                        begin
                            TransDig(x div 3);
                            PrintNonZero(x mod 3)
                        end
                    end;
                    
                    procedure main;
                    var c : char;
                         m : MorseCode;
                    begin
                        InitMorseCode(m);
                        while not eof do
                        begin
                            while not eoln do
                            begin
                                read(c);
                                TransDig(m[ord(c)])
                            end;
                            readln;
                            writeln
                        end;
                        readln
                    end;
                    
                    begin
                        main
                    end.