помогите пожалуста, язик турбо паскаль! мне нужно посчитать количество слов в предложении (слова в предложеннии разделени нескольками пробелами)! но я вот написал программу и незню в чем моя ошибка, некак неполучается правильно! очень нужна помощь
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 можно занести также знаки препинаня, тогда слова подсчитаются даже без пробелов после них. В общем, разбирайтесь.
Удачи!
Нда.. . Покажу только один ляп, дальше разбираться неохота. Проще написатьт самому.
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 можно занести также знаки препинаня, тогда слова подсчитаются даже без пробелов после них. В общем, разбирайтесь.
Удачи!
или это так отобразилось, и тут какая-то ерунда написана :)
n:=pos(s2,s1);
for i:=1 to n do
это неподражаемо :)
красота if n<>0 then delete(s1,n,1); а если n не равен 1, то у тебя по идее два слова в одно сольюца? :)
n:=pos(s2,s1);
for i:=1 to n do
это неподражаемо :)
красота if n<>0 then delete(s1,n,1); а если n не равен 1, то у тебя по идее два слова в одно сольюца? :)
Похожие вопросы
- Помогите решить задачи по Паскалю
- помогите решить задачу на паскале: напечатать "столбиком" значения sin2, sin3, ..sin 20.
- Помогите решить программу в паскале)
- Помогите написать программу! Турбо Паскаль 7.0
- Кто знает помогите написать на Турбо Паскале
- Помогите решить задачу на паскале
- Помогите решить задачу в паскале. Задание: Заменить в строке все вхождения "да" на "нет".
- Помогите решить задачу в паскале
- Помогите решить задачу в паскале
- Помогите решить задачу (в паскале)!