Задача. Дано действительное число [latex]a[/latex]. Для функций [latex]f\left( x \right)[/latex], графики которых представлены на рис. 1,а-1,г, вычислить [latex]f\left( a \right) [/latex].
Тесты.
[latex]a[/latex] | [latex]y[/latex] |
-1 | 1 |
0 | 0 |
2 | 4 |
-2 | 0.25 |
1.6 | 2.56 |
7 | 4 |
Код программы (C++).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <iostream> using namespace std; int main() { double a, y; cin >> a; if (a<-1) { y = 1/(a*a); } else { if (a>=-1 && a<=2) { y = a*a; } else { y = 4; } } cout << y; 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.*; class Main { public static void main (String[] args) { Scanner in = new Scanner(System.in); double a, y; a = in.nextDouble(); if (a < -1){ y = 1/(a*a); } else{ if (a >= -1 && a <= 2) y = a*a; else y = 4; } System.out.printf("%.8f\n", y); } } |
Решение.
На графике функции указано, чему равна [latex]f\left( x \right)[/latex] на каждом участке. В данной программе мы по очереди проверяем, какому из них принадлежит [latex]f\left( a \right)[/latex] и выбираем соответствующую формулу для расчёта [latex]y[/latex]. Поскольку участков всего три, достаточно проверить, принадлежит ли точка к двум из них. Ели нет, то она, очевидно, лежит на третьем.
Ссылка на код на ideone.com: здесь (C++) и здесь (Java).
— Поправьте отступы после условного оператора. Лучше писать единственную команду в той же строке. что if, либо использовать фигурные скобки так, как вы делаете после else.
— Поскольку у Вас три случая, то достаточно два вложенных условных оператора. Третий лишний 🙂
— Для постоянных ссылок лучше не использовать символы кириллицы. Придумайте что-нибудь из латинских букв и цифр. Например транслитерируйте название задачи.
Кажется, всё исправил.