Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/30: Рейтинг темы: голосов - 30, средняя оценка - 4.97
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209

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

12.12.2010, 23:19. Показов 6314. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2010, 23:19
Ответы с готовыми решениями:

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

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

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

12
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
13.12.2010, 00:27
В смысле, слон не должен при движении пересечь поле, которое может побить ладья? Или он не должен закончить ход на поле, которое может побить ладья?
В любом случае, надо лишь проверить, что ни одна из координат не совпадает с соответствующей координатой ладьи. В первом случае слон неправ, если (((c>a) && (c<e)) || ((c<a) && (c>e))) || (((d>b) && (d<f)) || ((d<b) && (d>f))), во втором случае нужно проверить только его финальную точку, слон прав, если ((с!=e) && (d!=f))
0
101 / 101 / 27
Регистрация: 10.09.2010
Сообщений: 267
13.12.2010, 00:46
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
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
13.12.2010, 00:57  [ТС]
Цитата Сообщение от 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
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
13.12.2010, 01:00
Цитата Сообщение от Kill100 Посмотреть сообщение
Как я понял если например слон прошел и встал на клетку (e, f) то надо проверить встанет ли туда за 1 ход лодья.
и если да то слон не может пойти на эту клетку
Тогда тебе надо только проверить, что ни одно измерение финальной клетки слона не совпадает с измерением ладьи (если слон не бьет ладью и на доске только две фигуры).
C++
1
if ((с!=e) && (d!=f)) { /* слон может идти */ }
Цитата Сообщение от Kill100 Посмотреть сообщение
Да она туда оч идет. И зачем её придумывали если нельзя пользоваться.
Для обратной совместимости.
0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
13.12.2010, 01:04
Цитата Сообщение от Overmind024 Посмотреть сообщение
Не когда не пользуйся этой командой!!!
А мне можно?
0
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
13.12.2010, 01:09  [ТС]
Цитата Сообщение от lemegeton Посмотреть сообщение
Тогда тебе надо только проверить, что ни одно измерение финальной клетки слона не совпадает с измерением ладьи (если слон не бьет ладью и на доске только две фигуры).
C++
1
if ((с!=e) && (d!=f)) { /* слон может идти */ }
ну ведь если с=e и d=f то слон просто срубит ладью...А если не равно то встать то он встать может но ври следующем ходе (то есть лодьи) лодья может его срубить следовательно ставить нельзя (В инете вычитал что лодья ходит по прямой а слон ( ходит по диагоналям. Слон, который может передвигатся по полям черного цвета, называется чернопольным(белые поля ему недоступны).Слон, который может передвигатся по полям белого цвета, называется белопольным(черные поля ему недоступны).)
ps сам не разу не играл так что...
0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
13.12.2010, 01:09
Но конечно, я поклянусь на библии, что не буду делать из программы "спаггети"
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
13.12.2010, 01:34
Цитата Сообщение от Kill100 Посмотреть сообщение
В инете вычитал что лодья ходит по прямой а слон ( ходит по диагоналям.
Ах вот где собака порылась...
Цитата Сообщение от Day Посмотреть сообщение
А мне можно?
Цитата Сообщение от Day Посмотреть сообщение
Но конечно, я поклянусь на библии, что не буду делать из программы "спаггети"
Интересный вопрос. IMHO, с разрешения родителей, начальства, жены и детей, в письменном виде в двух экземплярах и нотариально заверенной копией... Пуркуа бы и не па?

Добавлено через 1 минуту
Только чтоб потом не спрашивал, почему вот такое собирается без ошибок:
Code
1
2
3
4
5
int main()
{
     https://www.cyberforum.ru/
     return 0;
}
1
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
13.12.2010, 01:52
Цитата Сообщение от lemegeton Посмотреть сообщение
Code
1
2
3
4
5
int main()
{
     https://www.cyberforum.ru/
     return 0;
}
А че? Error-ов нету, но Warring может проклюнуться(неиспользованная метка)
Просто иногда во внутренних циклах обнаруживается невозможность дальнейшей обработки, и тут самое время сказать "goto ..." А просто return - низзя, надоть еще память ослобонить. Конечно, существуют еще всякие прибамбассы типа "finaly", но это ж то же goto, только еще гоэтушней.
Но я не собирался этот симпатичный шахматный топик превращать в обсуждение этой старинной и тупиковой темы.
Играем дальше!
0
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
13.12.2010, 16:23  [ТС]
Overmind024,
Сей час поработал с кодом что то не нашёл не 1 такой 6терки чисел которые бы давали положительный результат... Да и 100% как математически это считается не догнал...
0
101 / 101 / 27
Регистрация: 10.09.2010
Сообщений: 267
13.12.2010, 19:58
такс)
во первых нельзя былово слона поставить на черное поле)))
у белого поля есть свойство суммы 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
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
13.12.2010, 20:47  [ТС]
спасибо теперь прояснилась ситуация.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.12.2010, 20:47
Помогаю со студенческими работами здесь

Выяснить, можно ли с поля с координатами (k, l) одним ходом слона попасть на поле с координатами (m, n)
Долго думала над задачей, но так и не пришла к выводу, как можно это адекватно решить. Спасибо заранее за помощь Поле шахматной доски...

Выяснить, можно ли с поля с координатами (k, l) одним ходом ферзя попасть на поле с координатами (m, n)
Поле шахматной доски определяется парой натуральных чисел, первое число – номер вертикали, второе – номер горизонтали. Даны натуральные...

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru