![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
leahov |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Мужской Реальное имя: leahov Репутация: ![]() ![]() ![]() |
Даны две литеры - латинская буква (от 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.
Помогите закончить задание Есть мысля как её закончить - изначально все поля сделать с нулями, а потом просто расставить под ход коня единички, одна загвоздка - не получается реализовать этот план. Может это и не правильно, но это по моему один из простых вариантов |
![]() ![]() |
RaV |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Владимир Репутация: ![]() ![]() ![]() |
Конь ходит буквой "Г".
Значит надо просто вычислить координаты клеток на которые может встать конь. Всего есть максимум 8 вариантов, если он не у края доски. Я так понимаю координаты коня вводит пользователь. остаеться только вычислить его возможные ходы. |
leahov |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Мужской Реальное имя: leahov Репутация: ![]() ![]() ![]() |
RaV в задании написано просто пометить крестиками все поля, которые «бьет» этот конь. Мне кажется надо просто вывести на экран шахматку с уже помеченными крестиками и ноликами.
Цитата Всего есть максимум 8 вариантов, если он не у края доски. А почему 8, я их штук 40 насчитал ![]() |
RaV |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Владимир Репутация: ![]() ![]() ![]() |
А как ты считал?
Я понимаю что он может сделать только один ход, и он может встать на 8 разных клеток. Сообщение отредактировано: RaV - 3.06.2006 8:51 |
leahov |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Мужской Реальное имя: leahov Репутация: ![]() ![]() ![]() |
я просто брал коня и ходил им по полю буквой Г, или я не понял задания? там вроде написано пометить все поля которые бьет конь
|
RaV |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Владимир Репутация: ![]() ![]() ![]() |
Я думаю что так не правильно.А то так можно всю доску обойти.
Цитата Даны две литеры - латинская буква (от a до h) и цифра (от 1 до восьми). Рассматривая их как координаты поля шахматной доски, на котором находится конь нарисовать шахматную доску, пометив крестиками все поля, которые «бьет» этот конь, и ноликами все остальные. Тут сказано, что есть координаты коня.Далее имеется ввиду,на какие клетки сможет встать конь. надо их вичислить и пометить на доске.Это и будут все поля ,которые "бьет" конь. Сообщение отредактировано: RaV - 3.06.2006 9:04 |
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Я немного причесал твою прогу, изменений вносить не стал (хотя руки чесались..
![]() Вставил код, который рисует кресты (мои вставки помечены строчками комментов со звездочками) - надеюсь, разберешься.. 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. Цифровая нумерация у тебя неправильная (сверху вниз) -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
leahov |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Мужской Реальное имя: leahov Репутация: ![]() ![]() ![]() |
![]() то есть я так понимаю надо задать двумерный массив изначально заполненный нулями, каждому его элементу будет соответствовать поле шахматной доски. (1, 1) - A1, (2,2) -B2, (1,8) - A8. Проблема в том что я не знаю как привязать координаты к шахматной доске. Я не волшебник ![]() ![]() |
leahov |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Мужской Реальное имя: leahov Репутация: ![]() ![]() ![]() |
lapp спасибо, сейчас попробую нули ставить
|
Lapp |
![]()
Сообщение
#10
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
lapp спасибо, сейчас попробую нули ставить Давай, вставляй. Для этого просто добавь else в мой if и рисуй кружочки. Но вообще - подумай над переделкой. 1. Не тащи 50 через всю прогу - сделай константу (скажем, a) и используй ее. 2. Закрашивание клеток белым цветом делай в первом же цикле (используй Bar вместо Rectangle, но рисуй только те клетки, у которых выполнено условие Odd(n*m) ), а цикл с FloodFill убери совсем. 3. Продумай нормальную адресацию клеток, можно сделать и буквенную .... остальное потом.. ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
leahov |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Мужской Реальное имя: leahov Репутация: ![]() ![]() ![]() |
а кружки через Ellipse рисовать?
|
Lapp |
![]()
Сообщение
#12
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
а кружки через Ellipse рисовать? Ну зачем же? используй Circle Цитата Procedure Circle (X, Y: Integer; R: word) Рисует окружность радиуса R, используя X,Y как координаты центра -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Malice |
![]()
Сообщение
#13
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
leahov |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Мужской Реальное имя: leahov Репутация: ![]() ![]() ![]() |
lapp извини за мою тупость , но куда эту процедуру засунуть?
|
RaV |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Владимир Репутация: ![]() ![]() ![]() |
Вот сюда :
{**************************}
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 - 2.11.2006 14:58 |
leahov |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Мужской Реальное имя: leahov Репутация: ![]() ![]() ![]() |
Circle (X, Y: Integer; R: word)
R-50 X,Y - это мои n и m? Сообщение отредактировано: volvo - 2.11.2006 14:58 |
leahov |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Мужской Реальное имя: leahov Репутация: ![]() ![]() ![]() |
если да - то она выдает ошибку на двоеточие после Y
Сообщение отредактировано: leahov - 3.06.2006 11:28 |
RaV |
![]()
Сообщение
#18
|
Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: Владимир Репутация: ![]() ![]() ![]() |
X и Y - центр твоей клетки
|
Lapp |
![]()
Сообщение
#19
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
2 Malice: спасибо, конечно +.
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);
{**************************}
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
leahov |
![]()
Сообщение
#20
|
Новичок ![]() Группа: Пользователи Сообщений: 39 Пол: Мужской Реальное имя: leahov Репутация: ![]() ![]() ![]() |
я как раз примерно тоже самой уже сделал только R вычислял, поставил 50 и испугался - узоры какие то фрактальные вышли
![]() Спасибо всем кто решил вместо меня ![]() |
![]() ![]() |
![]() |
Текстовая версия | 17.07.2025 21:19 |