Ю3.8

«Отскоки»

Задача: Материальная точка бросается на горизонтальную плоскость со скоростью [latex]V[/latex] и под углом [latex]\alpha[/latex] к ней ( плоскости ). При каждом ударе о плоскость, кинетическая энергия точи уменьшается в [latex]\beta[/latex] раз. Найти абсциссы первых [latex]n[/latex] точек касания. Сопротивлением воздуха пренебречь.

По умолчанию примем количество интересующих нас отскоков равным 3.

[latex]V[/latex](speed)[latex]m/c[/latex] [latex]\alpha[/latex](corner)  [latex]\beta[/latex] Первая координата Вторая координата Третья координата Комментарий
10 15 2 5.09858 7.64787 8.92252 Тест пройден
8 30 4 5.65184 7.06480 7.41804 Тест пройден
27 45 3 74.3373 99.1164 107.376 Тест пройден
17 35 3 27.6926 36.9234 40.0004 Тест пройден
13 0 5 0.00000 0.00000 0.00000 Тест пройден

Замечание:

По неизвестной мне причине (думаю на погрешность округления) [latex]sin( \pi)[/latex] при вычислениях равен 1.24879e-15.

Исходный код:

Для решения задачи необходимо вспомнить уроки физики в начале десятого класса, а именно главу о движении под углом к горизонту. Воспользуемся формулой расстояния полета материальной точки [latex]S=\frac{V^2sin(2\alpha) }{g}[/latex] . По условию задачи сказано, что кинетическая энергия уменьшается при каждом отскоке в [latex]\beta[/latex] раз. Если рассмотреть формулу кинетической энергии: [latex]E_{k}=\frac{ mV^2 }{2}[/latex]- можно заметить, что [latex] m[/latex] (масса) является константой, значит изменяться может только [latex]V^2[/latex] (скорость тела в квадрате). Если условится, что материальная точка начинает движение в начале координат, то координата первого отскока будет равна [latex]S[/latex], второй — [latex]S+S_{1}[/latex], третьей — [latex]S+S_{1}+S_{2}[/latex], n-ой — [latex]S+…+S_{n-1}[/latex].

Алгоритм:

  1. Объявление переменных и константы(ускорение свободного падения).
  2. Вывод поясняющей информации.
  3. Ввод значений переменных.
  4. Проверка недопустимых ситуаций:
    • Проверка угла: значения угла выше 90 градусов или отрицательное значение противоречат условию задачи.
    • Проверка скорости: отрицательное значение будет означать движение в противоположную интересующей нас сторону.
    • Проверка коэффициента уменьшения кинетической энергии: это число должно быть хотя бы положительным.
    • Проверка числа интересующих нас отскоков: это должно быть натуральное число.
  5. Вычисление вспомогательных величин (двойной угол, скорость в квадрате).
  6. Создание вычислительного цикла.
    • Вывод значений.
  7. Окончание работы.

 Ссылка на Ideone.

Related Images:

А114(б)

Задача. Вычислить [latex]\sum_{i=1}^{50}\frac{1}{i^3}[/latex]

Решение

Чтобы можно было написать тесты, я немного изменила условие заменив 50 на [latex]n[/latex] (число, вводимое с клавиатуры)

N результат комментарий
3 1.16204 успешно
10 1.19753 успешно
50 1.20186 успешно
 
  1. Мы ввели переменную [latex]x[/latex] типа [latex]double[/latex]
  2. Приравняли к [latex]0[/latex]
  3. Сделали цикл [latex]for[/latex] и в нём вічеслили сумму [latex]n[/latex] членов прогрессии
  4. Когда цикл дойдет до [latex]n[/latex] , его условие условие перестанет віполняться и напечатается последнее значение, присвоенное переменной [latex]x[/latex]

Код на С++: http://ideone.com/jHHaWH

Код на Java: http://ideone.com/XhOnqD

Related Images:

Ю3.9

Задача. Голодная зима. Суточный рацион коровы составляет [latex]u[/latex] кг сена, [latex]v[/latex] кг силоса и [latex]w[/latex] кг комбикорма. В хозяйстве, содержащем стадо из [latex]k[/latex] голов, осталось [latex]s[/latex] кг сена, [latex]t[/latex] кг силоса и [latex]f[/latex] кг комбикорма.. В стаде ежедневно погибает [latex]p[/latex]% коров; ежедневно [latex]q[/latex]% оставшегося сена сгнивает; [latex]r[/latex]% силоса разворовывается колхозниками; [latex]t[/latex]% комбикорма распродает зав. фермой. Когда нельзя будет кормить всех оставшихся коров по полному рациону? Какой из видов кормов кончится раньше других?

Тесты:

u v w k s t f p q r h Результат Комментарий
10 10 5 50 2000 1500 1000 2 5 2 2 Через 2 дн. силос закончится. Пройден
15 10 10 50 1500 1500 1000 4 5 3 3 Через 1 дн. сено закончится.

Через 1 дн. комбикорм закончится.

Пройден
10 5 5 50 2000 2000 2000 2 5 5 2 Через 3 дн. сено закончится. Пройден
10 10 5 20 5000 4500 4000 39 5 2 2 Через 3 дн. все коровы умрут. Пройден

Код на С

Код на Java

 

Решение:

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

Допустим, что ежедневно умирает  [latex]p[/latex]% от начального количества коров. Чтобы число коров было целым используем функцию round.

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

С работой программы на С можно ознакомиться здесь, а на Java здесь.

 

Related Images:

Ю3.39

Задача: Численно убедиться в справедливости равенства [latex]\frac{1}{4}\ln{\frac{1+x}{1-x}}+\frac{1}{2}\arctan{x}=\quad x+\frac{{x}^{5}}{5}+\dots+\frac{{x}^{4n+1}}{4n+1}+\dots[/latex], для чего для заданного значения аргумента [latex]x[/latex] вычислить левую его часть и разложение, стоящее в правой части, с заданной погрешностью [latex]e[/latex]. Испытать разложение на сходимость при разных значениях аргумента, оценить скорость сходимости, для чего вывести число итераций [latex]n[/latex] слагаемых, необходимых, для достижения заданной точности. Интервал для этой задачи: [latex]-1<x<1[/latex].

Ввод Вывод
[latex]x[/latex] Погрешность Output Комментарий
-0.99 1e-4 148 Пройден
0.99 1e-4 148 Пройден
0.99 1e-14 685 Пройден
0.7 1e-10 14 Пройден
-0.3 1e-13 6 Пройден
0.001 1e-13 1 Пройден
Идея решения: Используем цикл for, в условие которого ставим проверку на превышение погрешности суммы. Левую часть выражения вычисляем и записываем в переменную [latex]curr[/latex]. Сумму (то что стоит в правой части выражения) объявим как [latex]sum[/latex], и инициализируем значением [latex]x[/latex] (Это делается для того, чтобы во время работы цикла не вычислялось одно лишнее слагаемое).

Каждую итерацию цикла инкрементируем счетчик [latex]count[/latex]. Переменную [latex]y[/latex], которая соответствует i-тому слагаемому суммы, увеличивают до значения следующего слагаемого и прибавляют к сумме. Далее проверяем разность частичной суммы и заданного значения [latex]curr[/latex]. Если эта разность будет удовлетворять нашей точности, то число [latex]count[/latex] и будет количеством слагаемых в правой части.

Замечание: После цикла значение [latex]count[/latex] вновь инкрементируется, это сделано по следующей причине: сумма изначально содержала в себе первое слагаемое. Если сумма бы изначально содержала в себе 0, то нам пришлось бы вычислять лишнее слагаемое.

Ideone

Related Images:

A114ж

Задача:

Вычислить [latex]\prod _{ i=2 }^{ 100 }{ \frac { i+1 }{ i+2 } } ;[/latex]

Код программы на С++

Код программы на Java

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

Результат  = 0.0294118. ( Это и есть 1/34).

(«Математический хак» о котором написал Игорь Евгеньевич, есть сокращение этих сомножителей, а именно:

[latex] \frac { 3 }{ 4 } \cdot \frac { 4 }{ 5 } \cdot \frac { 5 }{ 6 } \cdot \cdot \cdot \cdot \frac { 101 }{ 102 } =\frac { 3 }{ 102 } =\frac { 1 }{ 34 } =0.02941176; [/latex]

 

Related Images:

А114е

Задача. Вычислить [latex]\prod_{i=1}^{10}{(2+\frac{1}{i!})}.[/latex]

По условию [latex]i[/latex] у нас изменяется от [1; 10], но, чтобы полностью убедиться, что программа правильно работает, изменим интервал, на котором изменяется[latex]i[/latex], к примеру [1; n].

Тест

i f p (wolframalpha)
1 1 3
2 2 7.5
3 6 16.25
4 24 33.17708
5 120 66.630635
6 720 133.3538125486111
7 5040 266.7340841820129 
8 40320 533.4747839927034
9 362880 1066.951038098899
10 3628800 2133.902370220902

Код программы на языке С++ :

Ссылка на код программы: http://ideone.com/DEEFJd
Решение задачи сводится к нахождению произведения [latex]p[/latex]. Присваиваем [latex]p = 1[/latex], [latex]f = 1[/latex]. Далее фиксируем значение [latex]i[/latex]:

Анализируем, [latex]f [/latex] увеличивается в зависимости от [latex]i[/latex], следовательно:

Следующим шагом будет вычисление искомого произведения — каждый последующий член вычисляем и умножаем на предыдущий:

Получаем ответ.

Код программы на языке Java:

Ссылка на программу: http://ideone.com/JzB87V

Related Images:

А137б

Задача: Даны натуральное [latex]n[/latex], действительные числа [latex]a_{1},…,a_{n}[/latex]. Вычислить: [latex]a_{1}^{2},a_{1}a_{2},…,a_{1}a_{n};[/latex]

Значения Результат
53 4 6 -1 1.2 8 0 9 9 12 18 -3 3.6

 

Для решения этой задачи воспользуемся циклом for. Сначала прочитаем n. После этого  прочитаем первую переменную и напечатаем ее квадрат. Далее будет цикл, в котором буду читаться остальные n переменных и печататься их произведения на первую переменную.

Related Images:

Ю3.17

Задача: Сколько сомножителей надо взять в произведении: [latex]\prod_{k=1}^{\infty}{(1+\frac{{(-1)}^{k}}{2k+1})}=\frac{\sqrt{2}}{2}[/latex], чтобы равенство выполнялось до шестой значащей цифры, то есть с погрешностью не более [latex]{10}^{-6}[/latex]

Идея решения: Используем цикл for, в качестве [latex]k[/latex] в формуле используем переменную [latex]count[/latex] в программе. Переменную, которая будет соответствовать произведению, назовем [latex]mul[/latex] (сокращенно от multiplication) и присвоим ей значение 1 как нейтральный элемент для операции умножения. Каждую итерацию цикла проверяем разность [latex]mul-curr[/latex], где [latex]curr=\frac{\sqrt{2}}{2}[/latex], на превышение погрешности [latex]{10}^{-6}[/latex].

Если разность больше точности, умножаем [latex]mul[/latex] на выражение под знаком произведения и увеличиваем [latex]count[/latex] на единицу.

Если разность меньше точности, число [latex]count[/latex] и будет количеством сомножителей в произведении.

Число сомножителей оказалось достаточно большим — 88390. Ideone

Related Images:

Ю3.10

Задание

Расписание. Известно время начала и окончания (например, 6:00 и 24.00) работы некоторого пригородного автобусного маршрута с одним автобусом на линии, а также протяженность маршрута в минутах (в один конец) и время отдыха на конечных остановках. Составить суточное расписание этого маршрута (моменты отправления с конечных пунктов) без учета времени на обед и пересменку.

Код С++

Код С++ на Ideone: http://ideone.com/8gyewh

Код Java

Код Java на Ideonehttp://ideone.com/9pzXkc

 Комментарии

Зададим начало и конец работы автобуса,  время затраченное на путь и время отдыха в минутах.  Тогда на остановках он будет появляться через [latex] x [/latex] минут, где [latex] x [/latex] = протяженность маршрута в минутах (в один конец) + время отдыха на конечных остановках.

Тесты

Время начала работы автобуса Время конца работы автобуса протяженность маршрута в минутах (в один конец) время отдыха на конечных остановках Результаты Комментарии
06:00 24:00 120 15 06:00

10:30

15:00

19:30

08:15

12:45

17:15

21:45

 

Пройден
8:00 24:00 30 10 8:00

09:20

10:40

12:00

13:20

14:40

16:00

17:20

18:40

20:00

21:20

22:40

24:00

8:40

10:00

11:20

12:40

14:00

15:20

16:40

18:00

19:20

20:40

22:00

23:20

 

Пройден

Related Images:

Ю3.7

Задача: Время обслуживания. Для каждого посетителя парикмахерской (с одним мастером) известны следующие величины: [latex]t[/latex] — момент его прихода и [latex]\tau[/latex] — продолжительность его обслуживания. Сколько клиентов обслужит мастер за смену продолжительностью [latex]T[/latex]? Сколько рабочего времени он потратит на обслуживание?

 [latex]T[/latex] t1 t2 k T1
600 200 210 500 550 50 300 10 50 4  410
600 50 100 200 498 550 30 50 200 10 40  5  330
 600 0 80 100 367 680 20 30 20 30 50  4 100
Используем цикл while, который останавливается при достижении конца файла (input). С начала проверяем пришел ли текущий клиент во время обслуживания предыдущего, если да, то обслуживание этого клиента начнется с момента окончания предыдущего. Потом проверяем не выходит ли момент прихода клиента и сумма времени прихода клиента и время его обслуживания за рамки смены парикмахера. После запоминаем текущие t1 (момент прихода клиента) и t2 (время обслуживания) в новые переменные, чтобы в последующем шаге цикла проверить первое условие. Считаем общее время обслуживание прибавляя на каждом шаге цикла t2. В каждом шаге цикла прибавляем к переменной k +1, что и будет количеством обслуженных клиентов.

Ideone.

Related Images:

Ю3.36

Задача:

Задана функция и ее разложение в ряд. Численно убедиться в справедливости равенства, для чего для заданного значения аргумента [latex]x[/latex] вычислить левую его часть и разложение, стоящее в правой части, с заданной погрешностью [latex]\varepsilon[/latex]. Испытать разложение на сходимость при разных значениях аргумента, оценить скорость сходимости, для чего вывести число итераций [latex]n[/latex].

[latex]\frac{e^x+e^{-x}}{2}=1+\frac{x^2}{2!}+\frac{x^4}{4!}+ … +\frac{x^{2n}}{2n!}+…[/latex]

Тесты:

[latex]x[/latex] [latex]\varepsilon[/latex] [latex]a[/latex] [latex]b[/latex] [latex]n[/latex] Комментарий
1 0.0001 1.54308 1.54306 3 Пройден
1.5 0.001 2.35241 2.35176 3 Пройден
3 0.02 10.0677 10.0502 0 a=b,Пройден
10 0.3  11013.2  11012.9  12  Пройден

 

Код:

В задаче дана функция и ее разложение.   В главной функции задаем аргумент и погрешность. Находим значение функции(левая часть). Дальше нам нужно найти  значение разложения(правая часть). Для этого создаем цикл который будет работать пока, разница левой и правой части не станет меньше погрешности. Для этого к правой части прибавляем [latex]\frac{x^{2n}}{2n!}[/latex] до тех пор, пока разница между функцией и разложением не будет меньше погрешности.

Ссылка Ideone

Код Java

Ссылка на Ideone

Related Images:

Ю3.46

Задача: Для заданных значений [latex]n [/latex] и [latex]x [/latex] вычислить выражение [latex]s = \sin x+\sin \sin x+ \cdots +\sin \sin \cdots \sin x [/latex].

n x s
10 5.01 -6.40802
8 1.67 5.54661
20 2*PI 0

Решение:

Ссылка на ideone C++: http://ideone.com/70iBvc

Ссылка на ideone Java: http://ideone.com/M2gM7s

 

Суммируем в цикле [latex] \sin x [/latex] и присваиваем  [latex]x = \sin x[/latex]

Related Images:

Ю3.6

Последовательная обработка деталей на трёх станках к задаче Ю3.6

Последовательная обработка деталей на трёх станках к задаче Ю3.6

Задача:  Время обработки. Каждая из деталей должна последовательно пройти обработку на каждом из 3-х станков. Продолжительности обработки каждой детали на каждом станке вводятся группами по 3 числа, до исчерпания ввода. Сколько времени займет обработка всех деталей?

Количество деталей Время обработки Ответ
3 1 2 3 4 5 6 7 8 9 29
2  4 5 6 -5 4 5 Ошибка
2 5 4 3 2 4 0 13

Решение:

Ссылка на ideone C++: http://ideone.com/sKN2FU

Ссылка на ideone Java: http://ideone.com/ZwNfNL

Введем 3 переменные  [latex]t1, t2, t3 [/latex] , обозначающие время обработки детали на каждом из 3х станков и переменные [latex]x, y, z [/latex] которые будут показывать общее время обработки на каждом станке. Дольше всех будет работать 3й станок, поэтому наша задача вычислить время обработки на нем всех деталей.

Вычисляем время обработки всех деталей:

Если у нас не было введено время обработки меньше нуля, то выводим общее время работы третьего станка.

 

Related Images:

Ю3.27

Задача:  Численно убедиться в справедливости равенства, для чего для заданного значения аргумента [latex]x[/latex] вычислить левую его часть и разложение, стоящее в правой части с заданной погрешностью [latex]\varepsilon [/latex]. Испытать разложение на сходимость при разных значениях аргумента, найти скорость сходимости, для чего вывести число итераций [latex]n[/latex] (слагаемых или сомножителей), необходимых для достижения заданной точности. В некоторых задачах указан интервал допустимых значений аргумента [latex]x[/latex], при которых сходимость гарантируется.

[latex]\ln \left(1-x \right)=-\left(x+\frac{x^{2}}{2}+\frac{x^{3}}{3}+\cdot \cdot \cdot +\frac{x^{n}}{n}+\cdot \cdot \cdot \right)[/latex],   [latex]x<1[/latex]
[latex]x[/latex] [latex]eps[/latex] Левая часть Правая часть Количество шагов
0.1 0.001 -0.105361 -0.105 3
0.1 0.000001 -0.105361 -0.105360 6
0.5 0.001 -0.693147 -0.692262 8
0.5 0.000001 -0.693147 -0.693146 17
0.95 0.001 -2.995732 -2.994775 101
0.95 0.000001 -2.995732 -2.995731 222

C++:

Java:

Для переменных [latex]x, eps, a, b, c[/latex] я использовала double, так как [latex]x<1[/latex] и [latex]eps[/latex] ([latex]\varepsilon [/latex]) — вещественные числа, которые вводит пользователь, [latex]a, b, c[/latex] используются для вычислений, поэтому тоже вещественные. Для переменной [latex]n[/latex] (в неё записывается количество шагов цикла) я использовала тип int, т.к. это целые числа.

Сперва вычисляем значение переменной [latex]a[/latex] — левую часть равенства.

Для вычисления правой части используем цикл for, который работает пока [latex]\left|a-b \right|\geq eps[/latex] (т.е. различие между правой и левой частью больше, чем погрешность, заданная пользователем).
При каждом шаге переменная [latex]n[/latex] увеличивается на единицу для подсчёта скорости сходимости.
Переменная [latex]c[/latex] обозначает элемент суммы, а [latex]b[/latex] — сумму элементов в правой части равенства.

Эта задача на Ideone:
C++
Java

Related Images:

А114г

Вычислить [latex]\sum_{i=1}^{128}{\frac{1}{(2i)^2}}[/latex]

Для наглядности я немного изменил условие, заменив 128 на [latex]n[/latex](число, вводимое с клавиатуры).

n Ответ Вердикт
1 0.25 Пройдено
5 0.365903 Пройдено
128 0.409288 Пройдено
Ссылка на код:ссылка

Мы ввели переменную [latex]x[/latex] типа [latex]double[/latex], приравняли её к [latex]0[/latex]. Ввели переменную [latex]n[/latex] типа [latex]int[/latex], далее команду для её ввода [latex]cin >>n[/latex]. Затем сделали цикл [latex]for[/latex], а в нём вычислили сумму [latex]n[/latex] членов прогрессии . Когда цикл дойдёт до [latex]n[/latex], его условие перестанет выполняться и напечатается последнее значение, присвоенное переменной [latex]x[/latex].

Related Images:

Ю3.47

Задача: Для заданного [latex]\varepsilon[/latex] найти наименьшее [latex]n[/latex] такое, что [latex]\frac{2^{n}}{n!} <\varepsilon[/latex]. Вывести все члены последовательности от 1-го до [latex]n [/latex].

[latex]\varepsilon[/latex] Члены последовательности (t) [latex]n[/latex]
0.5 2.000; 2.000; 1.333; 0.667; 0.267; 5
5 2.000; 1
1.99 2.000; 2.000; 1.333; 3
В цикле проверяется больше ли t(член последовательности) чем [latex]\varepsilon[/latex]. Если да то, запускается цикл в котором высчитывается каждый член последовательности пока t не станет меньше [latex]\varepsilon[/latex]. Каждый последующий член последовательности считается на основе предыдущего, то есть член последовательности будет выглядеть как предыдущее значение умноженное на [latex]\frac{2}{n}[/latex]. Если же t меньше [latex]\varepsilon[/latex], то цикл выполняется всего один раз. Если [latex]\varepsilon[/latex] больше двух, то в последовательность будет содержать всего один элемент, так как  значение [latex]\frac{2^{n}}{n!}[/latex] при
[latex]n = 1[/latex] равно двум.

Код программы на Java:

 

Ideone.

Related Images:

Ю3.3

Точки внутри эллипса. Для заданных [latex]a[/latex] и [latex]b[/latex] найти все точки с целочисленными координатами, находящиеся внутри эллипса [latex]\frac{x^2}{a^2}+\frac{y^2}{b^2}\leq 1[/latex]. Полезно, используя процедуру GoToXY в Паскале,  вывести найденные координаты точек в форме эллипса.

a b Результат:
1 1 (-1,0);(0,-1);(0,0);
(0,1);(1,0)
2 1 (-2,0);(-1,0);(0,-1);(0,0)
(0,1);(1,0);(2,0)
3 2 (-3,0);(-2,-1);(-2,0);(-2,1);
(-1,-1);(-1,0)(-1,1);(0,-2);
(0,-1);(0,0);(0,1);(0,2);
(1,-1);(1,0);(1,1);
(2,-1);(2,0);(2,1);(3,0)

Код программы:

По условию задачи нужно для заданных [latex]a[/latex] и [latex]b[/latex] найти все точки с целочисленными координатами, находящиеся внутри эллипса.

Вводим переменные [latex]a[/latex] и [latex]b[/latex] с типом данных «float», а [latex]x[/latex] и [latex]y[/latex] с типом «int», так как нам нужны точки с целочисленными координатами.

Пусть [latex](x,y)\in Z^2[/latex] ,[latex] a>0[/latex], [latex] b>0[/latex] и [latex]\frac{x^2}{a^2}+\frac{y^2}{b^2}\leq 1[/latex] .

Тогда [latex]\frac{x^2}{a^2}+y\leq 1\rightarrow[/latex] [latex]0\leq \frac{y^2}{b^2}[/latex][latex]\leq 1-\frac{x^2}{a^2}\rightarrow[/latex][latex]0\leq 1-\frac{x^2}{a^2}\Leftrightarrow[/latex][latex]\frac{x^2}{a^2}\leq 1\Leftrightarrow [/latex][latex]x^2\leq a^2 \Leftrightarrow[/latex] [latex]-a\leq x\leq a\Leftrightarrow[/latex] [latex][-a]\leq x\leq [a][/latex].
Аналогичным образом получаем, что обязано выполняться двойное неравенство [latex][-b]\leq x\leq [b].[/latex]

С геометрической точки зрения, полученные результат означает, что все точки эллипса, имеющие целочисленные координаты, лежат внутри прямоугольника [latex]\left \{ \right.(x,y)\in R^2|[-a]\leq x\leq [a]; [-b]\leq x\leq [b]\left. \right \}[/latex] .
Перебрав все целочисленные точки этого прямоугольника и отобрав те из них, которые удовлетворяют неравенству эллипса, решим задачу.

Для проверки работы программы можно воспользоваться объектом.

 

Код программы на Java:

Related Images:

Ю3.44

Задача: Леспромхоз ведёт заготовку деловой древесины. Первоначальный объем её на территории леспромхоза составлял [latex]p[/latex] кубометров. Ежегодный прирост составляет [latex]k[/latex]%. Годовой план заготовки — [latex]t[/latex] кубометров. Через сколько лет в бывшем лесу будут расти одни опята?

  1. Тесты:
[latex]p[/latex] [latex]k[/latex]% [latex]t[/latex] [latex]years[/latex] Комментарий
111.50 14.57 16 Никогда Пройден: прирост компенсирует вырубку
0 0 0 0 Пройден: абстрактный случай, но результат верный
20 10 30 1 Пройден
200 30 61 16 Пройден
  1. Программный код:
  1. Формализация задачи:
    Дано начальное значение [latex]p \ge 0[/latex]. На [latex]i[/latex]-м шаге оставшийся объем древесины вычисляется из рекуррентного соотношения: [latex]p_{i} = p_{i-1} (1 + \frac {k}{100})-t[/latex]. (*)
    Определить шаг [latex]i[/latex] такой, что [latex]p_{i}<0[/latex].

  2. Алгоритм решения:
    Шаг 1: Проверка условия [latex]p_{1}[/latex] меньше [latex]p[/latex]. В случае, если если естественный прирост не компенсирует вырубку, начать рассчет. В противном случае лес никогда не опустеет, так как прирост и убыль скомпенсированы.
    Шаг 2: До тех пор, пока [latex]p_{i}>0[/latex], рассчитывать [latex]p_{i}[/latex] по соотношению (*), где [latex]i[/latex] — количество прошедших лет.

  3. Детали реализации:
    В задаче используются два типа данных: целочисленный и с плавающей точкой двойной точности. Выбор продиктован отсутствием указания на конкретный тип входных данных в условии задачи. Протестировать работу программы можно по ссылке.
    Реализация на Java: http://ideone.com/fyuDTg

Related Images:

А116 (б)

Даны натуральное число [latex]n[/latex], действительное число [latex]x[/latex]. Вычислить: [latex]\sum_{i=1}^{n}{(\frac{1}{i!}+\sqrt{|x|})}[/latex];

n x Ответ
2 -4 5.5
3 4 7.6666
1 4 3
Для решения этой задачи воспользуемся циклом for.  Для начала запишем квадрат модуля числа x. Далее создадим цикл для решения этой задачи. Вычислим сначала сумму факториалов, а вне цикла добавим к ней квадрат модуля x, умноженный на n.

Related Images:

А114в

Задача: Вычислить [latex]\sum_{i=1}^{10}{\frac{1}{i!}}[/latex].

Ответ
1.718282

C++:

Java:

Для переменных [latex]a, b[/latex] я использовала тип double, так как они они используются для вычислений и являются вещественными числами. Для переменной [latex]i[/latex] — тип int, так как [latex]i[/latex] — это целые числа от 1 до 10.

Чтобы решить задачу, воспользуемся циклом for, который работает при [latex]1\leq i\leq 10[/latex] и каждый раз прибавляет к [latex]i[/latex] единицу. Переменную [latex]i[/latex] я объявила в цикле, так как вне цикла она не нужна.

Сначала найдём [latex]a[/latex] — элемент суммы, который зависит от выбранного [latex]i[/latex]. После сложим [latex]a[/latex] и переменную [latex]b[/latex], которая обозначает сумму предыдущих элементов, a результат запишем снова в переменную [latex]b[/latex].

Когда цикл дойдёт до 11, его условие перестанет выполняться и напечатается последнее значение, присвоенное переменной [latex]d[/latex].

Эта задача на Ideone:
C++
Java

Related Images: