const n_max=1000; {макс длина текста}
eot='.';
type litters = set of 'a'..'z'; {тип множества лат букв}
var txt:array [1..n_max] of char; {текст}
n:integer;
{процедура ввода текста}
procedure read_text;
var i:integer;
begin
Writeln ('Введите текст: ');
i:=0;
repeat
repeat //два репида, эт чтоб вводить построчно
i:=i+1;
read(txt);
until eoln or (i=n_max) or (txt=eot);
readln;
until (i=n_max) or (txt=eot);
if txt=eot then n:=i-1
else n:=i;
end;
{процедура поиска нужных слов}
procedure find;
var j,i:integer; s:string; m:litters; f:boolean;
begin
i:=1; j:=1;
repeat
s:=''; m:=[]; f:=false;
repeat
f:=txt[j] in m;
m:=m+[txt[j]]; s:=s+txt[j];
j:=j+1;
until (txt[j]=' ') or f or (txt[j]='.');
if not f and odd(i) then write(s);
i:=i+1;
until txt='.';
end;
begin {main}
read_text;
find;
readln;
end.
[Pascal] Исправить исхондник. Задача на множества
Пусть дан текст (т.е. мы его вводим сами), заканчивающийся точкой. Текст состоит из слов, разделённых пробелами. Слово - последовательность латинских букв. Напечатайте слова текста, имеющие нечетный номер, в которых нет ни одной повторяющейся буквы.
Вот решение задачи, но в процедуре find есть ошибка (т.е она работает неправильно).
Код:
Из цикла не правильно выходит (он конеш работает, но только, когда во всех словах буквы не повторяются). Переделайте пожалуйста...
а если там будет больше символов?
по сабжу
вы используете i и j счетчики - в j получается число символов а в i число слов
почему у вас условия выхода txt[i] хотя последний просмотренный символ в j
это первое что бросается
Ну ладно, как бы с вводом не существенно (врядли кто-то по клаве будет настукивать 1000 символов). А вот процедуре как-то надо переделать, чтоб раньше времени из цикла не выходил (i поменял на j).
вот еще )
вообще то это будет не всегда корректно работать у вас
Код:
m:=m+[txt[j]];
может возникнуть несоответствие типов :)
Цитата: nilbog
аа
вот еще )
вообще то это будет не всегда корректно работать у вас
может возникнуть несоответствие типов :)
вот еще )
вообще то это будет не всегда корректно работать у вас
Код:
m:=m+[txt[j]];
может возникнуть несоответствие типов :)
Не тут всё нормально, не то там с f по-моему. +а что значит (по ASCII кодам) такая фишка: const limits = [#0..#32,'.'] ? а именно #0..#32
а м у вас set of 'a'..'z'