Другие языки программирования и технологии

Помогите решить, пожалуста (ТУрбо Паскаль)

помогите пожалуста, язик турбо паскаль! мне нужно посчитать количество слов в предложении (слова в предложеннии разделени нескольками пробелами)! но я вот написал программу и незню в чем моя ошибка, некак неполучается правильно! очень нужна помощь

program predl;
var s1,s2:string;
i,n,ks:integer;
begin
ks:=0;
write('Vvedit predlogenie- ');readln(s1);
n:=length(s1);
s2:=' ';
for i:=1 to n do
n:=pos(s2,s1);
if n<>0 then delete(s1,n,1);
s1:=s1+' ';
for i:=1 to n do
if s1=' ' then
ks:=ks+1;
if s1[n]<>'' then
ks:=ks+1;
writeln('Kilkistb sliv y predlogenu ravno->',ks);
end.
Доброго времени суток.

Нда.. . Покажу только один ляп, дальше разбираться неохота. Проще написатьт самому.

write('Vvedit predlogenie- ');readln(s1); {ну ввели предложение, ладно}
n:=length(s1); {нашли количество символов в нем, тоже нормально}
s2:=' '; {зачем-то ввели переменную и присвоиле ей пробел}
for i:=1 to n do {начинаете цикл по всем символам предложения}
n:=pos(s2,s1); {и зачем-то переопределяете верхнюю границу цикла, причем без операторных скобок}

Дальше нет смысла комментировать. Вы так никогда не доберетесь до конца предложения.

Теперь мой вариант. Все значительно проще

type
TCharSt = Set of Char;

function WordCount(const S: String; const WordDelims: TCharSet): Integer;
var
nLen, j, Result : Integer;
begin
Result := 0;
j := 1;
nLen := Length(S);
while j <= nLen do begin
while (j <= nLen) and (S[j] in WordDelims) do Inc(j);
if j <= nLen then Inc(Result);
while (j <= nLen) and not(S[j] in WordDelims) do Inc(j);
end;
WordCount := Result;
end;

Обращаться следует так:

NumWords := WordCount('Проверка подсчета числа слов в предложении', [' ']);

В параметр WordDelims можно занести также знаки препинаня, тогда слова подсчитаются даже без пробелов после них. В общем, разбирайтесь.

Удачи!
IV
Igor Voronchihin
59 613
Лучший ответ
или это так отобразилось, и тут какая-то ерунда написана :)
n:=pos(s2,s1);
for i:=1 to n do
это неподражаемо :)

красота if n<>0 then delete(s1,n,1); а если n не равен 1, то у тебя по идее два слова в одно сольюца? :)