1 / 1 / 1
Регистрация: 28.11.2015
Сообщений: 28
1

Программа декодирование азбуки Морзе

13.12.2015, 23:43. Показов 6531. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать программу на паскале для декодирования азбуки Морзе !!!
Условие:
Программа считывает из файла "morse.тхт" коды отдельных букв азбуки Морзе. Одна строка файла содержит запись для каждой буквы. На первой строке код буквами (последовательность точек и тире без пробелов или других символов), и затем разделены по меньшей мере одного пробела за которым следует строка, соответствующего кода (это может быть один или несколько символов, например, СН, максимально 3 буквы). В начале и в конце строки может быть любое количество пробелов.
В файле input.тхт есть закодированый текст для декодирование. Отдельные буквы разделяются косой чертой. Две косые черты подрят указывают на пробел. Программа записывает полученные текст в файл Output.text малыми буквами и придерживается расстоянии введенного текста в файле, конец строки происходит в середине коду буквами. Если программа в входном файле получает символ который не может декодировать тогда программа пропускает его. (азбука только латинскими буквами)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2015, 23:43
Ответы с готовыми решениями:

Текст перевести в последовательность точек и тире с помощью азбуки Морзе
Задача: "Вводимый с клавиатуры или из файла текст перевести в последовательность точек и тире с...

Переделать код азбуки морзе в более простую и доступную форму
type PItem = ^Item; Item = record next : array of PItem; value : string; end; ParsedLine =...

Морзе. Заменить цифры на код морзе.
ПОМОГИТЕ!!! Люди вот пишу программу. Задание: необходимо в текстовом файле заменить цифры на код...

Шифратор\дешифратор азбуки Морзе. Модуль sounds не найден
есть прога шифратор\дешифратор азбуки Морзе.В процессе шифровки по идее воспроизводиться звук точки...

6
1 / 1 / 1
Регистрация: 28.11.2015
Сообщений: 28
14.12.2015, 20:15  [ТС] 2
Помогите исправить ошибки в этом коде
1 Нельзя преобразовать тип boolean к стринг
2 выход за пределы массива

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Program Morse_Descrypt;
  var
  s, s1, s2:string;
  i,j,l,r:integer;
  mrz:array[1..74] of string=(
        'A'= '.-',              'a'= '.-',
        'B'= '-...',            'b'= '-...',
        'C'= '-.-.',            'c'= '-.-.',
        'D'= '-..',             'd'= '-..',
        'E'= '.',               'e'= '.',
        'F'= '..-.',            'f'= '..-.',
        'G'= '--.',             'g'= '--.',
        'H'= '....',            'h'= '....',
        'I'= '..',              'i'= '..',
        'J'= '.---',            'j'= '.---',
        'K'= '-.-',             'k'= '-.-',
        'L'= '.-..',            'l'= '.-..',
        'M'= '--',              'm'= '--',
        'N'= '-.',              'n'= '-.',
        'O'= '---',             'o'= '---',
        'P'= '.--.',            'p'= '.--.',
        'Q'= '--.-',            'q'= '--.-',
        'R'= '.-.',             'r'= '.-.',
        'S'= '...',             's'= '...',
        'T'= '-',               't'= '-',
        'U'= '..-',             'u'= '..-',
        'V'= '...-',            'v'= '...-',
        'W'= '.--',             'w'= '.--',
        'X'= '-..-',            'x'= '-..-',
        'Y'= '-.--',            'y'= '-.--',
        'Z'= '--..',            'z'= '--..',
        '0'= '-----',           ','= '--..--',
        '1'= '.----',           '.'= '.-.-.-',
        '2'= '..---',           '?'= '..--..',
        '3'= '...--',           ';'= '-.-.-.',
        '4'= '....-',           ':'= '---...',
        '5'= '.....',           '"'= '.----.',
        '6'= '-....',           '-'= '-....-',
        '7'= '--...',           '/'= '-..-.',
        '8'= '---..',           '('= '-.--.-',
        '9'= '----.',           ')'= '-.--.-',
        ' '= ' ',               '_'= '..--.-');
    begin
 
 readln (s);
     l:=0;
     r:=0;
     for i:=1 to length(s)+1 do
         begin
 
         if (s[i]=' ') or (i=length(s)+1) then
                 begin
 
                      r:=i;
                      s1:=copy(s,l+1,r-l-1);
                      l:=i;
                      for j:=1 to 74 do begin
                       if s1=mrz[j] then s2:=b[j];
                       if s1='' then s2:=' ';
                       end;
 
                      write(s2);
 
                 end;
 
         end;
end.
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
14.12.2015, 20:23 3
Один массив такой не бывает, нужно 2 массива, букв и Морзе.
0
1 / 1 / 1
Регистрация: 28.11.2015
Сообщений: 28
14.12.2015, 21:06  [ТС] 4
Ошибка времени выполнения: Индекс находился вне границ массива.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Program Morse_Descrypt;
  var
  s, s1, s2:string;
  i,j,l,r:integer;
  mrz:array[1..74] of string=(
        'A',              'a',
        'B',            'b',
        'C',            'c',
        'D',             'd',
        'E',               'e',
        'F',            'f',
        'G',             'g',
        'H',            'h',
        'I',              'i',
        'J',            'j',
        'K',             'k',
        'L',            'l',
        'M',              'm',
        'N',              'n',
        'O',             'o',
        'P',            'p',
        'Q',            'q',
        'R',             'r',
        'S',             's',
        'T',               't',
        'U',             'u',
        'V',            'v',
        'W',             'w',
        'X',            'x',
        'Y',            'y',
        'Z',            'z',
        '0',           ',',
        '1',           '.',
        '2',           '?',
        '3',           ';',
        '4',           ':',
        '5',           '"',
        '6',           '-',
        '7',           '/',
        '8',           '(',
        '9',           ')',
        ' ',               '_');
   {-------------------------------------------------------------}
       b:array[1..74] of string=(
        '.-',              '.-',
        '-...',            '-...',
        '-.-.',            '-.-.',
       '-..',             '-..',
        '.',                '.',
        '..-.',             '..-.',
        '--.',              '--.',
        '....',             '....',
        '..',               '..',
        '.---',             '.---',
        '-.-',              '-.-',
        '.-..',             '.-..',
        '--',               '--',
        '-.',               '-.',
        '---',              '---',
       '.--.',           '.--.',
        '--.-',             '--.-',
        '.-.',              '.-.',
       '...',             '...',
        '-',                '-',
        '..-',              '..-',
        '...-',             '...-',
        '.--',              '.--',
        '-..-',             '-..-',
        '-.--',             '-.--',
        '--..',             '--..',
        '-----',            '--..--',
        '.----',            '.-.-.-',
        '..---',            '..--..',
        '...--',            '-.-.-.',
        '....-',           '---...',
        '.....',            '.----.',
        '-....',            '-....-',
        '--...',            '-..-.',
        '---..',            '-.--.-',
        '----.',            '-.--.-',
        ' ',                '..--.-');
   begin
 
 readln (s);
     l:=0;
     r:=0;
     for i:=1 to length(s)+1 do
         begin
 
         if (s[i]=' ') or (i=length(s)+1) then
                 begin
 
                      r:=i;
                      s1:=copy(s,l+1,r-l-1);
                      l:=i;
                      for j:=1 to 74 do begin
                       if s1=mrz[j] then s2:=b[j];
                       if s1='' then s2:=' ';
                       end;
 
                      write(s2);
 
                 end;
 
         end;
end.
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
14.12.2015, 21:28 5
Что-то не нравится мне +1 здесь
Pascal
1
2
3
4
for i:=1 to length(s)+1 do
  begin
   if (s[i]=' ') or (i=length(s)+1) then
     begin
Добавлено через 3 минуты
Лучше добавить пробел в конец строки и вообще цикл while ... do здесь лучше
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7539 / 4399 / 2785
Регистрация: 22.11.2013
Сообщений: 12,607
Записей в блоге: 1
15.12.2015, 11:42 6
Лучший ответ Сообщение было отмечено Pascal2015 как решение

Решение

Для сокращенных логических вычислений достаточно переписать так:
Pascal
90
if (i=length(s)+1) or (s[i]=' ') then
Добавлено через 1 минуту
Вообще говоря, в задании предлагается морзянку читать из файла вроде такого:
morse.txt
Код
·-       a
-···     b
·--      w
--·      g
-··      d
·        e
···-     v
--··     z
··       i
·---     j
-·-      k
·-··     l
--       m
-·       n
---      o
·--·     p
·-·      r
···      s
-        t
··-      u
··-·     f
····     h
-·-·     c
---·     CH
----     SH
--·-     q
--·--    ~N
-·--     y
-··-     x
··-··    'E
··--     YU
·-·-     YA
·----    1
··---    2
···--    3
····-    4
·····    5
-····    6
--···    7
---··    8
----·    9
-----    0
······   .
·-·-·-   ,
---···   :
-·-·-·   ;
-·--·-   PRT
·----·   '
·-··-·   "
-····-   -
-··-·    /
··--··   ?
--··--   !
-···-    BRK
········ ERR
·--·-·   @
··-·-    END
0
1 / 1 / 1
Регистрация: 28.11.2015
Сообщений: 28
20.12.2015, 21:29  [ТС] 7
помогите понять в чем тут ошибка
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
type PItem = ^Item;
      Item = record
          next : array['-'..'.'] of PItem;
          value : string[3];
      end;
 
      ParsedLine = record
          letter : string;
          combination : string;
      end;
 
 
function CreateItem() : PItem;
begin
    (CreateItem);
    CreateItem^.value := '';
    CreateItem^.next['.'] := NIL;
    CreateItem^.next['-'] := NIL;
end;
 
 
function Decode(rep : PItem; comb : string) : string;
var p : PItem;
     i : integer;
begin
    p := rep;
    for i := 1 to length(comb) do
        begin
            p := p^.next[comb[i]];
 
            if p = NIL then
                begin
                    Decode := ''; exit;
                end;
        end;
 
    Decode := p^.value;
 
    for i := 1 to length(Decode) do
        if Decode[i] in ['A'..'Z'] then Decode[i] := chr(ord(Decode[i]) - ord('A') + ord('a'));
end;
 
 
procedure AddToRepresentation(rep : PItem; parsed : ParsedLine);
var i : integer;
     p : PItem;
     prev : PItem;
begin
    p := rep;
    for i := 1 to length(parsed.combination) do
        begin
            if p^.next[parsed.combination[i]] = NIL then
               p^.next[parsed.combination[i]] := CreateItem();
 
            p := p^.next[parsed.combination[i]];
        end;
    p^.value := parsed.letter;
end;
 
 
function ParseLineRepresentation(line : string) : ParsedLine;
var i : integer = 1;
begin
    ParseLineRepresentation.letter := '';
    ParseLineRepresentation.combination := '';
 
    while line[i] in [' '] do inc(i);
    while line[i] in ['.','-'] do
        begin
            ParseLineRepresentation.combination := ParseLineRepresentation.combination + line[i];
            inc(i);
        end;
    while line[i] in [' '] do inc(i);
    while not (line[i] in [' ']) and (i <= length(line)) do
        begin
            ParseLineRepresentation.letter := ParseLineRepresentation.letter + line[i];
            inc(i);
        end;
    
end;
 
 
function ParseRepresentation(filename : string) : PItem;
    var f : Text;
         line : String;
         parsed : ParsedLine;
begin
    ParseRepresentation := CreateItem();
 
    Assign(f, filename);
    Reset(f);
 
    while not EOF(f) do
        begin
            ReadLn(f, line);
            parsed := ParseLineRepresentation(line);
            AddToRepresentation(ParseRepresentation, parsed);
        end;
 
    Close(f);
end;
 
 
procedure DecodeAndPrint(filename, output : string; representation : PItem);
var f : Text;
     o : Text;
     c : char;
     prev : char;
     token : string;
begin
    Assign(f, filename);
    Reset(f);
 
    Assign(o, output);
    Rewrite(o);
 
    token := '';
    prev := '*';
    while not EoF(f) do
        begin
            while not EoLn(f) do
                begin
                    prev := c;
                    Read(f, c);
                    if c in ['.','-'] then token := token + c
                    else { / }
                        begin
                            if length(token) > 0 then
                                begin
                                    Write(o, Decode(representation, token));
                                    token := '';
                                end;
 
                            if prev in ['/'] then Write(o, ' ');
                        end;
                end;
 
            Read(f, c); 
            WriteLn(o);
        end;
 
    Close(f);
    Close(o);
end;
 
 
begin
    DecodeAndPrint('vstup.txt', 'vystup.txt', ParseRepresentation('morse.txt'));
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2015, 21:29
Помогаю со студенческими работами здесь

Программа перевода слов с русского на азбуку Морзе
Помогите разобраться как происходит перевод слов с русского на азбуку Морзе в этой программе...

Перевод из азбуки Морзе в обычный текст
всем добрый вечер. написал программку для перевода из азбуки Морзе в обычный текст. все вроде бы...

Перевести текст из азбуки в Морзе в обычную запись
Помогите пожалуйста. Нужно перевести из азбуки в Морзе в обычную запись. При вводе текста буквы...

Декодирование азбуки морзе
Подскажите пожалуйста как сделать декодирование азбуки морзе. Сделал кодирование и проигрывание...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru