Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
1

Объясните почему не срабатывает И (&&)

21.03.2013, 18:20. Показов 611. Ответов 2
Метки нет (Все метки)

Есть задача нахождения наибольшего общего делителя для двух чисел. Программу я написал.Но почему когда я указывал в цикле И (&&), цикл выполнялся неправильно, а когда указал ИЛИ (||), все заработало. Объясните почему нужно ставить ИЛИ, когда по логике вроде подходит И. Заранее извиняюсь, если мой вопрос глуп
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<iostream>
using namespace std;
int nod (int, int);
int main()
{
    setlocale(0,"");
    int ch1, ch2;
    cout << "Введите два числа" << endl;
    cin >> ch1 >> ch2;
    cout << "НОД: " << nod (ch1, ch2) << endl;
}
int nod (int chislo1, int chislo2)
{
    int NOD;
    if (chislo1 == 0)
        return chislo1;
    else if (chislo2 == 0)
        return chislo2;
    else if (chislo1 > chislo2)
    {
        NOD = chislo2;
        while (chislo1%NOD != 0 || chislo2%NOD != 0) // почему тут надо ставить ИЛИ вместо И ?
        {
            NOD--;
        }
        return NOD;
    }
 
    else if (chislo1 < chislo2)
    {
        NOD = chislo1;
        while (chislo1%NOD != 0 || chislo2%NOD != 0) // почему тут надо ставить ИЛИ вместо И ?
        {
            NOD--;
        }
        return NOD;
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2013, 18:20
Ответы с готовыми решениями:

Почему в инструкции if (x++ && y++) {} инкремент первой переменной срабатывает, а второй - нет?
int main(int argc, char** argv) { int x = 0; int y = 0; if (x++ &amp;&amp; y++) { ...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const...

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;)
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H ...

Почему в выражении нельзя использовать запятую вместо &&
Привет всем, у меня такой вопрос: Почему в выражении for (i=0; i &lt; *k &amp;&amp;...

2
Эксперт по пяченькам
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249
21.03.2013, 18:32 2
Когда один только делиться на NOD, а второй нет - то получается, что один из них выдает в сравнении истину, а другой ложь - в результате если применить И (&&) то итог- ложь -> цикл завершиться, и мы получаем, что одно из чисел не делиться на NOD, т.е. NOD - не является общим делителем.
1
5480 / 4875 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.03.2013, 18:59 3
Потому что при &&, проверка на условие в while(), будет всегда выдавать false (второе условие: остаток от целочисленного деления числа на себя, всегда равен 0).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2013, 18:59

В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9&
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка?
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt;...

Порядок вычисления: операторы «|» и «||», «&» и «&&»
В Java булевые операторы «|» и «||», и «&amp;» и «&amp;&amp;» отличаются друг от друга порядком вычеслений, а в...

Почему условие "a && b == 0" не выполняется?
решил вспомнить c++, начал что то писать и непонятка void __fastcall TForm1::Button1Click(TObject...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.