Даны действительные числа [latex]a_{1}, a_{2}, \cdots [/latex].
Известно, что [latex]a_{1}>0[/latex] и что среди [latex]a_{2}, a_{3},[/latex]… есть хотя бы одно отрицательное число. Пусть [latex]a_{1},[/latex]…,[latex]a_{n}[/latex] – члены данной последовательности, предшествующие первому отрицательному члену ([latex]n[/latex] заранее неизвестно). Получить з)
[latex](-1)^n \cdot a_{n}[/latex].
Последовательность | [latex](-1)^n \cdot a_{n}[/latex] | Результат: |
2 5 6 3 8 7 -3 | 7 | Тест пройден |
4.67 9 14 8 3.5 -4 | -3.5 | Тест пройден |
0 7 12 -5 3.3 -4 2 | 12 | Тест пройден |
-7 4 3.8 9.62 8 | 0 | Тест пройден |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> #include <math.h> using namespace std; int main() { double a=0, b=0.0, b1=0.0; //Переменные для хранения номера элемента, а также текущего и предыдущего значений. while(true) { scanf("%lf", &b1); // Чтение из стандартного потока. if (b1 < 0) break; // Условие при котором происходит выход из цикла. b=b1; a++; } if(a%2==0) cout << b<< endl; else cout<< (-b)<< endl; return 0; } |
По условию задачи нужно вычислить: [latex](-1)^n \cdot a_{n}[/latex].
Вводим переменные с типом данных «double», так как они по условию являются вещественными.
Создаем цикл, который заканчивается при условии, что вводится отрицательное число. То есть, если следующий элемент последовательности меньше 0, то цикл заканчивается. Пока вводятся неотрицательные элементы, их количество увеличивается на единицу, а введенное значение сохраняется в вспомогательную переменную.
После выхода из цикла остается значение и номер последнего элемента, стоящего перед отрицательным членом последовательности.
Для проверки работы программы можно воспользоваться объектом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); double a=0, b=0.0, b1=0.0; while(true) { b1 = in.nextDouble(); if (b1 < 0) break; b=b1; a++; } if(a%2==0) System.out.println(b+"/n"); else System.out.println(-b); } } |
— 10-ю строку нужно сдвинуть вправо
— Зачем нужна переменная b, которая содержит копию b1? Чем плоха b1?
— Не нужно вычислять знак при помощи функции возведения в степень. Это из пушки по воробьям. Вы ведь знаете, что -1 в чётной степени это 1, а в нечётной -1? Вот и проверьте переменную а на чётность.
Отредактировано. Переменная b нужна для обозначения предыдущего номера, так как операцию надо осуществлять над предыдущим от отрицательного элементе.
Понял. Принято.
Ввод, отступы, формулы.
Вы написали в ключевых словах «поток ввода-вывода». Славик, как может быть один поток ввода и вывода?
Исправил код.