Основи програмування на С ++ для початківців

Завдання: циклы while, do while, вложенные циклы

Мы познакомились с в той час як і циклами робити під час в C и с вложенными конструкциями в циклах. Займёмся решением задач.

1. Організувати безперервний введення чисел з клавіатури, пока пользователь не введёт 0. После ввода нуля, показать на экран количество чисел, которые были введены, их общую сумму и среднее арифметическое. Подсказка: необходимо объявить переменную-счетчик, которая будет считать количество введенных чисел, и переменную, которая будет накапливать общую сумму чисел.

2. Необхідно підсумувати всі непарні цілі числа в діапазоні, который введёт пользователь с клавиатуры.

3. Задача посложней. Нарисовать равнобедренный треугольник из символов ^. Высоту выбирает пользователь. Наприклад: высота = 5, на экране

завдання вкладені цикли

176 думки про "Завдання: циклы while, do while, вложенные циклы

  1. #include
    #include
    using namespace std;

    int main()
    {
    INT ч;
    cout << "Enter height: " <> годину;
    for (int i = 1; i <= ч; i )
    {
    cout << setw(годину – + 1);
    for (INT L = 1; L <= i; л ++)
    {
    if (л == 1)
    cout << "^";
    else
    cout << "^^";
    }
    cout << endl;
    }
    system("pause");
    }

  2. Доброго дня!
    Не можу розібратися в останній задачі.

    #include
    using namespace std;
    int main()
    {
    setlocale(LC_ALL, “rus”);
    int height = 0; // висота трикутника
    cout <> height;
    for (int i = 0; i < height; i )
    {

    Після цього я перестаю розуміти, що далі відбувається.
    Взагалі з циклами в ваших уроках я начебто як розібрався, з теорією, пов'язаної з вкладеними циклами мені теж все зрозуміло, хоча і в завданнях з символами все ж виникло кілька запитань.
    перші 2 завдання я теж вирішив рази з третього і не без допомоги вашого рішення, а ось з третьою завданням я не можу впоратися навіть з вашим рішенням, бо воно мені не зрозуміло.

    Уже почав думати про те, щоб пошукати якісь інші уроки, де все пояснюється більш детально, але вирішив все-таки залишити коментар, так як ще не факт, що я знайду такі уроки, а ось ваші уроки мені були добре зрозумілі аж до останньої теми, пов'язаної з циклами, було б прикро просто забити конкретно на ці уроки через однієї проблеми, яку сам я вирішити не зміг.
    Сподіваюся, поясніть мені як все це робиться, а то начебто сама суть теми зрозуміла: цикл, в якому є ще цикл. Тільки на практиці це виглядає куди складніше, ну або я просто знаходжу прості речі занадто складними.

    1. Ще простіше пояснень ви просто не знайдете – простіше не буває (тому і тут пояснення з спрощеннями, умовчаннями і, як наслідок, з неточностями).
      Якщо вам незрозуміло, то незрозуміло не те, що пов'язано з мовою C ++, а то, що пов'язано взагалі з логікою побудови обчислення, алгорітмірованіем. Ось на цю частину (логіку) і зверніть увагу.

    2. Вкладені цикли досить прості в теорії, але бувають хитромудрими на практиці. Опишіть що саме незрозуміло? Tut troynaya matrёshka: сама верхня – великий цикл виводить рядки, в залежності від висоти фігури, два вкладених циклу в неї “сидять” поруч на двох стільцях, тільки команди виконують послідовно: спочатку перший вкладений виводить потрібну кількість прогалин, потім другий вкладений необхідну кількість символів – потім наступний рядок…..і так далі вниз до кінцевої цифри висоти.

    3. Для тих, хто в танку, спробую розжувати (для самого себе теж =) ):

      for (int i = 0; i > height висоті трикутника * /
      {
      for (int j = 1; j < height – i; j ) /*Цикл, которым мы рисуем пробелы перед символом "^". виконується (height – i – 1) к-ть разів. Тобто за кожен прохід зовнішнього циклу довжина порожнього рядка знижується на i (змінна i збільшується на одиницю за кожен прохід зовнішнього циклу, тому кількість разів виконання цього маленького циклу знижується на 1, відповідно довжина порожнього поля перед символом в рядку теж кожен раз скорочується).*/
      {
      cout << ' ';
      }

      for (int j = height – 2 * i; j <= height; j ) /*второй маленький цикл пишет символы "^"в кол-ве height – (height – 2 * i) + 1. Здається трохи заплутано на перший погляд. Якщо зовнішній цикл друкує перший рядок (я = 0), то кількість символів дорівнюватиме: height – height + 2*i + 1 = 1 + я * 2;

      З рівняння видно, що застосування змінної height тут зовсім ні до чого – вона взаємознищувалися при вирішенні рівняння. При будь-якому її значенні вона не впливає на кількість виконуваних циклів. Це не помилка програміста, але, що називається, "быдлокод" – негарне рішення задачі з однієї абсолютно непотрібної змінної, вводить в оману читача.

      Тому може здатися складним зрозуміти таку заплутану конструкцію, ведь в ней совершенно не обязательно использование "высоты треугольника". Нижче я запропоную свій варіант вирішення, без участі змінної height, адже замість нёё можна поставити взагалі будь-яке значення, хоч нуль, хоч -242148: результат буде той же! */
      {
      cout << '^';
      }
      cout << endl;
      }

      Ось як я вирішив цю задачу без участі змінної height в другому вкладеному циклі (зміна тільки в одному циклі, все решту залишив як і було):

      #include
      using namespace std;

      int main()
      {
      setlocale(LC_ALL, “rus”);

      int height = 0; // висота трикутника

      cout <> height;

      for (int i = 0; i < height; i )
      {
      for (int j = 1; j < height – i; j )
      {
      cout << ' ';
      }

      for (int j = 0; j < i * 2 + 1; j ) /* кол-во символов "^" в рядку визначається рівнянням: (кол-во символів) = i * 2 + 1. Як бачите, використана лише одна змінна з зовнішнього циклу. Таким образом, кол-во символів буде зростати на 2 кожен прохід зовнішнього циклу. Все просто! */
      {
      cout << '^';
      }
      cout << endl;
      }
      return 0;
      }

      Сподіваюся, мій коментар кому-небудь допоможе зрозуміти цю задачу. Всіх благ! P.S. Я сам тільки вчуся, не кидайтесь тапками =)))

  3. Звернути то я звернув, тільки що толку з цього? Я до сих пір не розумію всі ті дії, які знаходяться в зовнішньому циклі.

    1. “не розумію всі ті дії” – це все не стосується мови С ++, і більше того, не відноситься до програмування взагалі.
      Це область аналітичного мислення, математичного способу сприйняття, логічних побудов … – цьому вчать в інших місцях і інших курсах.

    1. Не пишіть сюди ці свої дурниці (які вважаєте програмним кодом). Пишіть це краще … на зборах ;-)

  4. Сформувати список з послідовності натуральних чисел r1, r2, r3, … р-н , які вводяться з клавіатури. Вивести дані числа спочатку в зворотному порядку, а потім в порядку введення. З отриманого списку видалити всі числа, кратні 3 і вивести отриманий список.

    1. Сформувати список з послідовності натуральних чисел r1, r2, r3, … р-н , які вводяться з клавіатури. Вивести дані числа спочатку в зворотному порядку, а потім в порядку введення. З отриманого списку видалити всі числа, кратні 3 і вивести отриманий спісок.Помогіте мені пжста

    2. доблесну, тут же сайт, який ставить собі за мету хоч чомусь навчити своїх читачів щодо C ++, а не робити замість читачів їхні домашні завдання.

      А якщо вам вже зовсім “в кінці кінців” караул по домашньому завданню до уроку, який ви прогуляли – тоді вам сюди: https://purecodecpp.com/archives/2821

  5. Автор, спасибі за вашу працю!

    У другому вкладеному циклі ви намудрували зі змінною height в умови циклу. Вона не потрібна, а зайва макулатура, так би мовити, голову морочить новачкам. Я сам не відразу зрозумів, що вона там зайва. Ось моє лаконічне рішення з використанням всього двох змінних замість трьох:

    for (int j = 0; j < i * 2 + 1; j ) /* кол-во символов "^" в рядку визначається рівнянням: (кол-во символів) = i * 2 + 1. Як бачите, використана лише одна змінна з зовнішнього циклу. Таким образом, кол-во символів буде зростати на 2 кожен прохід зовнішнього циклу. Все просто! */

  6. Lomalla Bosco час 2. (Тільки освоюю С ++). Туго з логікою. У відповідь не підглядав. У підсумку вийшло, але набагато громозче ніж у автора.
    До речі, автор, що скажете?

    1. дивно, чомусь код на сайті інший стає, не той, що я скидав. що Де? Де запит на введення висоти.

      1. 1. Редактор коментарів псує код.
        2. Вже не один раз писалося тут: не пишіть свій код в коментарі – він нікому не потрібен.
        3. Ніхто не стане коментувати ваш код, навіть якби він і не був спотворений.

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *