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

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

Форум «Всё о Паскале» _ Задачи _ в строке подсчитать количество слов которые одинаково начинаются и заканчиваются!?

Автор: PORTUGAL 22.12.2005 15:52

Здравствуйте! Сейчас решаю задачи по паскалю и застрял вот на чем: во введенной строке нужно подсчитать количество слов которые одинаково начинаются и заканчиваются, как это реализовать?

Автор: volvo 22.12.2005 16:02

Здесь: http://forum.pascal.net.ru/index.php?s=&showtopic=6972&view=findpost&p=50581 найдешь алгоритм выделения слов из строки...

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

Автор: PORTUGAL 22.12.2005 21:24

Вот как я решил:

Код

var st,sl:string;
    i,n,beg,kol:byte;
BEGIN
write('Vvedite stroku: ');
readln(st);
beg:=1;
for i:= 1 to length(st) do
  begin
   if (st[i]=' ') or ((st[i]='.'))
   then
    begin
     sl:=copy(st,beg,i-beg);
     if sl[1]=sl[length(sl)]
     then inc(kol);
     beg:=i+1;
    end;
end;
writeln('Kolichestvo slov: ' ,kol);
readln;
end.


Нормально?

Автор: PORTUGAL 26.12.2005 21:35

Тут возникла у меян проблема с этим кодом, суть ее вот в чем – программа работает нормально, если ввести два слова с одинаковыми буквами в начале и конце то выдает что их два, но если не поставить в конце предложения точку то пишет что слово только одно! Т.е. если не ввести точку то она подсчитывает все слова с одинаковым началом и концом кроме последнего слова в строке! Не могу понять в чем проблема!?

Автор: klem4 26.12.2005 21:42

uses crt;
var
s : string;
i,back,count : byte;

begin
clrscr;
readln(s);
i := 1;
count := 0;
while(i<=length(s)) do begin
while(i<=length(s)) and (s[i]=' ') do inc(i);
if (i <= length(s)) then begin
back := i;
while(i<=length(s)) and (s[i] <> ' ') do inc(i);
if s[pred(i)] = s[back] then inc(count);
end;
end;
writeln('count = ',count);

readln
end.


Автор: volvo 26.12.2005 21:46

Цитата
Не могу понять в чем проблема!?
Ну, как же, у тебя слово ограничивается ТОЛЬКО пробелом или завершающей точкой, если последним символом строки точки не будет, то последнее слово просто не анализируется, т.к.
   if (st[i]=' ') or ((st[i]='.')) then begin
{ сюда программа просто не заходит ... }
sl:=copy(st,beg,i-beg);
if sl[1]=sl[length(sl)] then inc(kol);
beg:=i+1;
end;


измени цикл вот так, все должно работать:
for i:= 1 to length(st) do begin

if (st[i]=' ') or ((st[i]='.')) or (i = length(st)) then begin
if i = length(st) then sl := copy(st, beg, 255)
else sl:=copy(st,beg,i-beg);

if sl[1]=sl[length(sl)] then inc(kol);
beg:=i+1;
end;

end;


или еще проще:
write('Vvedite stroku: '); readln(st);
if st[length(st)] <> '.' then st := st + '.';