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

Проверка кратности чисел. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 104, средняя оценка - 4.90
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
03.09.2011, 21:29     Проверка кратности чисел. #1
Программа должна выводить все числа кратные 11-ти в заданном диапазоне:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void main()
{
int i=10,lim;
cout<<"Enter upper limit:\n";
cin>>lim;
while (i<=lim)
{
if ((i%11)==true)
cout<<"\n"<<i<<"\n";
i++;
}
getchar(),getchar();
}
результат: 12 23 34 45, т.е. каждое число на 1 больше чем нужно. Помогите разобраться почему так и как исправить.
Спс за внимание!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2011, 21:29     Проверка кратности чисел.
Посмотрите здесь:

C++ Проверка числа кратности двум.
C++ Проверка чисел
Дано натуральное число n>1. Выведите все простые множители этого числа в порядке возрастания с учетом кратности. C++
Выведите все простые множители числа в порядке возрастания с учетом кратности. C++
C++ Выведите все простые множители числа в порядке возрастания с учетом кратности
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.09.2011, 21:32     Проверка кратности чисел. #2
Может, потому, что
C++
1
i % 11 == true
эквивалентно
C++
1
i % 11 == 1
?
А если число кратно 11, то его остаток от деления должен быть равен нулю.
Сыроежка
Заблокирован
03.09.2011, 21:32     Проверка кратности чисел. #3
Цитата Сообщение от newb_programmer Посмотреть сообщение
Программа должна выводить все числа кратные 11-ти в заданном диапазоне:
void main()
{
int i=10,lim;
cout<<"Enter upper limit:\n";
cin>>lim;
while (i<=lim)
{
if ((i%11)==true)
cout<<"\n"<<i<<"\n";
i++;
}
getchar(),getchar();
}

результат: 12 23 34 45, т.е. каждое число на 1 больше чем нужно. Помогите разобраться почему так и как исправить.
Спс за внимание!

Это выражение i%11)==true верно в том случае, когда остаток от деления равен 1. То есть в этом условии логическая константа true преобразуется к целому типу и принимает значение, равное 1. Поэтому условие будет истинным, когда левый операнд также дает значение 1, то есть когда остаток от деленеия будет равен 1.

Вы могли бы переписать свое выражение следующим образом

if ( i%11 == 0 )
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.09.2011, 21:34     Проверка кратности чисел. #4
Да потому, что число, кратное 11, при num % 11 выдает 0

Добавлено через 36 секунд

Не по теме:

Шустрые....

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
03.09.2011, 21:39     Проверка кратности чисел. #5
Цитата Сообщение от Сыроежка Посмотреть сообщение
Это выражение i%11)==true верно в том случае, когда остаток от деления равен 1
вернее когда остаток от целочисленного деления на 11 больше нуля.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.09.2011, 21:48     Проверка кратности чисел. #6
Цитата Сообщение от easybudda Посмотреть сообщение
вернее когда остаток от целочисленного деления на 11 больше нуля.
Поясните.
2 тоже больше нуля. Однако он не выводит 13, 24 и т.д.
Сыроежка
Заблокирован
03.09.2011, 21:52     Проверка кратности чисел. #7
Цитата Сообщение от easybudda Посмотреть сообщение
вернее когда остаток от целочисленного деления на 11 больше нуля.
Вот только не нужно поправлять меня! Это выражение будет истинным именно только тогда, когда остаток от деления равен 1.

Я вам повторю свои объяснения, которые я уже представил. Значение типа bool преобразуется к типу int , то есть булева константа true преобразуется в целочисленное значение 1. Это преобразование происходит потому, что левый операнд имеет тип int. Поэтому равенстов может быть только тогда, когда левый операнд также имеет значение равное 1. То есть 1 может быть равна только самой себе, а не любому значению больше 0.

Добавлено через 35 секунд
Цитата Сообщение от soon Посмотреть сообщение
Поясните.
2 тоже больше нуля. Однако он не выводит 13, 24 и т.д.
Я уже все два раза пояснил!
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.09.2011, 21:53     Проверка кратности чисел. #8
Сыроежка, цитаты отслеживайте. Я не Вам запостил #6
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
03.09.2011, 22:00     Проверка кратности чисел. #9
Цитата Сообщение от soon Посмотреть сообщение
Поясните.
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main(){
    for ( int i = 11; i < 23; ++i )
        std::cout << i << '\t' << ( i % 11 ) << '\t' << std::boolalpha << bool( i % 11 ) << std::endl;
    return 0;
}
Код
$ ./1122
11	0	false
12	1	true
13	2	true
14	3	true
15	4	true
16	5	true
17	6	true
18	7	true
19	8	true
20	9	true
21	10	true
22	0	false

Не по теме:

Сыроежка, настоятельно рекомендую обратиться к психиатору по поводу мании величия.

grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
03.09.2011, 22:04     Проверка кратности чисел. #10
да, но
C++
1
bool( i % 11 )
не то же самое, что
C++
1
(( i % 11 ) == true)
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.09.2011, 22:12     Проверка кратности чисел. #11
2easybudda
В данном случае bool приводится к int, а не наоборот, разве нет?
В остальном полностью согласен
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2011, 22:15     Проверка кратности чисел.
Еще ссылки по теме:

Выведите все простые множители этого числа в порядке неубывания с учетом кратности (рекурсия) C++
FOR и определение кратности числа C++
C++ Ограничение на ввод чисел и проверка чисел

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
03.09.2011, 22:15     Проверка кратности чисел. #12
Цитата Сообщение от grizlik78 Посмотреть сообщение
не то же самое
ё... и в правду не то же самое... Вот в С вообще bool нету, там всё проще...
Цитата Сообщение от newb_programmer Посмотреть сообщение
Программа должна выводить все числа кратные 11-ти в заданном диапазоне:
ну тогда так как-нибудь:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main(){
    int top;
    std::cout << "Top: ";
    std::cin >> top;
    for ( int i = 10; i < top; ++i )
        if ( ! ( i % 11 ) )
            std::cout << i << std::endl;
    return 0;
}
Yandex
Объявления
03.09.2011, 22:15     Проверка кратности чисел.
Ответ Создать тему
Опции темы

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