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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2015, 11:44   #1
Панdopa
 
Регистрация: 21.05.2015
Сообщений: 7
По умолчанию Алгоритмы сортировки Cи

Добрый день.
Не давно столкнулась с проблемой,и вот в чем она состоит.
Дан массив строк. Вывести на экран все слова, являющиеся анаграммами.
Буквы нужно сортировать по убыванию начиная с конца, а массив индексов нужно сортировать по убыванию начиная с конца.
Код я написала,вроде все работает,как мне кажется,как надо. Но у меня получился недочет, при выводе результата у меня получаются одинаковые слова,которых не должно быть.
Попыталась исправить это,но ничего не получается.Все равно получаются одинаковые слова. Прошу помочь с проблемой,указать на ошибку,или же какой нибудь полезный источник литературы.
Код представлен ниже.

Код:
#include "stdio.h"
#define SIZE 7
#define MAXDL 6

void sort (char a[MAXDL])//Функция сортировки букв по убыванию, начиная с конца
{
	int c, d;
	char temp;
	for (c = MAXDL-2; c > 0; c--)
	{
		for (d = c-1; d>=0; d--)
		{
			if (a[c] < a[d])
			{
				temp = a[c];
				a[c] = a[d];
				a[d] = temp;
			}
		}
	}
	return;
}

char SravStrok (char *a, char *b)
{
	while(*a==*b && *a!=0)
	{
		a++; b++;
	}
	return *a - *b;
}
void SortSlova (char *slova_index[2][SIZE], int slova_size)
{
	int c, p, g;
	char *q;
	char *q1;
	for(p=slova_size-1; p>0; p--)
	{
		// Найти наибольший элемент
		q=slova_index[1][p];
		q1=slova_index[0][p];
		g=p;
		for(c=p; c>=0; c--)
		{
			if( SravStrok( slova_index[1][c], q)>0 )
				{
					q=slova_index[1][c];
					q1=slova_index[0][c];
					g=c;//Индексу максимального элемента присваиваем новое значение
				}
		}
    // Поместить наименьший элемент на первую позицию  -- меняются не сами слова в массивах а указатели на них в массиве индексов
    slova_index[1][g]=slova_index[1][p];
	slova_index[0][g]=slova_index[0][p];
	slova_index[1][p]=q;
	slova_index[0][p]=q1;
	}
}
int main()
{
	int slova_size = SIZE;	//Объявляем переменную для хранения количества слов
	char slova[SIZE][MAXDL] = {"ТРАВА", "ВРАТА", "КАЗАН", "ОБРАЗ", "РЫСАК", "КАЗНА", "НАКАЗ"}; //Массив с заданными словами
	char sorted[SIZE][MAXDL];//Массив для хранения копии массива со словами в нем будут сортироваться буквы в слове
	char *slova_index[2][SIZE];//Массив для хранения указателей на строки в первых двух массивах
	int i,d;
	char *c;

	for (i = 0; i < slova_size; i++)
	{
		c = slova[i];
		for (d=0; d<MAXDL; c++, d++)
		{
			sorted[i][d] = *c;
		}
	}

	for (i = 0; i < slova_size; i++)
	{
		sort(sorted[i]);
	}

	for (i = 0; i < slova_size; i++)
	{
		slova_index[0][i]=slova[i];
		slova_index[1][i]=sorted[i];

		#ifndef DEBUG_SORT
			printf("%s--%s\n", slova_index[0][i], slova_index[1][i]);
		#endif
	}

	SortSlova (slova_index, slova_size);


	#ifndef DEBUG_SORT
		printf("\n");
		for (i = 0; i < slova_size; i++)
		{
			printf("%s-%s\n", slova_index[0][i], slova_index[1][i]);
		}
	#endif

	int flag_anagr=0;
	for (i = 1; i < slova_size; i++)
	{
		if( SravStrok( slova_index[1][i], slova_index[1][i-1])==0 )
		{
			if (flag_anagr == 0)
			{
				printf("\n%s ", slova_index[0][i-1]);
				flag_anagr=1;
			}
			printf("%s ", slova_index[0][i]);
		}
		else
		{
			flag_anagr=0;
		}
	}
	return 0;
}

Последний раз редактировалось Stilet; 17.06.2015 в 12:02.
Панdopa вне форума Ответить с цитированием
Старый 17.06.2015, 12:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
все слова, являющиеся анаграммами.
Чет не понял я как ты сверишь слово исходное и результирующее на предмет правильности?.
Если есть слово "Стоп", ты делаешь перестановку, получаешь "Сотп" - это считается искомым словом или нет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2015, 12:11   #3
Панdopa
 
Регистрация: 21.05.2015
Сообщений: 7
По умолчанию

Согласна,чуть чуть запутанно мое объяснение проблемы, но там получается что результат будет таким:
"ТРАВА--ААВРТ
ВРАТА--ААВРТ
КАЗАН--ААЗКН
ОБРАЗ--АБЗОР
РЫСАК--АКРСЫ
КАЗНА--ААЗКН
НАКАЗ--ААЗКН

ТРАВА-ААВРТ
ВРАТА-ААВРТ
КАЗАН-ААЗКН
КАЗНА-ААЗКН
НАКАЗ-ААЗКН
ОБРАЗ-АБЗОР
РЫСАК-АКРСЫ

ТРАВА ВРАТА
КАЗАН КАЗНА НАКАЗ"

И одинаков слов не должно получаться. (К примеру есть "Трава" и "Трава", и только один раз оно должно прописываться в результате)
Панdopa вне форума Ответить с цитированием
Старый 17.06.2015, 13:18   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так... а теперь у меня вопрос пожещще. У тебя в теме написано С#.
Тебе на шарпе нужно? или на Си? Или на Си++?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2015, 13:26   #5
Панdopa
 
Регистрация: 21.05.2015
Сообщений: 7
По умолчанию

Желательно просто на Си
Панdopa вне форума Ответить с цитированием
Старый 17.06.2015, 14:34   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это будет сложнее. Я заголовок темы исправил.
Первое, что приходит в голову: Заведи себе некую переменку *char.
Каждое полученное слово с помошью strstr() ищи в этой переменке, и если оно не найдено с помошью strcat() дописывай:
Код:
char *text="";
for(бла-бла){
 s=слово-анаграмма
 if(!strstr(s,text)) {text=strcat(text,s); text=strcat(text," ");}
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2015, 15:06   #7
Панdopa
 
Регистрация: 21.05.2015
Сообщений: 7
По умолчанию

Спасибо большое,сейчас попробую
Панdopa вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка.Алгоритмы сортировки.Язык си. East Undia Trading Помощь студентам 6 14.05.2014 22:42
Алгоритмы сортировки пирамидальный(кучей) и быстрой сортировки (с++) mmd12 Помощь студентам 4 17.05.2012 14:14
Алгоритмы сортировки массивов С++ Sunless Помощь студентам 1 29.03.2011 17:10
C++ алгоритмы сортировки 1ok Помощь студентам 5 18.09.2010 15:27
Алгоритмы сортировки и поиска информации jedi1990 Помощь студентам 1 22.09.2009 12:35