Форум программистов, компьютерный форум, киберфорум
Наши страницы

Pascal (Паскаль)

Войти
Регистрация
Восстановить пароль
 
Pascal2015
1 / 1 / 1
Регистрация: 28.11.2015
Сообщений: 27
Завершенные тесты: 1
#1

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

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

Помогите пожалуйста написать программу на паскале для декодирования азбуки Морзе !!!
Условие:
Программа считывает из файла "morse.тхт" коды отдельных букв азбуки Морзе. Одна строка файла содержит запись для каждой буквы. На первой строке код буквами (последовательность точек и тире без пробелов или других символов), и затем разделены по меньшей мере одного пробела за которым следует строка, соответствующего кода (это может быть один или несколько символов, например, СН, максимально 3 буквы). В начале и в конце строки может быть любое количество пробелов.
В файле input.тхт есть закодированый текст для декодирование. Отдельные буквы разделяются косой чертой. Две косые черты подрят указывают на пробел. Программа записывает полученные текст в файл Output.text малыми буквами и придерживается расстоянии введенного текста в файле, конец строки происходит в середине коду буквами. Если программа в входном файле получает символ который не может декодировать тогда программа пропускает его. (азбука только латинскими буквами)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2015, 23:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа декодирование азбуки Морзе (Pascal):

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

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

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

Символьная информация (азбука Морзе) - Pascal
Помогите пожалуйста написать программу по этому условию: С клавиатуры или как константа вводится последовательность точек и тире, в...

Задача по теме:Кодирование и декодирование информации - Pascal
Я в информатике ни бум-бум... а очень нужна программа, точнее две программы: 1) Программа, которая кодирует и декодирует буквы...

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

6
Pascal2015
1 / 1 / 1
Регистрация: 28.11.2015
Сообщений: 27
Завершенные тесты: 1
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
Puporev
Модератор
52399 / 40246 / 13579
Регистрация: 18.05.2008
Сообщений: 93,031
14.12.2015, 20:23 #3
Один массив такой не бывает, нужно 2 массива, букв и Морзе.
0
Pascal2015
1 / 1 / 1
Регистрация: 28.11.2015
Сообщений: 27
Завершенные тесты: 1
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
Puporev
Модератор
52399 / 40246 / 13579
Регистрация: 18.05.2008
Сообщений: 93,031
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
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3557 / 2251 / 1152
Регистрация: 22.11.2013
Сообщений: 5,922
15.12.2015, 11:42 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Для сокращенных логических вычислений достаточно переписать так:
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
Pascal2015
1 / 1 / 1
Регистрация: 28.11.2015
Сообщений: 27
Завершенные тесты: 1
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
20.12.2015, 21:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2015, 21:29
Привет! Вот еще темы с ответами:

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

Сколько различных букв азбуки Морзе можно образовать - Комбинаторика
4) Буквы Азбуки Морзе образуются как последовательность и … сколько различных букв можно образовать используя: А) 5 символов; Б) не...

Морзянка. Вводимый с клавиатуры текст перевести в последовательность точек и тире с помощью азбуки Морзе. - C++
Народ, помогите плз решить 2 задачки на С оч надо... 1)Морзянка. Вводимый с клавиатуры текст перевести в последовательность...

Азбука Морзе, декодирование - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; void convert (char); int main(){ char eng; cin.getline...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru