Здравствуйте! Сейчас решаю задачи по паскалю и застрял вот на чем: во введенной строке нужно подсчитать количество слов которые одинаково начинаются и заканчиваются, как это реализовать?
Здесь: http://forum.pascal.net.ru/index.php?s=&showtopic=6972&view=findpost&p=50581 найдешь алгоритм выделения слов из строки...
Дальше - просто пройдешь по массиву, и проверишь каждое слово на то, подходит оно под условие, или нет... (Кстати, уточни, сколько символов должны совпадать в начале и конце слова, чтобы считалось, что оно начинается и заканчивается одинаково?)
Вот как я решил:
Тут возникла у меян проблема с этим кодом, суть ее вот в чем – программа работает нормально, если ввести два слова с одинаковыми буквами в начале и конце то выдает что их два, но если не поставить в конце предложения точку то пишет что слово только одно! Т.е. если не ввести точку то она подсчитывает все слова с одинаковым началом и концом кроме последнего слова в строке! Не могу понять в чем проблема!?
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.
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 + '.';