IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача на строки
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Если задать текст таким образом:
Код

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),но это неправильно.}

КАК это можно осуществить.

Сообщение отредактировано: Vardes -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
сообщение
Сообщение #2


Гость






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 символами...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Мне необходимо после ввода текста заменить все его элементы на код Морзе,вот и думаю как это проще сделать.
Если делать это вышеуказанным методом,то как-то нерационально получится.

Сообщение отредактировано: Vardes -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Вот так:
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 символов...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


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

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] ]);
...


Вот так можно ли осушествить?

Сообщение отредактировано: Vardes -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






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

Сколько же можно говорить в пустоту. Сами же спрашивают, и сами СЛУШАТЬ не хотят !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Обратите внимание plz на пост №5 я его отредактировал.
НО при вводе массива,который меняет маленькие буквы кирилицы на код морзе,требуется до бесконечности вводить кодировку,т.е не 33 раза надо вводить кодировку '--.','--.-', а до бесконечности,он не видит границы алфавита.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
он не видит границы алфавита.

А у тебя не вызывает подозрений, что мой код "видит" границы алфавита, а твой - нет? Это потому, что у тебя алфавит задан неверно... Ты вообще не имеешь права индексировать массивы строками, как написал в посте №5...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






P.S. Кстати, проблема-то у тебя скорее всего в том, что множество символов кириллицы - "разорванное":
'а' .. 'п', 'р' .. 'я'

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

{
первые 16 строк - коды букв 'а' - 'п',
потом 48 пустых строк и последние 16 - коды символов 'р' - 'я'
}
morze_ch: array[set_alpha] of string[5] =
(
...
);
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.05.2024 18:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name