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

условие if (x && y && z ) - C++

Восстановить пароль Регистрация
 
4AKE
29 / 29 / 12
Регистрация: 20.12.2010
Сообщений: 115
12.12.2011, 00:02     условие if (x && y && z ) #1
День добрый. подскажите что не так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(norcub() && nevk() && norok()) 
{
   cout<<"Условие не выполнено.\n"; count=30;
}
// эти 3 функции считают нормы матрицы,их код почти одинаков. например:
bool nevk ( ) 
{
 double sum=-3; 
 for(int i=0;i<3;i++)
   for(int j=0;j<3;j++)
     sum+=pow(arr[i][j]/arr[i][i],2);     
 cout<<"Евклидова норма= "<<sum<<endl;
return sum>=1; //условие выполняется при <1
}
if должен выполнится, если все функции возвратят 1.
в верхнем примере выполняется только norcub(), тоесть выводит значение нормы. Две последующие функции (nevk() norok()) значений не выводят.
а если делаю так, то все нормально:
C++
1
2
3
4
5
6
7
8
bool one,two,three;
one=norcub();
two=nevk();
three=norok();
if(one && two && three) 
{
  cout<<"Условие не выполнено.\n"; count=30;
}
здесь выполняются все функции, и выводят значения норм матрицы.
что не так с первым примером?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2011, 00:02     условие if (x && y && z )
Посмотрите здесь:

C++ Изменение формата данных && работа с файлом
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& C++
Почему условие "a && b == 0" не выполняется? C++
В программе объявлена переменная int x=1; определить значение выражения х>0 && x<1 ? 10/x : 10*x C++
Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
12.12.2011, 00:08     условие if (x && y && z ) #2
если norcub() возвращает false то остальные даже не пытаются выполняться.
Ты про это?
4AKE
29 / 29 / 12
Регистрация: 20.12.2010
Сообщений: 115
12.12.2011, 00:12  [ТС]     условие if (x && y && z ) #3
Цитата Сообщение от villu Посмотреть сообщение
Ты про это?
да.
а как тогда делать, чтобы и функции все выполнились и условие проверилось?
неужели по второму примеру делать?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
12.12.2011, 00:15     условие if (x && y && z ) #4
да. if устроен так.
если нужны результаты всех 3 функций, то вызывай так, как во втором варианте.
...
Пардон. Не if устроен, а работа с логическими операторами.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
12.12.2011, 06:07     условие if (x && y && z ) #5
первый и второй пример почти эквивалентны, только второй + еще три лишних операции, так что лучше оставить первый. Покажите функции nevk() && norok()

Добавлено через 14 минут
а, понял. надо чтобы обязательно сработали все три функции, тогда второй вариант будет лучшим.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
12.12.2011, 06:58     условие if (x && y && z ) #6
Цитата Сообщение от 4AKE Посмотреть сообщение
if(norcub() && nevk() && norok())

Цитата Сообщение от alkagolik Посмотреть сообщение
а, понял. надо чтобы обязательно сработали все три функции, тогда второй вариант будет лучшим.
не лучшим а единственным
если
C
1
if(norcub() && nevk() && norok())
переписать так
C
1
2
3
if(norcub() )
    if (nevk()) 
       if( norok())
понятно будет почему
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
12.12.2011, 07:50     условие if (x && y && z ) #7
Цитата Сообщение от ValeryS Посмотреть сообщение
не лучшим а единственным
опровергаю
C
1
2
3
4
5
if( norcub() & nevk() & norok() ) 
{
   std::cout << "Условие не выполнено.\n";
   count = 30;
}
я написал "лучшим" не имел ввиду лучшим из всех, а лучшим из двух имеющихся. Кстати 4AKE, это то что вам нужно.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
12.12.2011, 08:24     условие if (x && y && z ) #8
кстати
Цитата Сообщение от alkagolik Посмотреть сообщение
первый и второй пример почти эквивалентны, только второй + еще три лишних операции
скомпилируй оба примера дизасемблируй и найди разницу

Добавлено через 7 минут
Цитата Сообщение от alkagolik Посмотреть сообщение
if( norcub() & nevk() & norok() )
ты считаешь это более читабельно
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
12.12.2011, 11:19     условие if (x && y && z ) #9
Цитата Сообщение от ValeryS Посмотреть сообщение
ты считаешь это более читабельно
я знаю что это выполнит поставленную задачу и примером опровергаю эту чепуху
Цитата Сообщение от ValeryS Посмотреть сообщение
не лучшим а единственным
можно кстати еще поиграться с вариантами.
Цитата Сообщение от ValeryS Посмотреть сообщение
скомпилируй оба примера дизасемблируй и найди разницу
во - первых нечего компилировать, а во - вторых можно и без дампа понять (и даже прочитать из кода) что захватывается лишняя память для хранения чисел и она используется. Хорошо если компиль сумеет оптимизировать так что оба случая будут одинаково хранить значения в регистрах. Зачем закладывать ресурс когда можно этого не делать. Я знаю разницу между ними.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
12.12.2011, 20:52     условие if (x && y && z ) #10
Цитата Сообщение от ValeryS Посмотреть сообщение
if( norcub() & nevk() & norok() )
ты считаешь это более читабельно
Цитата Сообщение от alkagolik Посмотреть сообщение
я знаю что это выполнит поставленную задачу и примером опровергаю эту чепуху
для данной реализации (вообще то это меняет логику программы но сейчас не об этом)
если функции (norcub() .....)
перепишут и они будут возвращать не bool а int (например чтобы вернуть варианты ошибок 1,2 ит.д)
ты со своим вариантом хапнешь кучу проблем
сие называется хакерские методы
можно ведь и так написать
C
1
if( norcub() + nevk() + norok() )
но никто не скажет что это есть гуд
Цитата Сообщение от alkagolik Посмотреть сообщение
вторых можно и без дампа понять (и даже прочитать из кода) что захватывается лишняя память для хранения чисел
а в первом варианте она не захватывается??? если ты не видишь в исходнике это не значит что она не захватывается (если говорить про Intel и винду то значение возвращается чаще всего в EAX) и его надо где то хранить

Цитата Сообщение от alkagolik Посмотреть сообщение
Хорошо если компиль сумеет оптимизировать так что оба случая будут одинаково хранить значения в регистрах.
а ты скомпили и посмотри (лучше всего в релизе)
и у варианта
C++
1
2
3
4
5
6
7
8
bool one,two,three;
one=norcub();
two=nevk();
three=norok();
if(one && two && three) 
{
  cout<<"Условие не выполнено.\n"; count=30;
}
есть преимущество в том что определен порядок вызова функций
и всегда можно пройти отладчиком
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
12.12.2011, 22:30     условие if (x && y && z ) #11
Цитата Сообщение от ValeryS Посмотреть сообщение
если функции (norcub() .....)
перепишут и они будут возвращать не bool а int (например чтобы вернуть варианты ошибок 1,2 ит.д)
ты со своим вариантом хапнешь кучу проблем
не морочь голову, можно много всего разного сделать, а если заботиться о тех кто переписывает, так никто не запрещает оставить небольшой коммент при вызове функций, как и положено. Вот перепись функций из булей действительно кардинально поменяет логику программы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2011, 22:38     условие if (x && y && z )
Еще ссылки по теме:

Как проверить, принадлежит ли символ заданному диапазону m...n, кроме if (c <= n && c >= m) ? C++
Почему в выражении нельзя использовать запятую вместо && C++
Friend ostream& operator<<(ostream& stream, CArr& obj); C++

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

Или воспользуйтесь поиском по форуму:
4AKE
29 / 29 / 12
Регистрация: 20.12.2010
Сообщений: 115
12.12.2011, 22:38  [ТС]     условие if (x && y && z ) #12
всем спасибо, что откликнулись на вопрос.
я выберу вариант:
Цитата Сообщение от alkagolik Посмотреть сообщение
if( norcub() & nevk() & norok() )
работает, покороче и для лабы вполне годный.
завтра начну изучать ассемблер
Yandex
Объявления
12.12.2011, 22:38     условие if (x && y && z )
Ответ Создать тему
Опции темы

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