Russian Qt Forum

Программирование => С/C++ => Тема начата: Fast7148 от Декабрь 05, 2010, 20:31



Название: Не могу понять как решить
Отправлено: Fast7148 от Декабрь 05, 2010, 20:31
Задача заключается в том что есть шахматное поле нужно ввести 2 клетки и программа должна опр какого цвета клетка и надо решить на codeblocks как console application помогите как?


Название: Re: Не могу понять как решить
Отправлено: SimpleSunny от Декабрь 05, 2010, 23:10
А что пробовали и что не получается?


Название: Re: Не могу понять как решить
Отправлено: Nimbus от Декабрь 06, 2010, 10:31
А подробнее можно? А то такие вопросы требуют ответа в виде ещё кучи вопросов, либо сразу готового решения.


Название: Re: Не могу понять как решить
Отправлено: Fast7148 от Декабрь 06, 2010, 14:33
А подробнее можно? А то такие вопросы требуют ответа в виде ещё кучи вопросов, либо сразу готового решения.
ввиде кода


Название: Re: Не могу понять как решить
Отправлено: crossly от Декабрь 06, 2010, 14:57
вы что ждете что вам готовый код выложат?? ... форум предназначен для помощи в решении проблемы... если вы не хотите пробовать то и помощи не ждите..


Название: Re: Не могу понять как решить
Отправлено: shirushizo от Декабрь 06, 2010, 18:34
Берешь номер строки и номер столбца, находишь их сумму, находишь отсаток от деления на 2... Если равен 0 - это один цвет, если - другой!
Необходимые знания:
a)Консоль: библиотека ввода/вывода (stdio или iostream), а точнее чтение и вывод на консоль (printf/cout и scanf/cin)
b)GUI: QWidget, QLineEdit, QLabel, QPushButton, QObject::connect
с)В обоих случаях: оператор if, оператор %, оператор ==, оператор +.

Если вместо номера строки соответствующая буква, возможны варианты... например, разные...



Название: Re: Не могу понять как решить
Отправлено: brankovic от Декабрь 23, 2010, 00:59
Код:
#include <iostream>

int main ()
{
   int s = 0;
   for (int i = 0; i < 4; ++i)
      s ^= std::cin.get ();
   std::cout << s % 2 << "\n";
}

выведет 0 если клетки одного цвета, 1 если разных


Название: Re: Не могу понять как решить
Отправлено: brankovic от Декабрь 23, 2010, 01:15
Код:
#include <iostream>
#include <iterator>
#include <numeric>

int main ()
{
   return std::accumulate (std::istream_iterator <char> (std::cin), std::istream_iterator<char> (), 0) & 1;
}

одной строкой


Название: Re: Не могу понять как решить
Отправлено: brankovic от Декабрь 23, 2010, 01:21
Код:
#include <cstdio>

int main ()
{
   puts ((getchar () ^ getchar () ^ getchar () ^ getchar ()) & 1 ? "different" : "same");
}

язык C, как всегда, лаконичен и прекрасен..


Название: Re: Не могу понять как решить
Отправлено: Fat-Zer от Декабрь 23, 2010, 02:00
Код:
#include <iostream>
#include <iterator>
#include <numeric>

int main ()
{
   return std::accumulate (std::istream_iterator <char> (std::cin), std::istream_iterator<char> (), 0) & 1;
}

одной строкой
А можете пояснить, как оно работает, а то видимо я iostream не так хорошо знаю...


Название: Re: Не могу понять как решить
Отправлено: brankovic от Декабрь 23, 2010, 02:26
А можете пояснить, как оно работает, а то видимо я iostream не так хорошо знаю...

я поленился, имелось ввиду:

std::cout << (
   (std::accumulate (...) & 1)
   ? "different"
   : "same"
);

А работает просто, accumulate суммирует, istream_iterator<T> (stream) читает T из stream, istream_iterator <T> () проверяет поток на конец файла. &1 проверяет на чётность. Единственно, она не проверяет, сколько символов введено. Для "e2e4" она выдаст верное "same", а для "qwe" тоже что-то выдаст..

Да, это при условии, что я правильно понял задачу: определить одного ли цвета две введённые клетки.