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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Задача "Ход конем", помогите закончить
сообщение
Сообщение #1


Новичок
*

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

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


Даны две литеры - латинская буква (от a до h) и цифра (от 1 до восьми). Рассматривая их как координаты поля шахматной доски, на котором находится конь, нарисовать шахматную доску, пометив крестиками все поля, которые «бьет» этот конь, и ноликами все остальные.

шахматку нарисовал - вот код
Program zadacha1; 
uses graph,crt;
var driver,mode,m,n:integer;
stroka:string[1];
const
l:array [0..7] of string[1] =('a','b','c','d','e','f','g','h');
begin
driver:=detect;
Initgraph(driver,mode,'c:/bp/bgi');
setcolor(15);
for n:=1 to 8 do
for m:=0 to 7 do
rectangle(n*50,m*50,n*50+50,M*50+50);
for n:=0 to 3 do
begin
for m:=0 to 3 do
begin
floodfill(100*n+75,100*m+25,15);
floodfill(100*n+125,100*m+75,15);
end;
end;
for n:=0 to 7 do
begin
str(n+1,stroka);
OutTextXY(25,n*50+22,stroka);
end;
for n:=0 to 7 do
OutTextXY(n*50+70,415,l[n]);
readln;
closegraph;
end.


Помогите закончить задание
Есть мысля как её закончить - изначально все поля сделать с нулями, а потом просто расставить под ход коня единички, одна загвоздка - не получается реализовать этот план. Может это и не правильно, но это по моему один из простых вариантов
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

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

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


Конь ходит буквой "Г".
Значит надо просто вычислить координаты клеток на которые может встать конь.
Всего есть максимум 8 вариантов, если он не у края доски.

Я так понимаю координаты коня вводит пользователь.
остаеться только вычислить его возможные ходы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


RaV в задании написано просто пометить крестиками все поля, которые «бьет» этот конь. Мне кажется надо просто вывести на экран шахматку с уже помеченными крестиками и ноликами.
Цитата

Всего есть максимум 8 вариантов, если он не у края доски.

А почему 8, я их штук 40 насчитал wacko.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

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

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


А как ты считал?
Я понимаю что он может сделать только один ход, и он может встать на 8 разных клеток.

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


Новичок
*

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

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


я просто брал коня и ходил им по полю буквой Г, или я не понял задания? там вроде написано пометить все поля которые бьет конь
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


Я думаю что так не правильно.А то так можно всю доску обойти.
Цитата

Даны две литеры - латинская буква (от a до h) и цифра (от 1 до восьми). Рассматривая их как координаты поля шахматной доски, на котором находится конь нарисовать шахматную доску, пометив крестиками все поля, которые «бьет» этот конь, и ноликами все остальные.

Тут сказано, что есть координаты коня.Далее имеется ввиду,на какие клетки сможет встать конь.
надо их вичислить и пометить на доске.Это и будут все поля ,которые "бьет" конь.

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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Я немного причесал твою прогу, изменений вносить не стал (хотя руки чесались.. smile.gif ).
Вставил код, который рисует кресты (мои вставки помечены строчками комментов со звездочками) - надеюсь, разберешься..

Program zadacha1;
uses
graph,crt;

var
driver,mode,m,n:integer;
stroka:string[1];

const
l:array [0..7] of string[1] =('a','b','c','d','e','f','g','h');
{**************************}
Kx:integer=5;
Ky:integer=4;
{**************************}

begin
driver:=detect;
Initgraph(driver,mode,'c:/bp/bgi');
setcolor(15);
SetFillStyle(1,15);
for n:=1 to 8 do
for m:=0 to 7 do rectangle(n*50,m*50,n*50+50,M*50+50);
for n:=0 to 3 do begin
for m:=0 to 3 do begin
floodfill(100*n+75,100*m+25,15);
floodfill(100*n+125,100*m+75,15);
end;
end;
for n:=0 to 7 do begin
str(n+1,stroka);
OutTextXY(25,n*50+22,stroka);
end;
for n:=0 to 7 do OutTextXY(n*50+70,415,l[n]);

{**************************}
SetColor(LightRed);
Ky:=8-Ky;
for n:=1 to 8 do
for m:=0 to 7 do
if (Abs(n-Kx)=2)and(Abs(m-Ky)=1)or(Abs(n-Kx)=1)and(Abs(m-Ky)=2) then begin
Line(n*50,m*50,(n+1)*50,(m+1)*50);
Line(n*50,(m+1)*50,(n+1)*50,m*50);
end;
{**************************}

readln;
closegraph;
end.


P.S.
Цифровая нумерация у тебя неправильная (сверху вниз)


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


rolleyes.gif я так всю доску и обошел
то есть я так понимаю надо задать двумерный массив изначально заполненный нулями, каждому его элементу будет соответствовать поле шахматной доски. (1, 1) - A1, (2,2) -B2, (1,8) - A8. Проблема в том что я не знаю как привязать координаты к шахматной доске. Я не волшебник no1.gif ,я только учусь smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


lapp спасибо, сейчас попробую нули ставить
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(leahov @ 3.06.2006 10:25) *

lapp спасибо, сейчас попробую нули ставить

Давай, вставляй. Для этого просто добавь else в мой if и рисуй кружочки.

Но вообще - подумай над переделкой.
1. Не тащи 50 через всю прогу - сделай константу (скажем, a) и используй ее.
2. Закрашивание клеток белым цветом делай в первом же цикле (используй Bar вместо Rectangle, но рисуй только те клетки, у которых выполнено условие Odd(n*m) ), а цикл с FloodFill убери совсем.
3. Продумай нормальную адресацию клеток, можно сделать и буквенную
....
остальное потом.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


а кружки через Ellipse рисовать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(leahov @ 3.06.2006 11:15) *

а кружки через Ellipse рисовать?

Ну зачем же? используй Circle
Цитата
Procedure Circle (X, Y: Integer; R: word) Рисует окружность радиуса R, используя X,Y как координаты центра


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Профи
****

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

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


Цитата(lapp @ 3.06.2006 9:50) *

только те клетки, у которых выполнено условие Odd(n+m) ).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

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

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


lapp извини за мою тупость , но куда эту процедуру засунуть?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

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

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


Вот сюда :

{**************************}
SetColor(LightRed);
Ky:=8-Ky;
for n:=1 to 8 do
for m:=0 to 7 do
if (Abs(n-Kx)=2)and(Abs(m-Ky)=1)or(Abs(n-Kx)=1)and(Abs(m-Ky)=2) then begin
Line(n*50,m*50,(n+1)*50,(m+1)*50);
Line(n*50,(m+1)*50,(n+1)*50,m*50);
end{<---- убери ';'}
else {<----вот сюда ,рисуем окружность}
{**************************}



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


Новичок
*

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

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


Circle (X, Y: Integer; R: word) 

R-50
X,Y - это мои n и m?

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


Новичок
*

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

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


если да - то она выдает ошибку на двоеточие после Y

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


Новичок
*

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

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


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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


2 Malice: спасибо, конечно +.

Цитата(leahov @ 3.06.2006 12:16) *

Circle (X, Y: Integer; R: word) 

R-50
X,Y - это мои n и m?
Нет, это экранные координаты центра круга... короче, вот
{**************************}
SetColor(LightRed);
Ky:=8-Ky;
for n:=1 to 8 do
for m:=0 to 7 do
if (Abs(n-Kx)=2)and(Abs(m-Ky)=1)or(Abs(n-Kx)=1)and(Abs(m-Ky)=2) then begin
Line(n*50,m*50,(n+1)*50,(m+1)*50);
Line(n*50,(m+1)*50,(n+1)*50,m*50);
end
else Circle(n*50+25,m*50+25,20);
{**************************}


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Новичок
*

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

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


я как раз примерно тоже самой уже сделал только R вычислял, поставил 50 и испугался - узоры какие то фрактальные вышли lol.gif , самому смешно
Спасибо всем кто решил вместо меня unsure.gif это задание.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 




- Текстовая версия 22.11.2017 17:53
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"