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

Объясните логику - C++

Восстановить пароль Регистрация
 
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
29.06.2012, 18:54     Объясните логику #1
Задание следующее "вывести все числа от а до в которые делятся на 3, a=3, b =10 c помощью cin ввести, чтобы получилось 3_6_9."

Я решил эту програмку следующим образом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream.h>
int main ()
{ 
 int a,i;
 cin >>i;
 cin >> a;
  while (i<a)
  { 
                      
        if (i%3) cout << " "; else cout <<i;
    i=i++;
 
      
  }
  
 
return 0;
}

Ответ вышел правильный 3,6,9. Но решил я её методом проб и ошибок. Что вывести числа делимые на 3, Я сначала написал if (i%3) cout <<i, но почему то программа выдавала 4,5,7,8. Когда методом обратного добавил else cout <<i; он выдал правильно 3,6,9.
Но я не могу понять, я вроде задаю программе выводи если i%3, он выводит не то, но когда задаю если i%3 оставь пустым, а если иное, то выводи, то есть так if (i%3) cout << " "; else cout <<i; тогда он выводит все которые делятся на 3. Но это же против логики? Как понять?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.06.2012, 19:04     Объясните логику #2
Цитата Сообщение от Parilo Посмотреть сообщение
я не могу понять
3%3 = 0
4%3 = 1
5%3 = 2

Так понятнее?
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
29.06.2012, 19:08  [ТС]     Объясните логику #3
Цитата Сообщение от Deviaphan Посмотреть сообщение
3%3 = 0
4%3 = 1
5%3 = 2

Так понятнее?
Нет, не понятно. Прочитайте мой вопрос внимательно. Причём тут 3%3=0, 4%3=1 и т.д. Я новичок, объясните подробнее.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.06.2012, 19:11     Объясните логику #4
Цитата Сообщение от Parilo Посмотреть сообщение
if (i%3) cout <<i
Цитата Сообщение от Parilo Посмотреть сообщение
я вроде задаю программе выводи если i%3
% - остаток от деления. Когда число делится без остатка, то получается ноль. А теперь ещё раз посмотри три примера выше и да снизойдёт на тебя озарение!
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
29.06.2012, 19:15     Объясните логику #5
Цитата Сообщение от Parilo Посмотреть сообщение
if (i%3) cout <<i
% возвращает остаток от деления числа на число.
Если a делится на b, то a%b == 0

0 эквивалентно false, остальные остатки (ненулевые) - true.
Поэтому ты и печатаешь НЕ делящиеся на 3 числа.

Добавлено через 2 минуты
i%3 для делящихся на 3 чисел экв. false. Используй отрицание.
Корректно будет работать if (!i%3) cout << i;
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
29.06.2012, 19:16  [ТС]     Объясните логику #6
Цитата Сообщение от ЛетающийЕнот Посмотреть сообщение
% возвращает остаток от деления числа на число.
Если a делится на b, то a%b == 0

0 эквивалентно false, остальные остатки (ненулевые) - true.
Поэтому ты и печатаешь НЕ делящиеся на 3 числа.
Спасибо Летающий Енот. Все бы объясняли как ты просто, мир был бы добрее)). Тебя я понял в отличии от предыдущего мастера C++, который думает видимо что я программист, я учусь по книге, так что много не понимаю пока.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6176 / 2905 / 284
Регистрация: 04.12.2011
Сообщений: 7,730
Записей в блоге: 3
29.06.2012, 19:17     Объясните логику #7
Не успел и удалил.
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
29.06.2012, 19:20  [ТС]     Объясните логику #8
Цитата Сообщение от IGPIGP Посмотреть сообщение
Не успел и удалил.
Не дорогой, у тебя всё неправильно. Тебе надо самому учиться))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2012, 19:42     Объясните логику
Еще ссылки по теме:

Попробуйте вникнуть в логику шпионов и рассекретить их переписку. Панграмма C++
Разобрать логику работы приведенного кода C++
Задача на нахождения вектора градиента, не подскажите логику решения? C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6176 / 2905 / 284
Регистрация: 04.12.2011
Сообщений: 7,730
Записей в блоге: 3
29.06.2012, 19:42     Объясните логику #9
Цитата Сообщение от Parilo Посмотреть сообщение
else cout <<i; он выдал правильно 3,6,9.
Ваш код должен был вывести 0_3_6_9 так как i не присвоено и инициализируется нулём.
Deviaphan ответил Вам понятно. Я ответил непонятно. Ответа ЛетающийЕнот, ещё не было.

ps пробелов в выводе тоже побольше чем сказано.
Yandex
Объявления
29.06.2012, 19:42     Объясните логику
Ответ Создать тему
Опции темы

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