IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Шахматный конь, интересная задачка)
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


В общем задача заключается в том, чтобы по введённому месту на доске (e1, h3, c6) программа выводила все возможные ходы конём. То есть если мы введём a1, то программа должна вывести следующие значения - b3, c2.

Помогите мне понять как построить алгоритм решения задачи. (как Вы понимаете,что на доске клетка а1 находится в нижнем левом углу. А h8 находится в верхнем правом углу)

Сообщение отредактировано: Сергей Меркурьев -


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Ну как идея.
Смотри что нам дает положение коня,это цифра и буква,первое ограничение,не вылезаем за алфавит,второе по цифрам.Какое дальше ограничение,если буква меняется на 1(с А на Б например),то число может либо увеличиться,либо уменьшитьсяна 2,и проверяеш,если при уменьшении ты вылитаеш за граници дозволенного(напимер был а1,по алфавину влево ты уйти не можеш,следовательно только на Б,либо С,но мы для условности берем пока что Б,значит ты из А1 можеш уйти либо в Б3 либо в Б-1,но б-1 это вылет за доску,поэтому остается Б3,а вообще суть задачи заключается в том,чтобы ограничить грамотно поле и разрешить только 2 варианта либо на 2 по алфавиту в +- и на 1 по числам,либо на 2 по числам и на 1 по алфавиту,дальше проверка границ.
А вообще можно все поле запихнуть в массив,дальше перебрать все движения коня(ну то что я гворил про движение) и потом просто проверять на принадлежность массиву,если принадлежит,то печать,если нет то увы.Код писать не стану,а то обругают еще...)))

Как проверить,ну ты ставиш допустим,чтобы числовая переменная была от 1 до 10 вроде(уж не помню давно не играл) ну и алфавит обьвляеш множеством.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


То есть доску можно описать следующим образом:

Var a:array[1..8,a..h] of char;
...
...
For i:=8 downto 1 do
For j:=a to h do
a[i,j]:=j+i;


Я не очень разбираюсь в таких выражениях, и я не уверен что может быть вот это [1..8,a..h] и вот это a[i,j]:=j+i;

Но ведь что-то подобное можно сделать?


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
я не уверен что может быть вот это [1..8,a..h]
Это - нет, а вот это:
[1..8,'a'..'h'] - вполне... Хотя, можно и первый вариант реализовать... В FAQ-е был? Про шахматные задачи читал, чтоб велосипед-то не изобретать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


Сейчас взгляну... Но как я понял ход мыслей у меня правильный? smile.gif


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Ну если ты захотел через массив реализовывать,то первый шаг ты сделал правильно.
Цитата

Хотя, можно и первый вариант реализовать

Это через аски чтоли?вроде как буквы там подрят расположены.И еще
Цитата

[1..8,'a'..'h']

Ну если он берет "of char",разве не ['1'..'8','a'..'h'] должно быть?Или я что то путаю.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


volvo, Что-то я не очень там могу найти это))
Krjuger, всё возможно... Только я с типом char очень мало работал))) Так что могу наделать сотни ошибок.

Сообщение отредактировано: Сергей Меркурьев -


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Ну я больше к volvo обращался,чем к тебе,ведь это его вариант был.
А вот тебе конкретная ссылка на этом же форуме,я хз можно ли их тут размещать.
Переборные Алгоритмы
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


Ну то что там записано, это для меня чуть-чуть трудновато... Причём я многово ещё не знаю... Так сказать изучаю азы программирования...

Ну вернёмся к задаче)
Значит таким образом записать шахматное поле можно?
Var a:array['1'..'8','a'..'h'] of char;
...
...
For i:='8' downto '1' do
For j:='a' to 'h' do
a[i,j]:=j+i;



Меня смущает данная надпись - a[i,j]:=j+i;

Сообщение отредактировано: Сергей Меркурьев -


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Ну эта запись ты понимаеш что говорит?ну смотри как пример a[a,1] это самый первый элемент в массиве и ты ему присваиваеш значение этого поля.то есть у тебя получается элемент с координатами а,1 развен а1,кстати тогда у тебя должно быть не of char(char это только 1 элемент а у тебя их 2) a of string[2].
Да кстати поменяй тогда,в описании массива сначала буквы потом цифры иначе будет 1а

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


В таком случае можно осуществить такую запись?
Var a:array[1..8,'a'..'h'] of string;


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Можно, но string[2] будет достаточно,зачем тебе выделать лишную память,если у тебя вполне конкретные цели.,а вообще вот так будет лучше.

...
...
For i:='8' downto '1' do begin
For j:='a' to 'h' do begin
a[i,j]:=j+i;
write(a[i,j]);
end;
writeln;
end;

печать на экран чисто формальна,чтобы ты наглядно понял,что значит та строчка.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Цитата
Ну если он берет "of char",разве не ['1'..'8','a'..'h'] должно быть?
А какая разница Of "что"? Of показывает, что будет храниться в массиве, тип его элементов. Тип индекса - дело другое... Тем и хорош Паскаль, что позволяет в качестве индекса использовать любой перечислимый тип...

{ Хочу - так: }
Var a:array['1'..'8','a'..'h'] of char;

{ или так: }
Var a:array[1 .. 8, 'a' .. 'h'] of char;

{ ну, можно и так: }
Const
a = 'a';
h = 'h';
Var a:array[1 .. 8, a .. h] of char;


Цитата
Меня смущает данная надпись - a[i,j]:=j+i;
Правильно смущает... Чтобы это стало возможно, надо сделать
Var a:array['1'..'8','a'..'h'] of String[2];
, в один Char строку не засунешь...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


Krjuger, нет нельзя потому что вся доска сделана именно таким видом:
Изображение

Сообщение отредактировано: Сергей Меркурьев -


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Тема слишком горяча,даже пост отредактировать низя blink.gif .Насчет ответа мне, спс,запомню,хотя роли не играет.Понимаеш,как ты запихнет туда поле,роли не играет,разница будет в том что у тебя получаться перевернутые шахматы(как будто смотриш на ходы противника),а если оно привильно,то на результат это не повлияет,тебе же надо вывести значение поля.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


Ну да значения! Но что бы данные значения вывести нужно знать как они находятся на поле. Тут всё таки желательно учитывать в каком положении находится доска шахмат.


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Покрути монитор и будет тебе счастье,только не выкрути совсем))))))Если бы ты собираться графику подключать и все это визуаально оформлять,то да,а так у тебя в виде результата только числа.
Хотя в общем это пустой треп))))Делай своим вариантом он эстетичнее)

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






А теперь - внимание: вопрос на засыпку. Зачем заполнять матрицу идентификатором клетки, если этот же идентификатор в любую секунду можно по индексам получить, может мне кто-нибудь объяснить? Что это мне даст? В матрице надо хранить не обозначение клетки, а признак того, может ли в определенную клетку попасть конь или нет...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


А это уже другой вопрос,у нас не спрашивали,надо ли это или нет,а спрашивали,что это делает)))))и что то мне подсказывает,что это человек взял либо из какого нить фака,либо из чьей нить задачи.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


Ну так после того как мы нашли данную клетку, как нам переобозначить число в букву? (если только не глупым перебором 1-а 2-b)


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.10.2020 16:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name