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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2009, 01:53   #1
Natok
Пользователь
 
Аватар для Natok
 
Регистрация: 17.05.2009
Сообщений: 85
По умолчанию в ф-ии копирование зануливает елементы...

вот есть ф-ыя, которая реализует рух елементов матрицы в соседние клетки. попробую сама разобраться, но она удаляет иногда ))) елементы.
попробую сейчас сама разобратся, но если сразу выдно, что не так, подскажыте, пожалуйста!

Код:
static int[,] getShuffle(int[,] m, int right, int up, int r) 
        {
            int[,] rez = new int[r, r];
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < r; j++)
                {
                    if (i + up < r && i + up > 0 && j + right < r && j + right > 0)
                        rez[i, j] = m[i + up, j + right];
else rez[i,j]=m[i, j];
                }
            }
            return rez;
        }
здесь up и right зсув вниз-вверх и вправо-влево (-1,0,1)

а вот еще один алгоритм, на основе предидущего, только здесь уже случайным способом выбирается "сосед", как и должно быть в программе. но здесь то же...

Код:
int[,] getShuffleMy(int[,] m, int r1)         {
            int[,] rez = new int[r1, r1];
            for (int i = 0; i < r1; i++)
            {
                for (int j = 0; j < r1; j++)
                {
                    int temp;
                    temp = r.Next(1, 9);
                    if (temp == 1 && i - 1 < r1 && i - 1 > 0 && j - 1 < r1 && j - 1 > 0 && m[i - 1, j - 1] == 0)
                    {
                        rez[i - 1, j - 1] = m[i, j];
                    }
                    else if (temp == 2 && i - 1 < r1 && i - 1 > 0 && j < r1 && j > 0 && m[i - 1, j] == 0)
                    {
                        rez[i - 1, j] = m[i, j];
                    }
                    else if (temp == 3 && i - 1 < r1 && i - 1 > 0 && j + 1 < r1 && j + 1 > 0 && m[i - 1, j + 1] == 0)
                    {
                        rez[i - 1, j + 1] = m[i, j];
                    }
                    else if (temp == 4 && i < r1 && i > 0 && j + 1 < r1 && j + 1 > 0 && m[i, j + 1] == 0)
                    {
                        rez[i, j + 1] = m[i, j];
                    }
                    else if (temp == 5 && i + 1 < r1 && i + 1 > 0 && j + 1 < r1 && j + 1 > 0 && m[i + 1, j + 1] == 0)
                    {
                        rez[i + 1, j + 1] = m[i, j];
                    }
                    else if (temp == 6 && i + 1 < r1 && i + 1 > 0 && j < r1 && j > 0 && m[i + 1, j] == 0)
                    {
                        rez[i + 1, j] = m[i, j];
                    }
                    else if (temp == 7 && i + 1 < r1 && i + 1 > 0 && j - 1 < r1 && j - 1 > 0 && m[i + 1, j - 1] == 0)
                    {
                        rez[i + 1, j - 1] = m[i, j];
                    }
                    else if (temp == 8 && i < r1 && i > 0 && j - 1 < r1 && j - 1 > 0 && m[i, j - 1] == 0)
                    {
                        rez[i, j - 1] = m[i, j];
                    }
                }
            }
            
                return rez;

Последний раз редактировалось Natok; 29.05.2009 в 22:32.
Natok вне форума Ответить с цитированием
Старый 29.05.2009, 02:17   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
но она удаляет иногда ))) елементы.
А что значит удаляет?
Вообще, вот что заметил:
Код:
static int[,] getShuffle(int[,] m, int right, int up, int r) 
        {
            int[,] rez = new int[r, r];
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < r; j++)
                {
                    if (i + up < r && i + up > 0 && j + right < r && j + right > 0)
                        rez[i, j] = m[i + up, j + right]; 
   
                }
            }
            return rez;
        }
Вы создаете новый массив, но заполняете только те элементы, которые сдвигаются. А остальные остаются непроинициализированными.
И потом этот массив возвращаете.

Может, надо вот так?
Код:
static int[,] getShuffle(int[,] m, int right, int up, int r) 
        {
            int[,] rez = new int[r, r];
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < r; j++)
                {
                    if (i + up < r && i + up > 0 && j + right < r && j + right > 0)
                        rez[i, j] = m[i + up, j + right];
                    else  rez[i, j] = m[i, j];
                }
            }
            return rez;
        }
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.05.2009, 03:49   #3
Natok
Пользователь
 
Аватар для Natok
 
Регистрация: 17.05.2009
Сообщений: 85
По умолчанию

я уже ето заметила, и етот кусочек добавила (вы думаете, чтоя в ето время делала?)))). да, "сьедает" меньше елементов, но продолжает сьедать...
Natok вне форума Ответить с цитированием
Старый 29.05.2009, 22:29   #4
Natok
Пользователь
 
Аватар для Natok
 
Регистрация: 17.05.2009
Сообщений: 85
По умолчанию

но что здесь все-таки неправильно? нужно что-то добавить?
Natok вне форума Ответить с цитированием
Старый 29.05.2009, 22:38   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
но продолжает сьедать...
Так а что значит "съедает"? Вот посылаете вы в функцию матрицу.
На выходе получаете другую. Какие элементы там оказываются съеденными?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.05.2009, 22:40   #6
Natok
Пользователь
 
Аватар для Natok
 
Регистрация: 17.05.2009
Сообщений: 85
Радость

минуточку... сейчас запустим...
Natok вне форума Ответить с цитированием
Старый 29.05.2009, 22:45   #7
Natok
Пользователь
 
Аватар для Natok
 
Регистрация: 17.05.2009
Сообщений: 85
По умолчанию

ну, вот , например, ета матрица:

Код:
2 1 1 0 0  
2 0 0 1 0  
0 1 2 0 0  
0 0 0 0 2  
2 0 1 0 0
когда пропустиь ее через вторую ф-ыю, получается

Код:
0 0 0 0 0 
0 0 1 0 0 
1 0 0 0 0 
0 0 0 2 0 
0 1 0 0 0
если использовать первый вариант ф-ыи, то
исходная матрица выглядит так:

Код:
2 0 2 2 0  
1 0 0 0 0  
0 0 1 2 1  
0 0 0 1 0  
0 2 1 0 0  

Field = getShuffleMy(Field ,1,1  size);

//результат такой

0 0 0 0 0 
0 0 0 0 0 
0 1 0 0 0 
0 0 1 0 0 
2 0 0 0 0
Natok вне форума Ответить с цитированием
Старый 29.05.2009, 23:01   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Как я понял, ячейки должны "двигаться"?
Может, тогда так?
Код:
static int[,] getShuffle(int[,] m, int right, int up, int r) 
        {
            int[,] rez = new int[r, r];
            for(i=0; i<r; i++)
             for(j=0; j<r; j++)
               rez[i, j] = m[i, j];
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < r; j++)
                {
                    if (i + up < r && i + up > 0 && j + right < r && j + right > 0)
                    {
                     int tmp = rez[i, j]; 
                     rez[i, j] = rez[i + up, j + right];
                     rez[i + up, j + right] = tmp;
                     }
   
                }
            }
            return rez;
        }
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.05.2009, 23:21   #9
Natok
Пользователь
 
Аватар для Natok
 
Регистрация: 17.05.2009
Сообщений: 85
Печаль

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

попробовала Вашу ф-ию:

Код:
0 2 0 0 0  
2 1 0 0 0  
0 2 0 0 2  
1 2 1 1 0  
0 0 0 0 1
выводит

Код:
0 0 0 0 0 
0 0 0 0 0 
2 0 0 2 0 
0 0 0 0 0 
0 0 0 1 0
ето если параметры ф-ыи будут
Код:
Field = getShuffle(Field ,1,1,  size);
Natok вне форума Ответить с цитированием
Старый 29.05.2009, 23:30   #10
Natok
Пользователь
 
Аватар для Natok
 
Регистрация: 17.05.2009
Сообщений: 85
По умолчанию

нет, извиняюсь! внизу в коде еще обрабатывалось соседство волков и зайцев, и первые сьедали последних...
на самом деле последние 2 результата не следует брать во внимание...

сйчас обработчик соседства закоментирован, и как ни странно, теперь еще больше ячеек "исчезает"...

было
Код:

0 1 0 1 1  
2 0 0 0 0  
0 0 0 1 1  
2 0 0 2 0  
0 2 0 0 2
стало

Код:

0 0 0 0 0 
0 0 0 0 0 
0 0 1 0 0 
0 0 2 0 0 
2 0 0 2 0
если параметры

Код:
 Field = getShuffle(Field ,1,1,  size);
Natok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать что б в програме рандом выводил отрицательные елементы?он выводит токо 0,2...0,8 короче до 1 innaa639 Помощь студентам 5 28.05.2009 12:26
Перенести общие елементы двух массивов в другой. leshax Общие вопросы C/C++ 1 04.02.2009 20:57
Есть масив а[i,j] (10х10), все елементы которого равны 0, т.е нулевая матрица, как воплотить в программе? alex2008ean Паскаль, Turbo Pascal, PascalABC.NET 2 10.12.2008 00:08
Копирование VVVasek Microsoft Office Excel 13 20.09.2008 23:12
считать елементы файла в массив XfighT Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 14.01.2008 16:35