Помощь - Поиск - Пользователи - Календарь
Полная версия: Первые вхождения
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
18192123
Дан текст, заканчивающийся точкой. Вывести первые вхождения каждой латинской буквы.
(задача должна решаться с помощью множеств)

Помогите разобраться , что понимается под первыми вхождениями.
мисс_граффити
ну допустим текст:
'lala happy new year'
смотришь:
первый символ l, еще не встречался. выводишь.
a - не встречался, выводишь
l- уже был, не выводишь
а - был, не выводишь
h - первый раз встретился, выводишь
а - был
ну и т.д.
в итоге получишь: 'lahpynewr'
(пробелы же не являются латинскими буквами, их не выводим)
Lapp
Цитата(мисс_граффити @ 5.01.2007 14:48) *

в итоге получишь: 'lahpynewr'

А может, нужны номера позиций первых вхождений?
Типа так:
a - 2
e - 13
h - 6
n - 12
...
18192123
Вот что у меня получилось

uses crt;
var
s, s1 : string;
i : integer;
mn : set of char;
c : char;
begin
clrscr;
repeat
s := '';
repeat
c := readkey;
write ( с );
s := s+c;
until (c = '.')or (c = #13);
writeln;
until c = #13;
s1 := '';
mn := [];
i := 0;
while i <= length(s) do
begin
mn := mn + [s[i]];
inc (i);
if s[i] in mn then writeln ('Error!!!') else
begin
mn := mn+ [s[i]];
s1 := s1 + s[i];
end;
end;
writeln (s1);
readkey;
end.




но у меня получается, что пробелы тоже выводятся. ( а как без них?)
и ещё, не получается учесть самый первый символ текста

Цитата(Lapp @ 5.01.2007 14:01) *

А может, нужны номера позиций первых вхождений?
Типа так:
a - 2
e - 13
h - 6
n - 12
...


вроде нужны именно первые вхождения, и не их позиции
мисс_граффити

...
else
if s[i] in ['a'..'z'] then
begin
mn := mn+ [s[i]];
s1 := s1 + s[i];
end;

это если только строчные рассматривать

Lapp, а зачем тогда множества? хотя, конечно, может быть и так... и множества приделать реально.
volvo
if upcase(s[i]) in ['A'..'Z'] then
begin
mn := mn+ [upcase(s[i])];
...
- будут рассматриваться любые...
Lapp
Цитата(мисс_граффити @ 5.01.2007 15:10) *

а зачем тогда множества? хотя, конечно, может быть и так... и множества приделать реально.

почему приделать?.. вполне по делу, чтобы проверять на первость вхождения smile.gif
мисс_граффити
потому что pos и так возвращает первое... сделать цикл от a до z - и никаких множеств не надо.
или чтобы выводить в порядке "встречания"? но тогда будет не
Цитата
a - 2
e - 13
h - 6
n - 12
Lapp
Цитата(мисс_граффити @ 5.01.2007 15:30) *

потому что pos и так возвращает первое... сделать цикл от a до z - и никаких множеств не надо.
или чтобы выводить в порядке "встречания"? но тогда будет не

А кто сказал, что "текст, заканчивающийся точкой" есть string? Логично воспринимать это как файл (возможно, с переводами строк), и заодно никаких ограничений на длину (255 в строке) не будет
Относительно порядка - мои фантазии.. smile.gif
мисс_граффити
Цитата(Lapp @ 5.01.2007 14:41) *

А кто сказал, что "текст, заканчивающийся точкой" есть string? Логично воспринимать это как файл (возможно, с переводами строк), и заодно никаких ограничений на длину (255 в строке) не будет
Относительно порядка - мои фантазии.. smile.gif

согласна.
просто читала по диагонали задание... а потом уже больше ориентировалась на приведенный автором темы код, где вполне четко написано:
Цитата
s, s1 : string;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.