Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Vardes
Если задать текст таким образом:
Код

var
txt: array[1..3] of string;
i:byte;
begin
for i:= 1 to 3 do
readln(txt[i]);   {Ввод текста,состоящего из 3-х строк}


Каким же образом проверить каждый элемент на условие.Например,если один из элементов строки :='A', то этот элемент примет значение :='..--'.
Данная задача связана с азбукой МОРЗЕ.
И ещё есть вопрос
КАК элементу строки присвоить сразу несколько элементов из кодовой таблицы ASII.
Код

txt[i]:=chr(16);{Надо, чтоб он также принимал chr(17),получится как бы chr(16,17),но это неправильно.}

КАК это можно осуществить.
volvo
Vardes?
Цитата
КАК элементу строки присвоить сразу несколько элементов из кодовой таблицы ASII.

Никак. Забудь об этом, это невозможно... "Элемент строки" - это символ, а символ может принимать только одно значение из таблицы ASCII... Лучше скажи, ЗАЧЕМ тебе это понадобилось, может быть найдем более подходящее решение?
Цитата
Каким же образом проверить каждый элемент на условие.

Я не понял, ты хочешь в каждой строке проверять ВСЕ вхождения "A" и заменять их на аналог из азбуки Морзе? Тогда так:
For i := 1 To 3 {число строк} Do Begin
Repeat
p := Pos('A', txt[i]);
if p <> 0 Then Begin
Delete(txt[i], p, 1);
Insert('..--', txt[i], p);
End;
Until p = 0;
End;
Только учитывай, что длина строки ограничена 255 символами...
Vardes
Мне необходимо после ввода текста заменить все его элементы на код Морзе,вот и думаю как это проще сделать.
Если делать это вышеуказанным методом,то как-то нерационально получится.
volvo
Вот так:
type
set_digits = '0'..'9';
set_alpha = 'a' .. 'z';
const
digits = ['0'..'9'];
alpha = ['a'..'z'];

morze_num: array[set_digits] of string[5] =
('-----','.----','..---','...--','....-',
'.....','-....','--...','---..','----.');

{ Дополни весь алфавит }
morze_ch: array[set_alpha] of string[5] =
(
'.-', '-...', '', '', '',
'', '', '', '', '',
'', '', '', '', '',
'', '', '', '', '',
'', '', '', '', '',
''
);

var
txt: array[1 .. 3] of string;
i, j: integer;
s: string;

begin

for i := 1 to 3 do begin
s := txt[i];
txt[i] := '';
for j := 1 to length(s) do
if s[j] in digits then txt[i] := txt[i] + morze_num[ s[j] ]
else
if s[j] in alpha then txt[i] := txt[i] + morze_ch[ s[j] ]
else txt[i] := txt[i] + s[j];
end;

for i := 1 to 3 do
writeln(txt[i]);
end.

И, еще раз, следи за длиной строки !!! Очень может быть, что результат преобразования в код Морзе будет длиннее 255 символов...
Vardes
Вот такой вопрос.
Необходимо также перевести маленьки буквы и символы.Но если задать их как перечисляемый тип,то программа не работает.
Значит следует их задавать через кодовую таблицу?
Код

const
alpha:['128'..'159'];
alphal:['160'..'175'];
alphad:['224'..'239'];
....
....
morze_ch: array['128'..'159'] of string[5] =
...
...
if ord(s[j]) in alpha then txt[i] := txt[i] + ord(morze_ch[ s[j] ]);
...


Вот так можно ли осушествить?
volvo
Vardes, в той программе, которую я тебе привел, ты НЕ СОИЗВОЛИЛ заметить, что используются И маленькие буквы, И цифры?

Сколько же можно говорить в пустоту. Сами же спрашивают, и сами СЛУШАТЬ не хотят !!!
Vardes
Обратите внимание plz на пост №5 я его отредактировал.
НО при вводе массива,который меняет маленькие буквы кирилицы на код морзе,требуется до бесконечности вводить кодировку,т.е не 33 раза надо вводить кодировку '--.','--.-', а до бесконечности,он не видит границы алфавита.
volvo
Цитата
он не видит границы алфавита.

А у тебя не вызывает подозрений, что мой код "видит" границы алфавита, а твой - нет? Это потому, что у тебя алфавит задан неверно... Ты вообще не имеешь права индексировать массивы строками, как написал в посте №5...
volvo
P.S. Кстати, проблема-то у тебя скорее всего в том, что множество символов кириллицы - "разорванное":
'а' .. 'п', 'р' .. 'я'

и между 'п' и 'р' есть еще 48 символов ... То есть тебе нужно будет делать так:
type
...
set_alpha = 'а' .. 'я';
const
digits = ['0'..'9'];
alpha = ['а'..'п', 'р'..'я'];

{
первые 16 строк - коды букв 'а' - 'п',
потом 48 пустых строк и последние 16 - коды символов 'р' - 'я'
}
morze_ch: array[set_alpha] of string[5] =
(
...
);
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.