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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генетические алгоритмы. 
:(
    Опции темы
compaq
Дата 4.3.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

Код

        static void Main(string[] args)
        {
            gray2bin(Convert.ToInt32("1010", 2));
            BinGray(Convert.ToByte("1100", 2));
            Console.ReadLine();
        }
        static void BinGray(int v)
        {
            int sum = (int)(v ^ (v >> 1));
            Console.WriteLine(Convert.ToString(sum, 2));
        }
        static void gray2bin(int v)
        {
            int sum = v;
            while (v > 0) { v >>= 1; sum ^= v; };
            Console.WriteLine(Convert.ToString(sum, 2));
        }

Всё бы хорошо, но я хочу добавить эти значения в ArrayList но так как значения в инте то они преобразуются в 10 систему. Но я хочу хранить в массиве значения в 2 системе. Как это можно реализовать.

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


Эксперт
****


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

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



Какие именно значения ты хочешь хранить? И приведи пример, что именно не так работает.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
-Mikle-
Дата 4.3.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



Цитата(compaq @  4.3.2007,  20:29 Найти цитируемый пост)
но так как значения в инте то они преобразуются в 10 систему

ничего никуда при сохранении в ArrayList не преобразуется. Если int, то он и остается в ArrayList как int. 

В чем вопрос то?

Код

ArrayList list=new ArrayList();
int num = 999;
list.Add(num);

// и обратно
num = (int)list[0 /* 1, 2, 3, ...n */ ];


А если тебе надо иметь удобное витовое представление int, то пользуй System.Collections.BitArray класс. Этот класс дает удобное представление числа (или массива байтов) в виде битов и работы с ними (битами).

Код

    int num = 99999;
    System.Collections.BitArray bits = new System.Collections.BitArray(num);
    bits.Set(0, true); // установить нулевой бит в единицу


Что еще нужно?


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
compaq
Дата 4.3.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Извиняюсь не совсем корректно выразился. Я вот что имел в виду. Когда функция передает и возврашяет число она делает это в десятичной системе а мне нужно что бы она делал это в двоичной. 
Код

        static byte BinGray(byte v)
        {
            return (byte)(v ^ (v >> 1));
        }

        static void Main(string[] args)
        {
            ArrayList Popylation = new ArrayList();
            Popylation.Add(BinGray(Convert.ToByte("1100", 2)));
        }

 Или вернее мне в идеале вот что нужно. Есть двумерный массив к примеру пусть называется популяция. И мне нужно что бы он выгладил вот  так.   Популяция[Номер хромосомы][номер гена]. То есть я мог бы сделать что то типа этого.

Код

    public class Crossingover
    {
        int OnePoint()// Оператор одноточечьного кросинговера
        {
            do
            {
                NumberOne = random;//Выбираю случайным образом первую хромасому
                NumberTwo = random;//Выбираю случайным образом вторую хромасому
            } 
            while (NumberOne == NumberTwo);//Если они равны повторяю цыкл
            Point = random;//Генерю точку разрыва

            for (int intIndex = 0; intIndex >= size; intIndex++)//перебираю все гены
            {
                if (intIndex < Point)//Если не дошол до точки разрыва копирую так
                {
                    arrMassivResult[0][intIndex] = arrMassiv[NumberOne][intIndex];
                    arrMassivResult[1][intIndex] = arrMassiv[NumberTwo][intIndex];
                }
                if (intIndex >= Point)//Если дошол то так
                {
                    arrMassivResult[0][intIndex] = arrMassiv[NumberTwo][intIndex];
                    arrMassivResult[1][intIndex] = arrMassiv[NumberOne][intIndex];
                }
            }
        }
 }

Вот собственно что я хочу сделать но у меня всю застопорилось на том что я не как не могу норьмально сохранить в массиве двоичьное число.

Добавлено @ 19:06 
Кстати я знаю, что во втором куске куча ошибок не совместимых с жизнью, это так набросок просто. smile 
PM MAIL   Вверх
Idsa
Дата 4.3.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

Вот сравни, например:
Код

Console.WriteLine(String.Format("{0:x}", 100));
Console.WriteLine(String.Format("{0:d}", 100));

Т. е. тебе нужно вычислять определенные значения, сохранять их в ArrayList, не парясь. А вот вывод этих чисел тебе нужно сделать с умом. Для этого можешь, например, заюзать BitArray, как посоветовал -Mikle-.

Это сообщение отредактировал(а) Idsa - 4.3.2007, 20:08


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
0000
Дата 9.3.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.7.2006
Где: Нижний Новгород

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



погодь, я вечером домой приду - у меня есть проги по генетическим алгоритмам, еще на 3 курсе в универе делал - там скину кусок кода, а сейчас и не помню толком
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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