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

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

Войти
Регистрация
Восстановить пароль
 
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
#1

Объясните код программы - C++

18.10.2009, 15:26. Просмотров 474. Ответов 2
Метки нет (Все метки)

Пожалуйста объясните программу, если не трудно после каждой строчки напишите кометариий
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream.h>
int main () {
    int num;
    cout << "\nVviditi chislo :"; cin >> num;
    int half = num / 2;
    int div = 2;
    while (div <= half) {
        if (!(num % div)) cout << div << "\n";
        div++;
    }
    return 0;
}
Интересует этот кусочек программы
C++
1
2
3
4
 while (div <= half) {
        if (!(num % div)) cout << div << "\n";
        div++;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2009, 15:26     Объясните код программы
Посмотрите здесь:

C++ объясните код
C++ Объясните пожалуйста код и ход работы программы на С++
Объясните код программы C++
C++ Объясните код программы
Объясните код программы C++
C++ Объясните код
C++ Упорядочивание массива c++. Объясните код программы
C++ Объясните код программы
Объясните код программы для работы с текстовыми файлами C++
C++ Объясните код программы работы с двумерными массивами
Объясните код программы C++
C++ Передача объектов функциям(объясните код программы)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,340
18.10.2009, 16:20     Объясните код программы #2
Всё ясно
Значит. Есть цикл. Он будет выполняться до тех пор, пока верно это условие
C++
1
div <= half
Программа подошла к этому условию и проверяет, верно ли оно
Допустим, half== 6 (То есть ты ввёл число 12, программа вычислила half как 12/2)

Значит, программа проверяет, верно ли, что div <= half. То есть верно ли, что
2<= 6

Да, верно. Значит, выполняется цикл, (все операторы, которые в фигурных скобках)
Потом то есть идёт проверка условия
C++
1
!(num % div)
Условие проверяется так: сперва вычисляется num % div
Понятно, что если div== 2, то остаток будет либо 0 либо 1 в зависимости от того, чётное
или нечётное число num (num % div есть нахождения остатка от деления num на dev)

У нас num== 12, dev== 2. Остаток будет ноль.
То есть вместо
C++
1
!(num % div)
Можно смело писать !0 и вычислять значение ЭТОГО выражения.
Вычисляем (программа вычисляет)
Тут ты запомни, что !0 значит "не ноль"
А не ноль значит истино
Значит, условие
C++
1
!(num % div)
истино. А это, в свою очередь, значит, что
будет выполняться блок операторов соответтвующий (А если бы было ложно, то он не
выполнялся)

Ищем этот блок операторов. Он находится сразу за этим условием и либо заключён в
фигурные скобки, либо нет
У тебя не заключён. (после !(num % div) я фигурных скобок не наблюдаю)
А это значит, что вычислится всего одно выражение, котрое стоит сразу за этим условием
То есть в твоём варианте напишется
C++
1
cout << div << "\n";
И всё на этом.

А вот следующее выражение
C++
1
div++;
выполнится независимо от того, ложно или истино условие !(num % div)
То есть если фигурных скобок нет, то оператор, следующий сразу за условием, может
либо выполнятся, либо нет. А следующие операторы выполняются БЕЗУСЛОВНО.

Итак, ты инкриминировал dev. На этом одна ИТЕРАЦИЯ (или проход цикла)цикл закончилась.
После этого СНОВА проверяем условие, которое стоит после while
Ну и так далее.

Как ты уже понял, прога должна быть написана таким образом, чтобы
условие
C++
1
div <= half
не всегда было истиным., иначе цикл никогда не
закончится и прога будет продолжаться вечно. У тебя это условие соблюдено- раз от разу
меняется dev и, следовательно, значение
C++
1
div <= half
...Теперь лирика.
Если тебя удивляет, почему ты ни разу не увидел надписи в консоли, так, по-моему,
кто-то где-то уже об этом спрашивал.

Наконец, почему ещё может возникнуть непонимание
Смотри. Постарайся на первых порах ВСЕГДА заключать блоки операторов в фигурные скобки.
Ну, и с красотой как-нибудь определись (для себя то есть)
Начинающему надлежит писать так, пока не придёт полное понимание того, что ты делаешь

Тут операторы в разных строчках должны быть
C++
1
2
cout << "\nVviditi chislo :";
cin >> num;
Вот так пиши фигурные скобки
C++
1
2
3
4
if (!(num % div)) {
 cout << div << "\n";
}      
div++;
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
18.10.2009, 19:21  [ТС]     Объясните код программы #3
Спасибо тебе большое kravam
Yandex
Объявления
18.10.2009, 19:21     Объясните код программы
Ответ Создать тему
Опции темы

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