IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Как подсчитать количество слов в строке?
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской

Репутация: -  0  +


Есть следующая наработка:

Program;
uses crt;
var s: string; i, n, l: integer;
begin
clrscr;
write('Enter string:'); readln(s);
l:=length(s);
if l=0 then n:=0 else n:=1;
for i:=1 to l do
if (s[i]=' ') then n:=n+1;
writeln('Words in string =', n);
Readkey;
end.



Все врое бы ОК. Пробел - разделитель (что по условию задачи верно). Пишет "0 слов", если ничего не введешь или "1 слово", если введешь одно. Но если введешь "слово" [пробел] "слово" [пробел] " ", то программа скажет, что введено 3 слова, хотя его нет после второго проблела.
Как сделать так, чтобы программа считала верно в таком случае?

Сообщение отредактировано: Lapp -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Разбиение на слова. Все способы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Виталий

Репутация: -  0  +


как вариант сначала удалять все пробелы до слов, и после, а так же между словами если их более 2

Сообщение отредактировано: J.Bond_33 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской
Реальное имя: pavel

Репутация: -  0  +



Program;
uses crt;
var s: string; i, n, l: integer;
begin
clrscr;
write('Enter string:'); readln(s);
l:=length(s);
if l=0 then n:=0 else n:=1;
for i:=1 to l do
if (s[i]=' ')and(i<l) then n:=n+1;
writeln('Words in string =', n);
Readkey;
end.



попробуй так... cool.gif

М
ну я уже устал ставить тэги, неужели так трудно сделать правильно??
Lapp



--------------------
Жизнь хитра - когда у меня на руках все карты,
она внезапно решает играть в шахматы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(prevedmuraved @ 9.06.2010 9:16) *
попробуй так... cool.gif

а если строка такая: "слово_слово____", - тогда что? smile.gif

(пробелы заменены на _ )


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Виталий

Репутация: -  0  +


попробуй так
Program;
uses crt;
var s: string; i, n, l: integer;
begin
clrscr;
write('Enter string:'); readln(s);
while s[1]=' ' do delete(s,1,1);
while s[length(s)]=' ' do delete(s,length(s),1);
for i:=1 to length(s) do
if s[I]=' ' then
while s[I+1]=' ' do delete(s,I+1,1);
l:=length(s);
if l=0 then n:=0 else n:=1;
for i:=1 to l do
if (s[i]=' ') then n:=n+1;
writeln('Words in string =', n);
Readkey;
end.


Сообщение отредактировано: J.Bond_33 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


нет, J.Bond_33, и так не пойдет тоже... ))

Посмотри на свой код внимательно, постарайся найти ошибку. Если не найдешь - подсказка под спойлером..

подсказка (Показать/Скрыть)


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Виталий

Репутация: -  0  +


про это не подумал...
Program;
uses crt;
var s: string; i, n, l, a: integer;
begin
clrscr;
write('Enter string:'); readln(s);
a:=1;
while s[a]=' ' do inc(a);
if a=length(s)+1 then n:=0
else begin
while s[1]=' ' do delete(s,1,1);
while s[length(s)]=' ' do delete(s,length(s),1);
for i:=1 to length(s) do
if s[I]=' ' then
while s[I+1]=' ' do delete(s,I+1,1);
l:=length(s);
if l=0 then n:=0 else n:=1;
for i:=1 to l do
if (s[i]=' ') then n:=n+1;
end;
writeln('Words in string =', n);
Readkey;
end.

вот так вроде будет работать в любом случае
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






J.Bond_33
Эту программу можно в 2 раза короче сделать. Не надо добавлять куски кода, "чтоб работало". Надо сначала сесть и придумать алгоритм. Потом - продумать программу. И только потом включить компьютер и начать эту программу набирать.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской

Репутация: -  0  +


Цитата(prevedmuraved @ 9.06.2010 12:16) *


Program;
uses crt;
var s: string; i, n, l: integer;
begin
clrscr;
write('Enter string:'); readln(s);
l:=length(s);
if l=0 then n:=0 else n:=1;
for i:=1 to l do
if (s[i]=' ')and(i<l) then n:=n+1;
writeln('Words in string =', n);
Readkey;
end.



попробуй так... cool.gif



Тогда при вводе "word_word_[нет слова]" (где _ - пробел), программа говорит, что введено 1 слово.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Вот вся твоя задача.. Две строчки:
  n:=0;
for i:=1 to Length(s) do if (s[i]<>' ')and((i=Length(s))or(s[i+1]=' ')) then Inc(n);



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской

Репутация: -  0  +


Цитата(Lapp @ 9.06.2010 18:36) *

Вот вся твоя задача.. Две строчки:
  n:=0;
for i:=1 to Length(s) do if (s[i]<>' ')and((i=Length(s))or(s[i+1]=' ')) then Inc(n);



Error: type mismatch.
При этом:
s: string; i, n: integer;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Shmaniche @ 10.06.2010 7:36) *
Error: type mismatch.
При этом:
s: string; i, n: integer;

Нет, так не пойдет. Давай уж весь код целиком.. Copy - Paste, please


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


var n, i : integer;
s : string;
begin
Writeln ('Vvedite tekst:');
Readln (s);
n := 0;
for i := 1 to Length(s) do
if (s[i] <> ' ') and ((i = Length(s)) or (s[i + 1] = ' ')) then Inc(n);
Writeln ('Kol-vo slov v tekste -> ',n);
end.

Всё должно работать правильно, и без ошибок. Перепроверь программу свою.


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Shmaniche @ 10.06.2010 7:36) *

Error: type mismatch.
При этом:
s: string; i, n: integer;

Хотя, погоди... какой у тебя компилятор? Turbo? Если да, то он может хотеть лишних скобочек.. Сейчас не могу проверить, попозже.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Lapp @ 10.06.2010 8:12) *
Сейчас не могу проверить, попозже.
Проверил.
Нет, зря я на Turbo клепал - все нормально работает!
Давай, дорогой Shmaniche, приводи весь код. Будем посмотреть (С), где ты там напортачил.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской

Репутация: -  0  +


Цитата(Сергей Меркурьев @ 10.06.2010 11:08) *

var n, i : integer;
s : string;
begin
Writeln ('Vvedite tekst:');
Readln (s);
n := 0;
for i := 1 to Length(s) do
if (s[i] <> ' ') and ((i = Length(s)) or (s[i + 1] = ' ')) then Inc(n);
Writeln ('Kol-vo slov v tekste -> ',n);
end.

Всё должно работать правильно, и без ошибок. Перепроверь программу свою.


Все ок. Turbo перегрузил, перестал ругаться smile.gif

Сообщение отредактировано: Shmaniche -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Shmaniche @ 10.06.2010 9:20) *
Все ок. Turbo перегрузил, перестал ругаться smile.gif
Ой, темните, парниша!..
Никогда в жизни такого не было, чтоб Турбо так сбоил, и ему требовалась перезагрузка.. no1.gif
Ладно, остается на твоей совести. Надеюсь, тебя это хоть чему-то научило smile.gif.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.10.2020 12:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name