Основы программирования на С++ для начинающих

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

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

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

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

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

задачи вложенные циклы

177 thoughts on “Задачи: циклы while, do while, вложенные циклы

  1. Не зачет, на пересдачу :) – так сказал бы один знакомый препод, увидев такие решения.

    В первой программе ошибка деления на ноль. Достаточно ввести ноль первым числом.

    Мелочь, но в первой задаче вы на равенство нулю проверяете дважды. МБ лучше сразу из цикла выйти? – типа
    while (true) {
    if (0 == val)
    break;
    sum += val;
    ++num;
    }

    Во второй задаче достаточно ввести конец диапазона меньше чем начало диапазона и программа зациклится. Не хватает “защиты от дурака”. Я думаю логично попросить числа в диапазоне (5, 1), как и (1, 5).

    По третьей задаче все окей. По крайней мере я косяков не вижу.

  2. подскажите , не могу понять
    как именно выполняется условие , в первой задаче , на отличие введенного числа от нуля? ведь не задается условие на прерывание цикла при вводе нуля
    запутался)

    while (true) {
    if (0 == val)
    break;
    sum += val;
    ++num;
    }

    такой код более понятно )

    1. if (digit) – до выполнения инструкции оператор if проверяет условие, если оно истинно, тогда исполняется инструкция. Условие можно записать как
      (digit != 0) но не обязательно. В случае if (digit) при любом ненулевом значении digit условие будет истинно, но если digit равно нулю (0 автоматически возвращает false), при проверке условия будет возвращено ложь и инструкция не будет исполнена.
      К примеру, мне кажется что во второй задаче, в 21 строке if (i % 2 != 0) можно записать просто как if (i % 2)

      1. Спасибо, что дали ответ на вопрос новичка.
        По поводу, как лучше записать if (i % 2 != 0) или if (i % 2) – мнения программистов расходятся. Согласно последним соглашениям о кодировании – лучше применять явные условия. Цитирую: “В булевских выражениях («if», «for», «while», «do» и первом операнде тернарного оператора “?”) всегда записывайте равенство и неравенство в явном виде.”

  3. Да я и сам новичок – второй месяц как начал читать книгу по с++))) Очень интересует вопрос (не нашел на сайте форума потому спрошу здесь): если изучить материалы, предоставленные на сайте и решать все эти задачи, можно ли считать себя программистом (хотя бы отчасти)? можно ли тогда составить начальное резюме и пробовать искать работу?
    Если нет то что еще надо выучить и знать для этого?
    Спасибо)

    1. Да ты что? ))) это только самое-самое начало. Сайт мой еще нуждается, как минимум, в 100 статьях. + много задач. На моем сайте пока есть только очень простые задачи. А чтобы считать себя программистом хотя бы отчасти – надо пару-тройку языков изучить.

  4. Решение в третьем задание получилось совсем иное.
    #include
    using namespace std;

    int main()
    {
    setlocale(LC_ALL, "rus");

    int iHeight(0), iConstructing(0), iCounting(0), iSymbols(1);

    cout < < "Введите высоту треугольника:"; cin >> iHeight;
    iConstructing = iHeight;

    do
    {
    iCounting = 0;
    while (iCounting < = (iConstructing - 1)) { cout << " "; iCounting++; } iCounting = 0; while (iCounting < iSymbols) { cout << "^"; iCounting++; } cout << endl; iSymbols += 2; iConstructing--; } while (iConstructing); return 0; }

  5. как вы думаете такой варианt приемлем для решения первой задачи?
    int main()
    {
    int number;
    int sum;
    int i=0;

    float aveRage;

    do
    {

    cout << "Please enter the " << i + 1 <> number;
    cout << "Number you entered is " << number << endl;

    i ++;
    sum += number;
    aveRage = sum / i++;

    }
    while (number != 0);

    cout << "The total number of digits that were inserted is " << i ++ << endl;
    cout << "The total amount of insereted digits summed together is " <<sum - 1 << endl;
    cout << "The average of these numbers is " << aveRage << endl;

    return 0;
    }

    1. 1) У тебя в цикле я не вижу ввода значений в number;
      2) Вычисление среднего можно вынести за цикл.
      Итого ужимаем до:

      int main(){
      int i,sum=0,number=0;

      for(i=1;number;i++,sum+=number) {
      cout<>number;
      }

      cout<<"The total number of digits that were inserted is "<<i<<endl
      << "The total amount of insereted digits summed together is "<<sum<<endl
      <<"The average of these numbers is " << sum/i<< endl;
      cin.get();
      return 0;
      }

      1. Хотя не. Если с do while то
        int main(){
        int i=0,sum=0,number=0;

        do{
        i++;
        cout<> number;
        sum+=number;
        } while(number);

        cout<<"The total number of digits that were inserted is "<<i<<endl
        << "The total amount of insereted digits summed together is "<<sum<<endl
        <<"The average of these numbers is " << sum/i<< endl;
        cin.get();
        return 0;
        }

      1. Он там был, Сайт почему то его сьел, и подставил выражение
        number;
        У меня то же самое в посте. Видимо какие-то спецсимволы сработали.

    2. Вообще то, почти никогда не следует спрашивать “вариант приемлем для решения?”.
      Нужно компилировать и выполнять. Если выполняется верно при всех мыслимых наборах входных данных – значит это приемлемое решение, что бы там ни было написано.

  6. Куда интереснее (и имеет широкое практическое применение) задача №1 если чуть-чуть изменить условие:

    > После ввода нуля, показать на экран количество чисел, которые были введены, их общую сумму, среднее арифметическое и среднеквадратичное отклонение от среднего (или дисперсию … рассеивание).

    Всё становится куда веселее…

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

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