Задача А165к. Даны действительные числа [latex]a_{1}, a_{2}, \ldots[/latex]. Известно, что [latex]a_{1} < 0[/latex] и что среди [latex]a_{2}, a_{3}, \ldots[/latex] есть хотя бы одно отрицательное число. Пусть
[latex]a_{1}, \ldots, a_{n}[/latex] – члены данной последовательности, предшествующие
первому отрицательному члену ( [latex]n[/latex] заранее неизвестно). Получить: [latex]\left|a_{1}-a_{n} \right|[/latex].
Введённые данные. | [latex]\left|a_{1}-a_{n} \right|[/latex] | Комментарий. |
1 2 6 4 -8 0 6 8 -7 | 3 | Пройден. |
0,65 3,2 4 0 -3 2 | 0,65 | Пройден. |
0 -5 8 9 | 0 | Пройден. |
0,8 3 6 9 7,2 0 4 -2 | 3,2 | Пройден. |
1 -3 6 | 0 | Пройден. |
Код программы (C++):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <stdio.h> #include <math.h> int main(){ double a, b1, b0; // a - первый член последовательности, который мы должны запомнить. b0 и b1 - последующие члены соответственно. scanf ("%lg", &a); b0=a; while (1) { scanf ("%lg", &b1); if (b1 < 0) break; b0=b1; } printf ("%lg", fabs(a - b0)); return 0; } |
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { double a, b1, b0; Scanner in = new Scanner (System.in); a=in.nextDouble(); b0=a; while (true) { b1=in.nextDouble(); if (b1<0) break; b0=b1; } System.out.format ("%f%n", Math.abs(a - b0)); } } |
Так как в моей формуле присутствует первый член последовательности, который, согласно условию, всегда больше 0, я вынесла его из общего ряда, поэтому его ввод с клавиатуры осуществляется вне цикла.
Затем мне нужно было найти n-ый член моей последовательности. Для этого я создала 2 переменных, в одной из которых хранится настоящее значение n-ого члена независимо от его знака. Если этот член — число не отрицательное, то вспомогательной переменной присваивается его значение и цикл повторяется вновь. Если же условие неравенства не выполняется, то цикл заканчивается, и у нас остаётся значение нашей вспомогательной переменной (не отрицательное).
В том случае, если первый член последовательности является в то же время и n-ым, [latex]a_{n}[/latex] и вспомогательной переменной присваивается значение [latex]a_{1}[/latex]. И в этом случае модуль разницы будет равен 0.
После программа выводит модуль [latex]\left|a_{1}-a_{n} \right|[/latex].
Ознакомиться с кодом можно здесь (C++) и здесь (Java).
А что Ваша программа выведет для последовательности 1 -2? В этом случае уже второй элемент отрицательный и n=1. Проверьте, исправьте ошибку и внесите этот тест.
Спасибо за замечание, не подумала о таком случае.
Всё исправлено.
Засчитано.
— Присваивание b1 = a лишнее? Лучше не делать запутывающих читателя действий.
— С обоих сторон знаков операций принято ставить пробелы. Просто легче читается.