Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73

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

29.06.2012, 16:14. Показов 4367. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скажите, можно ли использовать такие выражения и как они работают?

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

C++
1
if(a==b==c) cout << "Hello, World !"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.06.2012, 16:14
Ответы с готовыми решениями:

Использование лямбда-выражений в STL
Где dictionary - вектор, word1,word2 - string слова for(size_t i = 0; i &lt; word2.length(); ++i) { word1 = *find_if ...

Доказать (перебор) что для любых величин А, В, С типа Boolean следующие пары логических выражений эквивалентны
Доказать (путем перебора возможных значений), что для любых величин А, В, С типа Boolean следующие пары логических выражений имеют...

Использование неопределённого типа
Использование неопределённого типа &quot;monsters&quot;. Игра не дописанная, помогите решить ошибку!#include &quot;stdafx.h&quot; #include...

14
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
29.06.2012, 16:25
sievmi, нельзя использовать, потому что оператор == возвращает true или false и соответственно второй оператор сравнивает правое значение с true или false
1
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
29.06.2012, 16:48  [ТС]
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++;
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
29.06.2012, 16:50
sievmi, какого типа переменные a, b и с?
0
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
29.06.2012, 16:53  [ТС]
Цитата Сообщение от 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.
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
29.06.2012, 16:55
sievmi, можете написать человеческим языком поставку задачи?
0
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
29.06.2012, 19:28  [ТС]
gooseim, извеняюсь, задача такая :

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

Добавлено через 2 часа 25 минут
Да, наверное я очень криво изложил свою задачу и мало кто хочет разбираться в этих кривых строчках)
Но главную задачу попробую изъяснить коротко и ясно:
какие есть способы проверить равны ли несколько переменных между собой
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
29.06.2012, 19:31
C++
1
if(a==b && b==c)
0
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
29.06.2012, 20:21  [ТС]
А если элементов не 3, а скажем 30 или 100, используется этот же способ ?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
29.06.2012, 21:30
зависит от ситуации. но в общем случае все сто элементов и нужно будет проверить.
чтобы не загромождать код подобными сравнениями, их лучше вынести в отдельную функцию и передавать ей все необходимое для проверки, а она уже будет возвращать результат:
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++;
   }
}
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
29.06.2012, 21:43
Цитата Сообщение от 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;
    }
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 07:07
Цитата Сообщение от 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 константа.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
30.06.2012, 08:01
Цитата Сообщение от 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, используется этот же способ ?
Тогда только циклом.
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
30.06.2012, 10:53
Цитата Сообщение от taras atavin Посмотреть сообщение
Лучше подойдёт массив булов, а к нему как раз применим
C++
1
a==b==c
Да ну...
a = 1; b = 0; c = 0;
Результатом будет истина, а должна быть ложь. Без логических связок никак.

Добавлено через 3 минуты
Но в этом случае можно будет писать
C++
1
a && b && c
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
30.06.2012, 11:11
Цитата Сообщение от grizlik78 Посмотреть сообщение
a = 1; b = 0; c = 0;
Не учёл ассоциативность. Да, только отдельными сравнениями. Но массив булов здесь всё равно уместнее.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.06.2012, 11:11
Помогаю со студенческими работами здесь

Использование имени типа не допускается
Есть двоичное дерево поиска.И функция добавления,которая работает с помощью вспомогательной функции.Причем должна быть именно такой ,иметь...

Использование шаблонного типа в shared_ptr
Здравствуйте, я решил поупражняться на С++ и написать свой двунаправленный список: Node.h #pragma once #include...

Использование файлового типа данных
Всем прив:) Дан файл F1, который содержит номера телефонов сотрудников учреждения: указываеться фамилия сотрудника, его инициалы и...

Написать парсер математических выражений с функцией упрощения этих выражений
Люди, здравствуйте. Есть такая задача: написать упроститель выражений. На вход подается строка вида &quot;a*b+a*c&quot;, являющаяся...

IntelliSense: использование имени типа не допускается
Model.h #pragma once class ModelClass { private: ModelClass(void); ~ModelClass(void); static ModelClass* playInstance;


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru