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

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

Восстановить пароль Регистрация
 
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
21.03.2013, 18:20     Объясните почему не срабатывает И (&&) #1
Есть задача нахождения наибольшего общего делителя для двух чисел. Программу я написал.Но почему когда я указывал в цикле И (&&), цикл выполнялся неправильно, а когда указал ИЛИ (||), все заработало. Объясните почему нужно ставить ИЛИ, когда по логике вроде подходит И. Заранее извиняюсь, если мой вопрос глуп
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;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2013, 18:20     Объясните почему не срабатывает И (&&)
Посмотрите здесь:

Проблема с проверкой условия цикла for( int i=2; !((n%i||d%i)&&!(n%i&&d%i))==0 ; i++) C++
объясните пожалйста что вот это значит: a[1]=COD[input&0x0f]; b[0]=COD[(input>>4)&0x0f];??? C++
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& C++
Почему условие "a && b == 0" не выполняется? C++
C++ Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? C++
Почему в выражении нельзя использовать запятую вместо && C++
Friend ostream& operator<<(ostream& stream, CArr& obj); C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
StasGamilton
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
21.03.2013, 18:32     Объясните почему не срабатывает И (&&) #2
Когда один только делиться на NOD, а второй нет - то получается, что один из них выдает в сравнении истину, а другой ложь - в результате если применить И (&&) то итог- ложь -> цикл завершиться, и мы получаем, что одно из чисел не делиться на NOD, т.е. NOD - не является общим делителем.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.03.2013, 18:59     Объясните почему не срабатывает И (&&) #3
Потому что при &&, проверка на условие в while(), будет всегда выдавать false (второе условие: остаток от целочисленного деления числа на себя, всегда равен 0).
Yandex
Объявления
21.03.2013, 18:59     Объясните почему не срабатывает И (&&)
Ответ Создать тему
Опции темы

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