Задача: Дано действительное число [latex]a[/latex]. Для функции [latex]f(x)[/latex], график которой представлен на рисунке, вычислить [latex]f(a)[/latex].
График:
Тесты:
a | f(a) |
1 | 1 |
3.2 | -0.015371 |
6 | -0.027469 |
0 | 0 |
-1 | 1 |
-2.5 | 2.5 |
1.5 | 1 |
1.8 | 1 |
1.001 | 1 |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <stdio.h> int main(void) { // Объявление переменных a, y, k, b типа float для хранения данных double a; double y; double k; double b; // Ввод пользователем значений переменной а с помощью scanf scanf("%lf", &a); // Вычисление и вывод результата по формуле с предварительным сравнением значения а, if( a <= 0 ) { k = -1; b = 0; } else if ( a <= 1 ) { k = 1; b = 0; } else if ( a < 2 ) { k = 0; b = 1; } else { k = -2; b = 5; } y = k*a + b; printf("result is %lf", y); // Завершение программы return 0; } |
Код программы на языке Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import java.util.*; import java.lang.*; import java.io.*; class GraphicApp { public static Double scanDouble( Scanner in ) { return ( ( in.hasNextDouble() ) ? in.nextDouble() : null ); } public static void main( String[] args ) { // ќбъ¤вление переменных a, y, k, b типа double дл¤ хранени¤ данных double a; double y; double k; double b; Scanner in = new Scanner(System.in); a = scanDouble( in ); in.close(); // ¬ычисление и вывод результата по формуле с предварительным сравнением значени¤ а, if( a <= 0 ) { k = -1; b = 0; } else if ( a <= 1 ) { k = 1; b = 0; } else if ( a < 2 ) { k = 0; b = 1; } else { k = -2; b = 5; } y = k*a + b; System.out.printf("result is %f\n", y); } } |
Ссылка:http://ideone.com/e6UFys
Результат вычисляем по формуле:
[latex]y = ka + b[/latex]
Программа состоит из следующих частей:
- Объявление переменных a, y, k, b типа float для хранения данных
- Ввод пользователем значений переменной а с помощью scanf
- Вычисление и вывод результата по формуле с предварительным сравнением значения а
- Завершение программы
Программа сравнивает значение переменной [latex]a[/latex] с значениями переменной [latex]x[/latex] на четырёх диапазонах, и в зависимости от диапазона использует для функции [latex]y = ka + b[/latex] нужные значения [latex]k[/latex] и [latex]b[/latex]. Так вычисляется [latex]f(a)[/latex].
Ссылка на ideone.com : http://ideone.com/N2toyp
— Укажите название
— Ссылка на код должна быть ссылкой («кликабельной»)
— пробелы после запятых
— условия нужно подкорректировать:
17: зачем проверять a > 0 если это часть else от a>=0?
19: условие неверное, на участке (1;2) программа работает неправильно, а тестов для этого участка нет.
Ошибки уже исправил, ожидаю проверки.
В 17-й и 19-й строке в условиях лишние проверки.
Простите, с не понял.
Строка 17 показывает условие диапазона всех значений от 0 до 1 не включая 0.
Строка 19 показывает условие всех значений между 1 и 2 не включая их.
Не понимаю где ошибка, ведь это — условие не пересекающихся диапазонов.
Так было бы, если бы перед ними не было слова else.
Если это слово не писать то все Ваши условные операторы работают последовательно и независимо от предыдущих.
Слово else показывает, что предыдущее условие нарушено. Т.е. последующий условный оператор вложен в предыдущий и выполняется только если условие предыдущего не выполняется.
В 16-й строке Вы проверили a <= 0? В 17-ю строку Вы попадаете (else = иначе!) только если условие из 16-й строки не выполняется. Т.е. не(a <= 0). Это означает, что a > 0. Зачем же в 17-й строке снова проверять else if ( a > 0 && a <= 1 )?
Убрал else согласно вашим замечаниям. Я думал, что else жёстко определяют последовательность отрезков на оси Х.
Я не говорил убирать else. В каждом замечании я прошу Вас убрать излишние проверки из условий в строках 17 и 19.
Пожалуйста, перечитайте все мои замечания и сделайте так, как я прошу.
Все исправил, теперь все работает правильно.
Принято
Вы правильно перевели на язык Java программу на C++, но все же исходная программа на C++, как и версия Java имеют очень досадный баг. Попробуйте ввести 0 или -1 на вход… Пока засчитать не могу.
Подсказка: забыли else в одном месте: правильная структура операторов if () … else if () … else if () … else …; (т.е. если это, то первое, иначе если то, то второе, иначе если еще что-то, то третье, иначе четвертое). И else пропускать нельзя! (подумайте почему).
Засчитана Java версия. Ошибка исправлена!