Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 7

Блок-схема генератора слов из заданного слова

29.09.2016, 12:21. Показов 2096. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый господа) нам на лабораторке задали, на первый взгляд, не сложное задание, но я своими женскими мозгами до конца не могу ее осилить.
Задача такая: составить блок схему генератора слов из заданного слова, причем генерируемые слова должны быть осмысленные. Для этого предполагается что имеется файл со списком уже составленных осмысленных слов из заданного слова. В блок схеме операции описать на языке pascal или с++.

Я сначала хотела работать с заданным словом как с массивом элементов, каждый элемент массива - это одна буква слова. Тогда нужно взять количество символов слова (N) и в цикле от сделать все возможные переборы (N! раз), каждый полученный результат сравнить со словами в из файла, совпадения вывести пользователю, снова зайти в цикл и уже по гонять по N-1 элементам.
Однако возникла проблема именно с перебором - как реализовать перебор ВСЕХ возможных вариантов перестановки букв.

Я уверена что ответ прост, просто подопните в нужном направлении)
Может у кто-то видит по другому решение это задачи)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2016, 12:21
Ответы с готовыми решениями:

Найти в строке все одинаковые слова и удалить все повторения слов (+ блок схема)
Дана строка из произвольных слов. Найти все одинаковые слова и удалить все повторения слов.

Подсчитать количество книг заданного автора (Блок-схема)
program Library1; (****************************************************** * Задача: в файле данных записаны сведения о книгах: * *...

Замена заданного символа в строке на другой заданный символ (блок-схема)
алгоритм замены заданного символа в строке на другой заданный символ. Помогите нарисовать данный алгоритом. Сама не знаю как рисовать...

3
Модератор
Эксперт функциональных языков программирования
3087 / 2236 / 466
Регистрация: 26.03.2015
Сообщений: 8,768
29.09.2016, 12:36
Дано слово длины N. В цикле по n от 1 до N: выбираем n букв всеми возможными способами и находим все возможные перестановки выбранных букв. Каждую полученную комбинацию проверяем по словарю.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
29.09.2016, 14:19
Комбинаторный взрыв

Цитата Сообщение от marikaf_m Посмотреть сообщение
по-другому
Берете очередное слово из словаря и проверяете, содержит ли оно только буквы из заданного и в подходящем количестве.
0
Модератор
Эксперт функциональных языков программирования
3087 / 2236 / 466
Регистрация: 26.03.2015
Сообщений: 8,768
29.09.2016, 15:42
Лучший ответ Сообщение было отмечено marikaf_m как решение

Решение

Цитата Сообщение от marikaf_m Посмотреть сообщение
Однако возникла проблема именно с перебором - как реализовать перебор ВСЕХ возможных вариантов перестановки букв.
C# Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
void Main()
{
    AllWords("aabc", new HashSet<string> {"ab"}).Dump();;
}
 
IEnumerable<string> AllWords(string word, HashSet<string> dictionary)
{
    char[] letters = word.ToCharArray();
    Array.Sort(letters);
    StringBuilder sb = new StringBuilder(letters.Length);
    
    for (int m = 1; m < word.Length; m++)
    {
        // создаём самое маленькое "число"
        int[] positions = new int[m];
        for (int i = 0; i < positions.Length; i++)
            positions[i] = m - i - 1;
 
        do
        {
            sb.Clear();
            for(int j = positions.Length - 1; j >= 0; j--)
                sb.Append(letters[positions[j]]);
            string s = sb.ToString(); 
            
            if(dictionary.Contains(s))
                yield return s;
        }
        while (Next(positions, letters)); // следующее число
    }
}
 
bool Next(int[] a, char[] letters)
{
    // перебираем позиции и пробуем увеличить цифру
    for (int i = 0; i < a.Length; i++)
    {
        // увеличиваем цифру на единицу, пока не получим подходящую
        for (int j = a[i] + 1; j < letters.Length; j++)
        {
            if (letters[j] == letters[a[i]]) 
                continue; // равна текущей
            if(Used(a, i + 1, j)) 
                continue; // используется слева от данной позиции   
            // подходит 
            a[i] = j;
            // заполняем младшие разряды самыми маленькими неиспользованными цифрами
            for (int l = 0, k = 0; l < i; l++)
            {
                while (Used(a, i, k))
                    k++;
                a[l] = k++;
            }
            return true;
        }
    }
    // не удалось увеличить цифру ни в одной из позиций
    return false;
}
 
bool Used(int[] a, int pos, int n)
{
    for(int i = pos; i < a.Length; i++)
        if(a[i] == n)
            return true;
    return false;
}
Добавлено через 4 минуты
Перебор можно оптимизировать. Для этого нужно искать в словаре начало слова.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.09.2016, 15:42
Помогаю со студенческими работами здесь

Блок-схема: Из файла удалить слова-палиндромы
Составить блок схему задачи по коду: условие: Из файла удалить слова-полиндромы using System; using System.Collections.Generic; ...

Блок-схема: Удалить из последовательности повторные слова.
Задача:Дана последовательность,содержащая произвольное количество слов. Слова разделены запятой,за последним точка.Удалить из...

Блок-схема: Из заданного массива V(n) сформировать массив B, элементы которого находятся по формуле
Из заданного массива V(n) сформировать массив B, элементы которого находятся по формуле bi=(ai+ai+1+ai+2)/3 uses crt; Var...

Вычислить сумму элементов массива больших заданного. Очень нужна блок схема
Задан массив целых чисел.Вычислить сумму элементов которые больше заданного числа.

Определение самого длинного слова строки (блок-схема)
Добрый вечер всем. Я начинаю изучать паскаль, пытаюсь разобраться с блок схемами. Преподаватель у меня, мягко скажем &quot;не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер