Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Первые вхождения

Автор: 18192123 5.01.2007 17:26

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

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

Автор: мисс_граффити 5.01.2007 17:48

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

Автор: Lapp 5.01.2007 18:01

Цитата(мисс_граффити @ 5.01.2007 14:48) *

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

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

Автор: 18192123 5.01.2007 18:06

Вот что у меня получилось


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
...


вроде нужны именно первые вхождения, и не их позиции

Автор: мисс_граффити 5.01.2007 18:10


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

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

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

Автор: volvo 5.01.2007 18:15

if upcase(s[i]) in ['A'..'Z'] then
begin
mn := mn+ [upcase(s[i])];
...
- будут рассматриваться любые...

Автор: Lapp 5.01.2007 18:24

Цитата(мисс_граффити @ 5.01.2007 15:10) *

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

почему приделать?.. вполне по делу, чтобы проверять на первость вхождения smile.gif

Автор: мисс_граффити 5.01.2007 18:30

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

Цитата
a - 2
e - 13
h - 6
n - 12

Автор: Lapp 5.01.2007 18:41

Цитата(мисс_граффити @ 5.01.2007 15:30) *

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

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

Автор: мисс_граффити 5.01.2007 18:48

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

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

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