Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение цвета клетки на шахматной доске 
:(
    Опции темы
darkart
Дата 16.1.2006, 03:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 2
Всего: 31



Наверное так...
Код

#include<stdio.h>
int main()
{
        const int n=8;//размер доски
        int num;//вводимый номер
        printf("Please enter a number(1-64):\n");
        scanf("%d",&num);
        printf("Result:");
        (((num-1)/n+num%n)%2)?printf("black\n"):printf("white\n");//проверка на четность/нечетность суммы номеров строки и столбца номера num
        return 0;
}


Это сообщение отредактировал(а) darkart - 16.1.2006, 03:24
PM MAIL WWW ICQ Skype GTalk   Вверх
Helicopterr
  Дата 16.1.2006, 03:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 20.8.2005
Где: Stavropol

Репутация: 2
Всего: 3



Partizan
Смотря с какой стороны смотреть на доску и в каком порядке отсчитывать поля.
А насчет "оскорблений" я что-то не понял.

Это сообщение отредактировал(а) Helicopterr - 16.1.2006, 06:02


--------------------
people can fly
PM MAIL   Вверх
Enya
Дата 16.1.2006, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 386
Регистрация: 5.10.2005

Репутация: нет
Всего: нет



darkart, ваша мысль наиболее чёткая.
Всем спасибо.
Ночью будет время, расскажу что было на занятиях по програмированию. smile


--------------------

Утсанвлен Денвер
1. PHP Version 5.1.6
2. MySQL 5.0.18-max
3. phpMyAdmin 2.6.1
PM MAIL WWW ICQ   Вверх
Partizan
Дата 16.1.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



Цитата(Helicopterr @ 16.1.2006, 03:41)
Partizan
Смотря с какой стороны смотреть на доску и в каком порядке отсчитывать поля.
А насчет "оскорблений" я что-то не понял.

вы плакали? smile...

хорошо... покажите мне,пожалуйста такой пример отсчета, чтобы ваша формула была верна....
смотреть на доску можете хоть с какой стороны...
ну и конечно последовательность клеток должна сохраняться...то есть нумерация должна быть строго последовательна...а не нумеровать по диагоналям...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Helicopterr
Дата 16.1.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 20.8.2005
Где: Stavropol

Репутация: 2
Всего: 3



Partizan
Зачем по диагоналям? змейкой или по кругу вполне можно. Но предлагаю всё же уточнить начальные условия.
Итак условия, как я понял: счёт полей по вертикалям слево направо т.е. будто текст читаем, ввод пользователя от 1 до 64. Ещё напомню, что в шахматах первое поле - а1 (1) черное, как и последнее - h8 (64). Тогда получим:

Код

   int number;
   cin>>number; number--;
   if( (number - (int)number/8) % 2 > NULL )
   cout<<"cell is white";
   else
   cout<<"cell is black";


Думаю, вполне лаконично. smile
Насчёт варианта darkart незнаю, сейчас посмотрю...


--------------------
people can fly
PM MAIL   Вверх
Partizan
Дата 16.1.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



а теперь, пожалуйста, сравните то, что у вас было раньше, и то, что у вас есть сейчас...
ибо результаты работы программ Разные(!).


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
DeadSoul
Дата 16.1.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(Partizan @ 16.1.2006, 03:11 Найти цитируемый пост)

Helicopterr я бы советовал вам подумать, прежде чем писать оскорбления...

Это констатация факта. Я, например, не получил внятного ответа на вопрос за каким лешим там нужен массив
Добавлено @ 22:47
Цитата(Partizan @ 16.1.2006, 17:06 Найти цитируемый пост)

а теперь, пожалуйста, сравните то, что у вас было раньше, и то, что у вас есть сейчас...
ибо результаты работы программ Разные(!).

На каких компиляторах проверял и с какими настройками?


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Fin
Дата 16.1.2006, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 3
Всего: 10



Ребята smile . Задача простая, но тот вариант, который предложил Partizan не лишен смысла. Конечно в данной задаче он чуть чуть тяжеловесен. Но когда у Вас стоит задача разделять на группы символы приходяшие на вход функции (например: число, латиница большая, латиница маленькая, кирилица большая, кирилица маленькая, символы, недопустимые значения). Этот способ намного эффективнее в работе и намного более легко настраиваемый.


--------------------
Пролетал мимо.
PM MAIL   Вверх
Enya
Дата 17.1.2006, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 386
Регистрация: 5.10.2005

Репутация: нет
Всего: нет



darkart, ваше решение наиболее оптимальное!


--------------------

Утсанвлен Денвер
1. PHP Version 5.1.6
2. MySQL 5.0.18-max
3. phpMyAdmin 2.6.1
PM MAIL WWW ICQ   Вверх
DeadSoul
Дата 17.1.2006, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(Enya @ 17.1.2006, 00:28 Найти цитируемый пост)

darkart, ваше решение наиболее оптимальное!

Неа, для int-ов вместо
a%2
выгоднее писать
a&1


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
azesmcar
Дата 17.1.2006, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Меня кое что другое очень заинтересовало..почему все решают задачу находя координаты шахматного поля одним int num?

Почему не двумя координатами? Для решения шахматных задач насколько я знаю используются два...

Это сообщение отредактировал(а) azesmcar - 17.1.2006, 09:54
PM   Вверх
Partizan
Дата 17.1.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



Цитата(DeadSoul @ 16.1.2006, 22:46 Найти цитируемый пост)

Добавлено @ 22:47

Цитата(Partizan @ 16.1.2006, 17:06 )

а теперь, пожалуйста, сравните то, что у вас было раньше, и то, что у вас есть сейчас...
ибо результаты работы программ Разные(!).


На каких компиляторах проверял и с какими настройками?


проверял в своей голове....чтобы понять что эти 2 кода различны совсем не обязательно пытаться их скомпилировать....если не верите можете скомпилировать их...
1-й его код(неверный)(это из мессаги, в которой он плакал smile (я кстати тоже плакал, увидев этот код smile ) а вообще давайте не будем ругаться smile ...):
Код

int number;
cin >> number;

if ( (number % 2) > NULL )
cout<<"Black";
else
cout<<"White";


2-й его код (верный):
Код

 int number;    
   cin>>number; number--;    
   if( (number - (int)number/8) % 2 > NULL )    
   cout<<"cell is white";    
   else    
   cout<<"cell is black";




--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
threef
Дата 17.1.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10




Цитата(azesmcar @ 17.1.2006, 08:47 Найти цитируемый пост)

Почему не двумя координатами?

Потому, что при обращении к двумерному массиву x[a][b] оно преобразуется компилятором в выражение вида
*(*(x+a)+b). Поэтому нет противопоказаний, чтобы это же сделать самому :
x[64], *(x+a*8+b)==*(x+a<<3+b).
PM MAIL   Вверх
azesmcar
Дата 17.1.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата
Потому, что при обращении к двумерному массиву x[a][b] оно преобразуется компилятором в выражение вида
*(*(x+a)+b). Поэтому нет противопоказаний, чтобы это же сделать самому :
x[64], *(x+a*8+b)==*(x+a<<3+b).


Ну это то ясно...меня интересует почему функции с одним параметром???
Ну так давайте сразу забудем о двумерных массивах будем использовать одномерные и каждый раз вычислять из заданых координатов...какой смысл??? если работаем как с двумерным массивом то и индексы обращения должны быть как у двумерного...

Я же не говорю что это противопоказано...просто думаю что неудобно, ведь работать с этой доской придеться потом как с двумерным массивом, вместо одного индекса будут два...не преобразовывать же его каждый раз?
PM   Вверх
Guest
Дата 17.1.2006, 12:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











bool Value; - 1 байт в откомпилированном exe, соответственно в памяти тоже. 8*8=64 байта? И вы предлагаете массив для решения тривиальной задачи. smile
  Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0879 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.