Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.216.27.91] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Помогите, пожалуйста.
Задача Дан текстовый файл со строками, представляющими наборы слов из букв и цифр. Написать программу на паскале для генерации сочетаний из слов этих строк. Очень прошу помочь с реализацией в коде. |
Сообщ.
#2
,
|
|
|
Pascal то какой?
"...для генерации сочетаний из слов этих строк" - И сочетаний каких? Например, где-то в тексте есть слово, которое в произвольных местах встречается N раз. При генерации результата это слово (наряду с другими словами входного текста) должно быть воспроизведено все N раз в произвольном порядке? (т.е. просто переставить слова всего текста местами)? - или достаточно только один раз его воспроизвести (т.е. просто словарь составить встречающихся слов)? - или произвольное количество раз? (в том числе - ни одного - т.е. некоторый новый текст произвольной длины, составленный из подмножества выявленного словаря)? Все таки как-то нечетко сформулирована задача... Уточните, пожалуйста, что же Вам на самом деле нужно. |
Сообщ.
#3
,
|
|
|
Barklay, Строка состоит из N слов. Надо вывести сочетания этих слов по m из N.
m - количество слов в одном блоке генерируемого сочетания. m < N, а не равно, иначе получится перестановка. Сгенерировав все сочетания по по m из N одной строки перейти к следующей строке, и т.д. Строк много. Компилятор - Pascal ABC. |
Сообщ.
#4
,
|
|
|
Ни фига не понял!
Давай на примере - есть строка из 4-х слов: С1 С2 С1 С3 - первый элемент и третий повторяются (здесь С1-Слово1, С2-Слово2 и т.д.) При этом уникальных слов три: С1, С2, С3. Выше, в предыдущем сообщении я попытался уточнить, что же тебе нужно (уточнение условия задачи): Один из ответов по первому варианту (просто перестановка): С2 С3 С1 С1 Один из ответов по второму варианту (просто словарь): С2 С3 С1 (все элементы единожды в произвольном порядке) Один из ответов по третьему варианту (текст произвольной длины из подмножества словаря): С2 С2 С3 С2 С3 С3 С2 (С2-четыре раза, С3-три раза, С1-вообще отсутствует) Какой вариант на самом деле нужен? Ткни пальцем! |
Сообщ.
#5
,
|
|
|
Barklay, надо по твоему 2-му варианту. Привожу пример входного файла и
файла ожидаемого результата: , output.txt (4,69 Кбайт, скачиваний: 308) |
Сообщ.
#7
,
|
|
|
Ну вот, с входными/выходными данными теперь - другое дело! Сразу бы так...
Ну и в чем у тебя проблема? Задачка - динамическое разбиение очередной строки из файла на слова и на классическую комбинаторику (на сочетания без повторений). Первая подзадача - разбиение очередной входной строки на слова - либо используй динамические массивы, либо какие-нибудь коллекции - уж не знаю, есть ли они в твоей версии Pascal ABC (какая кстати?), а самому ставить его влом. На худой конец, если там их нет или не умеешь ими пользоваться - определи статический массив строк с запасом: var Arr : array['A'..'Z'] of string; и заполни его, разобрав очередную строку на слова. Почему такой странный "литерный" индекс - поясню ниже. Второй подзадачей (на сочетания) забит весь интернет. Вот первый попавшийся довольно быстрый и внятный алгоритм: http://guildalfa.ru/alsha/comment/reply/26 (он там внизу, последний, правда он на Delphi, но - понятный, рабочий и без "фокусов" при переносимости на твой Pascal ABC - я думаю). Это как вариант - может найдешь лучше! При помощи этого алгоритма для очередной входной строки, где M - определяется количеством слов в строке, а N - задаешь сам, получаешь шаблоны сочетаний N по М стандартных литер 'A'..'Z', которые этот алгоритм генерит самостоятельно. Это и есть литерные индексы в ранее приготовленном массиве слов. Вот эти шаблонные строки - Sh[i], где i - номер строки шаблона: ABCD ABCE ABCF ... и т.д. Ну и в цикле по каждой строке шаблона и каждой литере выводишь результат, заменяя его литеры словами из массива: Arr[Sh[j]], где j - номер литеры в очередной строке шаблона, т.е. строка по шаблону 'ABCD' заменяется на (развертка цикла по литерам): Arr['A'] +' '+ Arr['B'] +' '+ Arr['C'] +' '+ Arr['D'] PS: Сам то много сделал? Где остановился? В чем затык? |
Сообщ.
#8
,
|
|
|
У меня только и получается эти несколько строк по три.
|
Сообщ.
#9
,
|
|
|
Что не получается? Комбинаторика или разбиение на слова?
|
Сообщ.
#10
,
|
|
|
С комбинаторикой и словами в порядке. Вот только ошибка: индекс уходит за пределы массива. Просто нужен другой вариант кода.
|
Сообщ.
#11
,
|
|
|
Ну тогда давай, выкладывай код!
Ставить диагноз по таким скупым сообщениям - неблагодарная задача! И если код большой - то укажи место, где она появляется, потому что прогнать самостоятельно без соответствующего компилятора не получится (а ставить его пока я не хочу). Короче - дай всю инфу об ошибке: о месте в программе, условиях возникновения - какие параметры и скриншот ошибки! |
Сообщ.
#12
,
|
|
|
Выкладывал уже
|
Сообщ.
#13
,
|
|
|
сандр, где?
Я видел только input/output txt-шники Укажи, плз, номер сообщения! |
Сообщ.
#14
,
|
|
|
15 октября 2013, 18:05
|
Сообщ.
#15
,
|
|
|
Barklay, ты смотрел сообщение от указанной даты?
|