На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Сочетания из слов строк , представление заданных строк сочетаниями составляющих их слов
    Помогите, пожалуйста.
    Задача
    Дан текстовый файл со строками, представляющими наборы слов из букв и цифр.
    Написать программу на паскале для генерации сочетаний из слов этих строк.
    Очень прошу помочь с реализацией в коде.
      Pascal то какой?

      "...для генерации сочетаний из слов этих строк" - И сочетаний каких?

      Например, где-то в тексте есть слово, которое в произвольных местах встречается N раз.
      При генерации результата это слово (наряду с другими словами входного текста) должно быть
      воспроизведено все N раз в произвольном порядке? (т.е. просто переставить слова всего текста местами)?
      - или достаточно только один раз его воспроизвести (т.е. просто словарь составить встречающихся слов)?
      - или произвольное количество раз? (в том числе - ни одного - т.е. некоторый новый текст произвольной длины,
      составленный из подмножества выявленного словаря)?

      Все таки как-то нечетко сформулирована задача...
      Уточните, пожалуйста, что же Вам на самом деле нужно.
        Barklay, Строка состоит из N слов. Надо вывести сочетания этих слов по m из N.
        m - количество слов в одном блоке генерируемого сочетания.
        m < N, а не равно, иначе получится перестановка. Сгенерировав все сочетания
        по по m из N одной строки перейти к следующей строке, и т.д. Строк много.
        Компилятор - Pascal ABC.
          Ни фига не понял! :-?

          Давай на примере - есть строка из 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-вообще отсутствует)

          Какой вариант на самом деле нужен? Ткни пальцем!
          Сообщение отредактировано: Barklay -
            Barklay, надо по твоему 2-му варианту. Привожу пример входного файла и
            файла ожидаемого результата:
            , Прикреплённый файлoutput.txt (4,69 Кбайт, скачиваний: 308)
              Прикреплённый файлПрикреплённый файлinput.txt (275 байт, скачиваний: 226)
                Ну вот, с входными/выходными данными теперь - другое дело! Сразу бы так... :victory:

                Ну и в чем у тебя проблема? Задачка - динамическое разбиение очередной строки из файла на слова и
                на классическую комбинаторику (на сочетания без повторений).

                Первая подзадача - разбиение очередной входной строки на слова - либо используй динамические массивы,
                либо какие-нибудь коллекции - уж не знаю, есть ли они в твоей версии Pascal ABC (какая кстати?),
                а самому ставить его влом. На худой конец, если там их нет или не умеешь ими пользоваться - определи
                статический массив строк с запасом:
                ExpandedWrap disabled
                   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 - номер строки шаблона:
                ExpandedWrap disabled
                  ABCD
                  ABCE
                  ABCF
                  ...
                  и т.д.

                Ну и в цикле по каждой строке шаблона и каждой литере выводишь результат, заменяя его литеры словами из массива: Arr[Sh[j]],
                где j - номер литеры в очередной строке шаблона, т.е. строка по шаблону 'ABCD' заменяется на (развертка цикла по литерам):
                ExpandedWrap disabled
                  Arr['A'] +' '+ Arr['B'] +' '+ Arr['C'] +' '+ Arr['D']

                PS: Сам то много сделал? Где остановился? В чем затык?
                Сообщение отредактировано: Barklay -
                  У меня только и получается эти несколько строк по три.
                    Что не получается? Комбинаторика или разбиение на слова?
                      С комбинаторикой и словами в порядке. Вот только ошибка: индекс уходит за пределы массива. Просто нужен другой вариант кода.
                        Ну тогда давай, выкладывай код!
                        Ставить диагноз по таким скупым сообщениям - неблагодарная задача!

                        И если код большой - то укажи место, где она появляется, потому что
                        прогнать самостоятельно без соответствующего компилятора не получится (а ставить его пока я не хочу).
                        Короче - дай всю инфу об ошибке: о месте в программе, условиях возникновения - какие параметры и скриншот ошибки!
                          Выкладывал уже
                            сандр, где?

                            Я видел только input/output txt-шники
                            Укажи, плз, номер сообщения!
                            Сообщение отредактировано: Barklay -
                              15 октября 2013, 18:05
                                Barklay, ты смотрел сообщение от указанной даты?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0367 ]   [ 19 queries used ]   [ Generated: 12.05.24, 15:34 GMT ]