А58г

 Задача: Дано действительное число  [latex]a[/latex]. Для функции  [latex]f(x)[/latex], график которой представлен на рисунке, вычислить  [latex]f(a)[/latex].
График:
a
Тесты:

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

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

Код программы на языке Java:

Ссылка:http://ideone.com/e6UFys

Результат вычисляем по формуле:
[latex]y = ka + b[/latex] Программа состоит из следующих частей:

  1. Объявление переменных a, y, k, b типа float для хранения данных
  2. Ввод пользователем значений переменной а с помощью scanf
  3. Вычисление и вывод результата по формуле с предварительным сравнением значения а
  4. Завершение программы

Программа сравнивает значение переменной [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

Швандт Максим Альбертович
Швандт Максим Альбертович

Latest posts by Швандт Максим Альбертович (see all)

11 thoughts on “А58г

  1. — Укажите название
    — Ссылка на код должна быть ссылкой («кликабельной»)
    — пробелы после запятых
    — условия нужно подкорректировать:
    17: зачем проверять a > 0 если это часть else от a>=0?
    19: условие неверное, на участке (1;2) программа работает неправильно, а тестов для этого участка нет.

    • Простите, с не понял.
      Строка 17 показывает условие диапазона всех значений от 0 до 1 не включая 0.
      Строка 19 показывает условие всех значений между 1 и 2 не включая их.
      Не понимаю где ошибка, ведь это — условие не пересекающихся диапазонов.

  2. Так было бы, если бы перед ними не было слова else.
    Если это слово не писать то все Ваши условные операторы работают последовательно и независимо от предыдущих.
    Слово else показывает, что предыдущее условие нарушено. Т.е. последующий условный оператор вложен в предыдущий и выполняется только если условие предыдущего не выполняется.

    В 16-й строке Вы проверили a < = 0? В 17-ю строку Вы попадаете (else = иначе!) только если условие из 16-й строки не выполняется. Т.е. не(a <= 0). Это означает, что a > 0. Зачем же в 17-й строке снова проверять else if ( a > 0 && a <= 1 )?

  3. Вы правильно перевели на язык Java программу на C++, но все же исходная программа на C++, как и версия Java имеют очень досадный баг. Попробуйте ввести 0 или -1 на вход… Пока засчитать не могу.

    Подсказка: забыли else в одном месте: правильная структура операторов if () … else if () … else if () … else …; (т.е. если это, то первое, иначе если то, то второе, иначе если еще что-то, то третье, иначе четвертое). И else пропускать нельзя! (подумайте почему).

Добавить комментарий