Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
#1

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

21.03.2013, 18:20. Просмотров 436. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2013, 18:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объясните почему не срабатывает И (&&) (C++):

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

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

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

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

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

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

2
StasGamilton
Эксперт по пяченькам
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
21.03.2013, 18:32 #2
Когда один только делиться на NOD, а второй нет - то получается, что один из них выдает в сравнении истину, а другой ложь - в результате если применить И (&&) то итог- ложь -> цикл завершиться, и мы получаем, что одно из чисел не делиться на NOD, т.е. NOD - не является общим делителем.
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.03.2013, 18:59 #3
Потому что при &&, проверка на условие в while(), будет всегда выдавать false (второе условие: остаток от целочисленного деления числа на себя, всегда равен 0).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 18:59
Привет! Вот еще темы с ответами:

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

объясните пожалйста что вот это значит: a[1]=COD[input&0x0f]; b[0]=COD[(input>>4)&0x0f];??? - C++
Доброй ночи);) char COD={0b00000000, 0b00001011, 0b00010110, 0b00011101, 0b00100111, 0b00101100, 0b00110001,...

Friend ostream& operator<<(ostream& stream, CArr& obj); - C++
CArr.h #pragma once class CArr{ int* arr = nullptr; int size = 10; void swap(int *a, int *b); void swap(int &amp;a, int &amp;b); ...

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) - C++
Добрый день. Как осуществляется выделения памяти под перегруженный оператор ввода данных в пользовательский тип? Ведь мы заранее не можем...


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

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

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