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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2012, 20:27   #1
varkich
Пользователь
 
Регистрация: 07.06.2012
Сообщений: 14
Восклицание Клетки

Даны координаты двух полей шахматной доски (координаты клетки - это 2 числа от 1 до 8: номер столбца и номер строки). Одного ли цвета эти клетки на шахматной доске?
Вывести в выходной файл сообщение YES, если они одного цвета, и NO иначе.
Примеры
input.txt output.txt
1 1 2 2 YES

1 1 1 4 NO
varkich вне форума Ответить с цитированием
Старый 19.06.2012, 23:58   #2
Костя КС
Пользователь
 
Аватар для Костя КС
 
Регистрация: 22.01.2008
Сообщений: 78
По умолчанию

Код:
program pole;
type
mas = array[0..1] of integer;
var
f:text;
t1,t2 : mas;
s1,s2 : integer;
b : boolean;
begin
 assign(f,'input.txt');
 reset(f);
 read(f,t1[0]);
 read(f,t1[1]);
 read(f,t2[0]);
 read(f,t2[1]);
 close(f);
 
 s1 := (t1[0]+t1[1]) MOD 2;
 s2 := (t2[0]+t2[1]) MOD 2;
 
 
 if s1=s2 then  b := true else b:=false;

  assign(f,'output.txt');
 rewrite(f);
  write(f,t1[0],' ');
  write(f,t1[1],' ');
  write(f,t2[0],' ');
  write(f,t2[1],' ');
 if b = true then
  begin
     writeln('yes');
     write(f,'yes');
  end else
  begin
     writeln('no');
     write(f,'no');
  end;
  close(f);
end.
Костя КС вне форума Ответить с цитированием
Старый 20.06.2012, 03:59   #3
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Костя, твоя прога, конечно, выдаст правильный ответ.. но зачем же все так переусложнять?? Типа без массивов эту задачу уже и не решить? ))
Код:
  readln(f,a,b,c,d);
  ...
  if odd(a+b+c+d) then writeln(f,'NO') else writeln(f,'YES');
И еще: если уж ты используешь массивы - то почему не используешь цикл при вводе/выводе? Какой тогда в них вообще смысл, в массивах? утяжелить код, чтоб использовать флешку с ним при самообороне? ))
И зачем много read/write там, где достаточно одного?
keep simple things simple
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 20.06.2012, 13:33   #4
Костя КС
Пользователь
 
Аватар для Костя КС
 
Регистрация: 22.01.2008
Сообщений: 78
По умолчанию

Эта программа была написана много лет тому назад к школьной олимпиаде 9 класса. Поэтому просьба сильно не придираться.
Костя КС вне форума Ответить с цитированием
Старый 21.06.2012, 00:53   #5
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Костя КС Посмотреть сообщение
Эта программа была написана много лет тому назад к школьной олимпиаде 9 класса. Поэтому просьба сильно не придираться.
фигасе причина.. а нам какая разница?

Если тебе мама/жена поставит тарелку и скажет: "этот суп я готовила месяц назад, так что просьба не придираться," - что ты скажешь?
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 21.06.2012, 09:08   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

TinMan, +1

решение должно было выглядеть примерно так:
Код:
program pole;
var
  c1,r1,c2,r2 : integer;
begin
 {открываем стандартные файлы ввода/вывода
   и переназначаем их в текстовые файлы}
 assign(input,'input.txt');
 reset(input);
 assign(output,'output.txt');
 rewrite(output);

 {читаем из стандартного файла ввода значения координат полей}
 readln(c1,r1,c2,r2);

 {выводим результат сравнения полей в выходной файл}
 if odd(c1+r1+c2+r2) 
   then writeln('NO') 
   else writeln('YES');

 {закрываем открытые файлы}
 close(input);
 close(output);
end.

Костя КС, извините, что пытаюсь Вам давать советы, но я, по дружески, рекомендую Вам не лезть в бутылку (тем более, что Вы не правы), а лучше рассмотреть другие варианты и понять, почему ваше старое решение крайне громоздкое/неоптимальное/неэффективное...
Всем мы здесь на форуме учимся!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.06.2012, 12:24   #7
studen
Пользователь
 
Регистрация: 21.05.2012
Сообщений: 88
По умолчанию

вводим координаты полей в переменные x1 и y1 - для первого поля и х2 у2 для второго
Код:
bln:= odd(x1 + y1) = odd(x2 + y2)
bln - логическая переменная, будет тру если клетки одного цвета.

ввод/вывод не рассматриваю
studen вне форума Ответить с цитированием
Старый 21.06.2012, 12:51   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

studen, в принципе, тоже верно. ну а чем вариант с
Цитата:
Код:
  if odd(a+b+c+d) then writeln(f,'NO') else writeln(f,'YES');
не устраивает?! и переменная булевского типа здесь при решении тоже не нужна!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выборка клетки в шахматах на С #Legalas Помощь студентам 6 04.04.2012 13:25
на шахматной доске заданы 2 клетки соедините эти 2 клетки кратчайшим путем коня Ker_33rus Общие вопросы C/C++ 5 18.03.2010 12:25
Не могу вписать цифры в клетки (игра судоку) Lees27 Общие вопросы C/C++ 1 18.11.2009 17:28
Клетки в listView разным цветом Altera Компоненты Delphi 9 24.09.2009 16:08
Реализация модели эволюции клетки. Параллельное программирование на языке с. Заноза Помощь студентам 4 03.04.2008 22:13