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

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

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

 
 Ответить  Открыть новую тему 
> вопрос, строки
сообщение
Сообщение #1


Новичок
*

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

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


Ввести 2 строки (это я знаю как делать), найти кол-во слов (это тоже вроде умею) и
найти кол-во одинаковых слов (КАК?)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Клавиатурный тиран
**

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

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


Можно использовать следующую структуру:
type
TWordCount=record
word:string;
count:integer;
end;
Var
Ms:array [1..n] of TWordCount;

Алгоритм:
Выделяем 1 слово, записываем в ms[i].word, inc(ms[i].count).
Выделяем 2 слово, если одно совпадает с каким нибудь ms[j].word, то делаем inc(ms[j].count), в противном случае делаем так же, как с первым словом.
В конце концов имеем массив записей, который считает кол-во всех слов. Если ms[i].count>1, то ms[i].word является повторяющимся словом с кол-вом повторений ms[i].count.
Может кто предложит более мощный вариант с меньшей затратой памяти, ибо я использовал ее безжалостно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Цитата(Sozialist @ 25.06.2008 13:43) *

Можно использовать следующую структуру:
type
TWordCount=record
word:string;
count:integer;
end;
Var
Ms:array [1..n] of TWordCount;

Алгоритм:
Выделяем 1 слово, записываем в ms[i].word, inc(ms[i].count).
Выделяем 2 слово, если одно совпадает с каким нибудь ms[j].word, то делаем inc(ms[j].count), в противном случае делаем так же, как с первым словом.
В конце концов имеем массив записей, который считает кол-во всех слов. Если ms[i].count>1, то ms[i].word является повторяющимся словом с кол-вом повторений ms[i].count.
Может кто предложит более мощный вариант с меньшей затратой памяти, ибо я использовал ее безжалостно.


Что-то сложновато, а можно ещё раз и по пунктам?
Ну, например, вот как прописать следующее:
1)находим слова
2)записываем найденные слова в отдельные массивы (а если этих слов много, то что делать?)
3)сравниваем полученные массивы со словами
4)находим кол-во одинаковых слов
5)выводим результат (сколько одинаковых слов было найдено)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Любым способом отсюда: Разбиение на слова. Все способы. разбиваешь обе строки на слова, и потом проходишь по одному массиву (или списку, что ты там выберешь), и проверяешь, есть ли текущее слово во втором массиве (или списке). Если есть - то увеличиваешь счетчик, и переходишь к след. слову в первой последовательности...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


function Count(Const s, w: String; start: Byte): Byte;
const
limits = ['.', ',', ';', '!', '?', ' '];
var
p: Byte;
begin
p:= Pos(w, Copy(s, start, 255));
if (start > length(s)) or (p = 0) then Count := 0
else if (((start + p - 2) = 0) or (s[ start + p - 2] in limits))
and (((start + p + length(w) - 2) = Length(s)) or (s[start + p + length(w) - 1] in limits))
then Count := 1 + Count(s, w, start + p + length(w) - 2) else Count := 0 + Count(s, w, start + p + length(w) - 2);
end;
begin
writeln(count('papa mama i doch mili mili papu s mamoi mama', 'mili',1));
readln;
end.


Вот программка, которая находит кол-во одинаковых слов. У меня такой вопрос: как её изменить так, чтобы:
1)можно было вводить строку не вот здесь: writeln(count('papa mama i doch mili mili papu s mamoi mama', 'mili',1)); , а во время выполнения самой программы
2)чтобы она искала не заданные слова, а искала слова сама и выводила их кол-во writeln(count('papa mama i doch mili mili papu s mamoi mama', 'mili',1));
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Клавиатурный тиран
**

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

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


2 требование разрушает данный тобой код. Еще раз см. сообщения номер 2 и 4. Это то, что тебе нужно.
А вводить строку во время программы просто:
Var
st:string;
Begin
readln(st);
writeln(count(st,1));
End.

Если этого не знаешь, то как собираешься решать задачу? Давай читай теорию.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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