Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с заполнением массива 
:(
    Опции темы
KonH
Дата 18.2.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



Требуется сделать заполнение массива матриц неодинаковыми матрицами 2х2 с элементами от 0 до z. 
Конкретных функций не нашел, пришлось довольствоваться рандомом. 
Но все равно в итоге может попасться пара одинаковых матриц. Ошибки не вижу, за помощь заранее спасибо smile

Функция заполнения массива (List<>):

 
Код

       public void Matrix_Make()
        {
            Random r = new Random(DateTime.Now.Millisecond);
            matrixes.Clear();
            for (int i = 0; i < Math.Pow(z, 4); i++)
            {
                Matrix item = new Matrix(z);
                int a = 0, b = 0, c = 0, d = 0;
                while (Cont(a, b, c, d) == true)
                {
                    a = r.Next(z);
                    b = r.Next(z);
                    c = r.Next(z);
                    d = r.Next(z);
                }
                item.elements[0] = a;
                item.elements[1] = b;
                item.elements[2] = c;
                item.elements[3] = d;
                matrixes.Add(item);
            }
        }


Проверка на наличие одинаковых элементов:

Код

        public bool Cont(int a, int b, int c, int d)
        {
            for (int i = 0; i < matrixes.Count; i++)
            {
                if (matrixes[i].elements[0] == a && matrixes[i].elements[1] == b && matrixes[i].elements[2] == c && matrixes[i].elements[3] == d)
                    return true;
            }
            return false;
        }

PM MAIL   Вверх
Dobermann
Дата 18.2.2010, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: 1
Всего: 0



Вообще правильно будет так
Код

 if ((matrixes[i].elements[0] == a) && (matrixes[i].elements[1] == b) && (matrixes[i].elements[2] == c) && (matrixes[i].elements[3] == d))

PM   Вверх
KonH
Дата 18.2.2010, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



Ничего не изменилось. Мне вот до сих пор не понятно, как такая простая функция может быть проблемной. 
PM MAIL   Вверх
Ceiceron
Дата 20.2.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 2.8.2007
Где: Дубна

Репутация: нет
Всего: нет



KonH, z - это некое число, водимое как параметр? Тогда вопрос: почему r.Next(z) от него зависит, собственно это и ограничивает ваш набор чисел. Либо алгоритм предполагает что число будет достаточно большим и все возможные числа попадут в матрицы, но тогда количество возможных итераций намного превосходит число этих чисел. Соответственно рендом начинает повторяться.

Т.е. если я введу z=1, то у меня сгенерируется одна матрица у которой при использовании r.Next(z) все значений всегда будут либо 0, либо 1.

Это сообщение отредактировал(а) Ceiceron - 20.2.2010, 11:14
PM MAIL   Вверх
KonH
Дата 21.2.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



Как бы из for (int i = 0; i < Math.Pow(z, 4); i++) видно, что будет произведено z^4 итераций цикла, то есть столько, чтобы получить все возможные варианты для матрицы 2х2 со значениями каждого элемента 0-z. Если их больше - программа зависает, что логично. 
Вопрос в том, почему Cont не верно работает, ведь в остальном сложно найти какую-либо проблему.

Это сообщение отредактировал(а) KonH - 21.2.2010, 16:33
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0710 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.