Здравствуйте! Сейчас решаю задачи по паскалю и застрял вот на чем: во введенной строке нужно подсчитать количество слов которые одинаково начинаются и заканчиваются, как это реализовать?
Дальше - просто пройдешь по массиву, и проверишь каждое слово на то, подходит оно под условие, или нет... (Кстати, уточни, сколько символов должны совпадать в начале и конце слова, чтобы считалось, что оно начинается и заканчивается одинаково?)
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)) dobeginwhile(i<=length(s)) and (s[i]=' ') do inc(i);
if (i <= length(s)) thenbegin
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]='.')) thenbegin{ сюда программа просто не заходит ... }
sl:=copy(st,beg,i-beg);
if sl[1]=sl[length(sl)] then inc(kol);
beg:=i+1;
end;
измени цикл вот так, все должно работать:
for i:= 1to length(st) dobeginif (st[i]=' ') or ((st[i]='.')) or (i = length(st)) thenbeginif 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 + '.';
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.