Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2015, 09:28   #1
SAIDTM
Новичок
Джуниор
 
Регистрация: 10.02.2015
Сообщений: 3
По умолчанию Задача на Паскале АBC

На шахматной доске стоит 2 фигуры, одна из них конь. Определить бьет ли конь 2 фигуру?
SAIDTM вне форума Ответить с цитированием
Старый 10.02.2015, 09:37   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Координаты коня (x1, y1)

Если координаты второй фигуры
(x1-2, y1-1), (x1+2, y1-1)
(x1-2, y1+1), (x1+2, y1+1)
(x1-1, y1-2), (x1-1,y1+2)
(x1+1, y1-2), (x1+1,y1+2)
то значит конь бьет вторую фигуру при условии, что
x1 >= 0 && x1 <=7 && y1 >= 0 && y1<=7.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 10.02.2015, 09:37   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Координаты коня - {x1,y1}
Координаты фигуры - {x2,y2}
Бьет, если |x1-x2|+|y1-y2|=3 и MAX(|x1-x2|,|y1-y2|)=2
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.02.2015, 11:15   #4
SAIDTM
Новичок
Джуниор
 
Регистрация: 10.02.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Координаты коня (x1, y1)

Если координаты второй фигуры
(x1-2, y1-1), (x1+2, y1-1)
(x1-2, y1+1), (x1+2, y1+1)
(x1-1, y1-2), (x1-1,y1+2)
(x1+1, y1-2), (x1+1,y1+2)
то значит конь бьет вторую фигуру при условии, что
x1 >= 0 && x1 <=7 && y1 >= 0 && y1<=7.
Можешь написать программу пожалуйста?

Цитата:
Сообщение от Аватар Посмотреть сообщение
Координаты коня - {x1,y1}
Координаты фигуры - {x2,y2}
Бьет, если |x1-x2|+|y1-y2|=3 и MAX(|x1-x2|,|y1-y2|)=2
Можете пожалуйста объяснить откуда это условие?

Последний раз редактировалось Stilet; 10.02.2015 в 15:09.
SAIDTM вне форума Ответить с цитированием
Старый 10.02.2015, 15:00   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Можете пожалуйста объяснить откуда это условие?
Э-э, с головы вестимо. А что не так? Конь ходит буквой г, высота 2, плечо 1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.02.2015, 15:38   #6
SAIDTM
Новичок
Джуниор
 
Регистрация: 10.02.2015
Сообщений: 3
По умолчанию

Все правильно. Просто понять как работает
SAIDTM вне форума Ответить с цитированием
Старый 10.02.2015, 16:25   #7
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Цитата:
Сообщение от SAIDTM Посмотреть сообщение
Можешь написать программу пожалуйста?
Я попытался, но у меня не получилось.
Я не спец по паскалю.

Ошибочная попытка:
Код:
program c; 
uses crt, math;

procedure f;
var
x1, y1, x2, y2: byte;

begin
x1:= 4; y1:= 4;
x2 := 6; y2 := 7;

if ( x1 - 2 >= 0 and y1-1 >= 0 and x2 = x1 - 2 and y2 = y1-1) or 
( x1 + 2<=7 and y1-1 >= 0 and x2 = x1 + 2 and y2 = y1-1) or 
( x1 - 2 >= 0 and y1+1<=7 and x2 = x1 - 2 and y2 = y1+1) or 
( x1 + 2 <= 7 and y1+1 <= 7 and x2 = x1 + 2 and y2 = y1+1) or 
( x1 - 1 >= 0 and  y1-2 >= 0 and  x2 = x1 - 1 and y2 = y1-2) or 
( x1 - 1 >= 0 and  y1+2 <= 7 and x2 = x1 - 1 and y2 = y1+2) or 
( x1 + 1 <= 7 and  y1-2 >= 0 and x2 = x1 + 1 and y2 = y1-2) or 
( x1 + 1 <= 7 and  y1+2 <= 7 and x2 = x1 + 1 and y2 = y1+2) then
writeln('+');

end;

begin
f()
end.
Исправленная программа:
Код:
program c; 
uses crt, math;

procedure f;
var
x1, y1, x2, y2: byte;

begin
x1:= 4; 
y1:= 4;
x2 := 6; 
y2 := 7;


//12.8.3 Boolean operators
//and  logical and
//or logical or

// 12.8.6 Relational operators
// Operator =
// Action Equal


//The expression between the if and then keywords 
//must have a Boolean result type.

// if 
if 
(
( Boolean(x1 - 2 >= 0) and Boolean(y1-1 >= 0) and Boolean(x2 = x1 - 2) and Boolean(y2 = y1-1)) or 
( Boolean(x1 + 2<=7) and Boolean(y1-1>= 0) and Boolean(x2 = x1 + 2) and Boolean(y2 = y1-1)) or 
( Boolean(x1 - 2 >= 0) and Boolean(y1+1<=7) and Boolean(x2 = x1 - 2) and Boolean(y2 = y1+1)) or 
( Boolean(x1 + 2 <= 7) and Boolean(y1+1 <= 7) and Boolean(x2 = x1 + 2) and Boolean(y2 = y1+1)) or 
( Boolean(x1 - 1 >= 0) and  Boolean(y1-2 >= 0) and  Boolean(x2 = x1 - 1) and Boolean(y2 = y1-2)) or 
( Boolean(x1 - 1 >= 0) and  Boolean(y1+2 <= 7) and Boolean(x2 = x1 - 1) and Boolean(y2 = y1+2)) or 
( Boolean(x1 + 1 <= 7) and  Boolean(y1-2 >= 0) and Boolean(x2 = x1 + 1) and Boolean(y2 = y1-2)) or 
( Boolean(x1 + 1<= 7) and  Boolean(y1+2 <= 7) and Boolean(x2 = x1 + 1) and Boolean(y2 = y1+2)) 
)

then
writeln('+');


//#include <stdio.h>
//void main() {  int x1, y1, x2, y2; x1 = 1;  y1 = 1; x2 = 3;  y2 = 2;
//if 
//(
//( x1 - 2 >= 0 && y1-1 >= 0 && x2 == x1 - 2 && y2 == y1-1) ||
//( x1 + 2<=7 && y1-1 >= 0 && x2 == x1 + 2 && y2 == y1-1) ||
//( x1 - 2 >= 0 && y1+1<=7 && x2 == x1 - 2 && y2 == y1+1) ||
//( x1 + 2 <= 7 && y1+1 <= 7 && x2 == x1 + 2 && y2 == y1+1) ||
//( x1 - 1 >= 0 &&  y1-2 >= 0 &&  x2 == x1 - 1 && y2 == y1-2) ||
//( x1 - 1 >= 0 &&  y1+2 <= 7 && x2 == x1 - 1 && y2 == y1+2) ||
//( x1 + 1 <= 7 &&  y1-2 >= 0 && x2 == x1 + 1 && y2 == y1-2) ||
//( x1 + 1 <= 7 &&  y1+2 <= 7 && x2 == x1 + 1 && y2 == y1+2) 
//)
//printf("+\n");
//}



end;

begin
f()
end.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"

Последний раз редактировалось challengerr; 10.02.2015 в 17:19.
challengerr вне форума Ответить с цитированием
Старый 10.02.2015, 23:00   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Бьет, если |x1-x2|+|y1-y2|=3 и MAX(|x1-x2|,|y1-y2|)=2
кстати, проще:
Код:
if abs(x1-x2)*abs(y1-y2) = 2 
  then WriteLn('Бьёт')
  else WriteLn('НЕ бьёт');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.02.2015, 23:03   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
кстати, проще:
+1 Точно, не докумекал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на ПАскале 1 -=Dima=- Паскаль, Turbo Pascal, PascalABC.NET 1 19.05.2013 17:36
Задача в паскале! Elementary Помощь студентам 0 08.11.2012 21:57
Паскаль АBC, строки. Дан текст. Между соседними словами – не менее одного пробела, за последним словом. Margosham-k Помощь студентам 0 18.04.2012 15:28