2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Сравнение нескольких переменных С\С++
Сообщение23.05.2010, 15:29 


13/09/09
72
Собственно решал задачки и возникла небольшая проблема, нужно сравнить несколько переменных по их значению. От 3 до $\infty$ переменных.
Понятно, что можно обойтись if'ами, но когда переменных много и нужно учитывать не только больше\меньшие значения, но еще и равные, код становится просто не читаемым.
Как временный вариант я сделал цикл, где каждая переменная декрементируется, каждую итерацию. Ну и соотвественно, чем раньше переменная вышла из гонки, тем она меньше.

Но это собственно от лукавого, должен быть нормальный способ, но я что то не как не могу его придумать :(
Помогите :(

P.S Вообще конечно можно организовать массив....Но это было бы не желательно.

 Профиль  
                  
 
 Re: Сравнение нескольких переменных С\С++
Сообщение23.05.2010, 15:49 


28/10/09
35
Нормальный способ --- это загнать их в массив (вектор) и отсортировать. Можно загнать в виде структур с полями [значение, ссылка на исходную переменную], тогда всегда можно будет установить связь. Непонятно, почему нежелательно. Жаба память душит, или что?

Есть ещё продвинутый способ. Написать кодогенератор варианта с ифами. После этого обфускаторы обычно не нужны...

 Профиль  
                  
 
 Re: Сравнение нескольких переменных С\С++
Сообщение23.05.2010, 16:05 


13/09/09
72
Цитата:
Нормальный способ --- это загнать их в массив (вектор) и отсортировать. Можно загнать в виде структур с полями [значение, ссылка на исходную переменную], тогда всегда можно будет установить связь. Непонятно, почему нежелательно. Жаба память душит, или что?

В массив нельзя по очень простой причине, эти переменные это длина чисел во внешнем файле. Числа идут по порядку и если я это загоню в массив и отсортирую ничего хорошего не получится. Можно конечно сделать два массива в одном значения в другом указатели на оригинальные переменные. Как вариант.

Кодогенератор с if'ами конечно не плохой вариант, но возможно этот кусок потом придется переписывать и я замучаюсь разбираться в этом.

Я просто думал, что я туплю где то и есть элементарный вариант....

 Профиль  
                  
 
 Re: Сравнение нескольких переменных С\С++
Сообщение23.05.2010, 16:20 
Заслуженный участник


19/07/08
1266
Nikita_b в сообщении #323073 писал(а):
В массив нельзя по очень простой причине, эти переменные это длина чисел во внешнем файле. Числа идут по порядку и если я это загоню в массив и отсортирую ничего хорошего не получится. Можно конечно сделать два массива в одном значения в другом указатели на оригинальные переменные. Как вариант.

Вы не поняли. Вам предложиди сделать массив пар (порядковый номер, значение), которые потом отсортировать по значению. Способ практически стандартный.

 Профиль  
                  
 
 Re: Сравнение нескольких переменных С\С++
Сообщение28.05.2010, 00:47 


25/03/10
4
Насколько я понял, надо отсортировать данные, или как?
Для сортировки произвольного количества данных, если ОС поддерживает проекцию файла в память, то можно поступить следующим образом.
1. Спроецировать файл данных в память.
2. Открыть файл и записать в него последовательно целые числа от 0 до [количество данных -1] (или offset каждого данного от начала файла)
3. Спроецировать этот файл в память.
4. Применить qsort(...) ко второму файлу, где значения посылаемые в qsort это ссылка на данные.
5. Во втором файле указан порядок следования данных.

Можно просто грузить данные в ОЗУ, организовывать еще один массив и сортировать второй массив по данным первого массива.

Если Вам надо использовать ОС не поддерживающей проекцию файла в память и количество данных очень велико, то это нетривиально. Хотя решал тоже.
Разбиваете свой входной массив на части, и решаете, как указано выше, загрузкой в память. Повторяете это несколько раз. Рано или поздно массив отсортируется.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group