Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 20.03.2009, 16:20   #1
Evgesha
 
Регистрация: 15.03.2009
Сообщений: 9
По умолчанию Паскаль. Определение количества слов в тексте.

Здравствуйте! Помогите, пожалуйста, доработать программу.
Задание. Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Посчитать, сколько слов содержит данная строка.

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

Код:
program z8;
uses crt;
var s: string; k,i:integer;
begin clrscr;
      writeln('vvedite stroky simvolov, v kontce postavte tochky :');
      readln(s);
      if (s='.') or (s='')or (s=' ') then writeln('ne verniy vvod') else begin
      for i:=1 to length(s) do
      if (s[i]=' ') or (s[i]='.') then k:=k+1;
      writeln('v vvedennoy stroke slov = ',k);  end ;
end.
Evgesha вне форума
Старый 20.03.2009, 16:24   #2
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
Радость

Ну сначала надо удалить все после точки и ее саму
Код:
Delete(s,Pos('.',s),length(s)-Pos('.',s));
потом в цикле находить пробелы , увеличивать счетчик, и удалять все что до пробела и его самого
Levsha100 вне форума
Старый 20.03.2009, 16:28   #3
Evgesha
 
Регистрация: 15.03.2009
Сообщений: 9
По умолчанию

Спасибо, сейчас попробую.

Цитата:
Сообщение от Levsha100 Посмотреть сообщение
потом в цикле находить пробелы , увеличивать счетчик, и удалять все что до пробела и его самого
ничего у меня опять не получается. два или больше пробела считает тоже как слово.

Последний раз редактировалось Stilet; 15.12.2010 в 11:28.
Evgesha вне форума
Старый 20.03.2009, 16:34   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if (s[i]=' ')
Нехорошо колво пробелов считать : Вот фраза: "Привет (тут 30 пробелов) Пацан"
Сколько твоя прога слов насчитает?
Так кузявее будет:
Код:
var s: string; k,i:integer;
begin
      writeln('vvedite stroky simvolov, v kontce postavte tochky :');
      readln(s);k:=1;
      if (s='.') or (s='')or (s=' ') then writeln('ne verniy vvod') else begin
      for i:=1 to length(s)-1 do
      if (s[i]=' ')and(s[i+1]<>' ') then k:=k+1;
      writeln('v vvedennoy stroke slov = ',k);  end ;
      readln;
end.
I'm learning to live...
Stilet вне форума
Старый 20.03.2009, 16:42   #5
Evgesha
 
Регистрация: 15.03.2009
Сообщений: 9
По умолчанию

Спасибо, огромное! Все правильно считает, но если ввести два пробела и потом точку, то пишет, что 2 слова. Что делать?
Evgesha вне форума
Старый 20.03.2009, 16:51   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что делать?
Добавить в условие отсеивание точки )
I'm learning to live...
Stilet вне форума
Старый 20.03.2009, 16:59   #7
Evgesha
 
Регистрация: 15.03.2009
Сообщений: 9
По умолчанию

так?

Код:
uses crt;
var s: string; k,i:integer;

begin  clrscr;
      writeln('vvedite stroky simvolov, v kontce postavte tochky :');
      readln(s);k:=0;
      {Delete(s,Pos('.',s),length(s)-Pos('.',s));}
      if (s='.') or (s='')or (s=' ') then writeln('ne verniy vvod') else begin
      for i:=1 to length(s)-1 do
      if (s[i]=' ')and(s[i+1]<>' ')and (s[i]<>'.') then k:=k+1;
      writeln('v vvedennoy stroke slov = ',k);  end ;
      readln;
end.
Evgesha вне форума
Старый 20.03.2009, 17:05   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Работает? Если нет то луче так:
Код:
 if (s[i]=' ')and not (s[i+1] in [' ','.']) then k:=k+1;
I'm learning to live...
Stilet вне форума
Старый 20.03.2009, 17:11   #9
Evgesha
 
Регистрация: 15.03.2009
Сообщений: 9
По умолчанию

Спасибо! Но вот сейчас почему-то другая проблема - ввела несколько слов и с кучей пробелом между ними, получилось слов на 1 меньше, чем на самом деле.

Все работает!!! Спасибо огромное, Stilet!

У меня опять вопрос! вот если я ввожу сначала два (или несколько) пробелов, то тогда программка считает на 1 слово больше! Что не так? Помогите, пожалуйста!

Код:
var s: string; k,i:integer;

begin  clrscr;
      writeln('vvedite stroky simvolov, v kontce postavte tochky :');
      readln(s);k:=1;
      if (s='.') or (s='')or (s=' ') then writeln('ne verniy vvod') else begin
      for i:=1 to length(s)-1 do
      if (s[i]=' ')and not (s[i+1] in [' ','.']) then k:=k+1;
      writeln('v vvedennoy stroke slov = ',k);  end ;
      readln;
end.

Последний раз редактировалось Stilet; 15.12.2010 в 11:29.
Evgesha вне форума
Старый 20.03.2009, 17:44   #10
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Значит, нужно правильно обрабатывать начало строки. Я из этих соображений вместо s[i - 1] использую временную переменную, которую можно инициализировать пробелом.

А ещё в данном случае можно вручную добавить пробел в начало строки.

P. S. Здесь уже дали совет, как избавиться от точки.

P. P. S. Почему транслитом?
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить в алфавитном порядке список всех слов, встречающихся в тексте, и количество этих слов. KAPAHDAW Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2009 01:19
Количество разных слов в тексте) Если можно сразу код pascal1994 Помощь студентам 1 05.02.2009 10:06
посчет в тексте кол-во слов, гласных и согласных букв DiabloRVK Помощь студентам 4 01.12.2008 14:23
Число перемен знака в массиве. Количество слов в тексте. Pascal. Cartman18 Помощь студентам 1 10.12.2007 12:58
Поиск слов в тексте pleer Общие вопросы Delphi 5 23.09.2007 08:19