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

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

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

 
 Ответить  Открыть новую тему 
> Задача на строки
Vardes
сообщение 28.11.2005 11:28
Сообщение #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 - 28.11.2005 11:29
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.11.2005 11:47
Сообщение #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 символами...
 К началу страницы 
+ Ответить 
Vardes
сообщение 28.11.2005 11:59
Сообщение #3


Пионер
**

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

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


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

Сообщение отредактировано: Vardes - 28.11.2005 12:03
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.11.2005 12:16
Сообщение #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 символов...
 К началу страницы 
+ Ответить 
Vardes
сообщение 28.11.2005 22:58
Сообщение #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 - 28.11.2005 23:24
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.11.2005 23:17
Сообщение #6


Гость






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

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


Пионер
**

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

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


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


Гость






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

А у тебя не вызывает подозрений, что мой код "видит" границы алфавита, а твой - нет? Это потому, что у тебя алфавит задан неверно... Ты вообще не имеешь права индексировать массивы строками, как написал в посте №5...
 К началу страницы 
+ Ответить 
volvo
сообщение 28.11.2005 23:46
Сообщение #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

 



- Текстовая версия 18.06.2025 19:36
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"