Форум программистов, компьютерный форум CyberForum.ru

Использование выражений типа a == b == c; - C++

Восстановить пароль Регистрация
 
sievmi
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
29.06.2012, 16:14     Использование выражений типа a == b == c; #1
Скажите, можно ли использовать такие выражения и как они работают?

Почему такая конструкция дает истину только когда все переменные равны 1 ?

C++
1
if(a==b==c) cout << "Hello, World !"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
29.06.2012, 16:25     Использование выражений типа a == b == c; #2
sievmi, нельзя использовать, потому что оператор == возвращает true или false и соответственно второй оператор сравнивает правое значение с true или false
sievmi
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
29.06.2012, 16:48  [ТС]     Использование выражений типа a == b == c; #3
gooseim, спасибо за ответ.
Если их использовать нельзя, то самый просто способ сделать это поругому с помощью логческих связок?
Если так, то получается вот это короче сделать не получиться?

C++
1
2
3
4
5
for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(a[i][j]=='.' && a[i-1][j]=='.' && a[i+1][j]=='.'
                && a[i][j-1]=='.' && a[i][j+1]=='.')
                    c++;
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
29.06.2012, 16:50     Использование выражений типа a == b == c; #4
sievmi, какого типа переменные a, b и с?
sievmi
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
29.06.2012, 16:53  [ТС]     Использование выражений типа a == b == c; #5
Цитата Сообщение от gooseim Посмотреть сообщение
sievmi, какого типа переменные a, b и с?
Я кусок с a,b,c для примера написал, а вообще пытаюсь упростить вот этот кусок:
C++
1
2
3
4
5
for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(a[i][j]=='.' && a[i-1][j]=='.' && a[i+1][j]=='.'
                && a[i][j-1]=='.' && a[i][j+1]=='.')
                    c++;
Сдесь массив типа char.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
29.06.2012, 16:55     Использование выражений типа a == b == c; #6
sievmi, можете написать человеческим языком поставку задачи?
sievmi
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
29.06.2012, 19:28  [ТС]     Использование выражений типа a == b == c; #7
gooseim, извеняюсь, задача такая :

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

Добавлено через 2 часа 25 минут
Да, наверное я очень криво изложил свою задачу и мало кто хочет разбираться в этих кривых строчках)
Но главную задачу попробую изъяснить коротко и ясно:
какие есть способы проверить равны ли несколько переменных между собой
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
29.06.2012, 19:31     Использование выражений типа a == b == c; #8
C++
1
if(a==b && b==c)
sievmi
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
29.06.2012, 20:21  [ТС]     Использование выражений типа a == b == c; #9
А если элементов не 3, а скажем 30 или 100, используется этот же способ ?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.06.2012, 21:30     Использование выражений типа a == b == c; #10
зависит от ситуации. но в общем случае все сто элементов и нужно будет проверить.
чтобы не загромождать код подобными сравнениями, их лучше вынести в отдельную функцию и передавать ей все необходимое для проверки, а она уже будет возвращать результат:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool IsMatched(int** arr, unsigned i, unsigned j) // имя лучше какое-нибудь более осмысленное
{
  // тут делайте что хотите и как хотите.
  const char symbol = '.';
  return arr[i][j]==symbol
      && arr[i-1][j]==symbol
      && arr[i+1][j]==symbol
      && arr[i][j-1]==symbol
      && arr[i][j+1]==symbol
      ;
}
 
...
 
for(i=1; i<=n; i++)
{
  for(j=1; j<=m; j++)
  {
     if (IsMatched(a, i, j))
       c++;
   }
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,427
29.06.2012, 21:43     Использование выражений типа a == b == c; #11
Цитата Сообщение от sievmi Посмотреть сообщение
А если элементов не 3, а скажем 30 или 100, используется этот же способ ?
C++
1
2
3
4
5
6
7
bool yes = true;
for (int i=1; i < ARRSIZE; i++)
    if (ARR[i] != ARR[i-1])
    {
        yes = false;
        break;
    }
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 07:07     Использование выражений типа a == b == c; #12
Цитата Сообщение от DU Посмотреть сообщение
bool IsMatched(int** arr, unsigned i, unsigned j) // имя лучше какое-нибудь более осмысленное
Наверное не int** arr, а char** arr ?
C++
1
bool IsMatched(char** arr, unsigned i, unsigned j)
И не забыть, что массив будет объявляться так:
C++
1
char **a = new char*[n];
где n константа.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.06.2012, 08:01     Использование выражений типа a == b == c; #13
Цитата Сообщение от sievmi Посмотреть сообщение
Почему такая конструкция дает истину только когда все переменные равны 1 ?
А ты разверни её пополам. Что будет?
C++
1
(a==b)==c
, или
C++
1
a==(b==c)
, но и
C++
1
a==b
, и
C++
1
b==c
возвращают bool, он не может принимать ни каких значений, кромек 0 и 1.

Добавлено через 2 минуты
Цитата Сообщение от sievmi Посмотреть сообщение
Если их использовать нельзя, то самый просто способ сделать это поругому с помощью логческих связок?
C++
1
(a==b)&&(a==c)
,
C++
1
(a==b)&&(b==c)
, или
C++
1
(a==c)&&(b==c)
. Идея в том, что одна величина сравнивается со всеми и результаты объединяются по
C++
1
&&
.

Добавлено через 1 минуту
Цитата Сообщение от gooseim Посмотреть сообщение
можете написать человеческим языком поставку задачи?
Поставка бывает товара, а если задачи, то постановка.

Добавлено через 45 секунд
Цитата Сообщение от sievmi Посмотреть сообщение
извеняюсь
От слова "вина", а не "Вена".

Добавлено через 1 минуту
Цитата Сообщение от sievmi Посмотреть сообщение
Короче говоря, это часть задачи морской бой, нужно по заданному полю установить количество возможных мест для однопалубного корабля.('*' - занятая клетка, '.' - свободная).
Лучше подойдёт массив булов, а к нему как раз применим
C++
1
a==b==c
.

Добавлено через 1 минуту
Цитата Сообщение от sievmi Посмотреть сообщение
А если элементов не 3, а скажем 30 или 100, используется этот же способ ?
Тогда только циклом.
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
30.06.2012, 10:53     Использование выражений типа a == b == c; #14
Цитата Сообщение от taras atavin Посмотреть сообщение
Лучше подойдёт массив булов, а к нему как раз применим
C++
1
a==b==c
Да ну...
a = 1; b = 0; c = 0;
Результатом будет истина, а должна быть ложь. Без логических связок никак.

Добавлено через 3 минуты
Но в этом случае можно будет писать
C++
1
a && b && c
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2012, 11:11     Использование выражений типа a == b == c;
Еще ссылки по теме:

C++ Использование using над списком шаблонных аргументов переменного типа
C++ Использование принципов ООП для поиска в файлах разного типа
Использование указателей типа VOID C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.06.2012, 11:11     Использование выражений типа a == b == c; #15
Цитата Сообщение от grizlik78 Посмотреть сообщение
a = 1; b = 0; c = 0;
Не учёл ассоциативность. Да, только отдельными сравнениями. Но массив булов здесь всё равно уместнее.
Yandex
Объявления
30.06.2012, 11:11     Использование выражений типа a == b == c;
Ответ Создать тему
Опции темы

Текущее время: 18:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru