Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ кол-во слов в тексте

Автор: tigra 17.10.2004 0:50

Задача на ваше профессиональное рассмотрение:
Подсчитать количество слов в тексте,которые содержат одинаковое кол-во букв.
Слова в тексте разделяются символом ' '
'.' - признак конца строки.

Текст вводится с клавиатуры. Не могу сделать самое главное - разбить текст на слова... Помогите чем могите.

Автор: GoodWind 17.10.2004 10:58

что разделяет слова в тексте ? пробелы, следовательно каждый пробел это конец слова, т.е. если ты встречаешь пробел, значит текущее слово кончилось
на этом принципе и отделяй слова друг от друга.

Автор: Altair 17.10.2004 12:11

Эх, такая тема раз в году точно встречается!
Надо в FAQ будет выложить.

Код

var
s:string;
i:byte;
sl:byte;
begin
readln(s);
for i:=1 to length(s) do If s[i]=' ' then inc(sl);
writeln(sl);
end.

Вот и вся прога.

Автор: Amro 17.10.2004 14:26

Хм smile.gif
Oleg_Z там ведь написано

Цитата
количество слов в тексте, которые содержат одинаковое кол-во букв

А у тебя идёт просто подсчёт всех слов!!!
Тута надо по-другому, к примеру используя дочерний массив, в который будем заносить число букв в слове, мы заносим в массив кол-во букв первого слова, далее берём второе слово, подсчитываем в нём кол-во букв и смотрим есть ли такое число в массиве, если есть то накручиваем переменную с кол-вом слов, если нет то заносим новое число в массив..... и так до конца...

Автор: Altair 17.10.2004 14:32

Ах, да, пардон...
так, а тогда условие не полное!
например строка:

Код
123 asc asd 2345 отвр

сколько в ней таких слов?
Смотря по какой длинне считать!
Если 3-х символьных, то 3 а если из 4 символов, то 2!

Число символов вводится отдельно или смотрится по первой паре?

Автор: Amro 17.10.2004 14:39

Oleg_Z Может имеется ввиду считать слова, которые встречаются в тексте более одного раза. К примеру такая строка, независимо от длины
""xxx xx x xx x xxx xxx xx xxxxx"" тыды кол-во тут равно 8.....

Автор: Altair 17.10.2004 14:58

короче говоря тут не совсем ясно условие!

Автор: tigra 17.10.2004 15:15

В задаче этого не скозано, но по-моему кол-во букв(n) тоже вводится с клавиатуры.
Кажется, тут это можно сделать двумя циклами:
один выделяет слова из текста

Код
until s[i]='.'
,
а другой их считает
Код
if length(sl)=n then x:=x+1
.
Кол-во слов неопределенное (сколько получится), так что я не знаю как их называть и отличать друг от друга...

Автор: Amro 17.10.2004 15:36

Цитата
if length(sl)=n then x:=x+1

Это что такое ты написал??? sl Это что за строка??
Думаю так, если имеется ввиду кол-во букв в слове введённое с клавы, тады будет что то типа того
Код

var
st:string;
i,kol,kol_slov:byte;
s:byte;
begin
readln(st); {сама вводимая строка}
readln(kol_slov); {кол-во букв в слове}
for i:=1 to length(st) do begin If st[i]<>' ' then inc(s)
else if s=kol_slov then inc(kol);
if st[i]=' ' then s:=0; end;
if kol<2 then kol:=0;{если встречается один раз тады колич =  0}
writeln(kol);
end.

Автор: BlackShadow 19.10.2004 1:46

Я же это уже пиал где-то когда-то кому-то...

Автор: Флогримм 19.10.2004 11:09

Цитата(Oleg_Z @ 17.10.04 7:11)
Код

var
s:string;
i:byte;
sl:byte;
begin
readln(s);
for i:=1 to length(s) do If s[i]=' ' then inc(sl);
writeln(sl);
end.

Вот и вся прога.

а как быть, если нет условия разделения слов символом пробела?
что, если мы имеем строку вида 'xxxxxсловоxxxxxxxслово1xxxслово2xx', где x - пробел, как подсчитать кол-во слов в такой строке?

Автор: Altair 19.10.2004 11:31

Сначала удали все лишние пробелы, отанется по одному разделяющему пробелу, затем применяй вышеукащанную схему. Элементарно, Ватсон smile.gif)

Автор: xds 19.10.2004 12:30

Цитата(Oleg_Z @ 19.10.04 7:31)
Сначала удали все лишние пробелы

Удалять слишком тяжело - лучше пропускать...

Автор: Altair 19.10.2004 13:02

Удалять тяжело??
Чего сложного-то?
Ну вобщем пропускать тоже можно.
Тогда можно еще одну переменную логическую завести, и чуточку модернизировать алгоритм вышеуказанный smile.gif

Автор: Флогримм 20.10.2004 10:27

если удалять, получится что-то вроде вот этого

Код
var
s:string;
i:byte;
sl:byte;
begin
readln(s);
while pos('  ',s)<>0 do delete(s,pos('  ',s),2);
if s[1]=' ' then delete(s,1,1);
if s[length(s)]=' ' then delete(s,10,1);
writeln(s);
for i:=1 to length(s) do If s[i]=' ' then inc(sl);
writeln(sl+1);
end.


я думаю, что если в начале и конце строки нет пробелов, тогда кол-во слов в троке будет равно sl+1 т.к. пробелов всегда на один меньше

Автор: APAL 20.10.2004 13:47

Вот, писал прогу давно и не помню уже для каких целей... smile.gif
STATIC.PAS - насколько я помню, подсчитывает статистику слов. Вроде бы считает количество повторений.

Короче давно это было, но покапайтесь, может чего найдете... smile.gif

P.S.: Запаковано WinRar 3.30


Прикрепленные файлы
Прикрепленный файл  STATIC.rar ( 46.38 килобайт ) Кол-во скачиваний: 204