Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 25.01.2019, 17:36   #11
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

Помогите пожалуйста завтра надо сдать а я так то плохо знаю С++ а C# нормально но у меня не выкладывается алгоритм как Анаграммы написать на C# если бы я знал хорошо С++ я бы не обращался за помощь спасибо за ранние тем людям которые смогут мне помочь !!
Nikita2019 вне форума
Старый 25.01.2019, 17:37   #12
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Он не решает поставленной задачи. Единственое, что он делает это вводит слова для аннаграм и выводит отсортировав.
p51x вне форума
Старый 25.01.2019, 17:38   #13
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

Тогда сможете решит за меня ?
Nikita2019 вне форума
Старый 25.01.2019, 17:38   #14
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

Написать программу «Анаграммы» (anagrams), которая реализует популярную словесную игру. Игра «Анаграммы» очень интересная и необычная игра в которой нет ни картинок ни слов. Суть игры (программы) заключается в следующем: формируется группа слов, которую можно реализовать в виде кортежа (tuple), компьютер случайным образом выбирает одно из слов и случайным образом переставляет в нём буквы, а затем представляет пользователю (игроку). Цель игрока – угадать выбранное компьютером слово.

Добавлено через 5 минут
Но сделать это с помощью процедуры.

Добавлено через 5 минут
Игра со словами. Анаграмма — это слово, в котором перепутаны буквы, например, "ШАДОЛЬ" - это "ЛОШАДЬ", а "ТИВОНКР" - это "ВТОРНИК". Программа рассчитана на двух игроков, соревнующихся друг с другом. В качестве слов используются только имена существительные, нарицательные, в единственном числе, в именительном падеже. Первый игрок вводит с клавиатуры слово длиной не менее пяти, но не более восьми букв (постарайтесь сделать так, чтобы во время ввода на экране вместо букв отображались символы *). Затем компьютер определяет длину введенного слова, разбирает его на отдельные символы, заносит их в массив, откуда случайным образом выводит на экран. Соперник в течение 2-х минут (время отсчитывает компьютер) должен определить это слово. В случае правильного ответа (вводит его с клавиатуры) он получает 1 очко и сам загадывает слово первому игроку. Игра идет до 5 очков. За неправильный ответ очки не начисляются. Безусловно, приветствуется дружественный интерфейс: запрос и обращение к игрокам по именам, вывод на экран правил игры, графическое и звуковое оформление.

Добавлено через 6 минут
Помогите исправит ошибки в данном коде на С# только с учётом того что это должно быть всё через процедуру и загрузка из файла должна быть там где хранятся наши слова анаграммы. Как мне это сделать код хотел переписать с С++ на C#?
Nikita2019 вне форума
Старый 25.01.2019, 17:44   #15
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

А как в C# в строках слова проверять посимвольно, чтоб выдавал правильный результат!
Nikita2019 вне форума
Старый 25.01.2019, 17:45   #16
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

Я думаю так только как это реализовать на C#
Поскольку для анаграммы порядок букв неважен, остаются только такие характеристики слова, как использованные буквы и их количество.

Самый простой и быстрый вариант - это испортить словарь: отсортировать внутри каждого слова все буквы по алфавиту, а затем сами слова по по алфавиту. Остальное тривиально.

Если словарь портить нельзя...

Слова с разным количеством букв анаграммами быть не могут - проверяете только слова одинакового размера. Для каждого слова создаете массив счетчиков букв (33, если не различать регистр). Если для двух слов состояния счетчиков букв совпали - они являются анаграммой.

Проходите в цикле по списку слов (словарю) и за квадратичное время находите все анаграммы.

Если словарь предварительно отсортировать по размеру и по алфавиту, то будет быстрее :-)

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

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

В любом случае, задача сводится к построению метрики (оценке расстояния между словами), нечувствительной к порядку букв, но чувствительной к самим буквам и их количеству. Слова с нулевым расстоянием являются анаграммами.
Nikita2019 вне форума
Старый 25.01.2019, 17:46   #17
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

Вот сам код у меня только переворачивает слова,мне нужно чтобы перебирал буквы

Код:
using System;

static int Main()
{
	setlocale(LC_ALL,"rus");
   string[] @base = {"мор", "туш", "шут", "ром", "хан", "хна", "кот", "ток", "воз", "зов", "гам", "маг", "полк", "клоп"};

   uint size = sizeof(@base) / sizeof@base;

   for (uint i = 0; i < size-1; ++i)
   {
	  string word = @base[i];
	  reverse(word.GetEnumerator(), word.end());

	  for (uint j = i + 1; j < size; ++j)
	  {
		 if (word == @base[j])
		 {
			 Console.Write("Anagramm");
			 Console.Write("\n");
			Console.Write(@base[i]);
			Console.Write("-");
			Console.Write(@base[j]);
			Console.Write("\n");
			break;
		 }
	  }
   }

   system("pause");

   return 0;
}
Nikita2019 вне форума
Старый 25.01.2019, 17:46   #18
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

как мне это реализовать ?
Nikita2019 вне форума
Старый 25.01.2019, 17:48   #19
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

но с учётом того что Реверсировать ничего не нужно. И переставлять ничего не нужно. От каждого слова нужно построить числовую характеристику ("вес"). И их сравнить.

Вот, начиная с 21 строки, все выбрасываете и делаете как написано в #2.

Пусть, например, ваш алфавит состоит из 5 букв: 'к', 'м','о','р', и 'т'. Тогда, (основание) > 5 - это 6. Присваиваем нашим буквам веса: 'к' - 1, 'м' - 6, 'о' - 36, 'р' - 216, 'т' - 1296

Вес слова "мор": 6 + 36 + 216 = 258
Вес слова "ром": 216 + 36 + 6 = 258
Вес слова "кот": 1 + 36 + 1296 = 1333
Вес слова "ток": 1296+ 36 + 1 = 1333

Веса "мор" и "ром" совпали - анаграмма. Веса "кот" и "ток" совпали - анаграмма. Слова разного размера не проверяете.

Если не учитывать регистр, букву 'ё', и ограничить максимальный размер слова 32 символами, то для русского алфавита 33 будет подходящим основанием.
Nikita2019 вне форума
Старый 25.01.2019, 17:52   #20
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

знаю только что нужно ещё сравнить два слова на совпадения букв
строка - это массив символов. Пробегите по этому массиву и вложенным циклом сопоставляйте текущее значение со всеми остальными или предыдущими. результаты фиксируйте. потом уберите повторения. по окончанию выводите результат.
Nikita2019 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить процедуру, которая во введенной строке заменяет все буквы "а" на "*". Помогите написать программу в Pascal Tanya121 Помощь студентам 4 07.11.2018 17:31
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" Бахтиёр1916 Windows 1 05.04.2017 12:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
Для заданной строки определить все входящие в неё символ. Например: строка "abccbbabbac" состоит из символов "a", "b" и "c" Sandakan01 Помощь студентам 1 24.02.2016 03:20