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

Зацикливает при вводе чётного числа. While - C++

Восстановить пароль Регистрация
 
denfox_pro
0 / 1 / 0
Регистрация: 30.10.2012
Сообщений: 113
07.06.2013, 19:03     Зацикливает при вводе чётного числа. While #1
Условие:
Дано целое число N (> 0). С помощью операций деления нацело
и взятия остатка от деления определить, имеются ли в записи числа N
нечетные цифры. Если имеются, то вывести TRUE, если нет — вывести
FALSE.

Код:
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
#include <iostream> 
using namespace std; 
int N,i; /
bool f;
int main() 
{
    setlocale(LC_ALL,""); //подключение русской кодировки для DEV-C++
    cout<<"Введите целое положительное число N (N>0):\n"; 
    cin>>N; 
    f=false;
    while (N!=0 && !f)
    {
        if ((N%10%2)==1)
        {
            f=true;
            N/=10;     
        }
    }
    if (f) 
        cout<<"true";
    else
        cout<<"false";
    return 0; 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,427
07.06.2013, 19:06     Зацикливает при вводе чётного числа. While #2
Цитата Сообщение от denfox_pro Посмотреть сообщение
while (N!=0 && !f)
* * {
* * * * if ((N%10%2)==1) // если остаток от деления N на 20 равен 1, т.е. при N = 1, 21, 41, 61, ...
* * * * {
* * * * * * f=true;
* * * * * * N/=10; * *
* * * * }
* * }
У вас программа ни разу не зайдет в условие if, если N не равно одному из перечисленных выше чисел. И при этом условие выхода из цикла while - неизменное число.
Expocooky
 Аватар для Expocooky
56 / 56 / 2
Регистрация: 06.06.2013
Сообщений: 112
07.06.2013, 19:12     Зацикливает при вводе чётного числа. While #3
Если число не попадет в тело условия, то цикл будет бесконечным
Нужно описать, что происходит при непопадании в эти условия
sm1992
2 / 2 / 0
Регистрация: 27.05.2013
Сообщений: 8
07.06.2013, 23:46     Зацикливает при вводе чётного числа. While #4
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
#include <iostream> 
using namespace std; 
int N; 
bool f;
int main() 
{
    setlocale(LC_ALL,""); //подключение русской кодировки для DEV-C++
    cout<<"Введите целое положительное число N (N>0):\n"; 
    cin>>N; 
    f=false;
    while ((N!=0) && (!f))
    {
        if ((N%10%2)==1)
        {
            f=true;
            N/=10;     
        }
        else
        {
            f=false;
            goto l;
        }
    }
    l:
    if (f) 
        cout<<"true";
    else
        cout<<"false";
    system("Pause");
    return 0; 
}
или так на мой взгляд проще
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream> 
using namespace std; 
int N; 
int main() 
{
    setlocale(LC_ALL,""); //подключение русской кодировки для DEV-C++
    cout<<"Введите целое положительное число N (N>0):\n"; 
    cin>>N; 
    
    if (N!=0)
        if (((N%10)%2)==0)
            cout<<"false"<<endl;
        else
            cout<<"true"<<endl;
    else
        cout<<"введен 0"<<endl;
    system("Pause");
    
   
    return 0; 
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,427
09.06.2013, 03:01     Зацикливает при вводе чётного числа. While #5
Цитата Сообщение от sm1992 Посмотреть сообщение
if (N!=0)
* * * * if (((N%10)%2)==0)
* * * * * * cout<<"false"<<endl;
* * * * else
* * * * * * cout<<"true"<<endl;
* * else
* * * * cout<<"введен 0"<<endl;
C++
1
cout << (N ? (N % 20 ? "true" : "false") : "введен 0") << endl;
только это все равно не верно

Добавлено через 9 минут
Так правильно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <clocale>
 
bool hasOdd(const int x)
{
    return !x || (x % 2 == 0 ? false : hasOdd(x/10));
}
 
int main()
{
    int N;
    setlocale(LC_ALL, ""); //подключение русской кодировки
    do
    {
        std::cout << "Введите целое положительное число N (N>0):\n";
        std::cin >> N;
    } while (N <= 0);
    std::cout << (hasOdd(N) ? "True\n" : "False\n");
}
Yandex
Объявления
09.06.2013, 03:01     Зацикливает при вводе чётного числа. While
Ответ Создать тему
Опции темы

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