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

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

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

 
 Ответить  Открыть новую тему 
> Как подсчитать количество слов в строке?
Shmaniche
сообщение 9.06.2010 7:46
Сообщение #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 - 9.06.2010 8:15
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 9.06.2010 8:09
Сообщение #2


Гуру
*****

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

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


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





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

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


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

Сообщение отредактировано: J.Bond_33 - 9.06.2010 8:11
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
prevedmuraved
сообщение 9.06.2010 8:16
Сообщение #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 
 К началу страницы 
+ Ответить 
Lapp
сообщение 9.06.2010 8:34
Сообщение #5


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

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

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


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

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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
J.Bond_33
сообщение 9.06.2010 8:40
Сообщение #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 - 9.06.2010 8:41
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 9.06.2010 8:57
Сообщение #7


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

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

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


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

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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
J.Bond_33
сообщение 9.06.2010 9:05
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.06.2010 9:13
Сообщение #9


Гость






J.Bond_33
Эту программу можно в 2 раза короче сделать. Не надо добавлять куски кода, "чтоб работало". Надо сначала сесть и придумать алгоритм. Потом - продумать программу. И только потом включить компьютер и начать эту программу набирать.
 К началу страницы 
+ Ответить 
Shmaniche
сообщение 9.06.2010 12:12
Сообщение #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 
 К началу страницы 
+ Ответить 
Lapp
сообщение 9.06.2010 14:36
Сообщение #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 
 К началу страницы 
+ Ответить 
Shmaniche
сообщение 10.06.2010 6:36
Сообщение #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 
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.06.2010 7:08
Сообщение #13


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

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

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


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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Cheburashka
сообщение 10.06.2010 7:08
Сообщение #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 
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.06.2010 7:12
Сообщение #15


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

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

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


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

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

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


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


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

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

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


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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shmaniche
сообщение 10.06.2010 9:20
Сообщение #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 - 10.06.2010 9:21
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.06.2010 9:52
Сообщение #18


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

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

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


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


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

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

 



- Текстовая версия 21.07.2025 11:08
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"