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

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

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

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

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

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

Ребята, помогите написать программу, пожалуйста!

Написать программу «Анаграммы» (anagrams), которая реализует популярную словесную игру. Игра «Анаграммы» очень интересная и необычная игра в которой нет ни картинок ни слов. Суть игры (программы) заключается в следующем: формируется группа слов, которую можно реализовать в виде кортежа (tuple), компьютер случайным образом выбирает одно из слов и случайным образом переставляет в нём буквы, а затем представляет пользователю (игроку). Цель игрока – угадать выбранное компьютером слово.
Nikita2019 вне форума
Старый 25.01.2019, 16:54   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Таки в чем проблема? Какие ошибки выдал компилятор/интерертатор? Какоя язык используете?
p51x вне форума
Старый 25.01.2019, 17:04   #3
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

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

C# пробовал с С++ переделать код на C# не получается можете помочь пожалуйста ?
Nikita2019 вне форума
Старый 25.01.2019, 17:06   #5
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

Код:
using System;
using System.Collections.Generic;

//C++ TO C# CONVERTER NOTE: The following #define macro was replaced in-line:
//ORIGINAL LINE: #define DIFFERENCE ('A' - 'a')
private bool IsBigAlpha(char a)
{
	return (a >= 'A' && a <= 'Z');
}
private bool IsSmalAlpha(char a)
{
	return (a >= 'a' && a <= 'z');
}
private string edit(string str)
{ // приводим всё к нижнему регистру и  убираем лишние символы
	string rez = "";
	foreach (char a in str)
	{
		if (IsBigAlpha(a))
		{
			a -= DIFERENSE;
		}
		if (IsSmalAlpha(a))
		{
			rez += a;
		}
	}
	return rez;
}
private bool comp(Tuple<string, string> a, Tuple<string, string> b)
{ // сравнитель по второй строке
	return a.Item2 < b.Item2;
}
static int Main()
{
	List<Tuple<string, string>> words = new List<Tuple<string, string>>(); // словарь
	string str;
	while (str = Console.ReadLine())
	{
		Tuple<string, string> word = new Tuple<string, string>(null, null); // слово
		word.Item1 = str;
		word.Item2 = edit(str);
		sort(word.Item2.begin(), word.Item2.end()); // сортируем буквы в слове
		words.Add(word);
	}
//C++ TO C# CONVERTER TODO TASK: The 'Compare' parameter of std::sort produces a boolean value, while the .NET Comparison parameter produces a tri-state result:
//ORIGINAL LINE: sort(words.begin(), words.end(), comp);
	words.Sort(comp); // сортируем словарь по анаграммам
	List<int> indeces = new List<int>(); // массив индексов
	int Count = 0;
	int MaxCount = 0;
	int n = words.Count;
	for (int i = 1; i < n; i++)
	{
		if (words[i - 1].Item2 == words[i].Item2)
		{
			Count++;
		}
		else
		{
			if (Count > MaxCount)
			{
				MaxCount = Count;
				indeces.Clear();
				indeces.Add(i - 1);
			}
			else if (Count == MaxCount)
			{
				indeces.Add(i - 1);
			}
			Count = 0;
		}
	}
	if (Count > MaxCount)
	{ // обрабатываем последний найденный набор анаграмм
				MaxCount = Count;
				indeces.Clear();
				indeces.Add(n - 1);
	}
	else if (Count == MaxCount)
	{
		indeces.Add(n - 1);
	}
	bool first = true;
	foreach (int index in indeces)
	{ // выводим
		if (!first)
		{
			Console.Write("\n");
			Console.Write("---------------");
			Console.Write("\n");
		}
		else
		{
			first = false;
		}
		for (int i = 0; i <= MaxCount; i++)
		{
			if (i != 0)
			{
				Console.Write("\n");
			}
			Console.Write(words[index - i].Item1);
		}
	}
	return 0;
}
Nikita2019 вне форума
Старый 25.01.2019, 17:09   #6
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

Вот сам код на С++ как мне его реализовать точно так же на С# только с учётом того что это должно быть всё через процедуру и загрузка из файла должна быть там где хранятся наши слова анаграммы. Как мне это сделать ?
Код:
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#define DIFFERENCE ('A' - 'a') // разность регистров
using namespace std;
bool IsBigAlpha(char a) {
	return (a >= 'A' && a <= 'Z');
}
bool IsSmalAlpha(char a) {
	return (a >= 'a' && a <= 'z');
}
string edit(const string &str) { // приводим всё к нижнему регистру и  убираем лишние символы
	string rez = "";
	for(char a : str) {
		if (IsBigAlpha(a)) a -= DIFERENSE;
		if (IsSmalAlpha(a)) rez += a;
	}
	return rez;
}
bool comp(const pair<string, string> &a, const pair<string, string> &b) { // сравнитель по второй строке
	return a.second < b.second;
}
int main() {
	vector <pair<string, string>> words; // словарь
	string str;
	while (getline(cin, str, '\n')) {
		pair<string, string> word; // слово
		word.first = str;
		word.second = edit(str);
		sort(word.second.begin(), word.second.end()); // сортируем буквы в слове
		words.push_back(word);
	}
	sort(words.begin(), words.end(), comp); // сортируем словарь по анаграммам
	vector <int> indeces; // массив индексов
	int Count = 0, MaxCount = 0, n = words.size();
	for (int i = 1; i < n; i++) {
		if (words[i-1].second == words[i].second) Count++; 
		else {
			if (Count > MaxCount) { 
				MaxCount = Count;
				indeces.clear();
				indeces.push_back(i-1);
			} else if (Count == MaxCount) indeces.push_back(i-1);
			Count = 0;
		}
	}
	if (Count > MaxCount) {  // обрабатываем последний найденный набор анаграмм
				MaxCount = Count;
				indeces.clear();
				indeces.push_back(n-1);
	} else if (Count == MaxCount) indeces.push_back(n-1);
	bool first = 1;
	for (int index : indeces) { // выводим
		if (!first) cout << endl << "---------------" << endl;
		else first = 0;
		for (int i = 0; i <= MaxCount; i++) {
			if (i != 0) cout << endl;
			cout << words[index - i].first;
		}
	}
	return 0;
}
Nikita2019 вне форума
Старый 25.01.2019, 17:09   #7
Nikita2019
Пользователь
 
Регистрация: 25.01.2019
Сообщений: 26
По умолчанию

Надо сделать на C# как я не знаю помогите пожалуйста можете кто нибудь сможет переписать код с C++ на C# ?
Nikita2019 вне форума
Старый 25.01.2019, 17:23   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Что это за код? Зачем сортировать? Зачем свои isLetter, toLower и т.д.?
p51x вне форума
Старый 25.01.2019, 17:29   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

И зачем 5 постов один за одним? Есть кнопка ПРАВКА для добавки.
digitalis вне форума
Старый 25.01.2019, 17:34   #10
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