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

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

Форум «Всё о Паскале» _ Задачи _ работа с текстом

Автор: vjtr 15.03.2008 18:01

задан текст , состоящий из нескольких строк,каждая в свою очередь состоит из слов, разделенных пробелами.
подсчитать кол-во слов в тексте,совпадающих с заданным ключевым словом. при проверке совпадения слов символ "*" (звездочка) в начале или в конце ключевого слова обрабатывать специальным образом: считать его признаком того , что в проверяемом слове на этом месте может находиться непустая последовательность произвольной длины, состоящая из любых символов кроме пробела. Можно считать , что символ "*" в ключевом слове встречаются толко один раз.
например, ключевое слово "кор*" будет совпадать со словами "корпус" , "корабль" и т.п , или слову "корпус" могут соответствовать ключвые слова "*пус" , "корп*" и т. п.
вот задача


Program translation;
uses wincrt;
var w,str,s:array [1..100] of string[50];
kl:string;
i,n,k,z,j,l,q:integer;
y,p:array [1..43] of integer;
begin
write('n=');
readln(n);
write('kl=');
readln(kl);
for i:=1 to n do begin
write('str[',i,']=');
readln(str[i]);
str[i]:=str[i]+' ';
k:=0;
while str[i]<>'' do begin
p[i]:=pos(' ',str[i]);
if p[i]>1 then begin
k:=k+1;
w[k]:=copy(str[i],1,p[i]-1);
end;
delete(str[i],1,p[i]);
end;
end;
l:=0;
q:=pos('*',kl);
delete (kl,q,1);
for i:=1 to n do begin
for j:=1 to k do
y[j]:=pos(kl,w[j]);
if ((q=1) and (y[j]>1)) or
((q>1) and (y[j]=1)) then l:=l+1;end;
writeln (l);
end.

вот что у меня получилось,
но не ищет число таких слов, исправте пожалуйста!!!

Автор: volvo 15.03.2008 19:01

На самом деле эта задача практически аналогична предыдущей твоей задаче. Вот, смотри (все должно быть в одном регистре):

uses wincrt;

var
w: string;
str, kl: string;

p, count: integer;

begin
{
writeln('str = ');
readln(str);
}
str := ' korpus kampus pusto pusk pus abb bbrtr ';

{
write('kl = ');
readln(kl);
}
kl := 'pus*';

str := str + ' ';

while str <> '' do begin
while (str <> '') and (str[1] = ' ') do delete(str, 1, 1);

p := pos(' ',str);
if (p > 1) then begin
w := copy(str, 1, p - 1); { выделили очередное слово }
if length(w) >= length(kl) then begin

if (kl[1] = '*') and { звездочка в начале? }
(
copy(w, length(w) - length(kl) + 2, length(kl) - 1) =
copy(kl, 2, length(kl)) { тогда смотрим, совпадает ли конец слова }
)
then begin
inc(count); writeln(w);
end
else
if (kl[length(kl)] = '*') and { звездочка в конце? }
(copy(w, 1, length(kl) - 1) = copy(kl, 1, length(kl) - 1)) { проверяем начало }
then begin
inc(count); writeln(w);
end
else
if kl = w then begin { Звездочки нет? Ну и не надо, проверяем все слово... }
inc(count); writeln(w);
end

end;
end;
delete(str, 1, p);

end;
writeln(count);
end.

Вот и все... Значит, и с предыдущей задачей ты тоже не до конца разобралась smile.gif

Автор: vjtr 15.03.2008 19:31

я разобралась все получилось
и моя задача вроде чуть-чуть правильная
БОЛЬШОЕ СПАСИБО ВАМ!!!