Форум программистов, компьютерный форум CyberForum.ru

Определить сможет ли белый слон одним ходом пройти на поле - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.84
Kill100
 Аватар для Kill100
359 / 248 / 33
Регистрация: 11.12.2010
Сообщений: 1,068
Завершенные тесты: 1
12.12.2010, 23:19     Определить сможет ли белый слон одним ходом пройти на поле #1
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Поле шахматной доски определяется парой натуральных целых чисел, каждое из которых не превосходит восьми:
Первое число номер вертикали при счете слево на право
Второе номер горизонтали при счете с низу в верх
Даны натуральные числа - a, b, c, d, e, f, каждое из которых не превосходит восьми.
Определить сможет ли:
Белый слон (a, b) ОДНИМ ходом пройти на поле (e, f)
Не попав при этом под удар Чёрной ладьи (c, d)

В инете видел решение подобной программы но методами которые мы не проходили и проходить не будем (декан нас быстрее к С# всех гонит)

ТО что я сам пока надумал исходный код
Больше нечего да же чисто теоретически не придумывается...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "iostream.h"
 
int main()
{
   int**pole,q,w;
    eeee:cout<<"Введите размер поля от 1 до 8 \n";
    cin>>q>>w;
    if ((q<1)||(q>8) || (w<1)||(w>8)) goto eeee; // если не удовлетворяет суловию
    // что число не больше 8 то запрашиваем координты заново
    // если не удовлетвояет условию чот больше 1 то заново так как поле в 1 клетку слишком мало 
    // для 2х фигур. 
    pole=new int*[q]; //создаём массив q на w
         for (int i=0; i<q;i++){
            pole[i]=new int [w];};
    eee:cout<<"Введите координаты Слона (a, b) Ладьи (c, d) И координаты конечной точки слона (e, f) \n";
    int a, b, c, d, e, f;
    cin>> a >> b >> c >> d >> e >> f;
    
    if (a>8||b>8||c>8||d>8||e>8||f>8) goto eee;
        if ((a==c)&&(b==d)){
                             cout<<"фигуры не могут распологаться на 1 клетке\n"; 
                             goto eee ;
                             };
           if((a=e)&&(b==f))cout<<"Слон не совершает перемещения недопустимый ход \n";
              
    
    cout<<" \n";
    system("pause"); 
return 0;    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2010, 23:19     Определить сможет ли белый слон одним ходом пройти на поле
Посмотрите здесь:

C++ Написать задачку на двумерные массивы(Шахматная доска.На ней расположены 2 черных коня и белый слон).
Определить поля, на которые может пройти белый конь C++
Определить сможет ли белый слон расположенный на поле (a,b),одним ходом пойти на поле (e,f),не попав при этом под удар чёрного коня нах.(c,d) C++
Определить, через сколько лет селекционер сможет засеять новой зерновой культурой поле площадью s га C++
C++ Определить, сможет ли белый слон перейти с одного поля на другое, не попав при этом под удар черного ферзя
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
13.12.2010, 00:27     Определить сможет ли белый слон одним ходом пройти на поле #2
В смысле, слон не должен при движении пересечь поле, которое может побить ладья? Или он не должен закончить ход на поле, которое может побить ладья?
В любом случае, надо лишь проверить, что ни одна из координат не совпадает с соответствующей координатой ладьи. В первом случае слон неправ, если (((c>a) && (c<e)) || ((c<a) && (c>e))) || (((d>b) && (d<f)) || ((d<b) && (d>f))), во втором случае нужно проверить только его финальную точку, слон прав, если ((с!=e) && (d!=f))
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
13.12.2010, 00:46     Определить сможет ли белый слон одним ходом пройти на поле #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;
bool PutElephant(int x,int y)//Можно ли поставить слона
{
    if((x+y)%2==1) return true;
    else return false;
}
bool MoveElephant(int start_x,int start_y,int finish_x,int finish_y)//Можно ли переместить слона
{
    if ((start_x-start_y)==(finish_x-finish_y))
        return true;
    else return false;
}
bool MoveCastle(int start_x,int start_y,int finish_x,int finish_y)//Можно ли переместить ладью
{
    if ((start_x==finish_x)||(start_y==finish_y))
        return true;
    else return false;
}
int main()
{
    int a,b,c,d,e,f;
    cout << "a = "; cin >>a;
    cout << "b = "; cin >>b;
    cout << "c = "; cin >>c;
    cout << "d = "; cin >>d;
    cout << "e = "; cin >>e;
    cout << "f = "; cin >>f;
    if(PutElephant(a,b)&&MoveElephant(a,b,e,f)&&!MoveCastle(c,d,e,f)&&!(a==c&&b==d))
        cout << "Yes" << endl;
    else cout << "No"<< endl;
    cin.get();
    cin.get();
}
Как то так))
Я специально разбил на функции чтобы был понятнее!
+ условие мы не можем поставить слона на поле где стоит ладья!

Добавлено через 13 минут
Не когда не пользуйся этой командой!!!
C++
1
goto
Kill100
 Аватар для Kill100
359 / 248 / 33
Регистрация: 11.12.2010
Сообщений: 1,068
Завершенные тесты: 1
13.12.2010, 00:57  [ТС]     Определить сможет ли белый слон одним ходом пройти на поле #4
Цитата Сообщение от lemegeton Посмотреть сообщение
В смысле, слон не должен при движении пересечь поле, которое может побить ладья? Или он не должен закончить ход на поле, которое может побить ладья?
В любом случае, надо лишь проверить, что ни одна из координат не совпадает с соответствующей координатой ладьи. В первом случае слон неправ, если (((c>a) && (c<e)) || ((c<a) && (c>e))) || (((d>b) && (d<f)) || ((d<b) && (d>f))), во втором случае нужно проверить только его финальную точку, слон прав, если ((с!=e) && (d!=f))
Как я понял если например слон прошел и встал на клетку (e, f) то надо проверить встанет ли туда за 1 ход лодья.
и если да то слон не может пойти на эту клетку
Цитата Сообщение от Overmind024
Добавлено через 2 минуты
Добавлено через 13 минут
Не когда не пользуйся этой командой!!!
C++
1
goto
Да она туда оч идет. И зачем её придумывали если нельзя пользоваться.
Тут она логику программы не портит в 2х строчках испортить нельзя.
А больше чем на расстоянии 4х строчек я её не юзаю.

Добавлено через 7 минут
как я понял если первую координату сложить со второй и число будет четное то поставить можно. а откуда такое условие. (PS в шахматы не когда не играл)
а
C++
1
((start_x-start_y)==(finish_x-finish_y))
это проверяет если из координаты (x-y) начала вычесть координаты конца (x1-y1) а почему вычитается из x у?
Большое спасибо за решение.
Но хотелось бы немного математических пояснений. На будущие что бы я знал...
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
13.12.2010, 01:00     Определить сможет ли белый слон одним ходом пройти на поле #5
Цитата Сообщение от Kill100 Посмотреть сообщение
Как я понял если например слон прошел и встал на клетку (e, f) то надо проверить встанет ли туда за 1 ход лодья.
и если да то слон не может пойти на эту клетку
Тогда тебе надо только проверить, что ни одно измерение финальной клетки слона не совпадает с измерением ладьи (если слон не бьет ладью и на доске только две фигуры).
C++
1
if ((с!=e) && (d!=f)) { /* слон может идти */ }
Цитата Сообщение от Kill100 Посмотреть сообщение
Да она туда оч идет. И зачем её придумывали если нельзя пользоваться.
Для обратной совместимости.
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
13.12.2010, 01:04     Определить сможет ли белый слон одним ходом пройти на поле #6
Цитата Сообщение от Overmind024 Посмотреть сообщение
Не когда не пользуйся этой командой!!!
А мне можно?
Kill100
 Аватар для Kill100
359 / 248 / 33
Регистрация: 11.12.2010
Сообщений: 1,068
Завершенные тесты: 1
13.12.2010, 01:09  [ТС]     Определить сможет ли белый слон одним ходом пройти на поле #7
Цитата Сообщение от lemegeton Посмотреть сообщение
Тогда тебе надо только проверить, что ни одно измерение финальной клетки слона не совпадает с измерением ладьи (если слон не бьет ладью и на доске только две фигуры).
C++
1
if ((с!=e) && (d!=f)) { /* слон может идти */ }
ну ведь если с=e и d=f то слон просто срубит ладью...А если не равно то встать то он встать может но ври следующем ходе (то есть лодьи) лодья может его срубить следовательно ставить нельзя (В инете вычитал что лодья ходит по прямой а слон ( ходит по диагоналям. Слон, который может передвигатся по полям черного цвета, называется чернопольным(белые поля ему недоступны).Слон, который может передвигатся по полям белого цвета, называется белопольным(черные поля ему недоступны).)
ps сам не разу не играл так что...
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
13.12.2010, 01:09     Определить сможет ли белый слон одним ходом пройти на поле #8
Но конечно, я поклянусь на библии, что не буду делать из программы "спаггети"
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
13.12.2010, 01:34     Определить сможет ли белый слон одним ходом пройти на поле #9
Цитата Сообщение от Kill100 Посмотреть сообщение
В инете вычитал что лодья ходит по прямой а слон ( ходит по диагоналям.
Ах вот где собака порылась...
Цитата Сообщение от Day Посмотреть сообщение
А мне можно?
Цитата Сообщение от Day Посмотреть сообщение
Но конечно, я поклянусь на библии, что не буду делать из программы "спаггети"
Интересный вопрос. IMHO, с разрешения родителей, начальства, жены и детей, в письменном виде в двух экземплярах и нотариально заверенной копией... Пуркуа бы и не па?

Добавлено через 1 минуту
Только чтоб потом не спрашивал, почему вот такое собирается без ошибок:
Код
int main()
{
     http://www.cyberforum.ru/
     return 0;
}
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
13.12.2010, 01:52     Определить сможет ли белый слон одним ходом пройти на поле #10
Цитата Сообщение от lemegeton Посмотреть сообщение
Код
int main()
{
     http://www.cyberforum.ru/
     return 0;
}
А че? Error-ов нету, но Warring может проклюнуться(неиспользованная метка)
Просто иногда во внутренних циклах обнаруживается невозможность дальнейшей обработки, и тут самое время сказать "goto ..." А просто return - низзя, надоть еще память ослобонить. Конечно, существуют еще всякие прибамбассы типа "finaly", но это ж то же goto, только еще гоэтушней.
Но я не собирался этот симпатичный шахматный топик превращать в обсуждение этой старинной и тупиковой темы.
Играем дальше!
Kill100
 Аватар для Kill100
359 / 248 / 33
Регистрация: 11.12.2010
Сообщений: 1,068
Завершенные тесты: 1
13.12.2010, 16:23  [ТС]     Определить сможет ли белый слон одним ходом пройти на поле #11
Overmind024,
Сей час поработал с кодом что то не нашёл не 1 такой 6терки чисел которые бы давали положительный результат... Да и 100% как математически это считается не догнал...
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
13.12.2010, 19:58     Определить сможет ли белый слон одним ходом пройти на поле #12
такс)
во первых нельзя былово слона поставить на черное поле)))
у белого поля есть свойство суммы x+y координаты не четное отсюда и выплывает условие
C++
1
if((x+y)%2==1)
во вторых
C++
1
((start_x-start_y)==(finish_x-finish_y))
это условие на то что два поля находятся на одной диагонали(у каждой диагонали x-y константа).
в третьих
C++
1
goto
-это как яблоко в истории про Адама и Еву. Если ты собираешься стать хорошим программистом то забудь про эту команду!
в условии написано
Белый слон (a, b) ОДНИМ ходом пройти на поле (e, f)
Не попав при этом под удар Чёрной ладьи (c, d)
здесь ничего про правило битого поля не сказано!!
и еще 6 которая удовлетворяет условию 1 2 6 5 5 6!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2010, 20:47     Определить сможет ли белый слон одним ходом пройти на поле
Еще ссылки по теме:

Определить, может ли король попасть с первой заданной клетки на вторую одним ходом C++
Определить, может ли король попасть с первой заданной клетки на вторую одним ходом (шахматы) C++
C++ Определить может ли конь попасть с первой клетки на вторую одним ходом?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Kill100
 Аватар для Kill100
359 / 248 / 33
Регистрация: 11.12.2010
Сообщений: 1,068
Завершенные тесты: 1
13.12.2010, 20:47  [ТС]     Определить сможет ли белый слон одним ходом пройти на поле #13
спасибо теперь прояснилась ситуация.
Yandex
Объявления
13.12.2010, 20:47     Определить сможет ли белый слон одним ходом пройти на поле
Ответ Создать тему
Опции темы

Текущее время: 04:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru