Программа, выводящая на экран числа с определенным интервалом в порядке возрастания (в порядке убывания)

Начинающим изучение C++ описанный ниже материал может оказаться достаточно сложным для восприятия, хотя относится к примитивным.
В статье Цикл for в С++ для начинающих было предложено решить задачу вывода на экран последовательности натуральных чисел по убыванию или вывести на экран последовательность натуральных чисел по возрастанию. Суть той задачи в том, что в зависимости от введённых значений программа принимает решение: какие числа выводить на экран и в каком порядке.
Поскольку я сам начинающий, мной были испытаны определённые затруднения с решением этой задачи.
Если вы приложили много усилий, но так и не поняли, как это реализовать, то, может быть, предложенное решение поможет проанализировать упущенные моменты и закрепить уже полученные знания о работе с циклом for, и вы продвинетесь на небольшой шажок к настоящему профессионализму.
  • Ввести в программу 2 числа: начало и окончание последовательности — и ввести интервал последовательности, после чего вывести последовательность натуральных чисел, разреженную определённым интервалом на экран.
Как-то так звучит то задание.
Например:

  • вводим 1 и 5 интервал 1, результат вывода на экран: 1 2 3 4 5
  • вводим 2 и 100 интервал 2, результат вывода на экран: 2 4 6 8 … 100 (кратное 2)
  • вводим 5 и 1 интервал 1, результат вывода на экран: 5 4 3 2 1
  • вводим 1 и 10 интервал 2, результат вывода на экран: 1 3 5 7 9 10
Если суть задачи ясна, то смотрите исходный код:

Что можно сказать по коду? В коде описан один внешний цикл-for. Код, повторяемый этим внешним циклом, можно разделить на 4 независимые составляющие:
1. Ввод значений с клавиатуры.
2. Проверка значений условием "больше".
3. Проверка значений условием "меньше".
4. Проверка на желание выйти.
Условиями 2 и 3 определяется поведение программы: при одном условии поведение одно, при другом условии другое. Внутри условий описаны внутренние циклы-for. Эти внутренние циклы-for вложены в условия, а условия вложены во внешний цикл-for. Своеобразная матрёшка. Таким образом получается, что цикл вложен в цикл. Циклы в C++ можно вкладывать в циклы. Можно делать бесконечно большую матрёшку, но обычно хватает небольшой вложенности. Если решаемая задача требует очень большой вложенности циклов, то, возможно, вы должны пересмотреть подход к решению задачи.
В нашем случае внешний цикл описывается только для того, чтобы пользователь мог выбрать, стоит ли ему продолжать работу. Постоянно запускать программу не очень выгодно. Если вы играете в игру и после каждой неудачи игра закрывается, а вам не только загружать сэйв, но и запускать игру — не комфортно ведь. Для внешнего цикла была опредена переменная, получившая себе имя flag. Транслитерацию для именования использовать не очень хорошо, имеет смысл учиться давать англоязычные имена: так и английский немного подтягивается, и более опытным проще понять, если переменная своим именем передаёт смысл своего существования.
Внутри круглых скобок используется три параметра, третий параметр — пустой параметр

Внешний цикл-for будет выполняться до тех пор, пока переменная flag не примет значение цифру не ноль. Если сделать неаккуратный ввод, например, ввести символ-букву, то программа собъётся, тонкости C++. Значение флага можно изменять внутри круглых скобок и внутри фигурных скобок. Одновременно изменять и там и там допускается правилами языка, но делать такое крайне плохо. Либо вы или пользователь вашей программы изменяете переменную: ваша территория внутри фигурных скобок; либо цикл-for изменяет переменную: его территория внутри круглых скобок. Поскольку переменная flag определена нами для пользователя, изменяем мы её внутри фигурных скобок. Дальше всё просто: если флаг ноль, то продолжаем, если любая другая цифра — выходим.
Определение вами смысла остальных переменных должно произойти без проблем.
a, b – начальное значение и последнее значение (своего рода границы нужного диапазона).
i – счетчик
Надеюсь, всё остальное, не написанное мной тут, вам ясно и без моей помощи. В принципе, я всё старался расписать в темах предшествующих этой.
Этот материал нужен для того, чтобы вы могли получить представление о работе счетчика внутри цикла-for и понять сам принцип циклических вычислений. Скромный багаж знаний, полученный до этого момента, может хорошо поспособствовать вам в решении некоторых несложных задач.
Постарайтесь понять эту тему – без понимания знаний не будет. Циклические вычисления требуются невероятно часто.

6 комментариев на «“Программа, выводящая на экран числа с определенным интервалом в порядке возрастания (в порядке убывания)”»

  1. Начинающий:

    для чего нужен

    в 16, 18, 20 и 22 строчке и почему n не где не определили

    Автор сайта отвечает:
    опечатка.

    переход на новую строку

  2. Максим:

    ну в 15 строке у вас кавычка потеряна.
    \n — не всегда верно, тем более раз пользуетесь плюсами то и пишите endl

    зачем использовать фор когда есть вайл

    в вашем случае проще было сделать так

    Автор сайта отвечает:
    что значит не всегда верно? Это всегда перенос строки.
    и что значит ”если плюсами”? endl используют не потому что плюсы, а или потому что не видят и не понимают разницы или потому что нужно выполнить очистку буфера потока после переноса строки. И вообще ленивым \n меньше букв.
    зачем использовать for? потому что известен предел. Циклы for и while в этой задаче взаимозаменяемы, но если изначально известно конечное, тогда обычно используют for, а иначе while. В примере конечное известно.
     
    у вас в примере ошибки (опечатки),
    да и читается он тяжело.

    • Артём:

      Нормально читается, а ошибка разве что

      Автор сайта отвечает:
      Ну там еще одна, но у меня на сайте их всё равно больше.
      Я здесь просто съерничал. А читается этот кусочек некоторыми начинающими глазами правда тяжело. Судите не только по себе.

      Я только сегодня начал изучать программирование! По ком мне судить?

      Автор сайта отвечает:
      изучайте) не судите.
      хорошо, что для вас легко читается.
      стиль у меня написания не прощеписания, а максимальной отдачи информации даже тяжело вникающим людям.
      когда человек полностью врубается в сам принцип, то ему несложно упростить код дальше так, как ему удобно.
      я вот такой упрощенный код покажу, например в статье, а кто-то не сообразит, что это условие можно внутри цикла разбить на части. Потом будет у него какое-то сложное условие в задаче и он будет стараться запихать его как в таком примере “прощеписания”, и чем сложнее условие, тем больше у него трудностей возникнет.
      В конкретном случае пример Максима, может, и более правильный, чем мой. Тяжелее только в понимании порядка действий работы компилятора (несложно, но есть такое дело).
      Вот и всё.

  3. Влад:

    Автору сайта большое спасибо! Рад за Максима, что он все «ловит на лету», но Админ прав, в таком объеме информации вполне возможны опечатки, а написание кода у Админа читается легко и понятно!!! Максиму спасибо за найденные опечатки!

  4. Роман:

    Я только не понял что означает & ? И для чего оно там, всё остальное понял.

    Автор сайта отвечает:
    не &, а && – логическое условие И. Если только все вместе условия выполняются, то выполнить что-то.

  5. Аноним:

    мсвтупил нно не во все

    основа понятна

     

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/hel-fulton/programmirovanie-na-yazyke-ruby/?lfrom=15589587
Яндекс.Метрика