英数字をモールス信号に変換する

HOME > Programing > Pascal > 英数字をモールス信号に変換する

注意

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

仕様

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

コード

                    program MorseCoding(input, output);
                    type MorseCode = array [1 .. 128] of string;
                    
                    {モールス符号への変換表の作成}
                    procedure InitMorseCode(var m : MorseCode);
                    var i : integer;
                    begin
                        for i := 1 to 128 do
                            m[i] := '';
                    
                        {Definition}
                        {0 <-> none}
                        {1 <-> .}
                        {2 <-> -}
                    
                        {0 .. 9}
                        m[48] := '22222';
                        m[49] := '12222';
                        m[50] := '11222';
                        m[51] := '11122';
                        m[52] := '11112';
                        m[53] := '11111';
                        m[54] := '21111';
                        m[55] := '22111';
                        m[56] := '22211';
                        m[57] := '22221';
                    
                        {A .. Z}
                        m[65] := '12';
                        m[66] := '2111';
                        m[67] := '2121';
                        m[68] := '211';
                        m[69] := '1';
                        m[70] := '1121';
                        m[71] := '221';
                        m[72] := '1111';
                        m[73] := '11';
                        m[74] := '1222';
                        m[75] := '212';
                        m[76] := '1211';
                        m[77] := '22';
                        m[78] := '21';
                        m[79] := '222';
                        m[80] := '1221';
                        m[81] := '2212';
                        m[82] := '121';
                        m[83] := '111';
                        m[84] := '2';
                        m[85] := '112';
                        m[86] := '1112';
                        m[87] := '122';
                        m[88] := '2112';
                        m[89] := '2122';
                        m[90] := '2211';
                    
                        {a .. z}
                        m[97] := '12';
                        m[98] := '2111';
                        m[99] := '2121';
                        m[100] := '211';
                        m[101] := '1';
                        m[102] := '1121';
                        m[103] := '221';
                        m[104] := '1111';
                        m[105] := '11';
                        m[106] := '1222';
                        m[107] := '212';
                        m[108] := '1211';
                        m[109] := '22';
                        m[110] := '21';
                        m[111] := '222';
                        m[112] := '1221';
                        m[113] := '2212';
                        m[114] := '121';
                        m[115] := '111';
                        m[116] := '2';
                        m[117] := '112';
                        m[118] := '1112';
                        m[119] := '122';
                        m[120] := '2112';
                        m[121] := '2122';
                        m[122] := '2211'
                    end;
                    
                    procedure main;
                    var c : char;
                        m : MorseCode;
                    begin
                      {モールス符号表の作成}
                        InitMorseCode(m);
                    
                        while not eof do
                        begin
                            while not eoln do
                            {行末まで変換}
                            begin
                                read(c);
                                write(m[ord(c)])
                            end;
                    
                            {読み・書きそれぞれ改行}
                            readln;
                            writeln
                        end;
                        readln
                    end;
                    
                    begin
                        main
                    end.