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

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

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

 
 Ответить  Открыть новую тему 
> шахматы, проверка на чет. нечет. сразу 4 переменных
сообщение
Сообщение #1





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

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


Поле шахматной доски определяется парой натуральных чи-сел, каждое из которых не превосходит восьми: первое число – номер вертикали (при счете слева направо), второе – номер горизонтали (при счете снизу вверх). Даны натуральные числа k, l, m, n, каждое из которых не превосходит восьми. Требуется:
a) Выяснить, являются ли поля (k, l) и (m, n) полями одного цвета;
b) На поле (k, l) расположен ферзь. Угрожает ли он полю (m, n)?
c) Аналогично b), но ферзь заменяется на коня.
d) Выяснить, можно ли с поля (k, l) одним ходом ладьи попасть на поле (m, n). Если нет, то выяснить, как это можно сделать за два хода (указать поле, на которое приводит первый ход).
e) Аналогично d), но ладья заменяется на ферзя.
f) Аналогично d), но ладья заменяется на слона.
Предполагается, что указанные поля имеют один и тот же цвет.

попрошу всю задачу не решать, а только помогать по мере поступления вопросов... извините, если что не так, я тут новенький unsure.gif !

 
Program Z165;
uses crt;
var k, l, m, n:integer;
Begin
clrscr;
writeln ('Vvedite znachenie pervogo polja');
readln (k, l);
writeln ( 'Vvedite znachenie vtorogo polja');
readln (n, m);
begin
if (k mod 2=0 and l mod 2=0 and m mod 2=0 and n mod 2=0 or k mod 2=1 and l mod 2=1 and m mod 2=1 and n mod 2=1) then

writeln ( 'a) polja odnogo cveta')
else
writeln ( 'a) polja raznogo cveta');
end;
readkey;

End.
.
паскаль выдает ошибку №89 в поле с if хотя скобки вроде две)) что не так?
если есть другой способ решения пункта а интересно послушать! rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
хотя скобки вроде две)) что не так?
Вот то, что их только 2 и не так. Каждое условие оберни скобками - будет компилироваться.

if (k mod 2=0) and (l mod 2=0) and (m mod 2=0) and (n mod 2=0) or
(k mod 2=1) and (l mod 2=1) and (m mod 2=1) and (n mod 2=1) then
Иначе компилятор неправильно разберет выражение. Попробуй самостоятельно расставить в выражении
if (k mod 2 = 0 and l mod 2 = 0) then скобки согласно приоритетам операций - увидишь в чем ошибка.

Кстати, именно из-за того,что приоритет у and выше чем у or, нет необходимости оборачивать скобками еще и оба условия с разных сторон от or
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Я.
****

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

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


Прочитай, пожалуйста, про приоритет операций - сразу же поймешь.
Цитата
другой способ решения пункта а

if (k+l+m+n)mod 2 =0 then
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Если пытаться приделать логичность, то тогда так:

if odd(k xor l) = odd(m xor n) then...

А сумма может сделать плохо, если координаты заданы типом-диапазоном.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


Всем большое спасибо... все советы полезны cool.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





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

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



begin
if (k=m) or (l=n) or (k+l=m+n) then
writeln ('b) ferz` ygrogaet!')
else
writeln ('b) ferz` ne ygrogaet, rasslabtes`')
end;
begin
if (k=m+-1) and (l=n+-2)or (k=m+-2) and (l=n+-1)then
writeln ('c) kon` ygrogaet!')
else
writeln( 'c) kon` ne ygrogaet, rasslabtes`')
end;


Вот так я расправился с b, а вот насчет с вопрос:" Можно ли писать +- и если да, то почему не работает?"
Помогите кто чем может yes2.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


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

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

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


Цитата(Виликан @ 22.04.2011 0:34) *

begin
if (k=m) or (l=n) or (k+l=m+n) then
writeln ('b) ferz` ygrogaet!')
else
writeln ('b) ferz` ne ygrogaet, rasslabtes`')
end;
begin
if (k=m+-1) and (l=n+-2)or (k=m+-2) and (l=n+-1)then
writeln ('c) kon` ygrogaet!')
else
writeln( 'c) kon` ne ygrogaet, rasslabtes`')
end;


Вот так я расправился с b, а вот насчет с вопрос:" Можно ли писать +- и если да, то почему не работает?"
Помогите кто чем может yes2.gif

В "b" нужно добавить еще проверку равнства разностей.

Нет, писать "+-" нельзя. Можешь использовать конструкцию с модулем:
if Abs(k-m)=1 then ..


исправил описку

Сообщение отредактировано: Lapp -


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


Злостный любитель
*****

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

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


> if (k=m+-1) and (l=n+-2)or (k=m+-2) and (l=n+-1)then

if sqr(k-m) + sqr(l-n) = 5 then


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


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

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

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


Цитата(TarasBer @ 22.04.2011 9:57) *

if sqr(k-m) + sqr(l-n) = 5 then

Это хорошо тем, что имеет ясную графическую интерпретацию: цетры битых полей лежат на окружности с радиусом Sqrt(5). Достаточно посмотреть на доску, чтоб в этом убедиться.

Но вот интересно, что эта мысль приходит после выписывания уравнения, а не при первом взгляде на доску.. ))


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


Гость






попробуй так (((k mod 2=0) and (l mod 2=0) and (m mod 2=0) and (n mod 2=0)) or ((k mod 2=1) and (l mod 2=1) and (m mod 2=1) and (n mod 2=1)))
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Злостный любитель
*****

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

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


Неправильно.
Не работает для
k=1
l=2
m=2
n=1


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


Гость






mega_chok.gif mega_chok.gif mega_chok.gif как в этом можно что то понять blink.gif unsure.gif
 К началу страницы 
+ Ответить 

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

 





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