§ 6. Использование основных алгоритмических конструкций для решения задач

Сайт: Профильное обучение
Курс: Информатика. 10 класс (Повышенный уровень)
Книга: § 6. Использование основных алгоритмических конструкций для решения задач
Напечатано:: Гость
Дата: Sunday, 31 August 2025, 03:07

6.1. Отладка программ в среде Code::Blocks

В помощь пользователю почти любой среды программирования предоставляются средства, необходимые для отладки программы. Они позволяют тщательно протестировать программу и устранить все ошибки в ней (пример 6.1). Среда Code::Blocks содержит отладчик, который позволяет выполнить программу построчно, просматривать и модифицировать переменные и выражения. Отладчик встроен в интегрированную среду, и поэтому пользователь может редактировать, компилировать и отлаживать программу, не выходя из среды.

Ошибки компиляции

Ошибки компиляции, или синтаксические ошибки, возникают в том случае, если не описана некоторая переменная, передается неправильное количество параметров функции, пропущена точка с запятой или скобка и т. д. С исправлением ошибок, обнаруженных во время компиляции, сложностей практически не возникает. Компилятор, обнаружив в программе ошибки, завершает работу и выдает информацию об ошибках в окне редактора кода, на вкладке Build log (пример 6.2). Исправив ошибки, обнаруженные таким образом, можно повторить компиляцию программы.

Ошибки выполнения

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

Логические ошибки

Программа может содержать и логические ошибки. Логические ошибки позволяют компилятору выполнить программу, однако результат выполнения будет отличаться от ожидаемого. Наличие таких ошибок определяется с помощью тестирования. Обнаружить ошибку этой группы, не имея никаких отладочных средств, бывает достаточно сложно. Наличие в программе таких ошибок является одной из основных причин возникновения необходимости использования отладчика, входящего в состав интегрированной среды. Отладчик позволяет выполнить программу в диалоговом режиме, наблюдая за изменением значений отдельных переменных или выражений. Имеется возможность остановиться в заданной точке программы и изменить значения некоторых переменных и выражений.

Команды отладчика собраны в меню Debug (пример 6.4). Эти же команды продублированы на панели быстрого доступа (пример 6.5). Описание команд отладки, собранных в меню Debug, приведены в Приложении к главе 1.

Трассировка — построчное выполнение исходной программы, при котором после выполнения каждой строки можно остановиться и посмотреть результаты.

Наличие возможности выполнения исходной программы до строки, на которую указывает курсор, позволяет пропустить трассировку малоинтересных частей программы и сразу перейти в точку начала отладки. Для этих целей можно нажать F4 в строке с курсором. Если эта строка находится после ввода данных, то ввод данных произойдет как обычно, выполнение программы прервется, когда придет очередь выполнения этой строки. Необходимо переключиться из консольного окна в окно кода. Та строка, которая должна выполниться, помечается желтым треугольником  (пример 6.6).

Некоторые строки программы могут быть помечены как точки прерывания. Для этого достаточно кликнуть мышью слева от строки программы. В этом месте появится красный круг  (пример 6.7).

Когда в процессе выполнения отладки программы (запуск с помощью клавиши F8 или ) достигается точка прерывания, выполнение программы приостанавливается и на экране отображается фрагмент исходного текста программы, содержащий точку прерывания. Поверх точки прерывания устанавливается маркер отладки программы . Остановившись в точке прерывания можно просмотреть значения переменных, начать трассировку или выполнить программу до следующей точки прерывания.

Отладчик интегрированной среды Code::Blocks предоставляет возможность наблюдения за изменением переменных или выражений. Наблюдаемые объекты отображаются в окне наблюдения Watches, отражая изменения в программе при пошаговом выполнении. Для открытия окна Watches можно выполнить команду Debug  Debugging Windows  Watches или выбрать его из списка отладочных окон на панели быстрого доступа (пример 6.8).

Для добавления переменной в окно просмотра нужно добавить ее имя в первый столбец окна Watches. 

Пример 6.1. Типы ошибок:

  • ошибки компиляции (синтаксические);
  • ошибки выполнения;
  • логические ошибки.

Пример 6.2. Пример ошибки компиляции.

Все ошибки выделяются красным цветом. Для каждой ошибки указывается номер строки, в которой обнаружена ошибка, и описание этой ошибки. Серым фоном подсвечивается та из ошибок, которая выделена в программе знаком  .

Двойной щелчок по ошибке в окне Build log покажет ее местоположение в программе. Переходить к просмотру следующей ошибки можно с использованием сочетания клавиш
Alt + F2, а возвратиться к предыдущей — Alt + F1.

Пример 6.3. Пример ошибки выполнения.

Текст программы:

#include <iostream>

 

using namespace std;

 

int main()

{

    int x;

    cout << "x = ";

    cin >> x;

    int y = x / (- 5);

    cout << y;

    return 0;

}

Тестирование:

При x = 5 возникает ошибка деления на нуль, и среда выдает сообщение с кодом ошибки: «Process returned −1073741676». Если программа выполнилась успешно, то код ошибки 0: «Process returned 0».

При анализе программы компилятор выдает не только ошибки, но и предупреждения (warning) о том, что некоторые записи могут привести к ошибке. Предупреждения выделяются синим цветом.

Если в программе выше записать

    int = x / (- x);   

то при компиляции программы можно увидеть предупреждение:

Пример 6.4. Меню Debug:

Пример 6.5. Панель быстрого доступа с командами отладки:

  Пример 6.6. Режим отладки:

Пример 6.7. Точки прерывания:

Если точка прерывания установлена внутри цикла, то можно определить, сколько итераций цикла будет пропущено, перед тем как программа прервется. Сделать это можно из контекстного меню точки прерывания. Также можно указать логическое выражение, при котором сработает точка прерывания.

Пример 6.8. Окно наблюдения за значениями переменных Watches:

Окно Watches появляется «висячим», при желании его можно прицепить к окну редактора кода. Для этого нужно переместить окно Watches к окну редактора кода и выбрать место его размещения. В процессе перемещения окна место, куда его можно «прицепить», будет отображаться прямоугольником серого цвета.

В окне Watches отображаются текущие значения переменных. Переменная, которая изменилась последней, отображается красным цветом.

6.2. Использование числовых последовательностей

Числовые последовательности позволяют описывать многие процессы, происходящие в природе и обществе. Для задания элементов числовой последовательности обычно используют один из двух способов:

1. Записывается зависимость значения элемента последовательности от значения номера (пример 6.9).
2. Записывается рекуррентная формула зависимости значения элемента от значения одного или нескольких предыдущих значений (пример 6.10).

Есть последовательности, которые можно задавать как первым способом, так и вторым (пример 6.11).

Последовательности могут строиться из случайных чисел.

Пример 6.12. Вывести на экран первые k элементов последовательности заданной формулой  «math style=¨font-family:`Courier New`¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨18px¨»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mi»n«/mi»«mrow»«msup»«mi»n«/mi»«mn»2«/mn»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/mfrac»«/mstyle»«/math».

Этапы выполнения задания

I. Исходные данные: k (количество чисел).

II. Результат: k чисел последовательности.

III. Алгоритм решения задачи.

1. Ввод числа k
2. Так как количество чисел заранее известно, то для их получения можно воспользоваться циклом for
3. Текущее число будем хранить в переменной а. Значение a вычисляется по формуле и зависит от значения n — счетчика цикла. Переменная n будет изменяться от 1 (номер первого четного числа) до k (номер последнего числа). 
4. Полученные числа будем выводить в цикле через пробел.

IV. Описание переменных: k – int, n – double.

Пример 6.13. Найти первый элемент последовательности, заданной рекуррентно «math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«mroot»«mrow»«mn»2«/mn»«msup»«mi»n«/mi»«mn»2«/mn»«/msup»«/mrow»«mn»3«/mn»«/mroot»«/mfrac»«mo»,«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mi»a«/mi»«mn»1«/mn»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mi»b«/mi»«mo»(«/mo»«mi»b«/mi»«mo»§#160;«/mo»«mo»§#62;«/mo»«mo»§#160;«/mo»«mn»0«/mn»«mo»)«/mo»«/math», который меньше 103. Также вывести номер найденного элемента. Значение b — вводится.

Этапы выполнения задания

I. Исходные данные: число b.

II. Результат: элемент последовательности, меньший 0.001, и его номер.

III. Алгоритм решения задачи.

1. Ввод числа b.
2. 
Так как известно условие продолжения работы, то воспользуемся циклом while. Условие цикла: a >= 0.001.
3. 
В цикле вычисляем текущее значение a и увеличиваем на 1 номер искомого значения.
4. 
Вывод результата.

IV. Описание переменных: a, b – double, n - int.

Подтверждением важности числовых последовательностей является тот факт, что создана целая энциклопедия числовых последовательностей OEIS [1].

Пример 6.9. Формула «math style=¨font-family:Tahoma¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mi»n«/mi»«mrow»«msup»«mi»n«/mi»«mn»2«/mn»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/mfrac»«/mstyle»«/math» задает следующую последовательность: 0.5, 0.4, 0.3, 0.235, 0.192, … .

Пример 6.10. Одной из наиболее известных последовательностей, которую можно описать рекуррентно, является последовательность Фибоначчи: 1, 1, 2, 3, 5, 8, 13… . Несложно заметить, что каждый ее элемент, начиная с третьего, равен сумме двух предыдущих. Это можно записать так: an = an − 1 + an  2, a1 = 1,  a2 =1.

Пример 6.11. В последовательности 2, 4, 8, 16,… каждое число является степенью 2, поэтому ее можно задать формулой an = 2n. С другой стороны, каждый элемент последовательности, начиная со второго, в два раза больше предыдущего. Получим формулу an = 2an  1 (для n > 1, a1 = 2).

Пример 6.12.

V. Программа:

#include <iostream>

 

using namespace std;

 

int main()

{

  int k;

  cout << "k = ";

  cin >> k;

  for (int n = 1; n <= k; n++){

    double a = 1. * n / (* n + 1);

    cout << a << endl;

  }

  return 0;

}

VI. Тестирование.

При вычислении значения a важно помнить, что результатом деления двух целых чисел (в данном случае это числа n и n+ 1), будет целое число, поэтому необходимо преобразование типа в вещественный до выполнения операции деления. Строку, в которой вычисляется значение a, можно записать и так:

   double = static_cast<double>(n) / (* n + 1);   

Пример 6.13.

V. Программа:

#include <iostream>

#include <cmath>

 

using namespace std;

 

int main()

{

  double a, b;

  cout << "b = ";

  cin >> b;

  a = b;

  int n = 1;

  while (> 0.001){

    n++;

    = a / cbrt(2 * n * n);

  }

  cout << "n = " << n << endl;

  cout << "a = " << a << endl;

  return 0;

}

VI. Тестирование.



[1] http://oeis.org/?language=russian — Онлайн-энциклопедия целочисленных последовательностей.

6.3. Вычисление значения факториала числа

Факториалом числа n называют последовательное произведение натуральных чисел, не больших n:

n! = 1 · 2 · 3 · ... · n.

Равенство 0! = 1 обычно принимают в качестве соглашения.

Пример 6.14. Написать программу, которая по введенному натуральному значению n получает n!.

Этапы выполнения задания.

I. Исходные данные: число n.

II. Результат: f (значение n!).

III. Алгоритм решения задачи.

1. Ввод числа n.
2. 
Для вычисления n! нужно последовательно умножать на текущее натуральное число то значение, которое получили на предыдущем шаге. Это вытекает из равенства:

n! =(n – 1)! · n.

3. Для вычисления произведения можно воспользоваться циклом for. Начальное значение переменной f равно 1.
4. 
Вывод результата S.

Описание переменных: n, f – int.

Название факториал происходит от латинского factorialis — действующий, производящий, умножающий. В 1808 г. французский математик Кристиан Крамп предложил компактное обозначение n! (произносится «эн факториа́л»).

Факториалы всех чисел составляют последовательность A000142 в OEIS.

Пример 6.14.

V. Программа:

#include <iostream>

 

using namespace std;

 

int main()

{

  int n;

  cout << "n = ";

  cin >> n;

  int f = 1;

  for (int i = 1; i <= n; i++)

    f *= i;

  cout << "f = " << f << endl;

  return 0;

}

VI. Тестирование.

VII. Правильность вычислений проверить на калькуляторе.

6.4. Нахождение суммы элементов числовой последовательности

Пример 6.15. В секретной лаборатории выводят полезные бактерии. Экспериментально было установлено, что количество бактерий (в млн) завит от номера дня, в который проводится эксперимент, следующим образом: «math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mrow»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mfrac»«msup»«mi»n«/mi»«mn»3«/mn»«/msup»«msqrt»«msup»«mi»n«/mi»«mn»3«/mn»«/msup»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mi»n«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/msqrt»«/mfrac»«/mrow»«/mstyle»«/math». Определите, сколько бактерий вывели за m дней.

Этапы выполнения задания.

 IИсходные данные: m (число дней).

II. Результат: s (общее количество бактерий).

III. Алгоритм решения задачи.

1. Ввод числа m
2. Для вычисления общего количества бактерий необходимо последовательно прибавлять количество бактерий, выведенных в текущий день, к уже полученному количеству бактерий. Начальное значение суммы равно 0. 
3. Так как количество дней заранее известно, для вычисления суммы можно воспользоваться циклом for
4. Количество бактерий в текущий день будем хранить в переменной а. Значение a зависит от значения n — счетчика дней. Переменная n изменяется от 1 до m
5. Вывод результата s.

IV. Описание переменных: m – int, s, a – double.

Пример 6.16. Написать программу для вычисления суммы, имеющей своими слагаемыми элементы последовательности «math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mrow»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mi»n«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mi»n«/mi»«/msup»«/mrow»«mrow»«mi»n«/mi»«mo»!«/mo»«/mrow»«/mfrac»«/mrow»«/mstyle»«/math». Вычисления производить до тех пор, пока не найдется слагаемое, для которого верно неравенство «math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mrow»«mfenced open=¨|¨ close=¨|¨»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«/mfenced»«mo»§#160;«/mo»«mo»§#60;«/mo»«mo»§#160;«/mo»«mi»e«/mi»«mi»p«/mi»«mi»s«/mi»«/mrow»«/mstyle»«/math». Значение eps вводится («math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mrow»«mn»0«/mn»«mo»§#160;«/mo»«mo»§#60;«/mo»«mo»§#160;«/mo»«mi»e«/mi»«mi»p«/mi»«mi»s«/mi»«mo»§#160;«/mo»«mo»§#60;«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/mstyle»«/math»).

Этапы выполнения задания

I. Исходные данные: eps (точность вычислений).

II. Результат: переменная s (сумма).

III. Алгоритм решения задачи.

1. Ввод числа eps. 
2. Для вычисления суммы необходимо последовательно прибавлять очередное слагаемое, удовлетворяющее условию задачи, к уже полученной сумме.

2.1. Так как количество слагаемых заранее не известно, то для вычисления суммы воспользуемся циклом do…while
2.2. Начальное значение суммы s = 0.
2.3. Текущее значение слагаемого будем хранить в переменной а. Значение a зависит от значения n — счетчика слагаемых в сумме. Переменная n будет изменяться на 1 до тех пор, пока выполняется условие задачи. Начальное значение n = 0.
2.4. Отдельно нужно получать 2n и n! Для этого заведем переменные d (для хранения значения 2n) и f (для хранения значения n!). Начальные значения переменных: d = 1, f = 1. Для каждого следующего слагаемого предыдущее значение переменной d увеличивается в два раза, значение переменной f увеличивается в n раз.

3. Вывод результата s.

IV. Описание переменных: n – int, eps, a, s, d, f – double.

Пример 6.15.

V. Программа:

#include <iostream>

#include <cmath>

 

using namespace std;

 

int main()

{

  int m;

  cout << "m = ";

  cin >> m;

  double s = 0;

  for (int n = 1; n <= m; n++){

    double x = 1. * n * n * n;

    double a = x / (sqrt(x)- n + 1);

    s += a;

  }

  cout << "s = " << s << endl;

  return 0;

}

VI. Тестирование

VII. Анализ результата. Для проверки правильности результата можно посчитать значение суммы на калькуляторе:

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«mrow»«msub»«mi»a«/mi»«mn mathvariant=¨italic¨»1«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mn»1«/mn»«mo»;«/mo»«/mrow»«/mstyle»«/math»

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«msub»«mi»a«/mi»«mn»2«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«msup»«mn»2«/mn»«mn»3«/mn»«/msup»«mrow»«msqrt»«mn»8«/mn»«/msqrt»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mn»2«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/mfrac»«mo»§#8776;«/mo»«mn»4«/mn»«mo».«/mo»«mn»38«/mn»«mo»;«/mo»«/mstyle»«/math»

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«msub»«mi»a«/mi»«mn»3«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«msup»«mn»3«/mn»«mn»3«/mn»«/msup»«mrow»«msqrt»«mn»27«/mn»«/msqrt»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mn»3«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/mfrac»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»8«/mn»«mo».«/mo»«mn»44«/mn»«mo»,«/mo»«/mstyle»«/math»

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«mi»S«/mi»«mo»§#160;«/mo»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»13«/mn»«mo».«/mo»«mn»82«/mn»«mo».«/mo»«/mstyle»«/math»

Пример 6.16.

V. Программа:

#include <iostream>

#include <cmath>

 

using namespace std;

 

int main()

{

  double eps, a;

  cout << "eps = ";

  cin >> eps;

  int n = 0;

  double s = 0;

  double d = 1;

  double f = 1;

  do  {

    n++;

    ///вычисление факториала

    f *= n;

    ///возведение 2 в степень

    d *= 2;

    a =(+ d) / f;

    s += a;

  }

  while (abs(a) >= eps);

  cout << "summa= " << s << endl;

  return 0;

}

VI. Тестирование

VII. Анализ результата. Поскольку факториал является чрезвычайно быстро растущей функцией, то элементы последовательности убывают.  Выпишем элементы:

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«msub»«mi»a«/mi»«mn»1«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»1«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»2«/mn»«/mrow»«mn»1«/mn»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mn»3«/mn»«mo»;«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mn»2«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»2«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mn»3«/mn»«/msup»«/mrow»«mrow»«mn»2«/mn»«mo»!«/mo»«/mrow»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mn»3«/mn»«mo»;«/mo»«mspace linebreak=¨newline¨/»«msub»«mi»a«/mi»«mn»3«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»3«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mn»3«/mn»«/msup»«/mrow»«mrow»«mn»3«/mn»«mo»!«/mo»«/mrow»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mfrac»«mn»11«/mn»«mn»6«/mn»«/mfrac»«mo»§#160;«/mo»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»1«/mn»«mo»,«/mo»«mn»83«/mn»«mo»;«/mo»«mspace linebreak=¨newline¨/»«msub»«mi»a«/mi»«mn»4«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»4«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mn»4«/mn»«/msup»«/mrow»«mrow»«mn»4«/mn»«mo»!«/mo»«/mrow»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mfrac»«mn»20«/mn»«mn»24«/mn»«/mfrac»«mo»§#160;«/mo»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»0«/mn»«mo»,«/mo»«mn»83«/mn»«mo»;«/mo»«mspace linebreak=¨newline¨/»«msub»«mi»a«/mi»«mn»5«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»5«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mn»5«/mn»«/msup»«/mrow»«mrow»«mn»5«/mn»«mo»!«/mo»«/mrow»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mfrac»«mn»37«/mn»«mn»120«/mn»«/mfrac»«mo»§#160;«/mo»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»0«/mn»«mo»,«/mo»«mn»31«/mn»«mo»;«/mo»«mspace linebreak=¨newline¨/»«msub»«mi»a«/mi»«mn»6«/mn»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»6«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msup»«mn»2«/mn»«mn»6«/mn»«/msup»«/mrow»«mrow»«mn»6«/mn»«mo»!«/mo»«/mrow»«/mfrac»«mo»§#160;«/mo»«mo»=«/mo»«mfrac»«mn»70«/mn»«mn»720«/mn»«/mfrac»«mo»§#160;«/mo»«mo»§#8776;«/mo»«mo»§#160;«/mo»«mn»0«/mn»«mo»,«/mo»«mn»097«/mn»«mo».«/mo»«/mstyle»«/math»

Шестой элемент меньше 0.1. Это последнее слагаемое в сумме. Сумма первых шести элементов — ≈9.07.

Если eps = 0.01, то к сумме, полученной для eps = 0.1, будут добавляться слагаемые, которые меньше 0.1, которые незначительно изменят значение суммы.

.

Разница в значениях суммы  ≈0.03. Чем меньше точность, тем меньше будут отличаться суммы.

6.5. Построение таблицы значений функции

Пример 6.17. Вывести на экран таблицу значений функции y = x2sinx. Количество значений вводится. Начальное значение x = –3, значения аргумента выводятся с шагом h = 0.5.

Этапы выполнения задания

I. Исходные данные: k (количество точек).

II. Результат: k значений аргумента и соответствующих им значений функции.

III. Алгоритм решения задачи.

1. Ввод числа k
2. Для получения таблицы нужно в цикле вычислять и выводить значение аргумента и соответствующие ему значение функции.

2.1. Начальное значение аргумента x = –3. Для получения очередного значения аргумента нужно к текущему значению прибавить шаг h
2.2. Значение функции вычисляется по формуле y = x2sinx
2.3. Полученные значения выводятся на экран. Чтобы значения выводились строго одно под другим, нужно задать формат вывода числа. Команды, управляющие форматным выводом, хранятся в библиотеке iomanip. С командами библиотеки можно познакомиться в Приложение к главе 1.

3. Поскольку количество точек известно, воспользуемся циклом for.

IV. Описание переменных: k – int, x, y, h – double.

Пример 6.17.

V. Программа:

#include<iostream>

#include<cmath>

#include<iomanip>

 

using namespace std;

 

int main()

{

  int k;

  cout << "k = ";

  cin >> k;

  double h = 0.5;

  double x = -3.;

  ///фиксировать кол-во цифр

  cout << fixed;

  for (int n = 1; n <= k; n++) {

    double y = x * x * sin(x);

    ///размер поля для вывода

    cout.width(5);

    ///количество цифр после запятой

    cout.precision(1);

    cout << x;

    cout.width(10);

    cout.precision(3);

    cout << y << endl;

    x += h;

  }

  return 0;

}

VI. Тестирование.

6.6. Выделение цифр из числа

Пример 6.18. Дано натуральное число n. Сформировать новое число, состоящее из нечетных цифр числа n.

Этапы выполнения задания

I. Исходные данные: n (число).

II. Результат: s (новое число)

III. Алгоритм решения задачи.

1. Ввод исходных данных — число n.
2. 
Определение начального значения нового числа: s = 0.
3. 
В переменной r будем хранить значение разрядной единицы для текущей четной цифры. Начальное значение r = 1.
4. 
В цикле, пока в числе есть цифры:

4.1. Найти остаток от деления текущего числа на 10 (z — текущая цифра числа). 
4.2. Проверить, является ли полученная цифра нечетной. 
4.3. Если цифра нечетная, то умножить ее значение разрядной единицы и прибавить к значению s, увеличить значение разрядной единицы в 10 раз. 
4.4. Уменьшить текущее число в 10 раз.

5. Вывод значения переменной s. Если s = 0, то в числе нет нечетных цифр.

IV. Описание переменных: n, s, r, z – int.

Пример 6.18.

V. Программа:

#include <iostream>

 

using namespace std

 

int main()

{

  int n;

  cout << "n = ";

  cin >> n;

  int s = 0, r = 1;

  while (> 0){

    int z = n % 10;

    if (% 2) {

      s += z * r;

      r *= 10;

    }

    n /= 10;

  }

  if (s)

    cout << "s = " << s << endl;

  else

    cout << "net nechetnyh" << endl;

  return 0;

}

VI. Тестирование.

6.7. Простейшее моделирование

Пример 6.19. Резервуар наполнен m литрами водного раствора, содержащего s кг сахара. Каждую минуту забирают x литров раствора и добавляют y литров воды. Концентрация поддерживается равномерной посредством помешивания. Сколько сахара будет в растворе через k минут?

Этапы выполнения задания

I. Исходные данные: числа m, s, x, k.

II. Результат: s (новое значение)

 III. Алгоритм решения задачи.

1. Ввод исходных данных. 
2. В переменной с будем хранить значение текущей концентрации раствора, в переменной v — количество воды. 
3. В цикле, от 1 до k:

3.1. Уменьшаем количество раствора на x
3.2. Добавляем воду. 
3.3. Пересчитываем концентрацию раствора. 
3.4. Если в какой-то момент весь раствор вылили, то прерываем цикл.

4. Вывод значения переменной s. Если количество раствора меньше либо равно нулю, то выводим сообщение «сахара не осталось», иначе выводим количество оставшегося сахара.

IV. Описание переменных: n, s, r, z — int.

Пример 6.19.

V. Программа:

#include <iostream>

 

using namespace std;

 

int main()

{

  setlocale(0,"");

  double m, s, x, y;

  cout << "раствор m = ";

  cin >> m;

  cout << "сахар s = ";

  cin >> s;

  cout << "расход x = ";

  cin >> x;

  cout << "приход y = ";

  cin >> y;

  int k;

  cout << "время k = ";

  cin >> k;

  double c = s / m;

  for (int i = 0; i < k; i++){

    m -= x;

    if (<= 0) break;

    s = c * m;

    m += y;

    c = s / m;

  }

  if (<= 0)

    cout << "сахара не осталось" << endl;

  else

    cout << "сахара - " << s << endl;

  return 0;

}

 VI.  Тестирование.

Упражнения

    

1. Напишите программу для вычисления первых n элементов последовательности Фибоначчи.

1. Для какого максимального значения n программа выдает корректный ответ?
2. Измените программу так, чтобы она выводила значение числа Фибоначчи по введенному номеру.
3. Замените в программе тип int на тип long long. Какое максимальное значения n можно ввести сейчас?

2. Напишите программу, которая будет выводить на экран элементы последовательности трибоначчи — первые элементы последовательности: 0, 0, 1, 1, 2, 4, 7, 13, 24, 44, 81, 149… . Каждый элемент, начиная с четвертого, равен сумме трех предыдущих: an = an – 1an – 2an – 3.

1. По заданному n вывести элемент последовательности.
2. Для заданного x вывести элементы последовательности меньшие x.

3. Напишите программу, которая найдет первый отрицательный элемент последовательности sin(tgn)n = 1, 2, ... и его номер.

4. Выполните задания для примера 6.15.

1. Замените в решении задачи цикл for на цикл while или dowhile.
2. Ваня решил сократить количество строк в программе и записал цикл следующим образом:

    for (int n = 1; n <= m; n++){

      double a = n * n * n / (sqrt(* n * n)- n + 1);

      s += a;

    }

Почему для m = 2000 Ваня получил в ответе s = nan?

5. Напишите программу, которая найдет сумму первых m элементов последовательности. Число m вводится. Элементы последовательности задаются формулой.

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mn»1«/mn»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mn»1«/mn»«msup»«mi»n«/mi»«mn»3«/mn»«/msup»«/mfrac»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»2«/mn»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»2«/mn»«mi»cos«/mi»«mi»n«/mi»«/mrow»«msup»«mrow»«mo»(«/mo»«mi»n«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«mo»)«/mo»«/mrow»«mn»2«/mn»«/msup»«/mfrac»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»3«/mn»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«msqrt»«msup»«mi»n«/mi»«mn»3«/mn»«/msup»«/msqrt»«mrow»«msup»«mi»n«/mi»«mn»2«/mn»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mi»n«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»3«/mn»«/mrow»«/mfrac»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»4«/mn»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mroot»«mrow»«mi»n«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»3«/mn»«/mrow»«mn»4«/mn»«/mroot»«mrow»«msup»«mi»n«/mi»«mn»3«/mn»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»4«/mn»«mi»n«/mi»«/mrow»«/mfrac»«mo».«/mo»«mspace linebreak=¨newline¨/»«/mstyle»«/math»

6. Написать программу для вычисления суммы, имеющей своими слагаемыми элементы последовательности «math xmlns=¨http://www.w3.org/1998/Math/MathML¨»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«/math». Вычисления производить до тех пор, пока не найдется слагаемое, для которого верно неравенство «math xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mfenced open=¨|¨ close=¨|¨»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«/mfenced»«mo»§#160;«/mo»«mo»§#60;«/mo»«mo»§#160;«/mo»«mi»e«/mi»«mi»p«/mi»«mi»s«/mi»«/math». Значение eps вводится (0 < eps < 1 ).

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨16px¨»«mn»1«/mn»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«msup»«mn»2«/mn»«mi»n«/mi»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mi»n«/mi»«/mrow»«msup»«mn»5«/mn»«mi»n«/mi»«/msup»«/mfrac»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»2«/mn»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«msup»«mn»3«/mn»«mi»n«/mi»«/msup»«mrow»«mi»n«/mi»«mo»!«/mo»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»2«/mn»«/mrow»«/mfrac»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»3«/mn»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«msup»«mrow»«mo»(«/mo»«mo»§#8211;«/mo»«mn»1«/mn»«mo»)«/mo»«/mrow»«mi»n«/mi»«/msup»«mo»§#160;«/mo»«mfrac»«mrow»«msup»«mn»3«/mn»«mi»n«/mi»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«mrow»«mi»n«/mi»«mo»!«/mo»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»5«/mn»«/mrow»«/mfrac»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»4«/mn»«mo».«/mo»«mo»§#160;«/mo»«msub»«mi»a«/mi»«mi»n«/mi»«/msub»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mn»2«/mn»«msup»«mn»3«/mn»«mi»n«/mi»«/msup»«/mfrac»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mfrac»«mn»2«/mn»«mrow»«mi»n«/mi»«mo»!«/mo»«/mrow»«/mfrac»«mo».«/mo»«mspace linebreak=¨newline¨/»«/mstyle»«/math»

7. Напишите программу, которая найдет произведение из n сомножителей следующего вида. Значение n вводится.

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mspace linebreak=¨newline¨/»«mn»1«/mn»«mo».«/mo»«mo»§#160;«/mo»«mfenced»«mrow»«mn»1«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mfrac»«mn»1«/mn»«msup»«mn»1«/mn»«mn»2«/mn»«/msup»«/mfrac»«/mrow»«/mfenced»«mfenced»«mrow»«mn»1«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mfrac»«mn»1«/mn»«msup»«mn»2«/mn»«mn»2«/mn»«/msup»«/mfrac»«/mrow»«/mfenced»«mfenced»«mrow»«mn»1«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mfrac»«mn»1«/mn»«msup»«mn»3«/mn»«mn»2«/mn»«/msup»«/mfrac»«/mrow»«/mfenced»«mo».«/mo»«mo».«/mo»«mo».«/mo»«mfenced»«mrow»«mn»1«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mfrac»«mn»1«/mn»«msup»«mi»n«/mi»«mn»2«/mn»«/msup»«/mfrac»«/mrow»«/mfenced»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»2«/mn»«mo».«/mo»«mo»§#160;«/mo»«mi»a«/mi»«mfenced»«mrow»«mi»a«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mn»1«/mn»«/mrow»«/mfenced»«mo».«/mo»«mo».«/mo»«mo».«/mo»«mfenced»«mrow»«mi»a«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mi»n«/mi»«mo»§#160;«/mo»«mo»§#8211;«/mo»«mn»1«/mn»«/mrow»«/mfenced»«mo».«/mo»«mo»§#160;«/mo»«mi»§#1063;§#1080;§#1089;§#1083;§#1086;«/mi»«mo»§#160;«/mo»«mi»§#1072;«/mi»«mo»§#160;«/mo»«mi»§#1074;§#1074;§#1086;§#1076;§#1080;§#1090;§#1089;§#1103;«/mi»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»3«/mn»«mo».«/mo»«mo»§#160;«/mo»«mfenced»«mrow»«mo»§#160;«/mo»«mn»1«/mn»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mfrac»«mn»1«/mn»«msup»«mn»1«/mn»«mn»2«/mn»«/msup»«/mfrac»«/mrow»«/mfenced»«mfenced»«mrow»«mn»1«/mn»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mfrac»«mn»1«/mn»«msup»«mn»2«/mn»«mn»3«/mn»«/msup»«/mfrac»«/mrow»«/mfenced»«mfenced»«mrow»«mn»1«/mn»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mfrac»«mn»1«/mn»«msup»«mn»2«/mn»«mn»4«/mn»«/msup»«/mfrac»«/mrow»«/mfenced»«mo».«/mo»«mo».«/mo»«mo».«/mo»«mfenced»«mrow»«mn»1«/mn»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mfrac»«mn»1«/mn»«msup»«mn»2«/mn»«mrow»«mi mathvariant=¨normal¨»n«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mn»1«/mn»«/mrow»«/msup»«/mfrac»«/mrow»«/mfenced»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»4«/mn»«mo».«/mo»«mo»§#160;«/mo»«mfenced»«mrow»«mi»x«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»2«/mn»«msup»«mi»x«/mi»«mn»2«/mn»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«msup»«mi»x«/mi»«mn»3«/mn»«/msup»«/mrow»«/mfenced»«mrow»«mo»(«/mo»«msup»«mi mathvariant=¨normal¨»x«/mi»«mn»2«/mn»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»2«/mn»«msup»«mi mathvariant=¨normal¨»x«/mi»«mn»3«/mn»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«msup»«mi mathvariant=¨normal¨»x«/mi»«mn»4«/mn»«/msup»«mo»)«/mo»«/mrow»«mrow»«mo»(«/mo»«msup»«mi mathvariant=¨normal¨»x«/mi»«mn»3«/mn»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»2«/mn»«msup»«mi mathvariant=¨normal¨»x«/mi»«mn»4«/mn»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«msup»«mi mathvariant=¨normal¨»x«/mi»«mn»5«/mn»«/msup»«mo»)«/mo»«/mrow»«mo».«/mo»«mo».«/mo»«mo».«/mo»«mrow»«mo»(«/mo»«msup»«mi mathvariant=¨normal¨»x«/mi»«mi»n«/mi»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»2«/mn»«msup»«mi mathvariant=¨normal¨»x«/mi»«mrow»«mi»n«/mi»«mo mathvariant=¨italic¨»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«msup»«mi mathvariant=¨normal¨»x«/mi»«mrow»«mi»n«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»2«/mn»«/mrow»«/msup»«mo»)«/mo»«/mrow»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mi»§#1063;§#1080;§#1089;§#1083;§#1086;«/mi»«mo»§#160;«/mo»«mi»§#1093;«/mi»«mo»§#160;«/mo»«mo»§#8212;«/mo»«mo»§#160;«/mo»«mi»§#1074;§#1074;§#1086;§#1076;§#1080;§#1090;§#1089;§#1103;«/mi»«mo».«/mo»«/math»

8. Выполните задание для примера 6.17.

    1. Замените в решении задачи цикл for на цикл while или dowhile.
    2.  Получите таблицу значений функции на отрезке [–3; 3]. В качестве условия в цикле можно использовать следующее: x < = 3;
    3. Добавьте в программу вывод границ вокруг таблицы:

9. Напишите программу, которая построит таблицы значений для следующих функций.

«math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mspace linebreak=¨newline¨/»«mn»1«/mn»«mo».«/mo»«mo»§#160;«/mo»«mi»y«/mi»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«msup»«mi»x«/mi»«mn»2«/mn»«/msup»«mo»§#160;«/mo»«mo»§#8211;«/mo»«mo»§#160;«/mo»«mn»5«/mn»«mi»x«/mi»«mo»§#160;«/mo»«mo»§#8211;«/mo»«mo»§#160;«/mo»«mn»3«/mn»«mo»,«/mo»«mo»§#160;«/mo»«mi»x«/mi»«mo»§#8712;«/mo»«mo»§#160;«/mo»«mfenced open=¨[¨ close=¨]¨»«mrow»«mo»§#8211;«/mo»«mn»3«/mn»«mo»;«/mo»«mo»§#160;«/mo»«mn»3«/mn»«/mrow»«/mfenced»«mo»,«/mo»«mo»§#160;«/mo»«mi»§#1074;§#1074;§#1086;§#1076;§#1080;§#1090;§#1089;§#1103;«/mi»«mo»§#160;«/mo»«mi»§#1079;§#1085;§#1072;§#1095;§#1077;§#1085;§#1080;§#1077;«/mi»«mo»§#160;«/mo»«mi»§#1096;§#1072;§#1075;§#1072;«/mi»«mo»§#160;«/mo»«mi»h«/mi»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»2«/mn»«mo».«/mo»«mo»§#160;«/mo»«mi»y«/mi»«mo»§#160;«/mo»«mo»=«/mo»«mi»cos«/mi»«mo»§#160;«/mo»«mi»x«/mi»«mo»§#160;«/mo»«mo»§#8211;«/mo»«mo»§#160;«/mo»«msup»«mi»x«/mi»«mn»2«/mn»«/msup»«mo»,«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mi»x«/mi»«mo»§#8712;«/mo»«mo»§#160;«/mo»«mfenced open=¨[¨ close=¨]¨»«mrow»«mo»§#8211;«/mo»«mi mathvariant=¨normal¨»§#960;«/mi»«mo»;«/mo»«mo»§#160;«/mo»«mi mathvariant=¨normal¨»§#960;«/mi»«/mrow»«/mfenced»«mo»,«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mi»§#1074;§#1074;§#1086;§#1076;§#1080;§#1090;§#1089;§#1103;«/mi»«mo»§#160;«/mo»«mi»§#1082;§#1086;§#1083;§#1080;§#1095;§#1077;§#1089;§#1090;§#1074;§#1086;«/mi»«mo»§#160;«/mo»«mi»§#1090;§#1086;§#1095;§#1077;§#1082;«/mi»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»3«/mn»«mo».«/mo»«mo»§#160;«/mo»«mi»y«/mi»«mo»§#160;«/mo»«mo»=«/mo»«mn»2«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mn»3«/mn»«mi»x«/mi»«mo»-«/mo»«mn»7«/mn»«/mrow»«mrow»«msup»«mi»x«/mi»«mn»2«/mn»«/msup»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/mfrac»«mo»,«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mi»x«/mi»«mo»§#8712;«/mo»«mo»§#160;«/mo»«msup»«mfenced open=¨[¨ close=¨]¨»«mrow»«mi»a«/mi»«mo mathvariant=¨italic¨»,«/mo»«mo mathvariant=¨italic¨»§#160;«/mo»«mi»b«/mi»«/mrow»«/mfenced»«mn»3«/mn»«/msup»«mo»,«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mi»§#1074;§#1074;§#1086;§#1076;§#1080;§#1090;§#1089;§#1103;«/mi»«mo»§#160;«/mo»«mi»§#1079;§#1085;§#1072;§#1095;§#1077;§#1085;§#1080;§#1077;«/mi»«mo»§#160;«/mo»«mi»§#1072;«/mi»«mo»,«/mo»«mo»§#160;«/mo»«mi»b«/mi»«mo»§#160;«/mo»«mi mathvariant=¨normal¨»§#1080;«/mi»«mo»§#160;«/mo»«mi»§#1082;§#1086;§#1083;§#1080;§#1095;§#1077;§#1089;§#1090;§#1074;§#1086;«/mi»«mo»§#160;«/mo»«mi»§#1090;§#1086;§#1095;§#1077;§#1082;«/mi»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mn»4«/mn»«mo».«/mo»«mo»§#160;«/mo»«mi»y«/mi»«mo»§#160;«/mo»«mo»=«/mo»«mn»2«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mfrac»«mn»1«/mn»«mi»x«/mi»«/mfrac»«mi»sin«/mi»«mi»x«/mi»«mo»,«/mo»«mo»§#160;«/mo»«mo»§#160;«/mo»«mi»x«/mi»«mo»§#8712;«/mo»«mo»§#160;«/mo»«mfenced open=¨[¨ close=¨]¨»«mrow»«mi»a«/mi»«mo mathvariant=¨italic¨»,«/mo»«mo mathvariant=¨italic¨»§#160;«/mo»«mi»b«/mi»«/mrow»«/mfenced»«mo»,«/mo»«mo»§#160;«/mo»«mi»§#1074;§#1074;§#1086;§#1076;§#1080;§#1090;§#1089;§#1103;«/mi»«mo»§#160;«/mo»«mi»§#1079;§#1085;§#1072;§#1095;§#1077;§#1085;§#1080;§#1077;«/mi»«mo»§#160;«/mo»«mi»a«/mi»«mo»,«/mo»«mo»§#160;«/mo»«mi»b«/mi»«mo»§#160;«/mo»«mi mathvariant=¨normal¨»§#1080;«/mi»«mo»§#160;«/mo»«mi»§#1082;§#1086;§#1083;§#1080;§#1095;§#1077;§#1089;§#1090;§#1074;§#1086;«/mi»«mo»§#160;«/mo»«mi»§#1090;§#1086;§#1095;§#1077;§#1082;«/mi»«mo».«/mo»«mo»§#160;«/mo»«mi»§#1053;§#1077;§#1086;§#1073;§#1093;§#1086;§#1076;§#1080;§#1084;§#1086;«/mi»«mo»§#160;«/mo»«mi»§#1091;§#1095;§#1077;§#1089;§#1090;§#1100;«/mi»«mo»§#160;«/mo»«mi»§#1086;§#1073;§#1083;§#1072;§#1089;§#1090;§#1100;«/mi»«mo»§#160;«/mo»«mi»§#1086;§#1087;§#1088;§#1077;§#1076;§#1077;§#1083;§#1077;§#1085;§#1080;§#1103;«/mi»«mo»§#160;«/mo»«mi»§#1092;§#1091;§#1085;§#1082;§#1094;§#1080;§#1080;«/mi»«mo».«/mo»«mspace linebreak=¨newline¨/»«mspace linebreak=¨newline¨/»«mi»§#1063;§#1080;§#1089;§#1083;§#1086;«/mi»«mo»§#160;«/mo»«mi»§#1093;«/mi»«mo»§#160;«/mo»«mo»§#8212;«/mo»«mo»§#160;«/mo»«mi»§#1074;§#1074;§#1086;§#1076;§#1080;§#1090;§#1089;§#1103;«/mi»«mo».«/mo»«/math»

10. Программу из примера 6.18 изменили. Сформулируйте задачу, которая решается с помощью данной программы.

#include<iostream>

 

using namespace std;

 

int main()

{

  int i, n;

  cout << "n = ";

  cin >> n;

  cout << "i = ";

  cin >> i;

  int k = 0;

  while (> 0)

  {

    int z = n % 10//текущая цифра

    k++;

    if (== i){

      cout << "v razrjade " << i;

      cout << " stoit zifra "<< z << endl;

    }

  n /= 10; //уменьшение числа в 10 раз

  }

  if (> k){

    cout << "v chisle "<<k<<" cifr, ";

    cout << "v razrjade " << i << " net cifr " << endl;

  }

  else

  cout<<"v chisle "<<k<<" cifr";

  return 0;

}

11. Дано натуральное число n. Напишите программу, которая определит, каких цифр в числе больше, четных или нечетных.

12. Дано натуральное число n. Напишите программу, которая выведет номера разрядов, в которых стоят цифры кратные 3, или сообщение, что таких цифр нет.

13. Напишите программу, которая выведет на экран цифру, стоящую на средней позиции числа, если число имеет нечетное количество цифр, или 2 средние для числа с четным количеством цифр.

14. Напишите программу, которая после каждой цифры 1 в числе вставит еще одну единицу. Например, из 51214  → 5112114.

15. Выполните задание для примера 6.19.

1. Для ситуации, когда сахар заканчивается, выведите значение времени, когда это произошло.
2. Измените программу так, чтобы задавалось начальное и конечное количество сахара, а рассчитывалось время, необходимое для такого изменения концентрации. 
3. Измените программу так, чтобы по введенному времени и количеству сахара в начале и в конце процесса рассчитывался начальный объем раствора.



[1] Подсказка: «math style=¨font-family:Arial¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨14px¨»«mrow»«mi»h«/mi»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mfrac»«mrow»«mi»b«/mi»«mo»§#160;«/mo»«mo»§#8211;«/mo»«mo»§#160;«/mo»«mi»a«/mi»«/mrow»«mrow»«mi»k«/mi»«mo»§#160;«/mo»«mo»§#8211;«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/mfrac»«mo».«/mo»«/mrow»«/mstyle»«/math»