Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на строки
Форум «Всё о Паскале» > 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] =
    (
    ...
    );
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.