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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.84
Kill100
405 / 271 / 37
Регистрация: 11.12.2010
Сообщений: 1,156
Завершенные тесты: 1
#1

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

12.12.2010, 23:19. Просмотров 3854. Ответов 12
Метки нет (Все метки)

Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Поле шахматной доски определяется парой натуральных целых чисел, каждое из которых не превосходит восьми:
Первое число номер вертикали при счете слево на право
Второе номер горизонтали при счете с низу в верх
Даны натуральные числа - 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;    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2010, 23:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить сможет ли белый слон одним ходом пройти на поле (C++):

Определить сможет ли белый слон расположенный на поле (a,b),одним ходом пойти на поле (e,f),не попав при этом под удар чёрного коня нах.(c,d) - C++
ребята помогите пожалуйста!я в с++ вообще не бум-бум! у меня 2-е задачи с шахматами!а я даже играть не умею в них!помогите пожалуйста!я...

Определить, сможет ли белый слон перейти с одного поля на другое, не попав при этом под удар черного ферзя - C++
Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит восьми: первое число – номер вертикали (при...

Выяснить, можно ли с заданного поля одним ходом слона попасть на другое заданное поле - C++
Здравствуйте помогите пожалуйста, как это можно сделать за два хода Поле шахматной доски определяется парой натуральных чисел, каждое из...

Определить может ли конь попасть с первой клетки на вторую одним ходом? - C++
Добрый день. Задача: Шахматный конь ходит буквой “Г” — на две клетки по вертикали в любом направлении и на одну клетку по горизонтали,...

Определить, может ли ладья попасть с первой клетки на вторую одним ходом - C++
Шахматная ладья ходит по горизонтали или вертикали. Даны две различные клетки шахматной доски, определите, может ли ладья попасть с первой...

Определить поля, на которые может пройти белый конь - C++
Даны натуральные числа a,b,c,d, каждое из которых не превосходит восьми. Определить поля(отметить их символом +), на кот-е может пройти...

12
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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))
0
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
1
Kill100
405 / 271 / 37
Регистрация: 11.12.2010
Сообщений: 1,156
Завершенные тесты: 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 у?
Большое спасибо за решение.
Но хотелось бы немного математических пояснений. На будущие что бы я знал...
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
13.12.2010, 01:00 #5
Цитата Сообщение от Kill100 Посмотреть сообщение
Как я понял если например слон прошел и встал на клетку (e, f) то надо проверить встанет ли туда за 1 ход лодья.
и если да то слон не может пойти на эту клетку
Тогда тебе надо только проверить, что ни одно измерение финальной клетки слона не совпадает с измерением ладьи (если слон не бьет ладью и на доске только две фигуры).
C++
1
if ((с!=e) && (d!=f)) { /* слон может идти */ }
Цитата Сообщение от Kill100 Посмотреть сообщение
Да она туда оч идет. И зачем её придумывали если нельзя пользоваться.
Для обратной совместимости.
0
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
13.12.2010, 01:04 #6
Цитата Сообщение от Overmind024 Посмотреть сообщение
Не когда не пользуйся этой командой!!!
А мне можно?
0
Kill100
405 / 271 / 37
Регистрация: 11.12.2010
Сообщений: 1,156
Завершенные тесты: 1
13.12.2010, 01:09  [ТС] #7
Цитата Сообщение от lemegeton Посмотреть сообщение
Тогда тебе надо только проверить, что ни одно измерение финальной клетки слона не совпадает с измерением ладьи (если слон не бьет ладью и на доске только две фигуры).
C++
1
if ((с!=e) && (d!=f)) { /* слон может идти */ }
ну ведь если с=e и d=f то слон просто срубит ладью...А если не равно то встать то он встать может но ври следующем ходе (то есть лодьи) лодья может его срубить следовательно ставить нельзя (В инете вычитал что лодья ходит по прямой а слон ( ходит по диагоналям. Слон, который может передвигатся по полям черного цвета, называется чернопольным(белые поля ему недоступны).Слон, который может передвигатся по полям белого цвета, называется белопольным(черные поля ему недоступны).)
ps сам не разу не играл так что...
0
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
13.12.2010, 01:09 #8
Но конечно, я поклянусь на библии, что не буду делать из программы "спаггети"
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
13.12.2010, 01:34 #9
Цитата Сообщение от Kill100 Посмотреть сообщение
В инете вычитал что лодья ходит по прямой а слон ( ходит по диагоналям.
Ах вот где собака порылась...
Цитата Сообщение от Day Посмотреть сообщение
А мне можно?
Цитата Сообщение от Day Посмотреть сообщение
Но конечно, я поклянусь на библии, что не буду делать из программы "спаггети"
Интересный вопрос. IMHO, с разрешения родителей, начальства, жены и детей, в письменном виде в двух экземплярах и нотариально заверенной копией... Пуркуа бы и не па?

Добавлено через 1 минуту
Только чтоб потом не спрашивал, почему вот такое собирается без ошибок:
Код
int main()
{
     http://www.cyberforum.ru/
     return 0;
}
1
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
13.12.2010, 01:52 #10
Цитата Сообщение от lemegeton Посмотреть сообщение
Код
int main()
{
     http://www.cyberforum.ru/
     return 0;
}
А че? Error-ов нету, но Warring может проклюнуться(неиспользованная метка)
Просто иногда во внутренних циклах обнаруживается невозможность дальнейшей обработки, и тут самое время сказать "goto ..." А просто return - низзя, надоть еще память ослобонить. Конечно, существуют еще всякие прибамбассы типа "finaly", но это ж то же goto, только еще гоэтушней.
Но я не собирался этот симпатичный шахматный топик превращать в обсуждение этой старинной и тупиковой темы.
Играем дальше!
0
Kill100
405 / 271 / 37
Регистрация: 11.12.2010
Сообщений: 1,156
Завершенные тесты: 1
13.12.2010, 16:23  [ТС] #11
Overmind024,
Сей час поработал с кодом что то не нашёл не 1 такой 6терки чисел которые бы давали положительный результат... Да и 100% как математически это считается не догнал...
0
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!!
1
Kill100
405 / 271 / 37
Регистрация: 11.12.2010
Сообщений: 1,156
Завершенные тесты: 1
13.12.2010, 20:47  [ТС] #13
спасибо теперь прояснилась ситуация.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2010, 20:47
Привет! Вот еще темы с ответами:

Определить, может ли король попасть с первой заданной клетки на вторую одним ходом - C++
Шахматный король ходит по горизонтали, вертикали и диагонали, но только на 1 клетку. Даны две различные клетки шахматной доски, определите,...

Определить, может ли король попасть с первой заданной клетки на вторую одним ходом (шахматы) - C++
Доброго времени суток. Начал интересоваться C++ и прохожу онлайн курс. Застопорился на условных операторах вот с такой задачей: ...

Определить, сможет ли герой пройти на следующий уровень игры (победить всех драконов, не умирая ни разу) - C++
Кирито застрял на очередном уровне MMORPG, в которую он играет. Чтобы пройти игру дальше, ему нужно победить всех n драконов, которые живут...

Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода - C++
Поле шахмотной доски определяеся парой натуральных чисел, каждая из которых не превосходит восьми: первое число номер вертикали (при счете...


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
13.12.2010, 20:47
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru