Печатать книгуПечатать книгу

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

Сайт: Профильное обучение
Курс: Информатика. 10 класс (Повышенный уровень)
Книга: § 6. Использование основных алгоритмических конструкций для решения задач
Напечатано:: Гость
Дата: Воскресенье, 5 Май 2024, 22:19

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 элементов последовательности заданной формулой  begin mathsize 18px style a subscript n space equals space fraction numerator n over denominator n squared space plus space 1 end fraction end style.

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

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

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

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

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

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

Пример 6.13. Найти первый элемент последовательности, заданной рекуррентно a subscript n space equals space fraction numerator a subscript n space minus space 1 over denominator cube root of 2 n squared end root end fraction comma space space space a 1 space equals space b left parenthesis b space greater than space 0 right parenthesis, который меньше 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. Формула begin mathsize 14px style a subscript n space equals space fraction numerator n over denominator n squared space plus space 1 end fraction end style задает следующую последовательность: 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. В секретной лаборатории выводят полезные бактерии. Экспериментально было установлено, что количество бактерий (в млн) завит от номера дня, в который проводится эксперимент, следующим образом: begin mathsize 16px style a subscript n space equals fraction numerator n cubed over denominator square root of n cubed space minus space n space plus space 1 end root end fraction end style. Определите, сколько бактерий вывели за 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. Написать программу для вычисления суммы, имеющей своими слагаемыми элементы последовательности begin mathsize 16px style a subscript n space equals space fraction numerator n space plus space 2 to the power of n over denominator n factorial end fraction end style. Вычисления производить до тех пор, пока не найдется слагаемое, для которого верно неравенство begin mathsize 16px style open vertical bar a subscript n close vertical bar space less than space e p s end style. Значение eps вводится (begin mathsize 16px style 0 space less than space e p s space less than space 1 end style).

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

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. Анализ результата. Для проверки правильности результата можно посчитать значение суммы на калькуляторе:

begin mathsize 14px style a subscript italic 1 space equals space 1 semicolon end style

begin mathsize 14px style a subscript 2 space equals space fraction numerator 2 cubed over denominator square root of 8 space minus space 2 space plus space 1 end fraction almost equal to 4.38 semicolon end style

begin mathsize 14px style a subscript 3 space equals space fraction numerator 3 cubed over denominator square root of 27 space minus space 3 space plus space 1 end fraction almost equal to space 8.44 comma end style

begin mathsize 14px style S space almost equal to space 13.82. end style

Пример 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. Анализ результата. Поскольку факториал является чрезвычайно быстро растущей функцией, то элементы последовательности убывают.  Выпишем элементы:

begin mathsize 14px style a subscript 1 space equals space fraction numerator 1 space plus space 2 over denominator 1 end fraction space equals space 3 semicolon space space space space space a subscript 2 space equals space fraction numerator 2 space plus space 2 cubed over denominator 2 factorial end fraction space equals space 3 semicolon
a subscript 3 space equals space fraction numerator 3 space plus space 2 cubed over denominator 3 factorial end fraction space equals 11 over 6 space almost equal to space 1 comma 83 semicolon
a subscript 4 space equals space fraction numerator 4 space plus space 2 to the power of 4 over denominator 4 factorial end fraction space equals 20 over 24 space almost equal to space 0 comma 83 semicolon
a subscript 5 space equals space fraction numerator 5 space plus space 2 to the power of 5 over denominator 5 factorial end fraction space equals 37 over 120 space almost equal to space 0 comma 31 semicolon
a subscript 6 space equals space fraction numerator 6 space plus space 2 to the power of 6 over denominator 6 factorial end fraction space equals 70 over 720 space almost equal to space 0 comma 097. end style

Шестой элемент меньше 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 вводится. Элементы последовательности задаются формулой.

begin mathsize 16px style 1. space a subscript n space equals space 1 over n cubed.

2. space a subscript n space equals space fraction numerator 2 cos n over denominator left parenthesis n space plus space 1 right parenthesis squared end fraction.

3. space a subscript n space equals space fraction numerator square root of n cubed end root over denominator n squared space plus space n space plus space 3 end fraction.

4. space a subscript n space equals space fraction numerator fourth root of n space plus space 3 end root over denominator n cubed space plus space 4 n end fraction.
end style

6. Написать программу для вычисления суммы, имеющей своими слагаемыми элементы последовательности a subscript n. Вычисления производить до тех пор, пока не найдется слагаемое, для которого верно неравенство open vertical bar a subscript n close vertical bar space less than space e p s. Значение eps вводится (0 < eps < 1 ).

begin mathsize 16px style 1. space a subscript n space equals space fraction numerator 2 to the power of n space plus space n over denominator 5 to the power of n end fraction.

2. space a subscript n space equals space fraction numerator 3 to the power of n over denominator n factorial space plus space 2 end fraction.

3. space a subscript n space equals left parenthesis – 1 right parenthesis to the power of n space fraction numerator 3 to the power of n space plus space 1 over denominator n factorial space plus space 5 end fraction.

4. space a subscript n space equals space 2 over 3 to the power of n space plus space fraction numerator 2 over denominator n factorial end fraction.
end style

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


1. space open parentheses 1 space plus space 1 over 1 squared close parentheses open parentheses 1 space plus space 1 over 2 squared close parentheses open parentheses 1 space plus space 1 over 3 squared close parentheses... open parentheses 1 space plus space 1 over n squared close parentheses.

2. space a open parentheses a space plus 1 close parentheses... open parentheses a space plus space n space – 1 close parentheses. space Число space а space вводится.

3. space open parentheses space 1 space minus space 1 over 1 squared close parentheses open parentheses 1 space minus space 1 over 2 cubed close parentheses open parentheses 1 space minus space 1 over 2 to the power of 4 close parentheses... open parentheses 1 space minus space 1 over 2 to the power of straight n space plus 1 end exponent close parentheses.

4. space open parentheses x space plus space 2 x squared space plus x cubed close parentheses left parenthesis straight x squared space plus space 2 straight x cubed space plus straight x to the power of 4 right parenthesis left parenthesis straight x cubed space plus space 2 straight x to the power of 4 space plus straight x to the power of 5 right parenthesis... left parenthesis straight x to the power of n space plus space 2 straight x to the power of n italic space plus space 1 end exponent space plus straight x to the power of n space plus space 2 end exponent right parenthesis.

Число space х space long dash space вводится.

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

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

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


1. space y space equals space x squared space – space 5 x space – space 3 comma space x element of space open square brackets – 3 semicolon space 3 close square brackets comma space вводится space значение space шага space h.

2. space y space equals cos space x space – space x squared comma space space x element of space open square brackets – straight pi semicolon space straight pi close square brackets comma space space вводится space количество space точек.

3. space y space equals 2 space plus space fraction numerator 3 x minus 7 over denominator x squared space plus space 1 end fraction comma space space x element of space open square brackets a italic comma italic space b close square brackets cubed comma space space вводится space значение space а comma space b space straight и space количество space точек.

4. space y space equals 2 space plus space 1 over x sin x comma space space x element of space open square brackets a italic comma italic space b close square brackets comma space вводится space значение space a comma space b space straight и space количество space точек. space Необходимо space учесть space область space определения space функции.

Число space х space long dash space вводится.

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] Подсказка: begin mathsize 14px style h space equals space fraction numerator b space – space a over denominator k space – space 1 end fraction. end style