e-olymp 8653. Прибавить вычесть и умножить

Задача

Пусть x — переменная, изначально равная 0. Промоделируйте выполнение следующих операций над ней:

  • add a: прибавить значение a к x;
  • subtract a: вычесть значение a из x;
  • multiply a: умножить x на a;

Входные данные

Каждая строка содержит операцию и значение. Промоделируйте все операции. Значение переменной x при выполнении каждой операции не превышает по модулю $10^9$.

Выходные данные

Выведите результирующее значение переменной x.

Тесты

Ввод Вывод
1 add 2
subtract 5
subtract 1
multiply -3
12
2 subtract 5
multiply -5
add 5
30
3 add 6
add 543
multiply 23
12627
4 multiply 45678
add 3
3
5 subtract 58
add 38
multiply -1
add 100
120

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

Решение задачи

Инициализировав основную переменную x, через поток ввода считываем все действия, которые неоходимо применить по отношению к переменной. Во время этого ничего не выводим, дожидаясь, пока поток команд закончится. Заметим, что процесс ввода может длиться сколько угодно долго. В конце концов, на выходе получаем уже «преобразованный» x — результат проделанных дейсвтий.

Ссылки

e-olymp 1482. Умножение матриц

Задача

Пусть даны две прямоугольные матрицы $A$ и $B$ размерности $m \times n$ и $n \times q$ соответственно:
$$A = \begin{bmatrix} a_{11} & a_{12} & \ldots & a_{1n} \\ a_{21} & a_{22} & \ldots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \ldots & a_{mn} \end{bmatrix} \; , \; B = \begin{bmatrix} b_{11} & b_{12} & \ldots & b_{1q} \\ b_{21} & b_{22} & \ldots & b_{2q} \\ \vdots & \vdots & \ddots & \vdots \\ b_{n1} & b_{n2} & \ldots & b_{nq} \end{bmatrix} .$$
Тогда матрица $C$ размерностью $m \times q$ называется их произведением:
$$C = \begin{bmatrix} c_{11} & c_{12} & \ldots & c_{1q} \\ c_{21} & c_{22} & \ldots & c_{2q} \\ \vdots & \vdots & \ddots & \vdots \\ c_{m1} & c_{m2} & \ldots & c_{mq} \end{bmatrix} ,$$
где: $$c_{i,j} = \sum_{r=1}^{n} a_{i,r}b_{r,j} \; \left(i = 1, 2, \ldots m; j = 1, 2, \ldots q\right).$$
Операция умножения двух матриц выполнима только в том случае, если число столбцов в первом сомножителе равно числу строк во втором; в этом случае говорят, что форма матриц согласована.

Задано две матрицы $A$ и $B$. Найти их произведение.

Входные данные

В первой строке задано $2$ натуральных числа $n_a$ и $m_a$ – размерность матрицы $A$. В последующих $n_a$ строках задано по $m_a$ чисел – элементы $a_{ij}$ матрицы $A$. В $\left(n_a + 2\right)$-й строке задано $2$ натуральных числа $n_b$ и $m_b$ – размерность матрицы $B$. В последующих $n_b$ строках задано по $m_b$ чисел – элементы $b_{ij}$ матрицы $B$. Размерность матриц не превышает $100 \times 100$, все элементы матриц целые числа, не превышающие по модулю $100$.

Выходные данные

В первой строке вывести размерность итоговой матрицы $C$: $n_с$ и $m_c$. В последующих $n_с$ строках вывести через пробел по $m_c$ чисел – соответствующие элементы $c_{ij}$ матрицы $C$. Если умножать матрицы нельзя — в первой и единственной строке вывести число $\; -1$.

Тесты

Входные данные Выходные данные
2 3
1 3 4
5 -2 3
3 3
1 3 2
2 1 3
0 -1 1
2 3
7 2 15
1 10 7
3 3
1 5 3
2 6 1
7 -1 -3
3 2
3 6
-1 1
3 1
3 2
7 14
3 19
13 38
4 4
4 8 -18 16
3 7 14 -42
2 1 1 7
4 9 5 -2
4 4
1 0 0 0
0 1 0 0
0 0 1 0
4 4
4 8 -18 16
3 7 14 -42
2 1 1 7
4 9 5 -2
3 3
5 7 -1
8 9 3
0 -6 17
2 3
7 -15 1
8 8 2
-1
2 3
57 -49 31
89 11 -37
3 1
19
-19
0
2 1
2014
1482

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

 

Решение

Для начала, считываем данные матрицы $A$ из входного потока и записываем их в двумерный динамический массив. Далее, получив данные о размерности второй матрицы, мы можем определить, выполнима ли операция умножения, и если нет, то прервать выполнение программы. Если операция умножения данных матриц выполнима, то считываем и записываем данные второй матрицы, после чего, по приведённой выше формуле вычисляем произведение матриц $C = A \times B.$ Наконец, выводим полученную матрицу $C.$

Ссылки

Условие задачи на e-olymp
Код задачи на ideone
Умножение матриц на Wikipedia

A278

Задача A278

Условие задачи

Даны натуральные числа [latex]n_{1},\dots,n_{m}[/latex], действительные числа [latex]x_{1},\dots,x_{m}[/latex]. Вычислить [latex]\frac{n_{1}\cdot x_{1}+\dots+n_{m}\cdot x_{m}}{n_{1}+\dots+n_{m}}[/latex].

 

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

Входные данные Выходные данные
1. 1 2 4 -1 -0.4
2. 1 2 3 4 5 0.6 1.88889
3. 5 -2 1 0.2 3 -3 2 0 -1.70909
4. 10 3.3 4 0.4 6 0.01 8 1 1 8 1.7469
5. 3 -0.5 2 -0.4 1 -0.3 5 32 11 5 20 -1 4.58095

Реализация (класс vector)

Алгоритм решения (класс vector)

Считываем все натуральные числа до конца входного потока и записываем их в вектор [latex]n[/latex]. Аналогично, считываем все действительные числа до конца входного потока и записываем их в вектор [latex]x[/latex].

  1. Вычисляем значение выражения [latex]n_1\cdot x_1+\dots+n_m\cdot x_m[/latex], накапливая сумму sum1.
  2. Вычисляем значение выражения [latex]n_1+\dots+n_m[/latex], накапливая сумму  sum2.
  3. Находим результат res от деления sum1 на  sum2.

Реализация (потоковая обработка)

Алгоритм решения (потоковая обработка)

Считываем все натуральные числа до конца входного потока и записываем их в переменную member1. Аналогично, считываем все действительные числа до конца входного потока и записываем их в переменную  member2.
Пока вводятся данные:

  1. Вычисляем значение выражения [latex]n_1\cdot x_1+\dots+n_m\cdot x_m[/latex], накапливая сумму sum1.
  2. Вычисляем значение выражения [latex]n_1+\dots+n_m[/latex], накапливая сумму  sum2.
  3. Находим результат res от деления sum1 на  sum2.

Для запроса на выполнение следует перейти по ссылке (класс vector).

Для запроса на выполнение следует перейти по ссылке (потоковая обработка).

e-olymp 931. Отношение произведения к сумме

Задача

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

Входные данные

Натуральное число [latex]n[/latex], не превышающее 2·109.

Выходные данные

Вывести отношение произведения цифр числа [latex]n[/latex] к их сумме с 3 десятичными цифрами.

Решение

Для решения поставленной задачи нам нужно выделить отдельные цифры в записи данного числа, чтобы сосчитать их произведение и сумму. Для этого прочитаем это число из входного потока данных и реализуем разбиение числа на цифры с помощью цикла while.  Благодаря остатку от деления числа на 10 получаем последнюю цифру текущего числа, затем делим это число на 10. Если полученное число не 0, повторяем все действия, постепенно накапливая произведение и сумму. Найденные значения произведения и суммы цифр данного числа разделим, предварительно воспользовавшись явным преобразованием к типу double. Это и будет ответом, но так как в задаче указано вывести ответ с тремя десятичными цифрами, я использовала функцию <code>setprecision(3)</code>. В итоге получаем решение этой задачи.

Код

 

Тесты

Входные данные Выходные данные
36 2.000
3456 20.000
1645 7.500

Задача взята отсюда.

Код программы на Ideone.com.

ML 1

Условие задачи:

Даны два действительных числа [latex]a[/latex] и [latex]b[/latex]. Получить их сумму,  разность и произведение.

Код №1

Тесты

a z b sum
5 + 6 11
7 8 -1
9 * 11 99

 

Решение №1

Для создания данной программы я описал 4 переменных: [latex]a[/latex], [latex]b[/latex], [latex]z[/latex],  sum.  Для переменных [latex]a[/latex],  [latex]b[/latex],  [latex]sum[/latex] я взял тип переменных «long double» — так как не указано какие числа должны быть. Символом z мы обозначим переменную в  типе «char» —  так как мне надо указать знак операции. Для вычисления суммы надо ввести знак операции «+»,  для разности «-» и для произведения  «*»  выглядит все примерно так мы вводим (первое число «[latex]a[/latex]») (знак «[latex]z[/latex]» ) (второе число «[latex]b[/latex]») и получаем (ответ «[latex]sum[/latex]»).

 

Код №2

 

Решение №2

Это не то, что просили сделать изначально,  но я думаю это тоже будет интересно.

Отличие от первого кода состоит в том, что я добавил дополнительные команды,  а именно:  деления «/»,  возведения в степень «^»  и остаток от деления «%».

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

Ссылки

Условие задачи;
Код программы №1 на Ideone.com;
Код программы №2 на Ideone.com;

A116г

Даны натуральное число [latex]n[/latex] и действительное число [latex]x[/latex]. Вычислить:

[latex]\prod_{k=1}^{n}(1+\frac{sin(kx)}{k!})[/latex]

Вводим переменную [latex]x[/latex] и [latex]n[/latex], помимо них введем переменную для вычисления факториала [latex]k[/latex] и ту, которая будет вычислять произведение в цикле.

Создаем цикл по [latex]k[/latex] от 1 до [latex]n[/latex], проводим в нем все вычисления и вне цикла выводим результат.

Тесты:

[latex]n[/latex] [latex]x[/latex] Результат:
2 5.89 0.39856
9 -300.001 1.65069
3 199 0.170071
7 0 1
4 -50 1.8349

Ссылка на код.

А136е

Задача:

Даны натуральные числа [latex]n[/latex], действительные числа [latex]a_{1}, a_{2}, \cdots, a_{n}[/latex]. Вычислить [latex]a_{1}+a_{2}+\cdots+a_{n}[/latex] и [latex]a_{1}a_{2}\cdots a_{n}[/latex].

Тест:

n [latex]a_{1}, a_{2}, \cdots, a_{n}[/latex] s p Комментарий
2 3 4 7 12 Пройден
4 1 3 5 7 16 105 Пройден
6 2 2 3 3 4 4 18 576 Пройден
1 9 9 9 Пройден

Решение:

В программе задаем число [latex]n[/latex]- количество элементов сумм и произведения и [latex]a[/latex]- элементы сумм и произведения.  [latex]n[/latex] и [latex]a[/latex] вводим с клавиатуры. В цикле находим сумму и произведение.

Посмотреть работу можно тут.

А410д

Задача:

Дана целочисленная матрица [latex][a_{ij}, i, j =1, … n][/latex]. Получить [latex]b_1, …, b_n[/latex], где [latex]b_i=\prod_ja_{ji}[/latex] для все таких [latex]j[/latex], что  [latex]1 < a_{ji} <= n[/latex];

Тесты:

[latex]ixj[/latex] a_{ij} [latex]b_1, …, b_n[/latex] Комментарий
3×3 [latex]\begin{pmatrix}1 & 2 & 1 \\ 2 & 1 & 2 \\ 2 & 2 & 1\end{pmatrix}[/latex]  4, 4, 2 Пройден
4×3 [latex]\begin{pmatrix}2 & 4 & 8 \\3 & 1 & 5 \\6 & 7 & 8\\1 & 4 & 1\end{pmatrix}[/latex]  6, 4, * Пройден
2×3 [latex]\begin{pmatrix}2 & 4 & 3\\ 4 & 2 & 3\end{pmatrix}[/latex]  2, 2, * Пройден

Код:

Для начала  вводим размерность массива [latex]a[/latex]. Затем с помощью цикла [latex]for[/latex] заполняем этот массив.

Теперь каждому элементу массива [latex]b[/latex] задаем значение [latex]1[/latex]. Находим произведение таких элементов матрицы [latex]a_{ji}[/latex], которе бы удовлетворяли условию задачи, а именно для все таких [latex]j[/latex], что  [latex]1 < a_{ji} <= n[/latex]. В итоге если в массиве  [latex]b[/latex] остается элемент с значением  [latex]1[/latex], выводим символ  [latex]*[/latex], так как нельзя найти произведение. Выводим значения массива  [latex]b[/latex].

Код Java

Ссылка на Ideone

A114з

Задача:

Вычислить [latex]\prod_{i=2}^{10}{\left(1-\frac{1}{i!} \right)^{2}}[/latex].

Тест:

[latex]\prod_{i=2}^{10}{\left(1-\frac{1}{i!} \right)^{2}}=0,1563[/latex]- тест пройден.

Решение:

Для решения это задачи сделаем цикл. в котором будем вычислять произведение и факториал. Факториал будем вычислять применяя рекуррентные соотношения. Затем подставим факториал в формулу и вычислим произведение.

Посмотреть работу программы можно здесь.

А136л

Задача: Даны натуральное число [latex]n[/latex], действительные числа [latex]a_{1},\cdot \cdot \cdot ,a_{n}[/latex]. Вычислить: [latex]\sqrt{\left|a_{1}a_{2}\cdot \cdot \cdot a_{n} \right|}[/latex].

[latex]n[/latex] [latex]a_{1}[/latex] [latex]a_{2}[/latex] [latex]a_{3}[/latex] [latex]a_{4}[/latex] [latex]a_{5}[/latex] [latex]a_{6}[/latex] [latex]a_{7}[/latex] [latex]a_{8}[/latex] [latex]k[/latex]
4 -5 2 4 -3.6 12
8 -5 0.2 -3.2 0.5 -1.25 20 2 80 80
3 4 4 0 0
5 3 8 6 2.8 1.3 22.894541

С++:

Java:

Объявляем переменную [latex]n[/latex] (количество элементов — это целое число, поэтому используем тип int) и переменные a (элементы произведения), p (произведение), k (корень из модуля произведения элементов), они могут быть вещественными, поэтому выбираем тип double.

В цикле for считываются элементы [latex]a_{1},a_{2},\cdot \cdot \cdot ,a_{n}[/latex], где [latex]i[/latex] — индекс элемента, и вычисляется их произведение.

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

Задача на Ideone:
C++
Java

А116д

Задача:

Даны натуральное число [latex]n[/latex], действительное число [latex]x[/latex]. Найти:

[latex]\prod_{k=1}^{n}(\frac{k}{k+1}-cos^k|x|)[/latex]

Тесты:

[latex]x[/latex] [latex]n[/latex] [latex]p[/latex] Комментарий
1 4 0.0212016 Пройден
-4 3 -0.0779913 Пройден
50 16 0.0782772 Пройден

Код:

Для решения данной задачи создаем цикл, счетчик [latex]k[/latex] которого не превышает заданного [latex]n[/latex].  В самом цикле вычисляем произведение [latex]p[/latex] путем домножения новых  множителей заданных формулой  [latex]\frac{k}{k+1}-cos^k|x|[/latex]  пока [latex]k[/latex] не превысит [latex]n[/latex]. Выводим произведение [latex]p [/latex].

Ссылка Ideone

Код Java

Ссылка на Ideone

А59з

Задача. Даны действительные числа [latex]x, y[/latex]. Определить, принадлежит ли точка с координатам [latex]x, y[/latex] заштрихованной части плоскости (рис. ниже).

ыфв

Объявляем две переменные [latex]x,y[/latex] типа [latex]double[/latex] (точки могут иметь дробные координаты). Читаем координаты точки. В условии проверяем три пункта:

  1. Лежит ли [latex]y[/latex] выше [latex]-2[/latex] [latex](y>=-2)[/latex].
  2. Находится ли точка между двумя прямыми [latex](|x|<=1)[/latex].
  3. Лежит ли точка ниже диагоналей,описанных функцией [latex]y=|x|[/latex].

Если все эти три условия соблюдены, то точка находится в закрашенной области, иначе вне этой области.

Реализация на Java:

 

 

А165б

Задача:
Даны действительные числа [latex]{a}_{1},{a}_{2},\dots[/latex] . Известно, что [latex]{a}_{1}>0[/latex] и что среди [latex]{a}_{2},{a}_{3},\dots[/latex] есть хотя бы одно отрицательное число. Пусть [latex]{a}_{1},\dots,{a}_{n}[/latex] – члены данной последовательности, предшествующие первому отрицательному члену (n заранее неизвестно). Получить:
б) [latex]{a}_{1}{a}_{2}\dots{a}_{n}[/latex];

Тесты:

Последовательность [latex]{a}_{1}{a}_{2}\dots{a}_{n}[/latex] Комментарий
1 2 3 4 -1 2 24 Пройден
0.5 0.4 0.3 0.2 0.1 -0.1 -0.2 -0.3 0.0012 Пройден
1.5 -1 50 1.5 Пройден
1 2 3 4 3 2 1 0 -1 0 Пройден

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

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

Идея решения:
Считывать числа с потока ввода. Если считанное число отрицательное, остановится и вывести накопленное произведение на экран. Иначе умножить произведение на очередное число.

Ю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! } +\cdots+\frac { { x }^{ 2n } }{ (2n)! } +\cdots[/latex]

Тесты

   x [latex]\varepsilon[/latex] Левая часть Правая часть    n Разность Комментарий
3 0.00005 10.0676619958  10.0676598764 8 0.0000021194 Пройден
 11.33  0.0000314 41641.5114284855 41641.5114045419 19 0.0000239436 Пройден
 6 0 Погрешность равна 0, тогда правая часть стремится к левой 201.7156361225 (n=бесконечность)​  Не пройден

Код программы на C++:

В данной задаче необходимо было доказать равенство при заданном [latex]x[/latex] и [latex]\varepsilon [/latex].

Для этого вначале высчитывалось значение левой части [latex]\frac { { e }^{ x }+{ e }^{ -x } }{ 2 } [/latex] при заданном [latex]x[/latex], а далее, в цикле, высчитывалось значение правой части [latex]\frac { { x }^{ 2 } }{ 2! } +\frac { { x }^{ 4 } }{ 4! } +…+\frac { { x }^{ 2n } }{ (2n)! } +…[/latex]. В цикле программа находила последующий элемент последовательности, стоящей в правой части равенства, каждый раз умножая предыдущий элемент на [latex]\frac { { x }^{ 2 } }{ (2n-1)*(2n) } [/latex] до тех пор пока разность между левой и правой частью равенства [latex]dife=left-right[/latex]  не стала меньше заданной погрешности, заданной по модулю [latex]dife < \left|\varepsilon \right|[/latex]. После завершения цикла программа запоминает последнее значение [latex]n[/latex] и после этого выводит его на экран.

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

 

А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

Ю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

А 42

Задача

Даны действительные числа [latex]x,y[/latex]  [latex](x\neq y)[/latex]. Меньшее из этих двух чисел заменить их полусуммой, а большее — их удвоенным произведением.

Тесты

Было дано Стало после проверки Комментарий
x y x y
38.76 -24.33 -1886.0615999  7.215 Пройден
11.346 23.228 17.287 527.0898 Пройден
-2444.2 1231.444 -606.378 -6019790.8496 Пройден
767.2 -1455.24 -2232920.256 -344.02 Пройден
0 213.4 106.7 0 Пройден
1111 0 0 555.5 Пройден
123.4 123.4 Ничего не выйдет, х=у Не пройден
0 0 Ничего не выйдет, х=у Не пройден

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

 

Для получения ответа переменной необходимо преодолеть критерий [latex](x\neq y)[/latex].

Если же [latex](x\neq y)[/latex], то программа сравнивает сами переменные. Тут может быть два случая:

  • Если  [latex]x>y[/latex], то начальные значения переменных мы должны изменить на [latex]x=\frac{x+y}{2}[/latex], a [latex]y=2*x*y[/latex].
  • Если [latex]y>x[/latex], то начальные значения переменных мы должны изменить на [latex]y=\frac{x+y}{2}[/latex], a [latex]x=2*x*y[/latex].

Программа вначале высчитывает конечные х и у по формулам и при выполнении условий просто присваивает переменным значения. Тем самым мы упрощаем программу (т.к. расчет значений идет только один раз вместо двух).

Второй вариант решения.

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

Для начала описываем функцию swap, которая меняет значения х и у местами. Далее, в самой программе, проверяем не равны ли х и у и, если не равны, то какое из них больше. Узнав большее, используем функцию swap.

Код на Java

А28

Задача.

Дано действительное число х. Не пользуясь никакими другими арифметическими операциями кроме сложения, вычитания и умножения, вычислить:

[latex]2x^4 + 3x^3 — 4x^2 — 5x +6[/latex]

Разрешается использовать не более четырех умножений и четырех сложений и вычитаний.

Тест

x p комментарий
0 6 пройдено
1 2 пройдено
5 1506 пройдено
-6 1836 пройдено
-20 294506 пройдено
25 825506 пройдено
50 12864756 пройдено
100 202959506 пройдено

 

 

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

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

 

Решение.

Вводим переменные [latex]x, p[/latex]. Поэтапно группируя по два старших члена уравнения, получаем:

Пользуясь четырьмя операциями умножения, двумя сложения и вычитания и вводя соответствующие значения [latex]x[/latex], получаем ответ.

 

А1

Задача. Даны два действительных числа [latex]a[/latex] и [latex]b[/latex]. Получить их сумму, разность и произведение.

[latex]a[/latex] [latex]b[/latex] [latex]a+b[/latex] [latex]a — b[/latex] [latex]ab[/latex] Комментарий
 0  0  0 0.0 0.0 Пройден
 1 2  3.0 -1.0  2.0 Пройден
 100.3 1000.0001  1100.3001  -899.7001  100300.01003 Не пройден из-за ошибки округления
 1.2e2  -2.2e2  -100  340  -26400 Пройден
 1.2e22  -2.2e22  -1e22 3.4e22  2.64e44 Пройден
1e308 1e308 1e308 0 1e616 Не пройден — превышено макс.значение

Диапазон тестов нужно подобрать так, чтобы произведение не выходило за допустимые значение для данного типа. Иначе получаем inf — бесконечность.
Если разница в порядках чисел велика (например, 1e38 и 1e-38), то при сложении и вычитании меньшее по абсолютной величине игнорируется.

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

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