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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2013, 18:16   #1
tonika
Новичок
Джуниор
 
Регистрация: 31.03.2013
Сообщений: 2
Вопрос Задача на рекурсию (в чем ошибка?)

Привет)
Помогите пожалуйста найти ошибку. Задача на рекурсию про 8 ферзей.
(В данном фрагменте пока заменила 8 на 4, чтоб не ждать долго). В результате в массивах x [4], y [4], должны получится номера клеток по горизонтали и вертикали соответственно. Но значения неправильные получаются.

Код:
int dx, dy;
dx = panel1.Width / 4;
dy = panel1.Height / 4;
int[] x = new int[4];
int[] y = new int[4];
int[] Qween = new int[4];
int[,] chess = new int[4,4];
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{ chess[i,j] = 0; }
Qween[i] = 0;
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (chess[i, j] == 0)
{
Qween[i] = 1;
chess[i, j]=10;
x[i] = i;
y[i] = j;

for (m = i+1; m < 4; m++)
{ chess[m, j]++; }
if (i >= 1)
{
for (m = i - 1; m>0; m--)
{ chess[m, j]++; }
}
for (n = j+1; n < 4; n++)
{ chess[i, n]++; }
if (j >= 1)
{
for (n = j - 1; n > 0; n--)
{ chess[m, j]++; }
}
if (i < 3)
{
for (m = i + 1; m < 4; m++)
{
if (j < 3)
{
for (n = j + 1; n < 4; n++)
{ chess[m, n]++; }
}
if (j > 0)
{
for (n = j - 1; n > 0; n--)
{ chess[m, n]++; }
}

}
}
if (i > 0)
{
for (m = i - 1; m > 0; m--)
{
if (j < 3)
{
for (n = j + 1; n < 4; n++)
{ chess[m, n]++; }
}
if (j > 0)
{
for (n = j - 1; n > 0; n--)
{ chess[m, n]++; }
}


}
}

}//конец цикла "поставить ферзя"

}//endj
if (Qween[i] == 0)
{
i--;
chess[x[i], y[i]] = 0;

j = y[i];
x[i] = 0;
y[i] = 0;

for (m = i + 1; m < 4; m++)
{ chess[m, j]--; }
if (i >= 1)
{
for (m = i - 1; m > 0; m--)
{ chess[m, j]--; }
}
for (n = j+1; n < 4; n++)
{ chess[i, n]--; }
if (j >= 1)
{
for (n = j - 1; n > 0; n--)
{ chess[m, j]--; }
}
if (i < 3)
{
for (m = i + 1; m < 4; m++)
{
if (j < 3)
{
for (n = j + 1; n < 4; n++)
{ chess[m, n]--; }
}
if (j > 0)
{
for (n = j - 1; n > 0; n--)
{ chess[m, n]--; }
}

}
}
if (i > 0)
{
for (m = i - 1; m > 0; m--)
{
if (j < 3)
{
for (n = j + 1; n < 4; n++)
{ chess[m, n]--; }
}
if (j > 0)
{
for (n = j - 1; n > 0; n--)
{ chess[m, n]--; }
}


}
}

j++;
}//конец цикла "убрать ферзя"


}//endi

for (i = 0; i < 4; i++)
{ label1.Text = label1.Text + Convert.ToString(x[i]) + " " + Convert.ToString(y[i]) + "; ";
}
}
}
}
Значения получаются 0 0; 0 0; 0 0; 3 0. И вот где ошибка, никак найти не могу.



И еще вопрос. При вставке картинки приходится полный путь к файлу задавать. Т.е., при переносе на другой комп, программа выдаст ошибку(( Изображение привязываю как файл ресурса. И оно даже автоматически запихивается в папку resourses. Но, если не писать полный путь все равно ошибку выдает. С этим же можно что-то сделать?

Последний раз редактировалось tonika; 31.03.2013 в 18:44.
tonika вне форума Ответить с цитированием
Старый 31.03.2013, 18:33   #2
inmyacid
Пользователь
 
Аватар для inmyacid
 
Регистрация: 17.04.2012
Сообщений: 42
По умолчанию

вставьте код в теги CODE
inmyacid вне форума Ответить с цитированием
Старый 31.03.2013, 18:46   #3
tonika
Новичок
Джуниор
 
Регистрация: 31.03.2013
Сообщений: 2
По умолчанию

Сделано. А в чем разница? Это ж не весь код программы, а только отрывок. Если его запихнуть в программу в таком виде, он работать все равно не будет
tonika вне форума Ответить с цитированием
Старый 31.03.2013, 19:11   #4
inmyacid
Пользователь
 
Аватар для inmyacid
 
Регистрация: 17.04.2012
Сообщений: 42
По умолчанию

А нам смотреть код удобно будет?
По второму вопросу:
Application.StartupPath возвращает путь к программе.С помощью него можно указывать адрес файлов которые лежат рядом с программой. Или для переноса на другой компьютер можно сделать установочное приложение. Project-Properties-Publish-Publish Now

А по первому вопросу посмотрите Здесь. Есть код написанный на с++ рекурсионным алгоритмом
inmyacid вне форума Ответить с цитированием
Старый 01.04.2013, 12:37   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Помогите пожалуйста найти ошибку. Задача на рекурсию про 8 ферзей.
Поискал в приведённом коде рекурсивный вызов. Чуть не сломал глаза, но не нашёл.
В качестве совета: выделите отдельные функции PutQueen, RemoveQueen и CheckBoard, а то так и читать тяжело, и возможностей для ошибок вагон.
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на рекурсию Rusl92 Помощь студентам 1 13.01.2011 22:36
Паскаль задача на обработку последовательностей, помогите найти в чем ошибка??? Nubik Помощь студентам 2 22.12.2009 11:04
Ошибка в программе на рекурсию vitekbest Помощь студентам 13 14.06.2008 20:54
Задача на рекурсию. KoHgpaT Паскаль, Turbo Pascal, PascalABC.NET 4 22.12.2006 20:49