Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обьесните часть кода, Код на С нужно обьеснить! 
:(
    Опции темы
sarik
  Дата 12.12.2011, 03:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите нужно подробное обьяснение каждого действия! Пожалуйста буду безумно благодарен!
Код

// Magaradj - Queen + knight
// 26 april 2007 22:58

#include <stdio.h>

#define MAXBOARD 10

int board[MAXBOARD];

bool IsFreeBishop(int beg)
{
   int i=0;
   int up=board[beg]+beg;
   int down=board[beg]-beg;
   bool fl=true;
   while (fl && (i<beg))
   {
      if ((board[i] == up) || (board[i] == down)) fl=false;
      else 
      {
         up--;
         down++;
         i++;
      }
   }
   return fl;
}

bool IsFreeRook(int beg)
{   
   int i=0;
   bool fl=true;
   while (fl && (i<beg))
   {
      if (board[i] == board[beg]) fl=false;
      else i++;
   }
   return fl;
}

bool IsFreeKnight(int beg)
{
    int step[4][2]={{-2,-1},{-1,-2},{1,-2},{2,-1}};
    int i=0;
    bool fl=true;
    while (fl && (i<4))
    {
        if ((beg+step[i][1])>=0)
        {
            if ((board[beg]+step[i][0]) == (board[beg+step[i][1]])) fl=false;
            else i++;
        }
        else i++;

    }
   return fl;
}

bool IsFreeMagaradj(int beg)
{
   return IsFreeBishop(beg) && IsFreeRook(beg) && IsFreeKnight(beg);
}

int main()
{
    int i=0;
    int beg=0;
    board[beg]=0;
    int stat=0;
    while (beg>=0)
    {
        switch (stat)
        {
        case 0:
            if (IsFreeMagaradj(beg)) stat=1;
            else stat=2;
            break;
        case 1:
            beg++;
            if (beg==MAXBOARD) stat=3;
            else
            {
                board[beg]=0;
                stat=0;
            }
            break;
        case 2:
            board[beg]++;
            if (board[beg] == MAXBOARD) beg--;
            else stat=0;
            break;
        case 3:
            for (i=0; i<(MAXBOARD-1); i++) printf("%d, ",board[i]+1);
            printf("%d\n", board[i]+1);
            beg--;
            stat=2;
            break;
        };
    }
   return 0;
}


Если кто целиком обьяснит вообще цены не будет этому человеку, а так интересует только:

Код

bool IsFreeKnight(int beg)
{
    int step[4][2]={{-2,-1},{-1,-2},{1,-2},{2,-1}};
    int i=0;
    bool fl=true;
    while (fl && (i<4))
    {
        if ((beg+step[i][1])>=0)
        {
            if ((board[beg]+step[i][0]) == (board[beg+step[i][1]])) fl=false;
            else i++;
        }
        else i++;

    }
   return fl;
}


Программу пишу на языке sci (Scilab(аналог Матлаба)),не откажусь от помоши! 
PM MAIL   Вверх
bsa
Дата 12.12.2011, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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




M
bsa
зачем людей вводишь в заблуждение, указывая что язык C#?

А что тут непонятного? step - это матрица 2x4. дальше выполняется цикл для всех строк и пока fl равно true. Если сумма beg и элемента второго столбца i-й строки не меньше нуля, то выполняется проверка чего-то на доске... Если проверка прошла, то fl становится равным false и цикл прекращается...
Объяснять что находится внутри if'а смысла не вижу (там простое сравнение суммы с элементом массива board), так как без знания основных алгоритмов и принципов игры объяснить это проблематично.
PM   Вверх
sarik
Дата 12.12.2011, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Извиняюсь за путаницу! 

int step[4][2]={{-2,-1},{-1,-2},{1,-2},{2,-1}};

-2 -1 
-1 -2
 1 -2
 2 -1

Верно ли я понял матрицу?? если нет то пожалуйста напишите правильно
Цитата

 Если сумма beg и элемента второго столбца i-й строки не меньше нуля

Почему второго столбца?

Это сообщение отредактировал(а) sarik - 12.12.2011, 13:40
PM MAIL   Вверх
bsa
Дата 12.12.2011, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(sarik @  12.12.2011,  13:52 Найти цитируемый пост)
int step[4][2]={{-2,-1},{-1,-2},{1,-2},{2,-1}};

-2 -1
-1 -2
1 -2
2 -1

Цитата(sarik @  12.12.2011,  13:52 Найти цитируемый пост)
Почему второго столбца?

потому что первый столбец имеет индекс 0.

Математики индексируют матрицы начиная с 1. А компьютерам легче работать с 0. Поэтому все машинноориентированные языки и их производные тоже нумеруют с 0 (С/С++). Инженерные и научные - с 1 (паскаль).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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