Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
Grugal

Написать программу, определяющую возможность перемещения белой шашки

21.10.2014, 18:03. Показов 6428. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Абсолютно не понимаю эту задачу:Как известно, для игры в шашки можно использовать шахматную доску, в которой горизонтальные строки обозначаются цифрами от 1 до 8, считая снизу вверх, а вертикальные столбцы - буквами латинского алфавита: a,b,c,d,e,f,g,h.
Для начинающих играть в шашки часто задают такую задачу: размещают белую шашку на доске и просят определить, сможет ли эта шашка попасть в заданную клетку, делая ходы по правилам и не превращая ее в дамку.
По правилам белая шашка ходит по черным полям по диагонали вверх.
Требуется написать программу, определяющую возможность перемещения белой шашки из одной заданной клетки в другую заданную клетку.

Формат входных данных: В единственной строке входного файла записаны в шахматной нотации: клетка, где стоит шашка, затем через пробел клетка, куда шашка должна попасть. Начальная и конечная клетки не совпадают.
Формат выходных данных: Выведите слово YES, если шашка может попасть из начальной клетки в конечную, и слово NO - в противном случае...

input3.txtoutput3.txt
a1 b2YES
b2 a1NO
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.10.2014, 18:03
Ответы с готовыми решениями:

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

Написать программу шашки
есть программа шашки, как реализовать программу чтоб можно было изменять цвет поля и тип шашек

Как написать консольную программу Шашки с применением ООП?
Задали написать шашки на С++, с применением ООП для консоли. Помогите пожалуйста какие классы создавать (какие в них должны быть методы)....

21
охотник
 Аватар для vint-81
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
22.10.2014, 08:23
взято тут
немножко переделано
Pascal
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
Function FromAtoB(ax:char;ay:byte;bx:char;by:byte):Boolean;
Begin
  If (ax in ['a'..'h']) and (ay in [1..8]) then
    If (ax=bx) and (ay=by) then FromAtoB:=True
    else
    Begin
      FromAtoB:=FromAtoB(pred(ax),ay+1,bx,by) or FromAtoB(succ(ax),ay+1,bx,by);
    end
  else FromAtoB:=False;
end;
 
function pologenie(ax:char;ay:byte):boolean;
begin
    pologenie:=not odd(ord(ax)+ay)
end;
 
const a:array[boolean] of string[3]=('NO','YES');
var ax,bx:char;
    ay,by:byte;
    s:string[5];
    code:integer;
begin
  assign(input,'input.txt');reset(input);
  assign(output,'output.txt');rewrite(output);
  readln(s);
  ax:=s[1];val(s[2],ay,code);
  bx:=s[4];val(s[5],by,code);
  if pologenie(ax,ay)
    then writeln(a[FromAtoB(ax,ay,bx,by)])
    else writeln(a[pologenie(ax,ay)])
end.
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
22.10.2014, 09:30
Как всё сложно... Задачка-то детская.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
f1,f2:text;
a:string;
begin
assign(f1,'input3.txt');
reset(f1);
assign(f2,'output3.txt');
rewrite(f2);
readln(f1,a);
if (abs(ord(a[4])-ord(a[1]))=1)and(ord(a[5])-ord(a[2])=1)then writeln(f2,'YES') else writeln(f2,'No');
close(f1);
close(f2);
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
22.10.2014, 10:10
Или так:
Pascal
1
2
3
4
5
6
7
8
const NoYes: array [Boolean] of String[3] = ('NO','YES');
var a: String;
begin
  Assign(input,'input3.txt'); Reset(input);
  Assign(output,'output3.txt'); Reset(output);
  ReadLn(a);
  WriteLn(NoYes[(abs(ord(a[4])-ord(a[1]))=1) and (ord(a[5])-ord(a[2])=1)]);
end.
0
охотник
 Аватар для vint-81
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
22.10.2014, 10:16
кот Бегемот, Ваша программа выдает YES, когда b1 c2, но b1 это белая клетка
Цитата Сообщение от Grugal Посмотреть сообщение
По правилам белая шашка ходит по черным полям по диагонали вверх.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
22.10.2014, 10:43
vint-81,
шашка уже стоит на доске, проверять ее положение в задании не сказано.

Если хотите проверить, сделать это совсем не сложно, допишите проверки через "(проверка) and ".

Сами проверки тоже не сложны, помня, что левый нижний угол черный:
(a[1] in ['a'..'h']) and
(a[2] in ['1'..'8']) and
Odd(Ord(a[1])-Ord('a')+Ord(a[2])-Ord('0')) and

Итого:
Pascal
1
2
3
4
5
6
7
8
9
10
const NoYes: array [Boolean] of String[3] = ('NO','YES');
var a: String;
begin
  Assign(input,'input3.txt'); Reset(input);
  Assign(output,'output3.txt'); Reset(output);
  ReadLn(a); WriteLn(NoYes[
    (a[1] in ['a'..'h']) and (a[2] in ['1'..'8']) and
    Odd(Ord(a[1])-Ord('a')+Ord(a[2])-Ord('0')) and
    (Abs(Ord(a[4])-Ord(a[1]))=1) and (Ord(a[5])-Ord(a[2])=1)]);
end.
0
охотник
 Аватар для vint-81
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
22.10.2014, 10:48
Цитата Сообщение от bormant Посмотреть сообщение
Итого:....
a1 c3 результат NO по моему должно быть YES
2
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
22.10.2014, 11:03
Цитата Сообщение от vint-81 Посмотреть сообщение
кот Бегемот, Ваша программа выдает YES, когда b1 c2, но b1 это белая клетка
Это олимпиадная задача, а в олимпиадных задачах исходные данные заведомо верные и не требуют проверки
Цитата Сообщение от vint-81 Посмотреть сообщение
a1 c3 результат NO по моему должно быть YES
Нет, это не так
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
22.10.2014, 11:07
Лучший ответ Сообщение было отмечено ildwine как решение

Решение

vint-81,
интересно, количество ходов в задании не указано. Решения с Ord()-Ord()=1 -- это про один ход.

Если речь про множество ходов, то решение будет другим.
проверить, что оба поля на черных клетках и что по горизонтали они по модулю не дальше, чем по вертикали:
Pascal
1
2
3
4
5
6
7
8
9
10
11
const NoYes: array [Boolean] of String[3] = ('NO','YES');
var a: String;
begin
  Assign(input,'input3.txt'); Reset(input);
  Assign(output,'output3.txt'); Reset(output);
  ReadLn(a); WriteLn(NoYes[
    (a[1] in ['a'..'h']) and (a[2] in ['1'..'8']) and
    (a[4] in ['a'..'h']) and (a[5] in ['1'..'8']) and
    Odd(Ord(a[1])-Ord('a')+Ord(a[2])-Ord('0')) and
    (Abs(Ord(a[4])-Ord(a[1]))<=Ord(a[5])-Ord(a[2]))]);
end.
Добавлено через 1 минуту
Цитата Сообщение от кот Бегемот Посмотреть сообщение
Нет, это не так
Пожалуй, что так, смотрите, условие
Цитата Сообщение от Grugal Посмотреть сообщение
Требуется написать программу, определяющую возможность перемещения белой шашки из одной заданной клетки в другую заданную клетку.
...
Выведите слово YES, если шашка может попасть из начальной клетки в конечную, и слово NO - в противном случае
но не сказано, что за один ход.
3
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
22.10.2014, 11:42
Цитата Сообщение от bormant Посмотреть сообщение
но не сказано, что за один ход.
+1

более того, в условии сказано:
Цитата Сообщение от Grugal Посмотреть сообщение
попасть в заданную клетку, делая ходы по правилам
получается, множественное число, т.е., действительно, допускается возможность сделать несколько ходов!

vint-81, молодец.
я вот лично тоже проглядел этот нюанс в условии.
Но состовители задачи - уродцы, могли бы дать пример, где требуется несколько ходов и ответ YES или NO
тогда бы таких вопросов/сомнений не возникало!
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
22.10.2014, 18:43
Да, я тоже купился, не прочитав до конца, но это не страшно, всё легко поправляется, смысл-то простой: модуль разницы между координатами по х и по у должен быть одинаковым, а у2 должен быть больше у1


Решение даже проще
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
f1,f2:text;
a:string;
begin
assign(f1,'input3.txt');
reset(f1);
assign(f2,'output3.txt');
rewrite(f2);
readln(f1,a);
if abs(ord(a[4])-ord(a[1]))=ord(a[5])-ord(a[2])then writeln(f2,'YES') else writeln(f2,'No');
close(f1);
close(f2);
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
22.10.2014, 19:06
Цитата Сообщение от кот Бегемот Посмотреть сообщение
модуль разницы между координатами по х и по у должен быть одинаковым
не одинаковым, а меньше или одинаковым, например, с b1 можно за 2 хода попасть на d3 или b3. А раз меньше, нужно проверять, что клетка назначения черная.
1
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
22.10.2014, 19:45
Но и это решаемо. Например, пошаговым выполнением ходов (так, навскидку, без математики). а лучше с математикой.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
22.10.2014, 19:49
кот Бегемот,
вон там вверху, в 9 сообщении, привел решение с математикой именно для многоходового варианта.
0
22.10.2014, 19:52

Не по теме:

bormant, я не спорю с Вашим умением решать сложные задачи, я дилетант и пытаюсь учиться у Вас. Спасибо за добрые советы

0
22.10.2014, 19:57

Не по теме:

кот Бегемот,
так я ваших умений не оспариваю, просто показываю на решение на случай если получилось недоразумение и его отнесли к одноходовому случаю, либо в нем изъяны есть, а я не заметил или чего-то не учел, у меня подобное частенько бывает, а коллективный разум -- он сила.

0
22.10.2014, 19:58

Не по теме:

bormant, кот Бегемот, любо дорого смотреть конструктивный спор двух умных людей :)

0
2 / 2 / 1
Регистрация: 23.10.2014
Сообщений: 55
23.10.2014, 14:35
Скажите, а что делать если после введения данных и нажатия enter программа не выполняет действия, а просто закрывает окно???
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
23.10.2014, 14:56
дописать ReadLn в конце, перед финальным end. Тогда программа не закроется сразу, будет ждать нажания Enter
1
 Аватар для APALoff
1648 / 1077 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
23.10.2014, 15:00
Алеекс, если это TP, то может быть нажать ALT+F5 - посмотреть экран результатов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2014, 15:00
Помогаю со студенческими работами здесь

Написать программу для Перемещения треугольников
программу для Перемещения треугольников: •Struct создаю точку, что x и y координата сохраняет •Создаю struct треугольник, который...

Написать программу перемещения параболы мышью
прошу помощи, нужна программа чтобы я двигал параболу мышкой

Разработать рекурсивную функцию, определяющую количество способов продвижения шашки на n-ю клетку.
Имеется полоска клетчатой бумаги шириной в одну клетку и длиной в n клеток. На первой клетке установлена шашка. Одним ходом шашку можно...

Написать программу, определяющую количество авто
Написать программу, определяющую количество авто. Для каждого владельца известны количество авто (тип integer), марка автомобиля (тип...

Написать программу определяющую коды ASCII
Напишите программу, определяющую коды ASCII, введенных с клавиатуры букв. Выход из программы по нажатию клавиши ESC.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru