Написать программу которая по введенному значению аргумента вычисляет значение функции

от admin

Задача 64687 Написать программу, которая по.

Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика.

Решение

Формула функции такая, кусочно-непрерывная:
Если x ∈ [-10; -6], то это полуокружность с центром (-8, -2) и R=2:
(x + 8)^2 + (y + 2)^2 = R^2 = 4. Отсюда:
y1 = sqrt(4 — (x + 8)^2) — 2
Если x ∈ (-6; 2], то это прямая через точки (-2; 0) и (2; 2):
(x + 2)/(2+2) = (y — 0)/(2 — 0)
(x + 2)/4 = y/2
y2 = (x + 2)/2 = 0,5x + 1
Если x ∈ (2; 6], то: y3 = 0
Если x ∈ (6; 8], то: y4 = (x — 6)^2
Соответственно, и надо писать условия.
На Quick Basic это будет примерно так:
Sub Grafik
Dim x As Single, y As Single
M1 : x = Input "Введите x от -10 до 8:"
If (x >= -10) And (x <= -6) Then
y = sqrt(4 — (x + 8)^2) — 2 : Print y
ElseIf (x > -6) And (x <= 2) Then y = 0,5x + 1 : Print y
ElseIf (x > 2) And (x <= 6) Then y = 0 : Print y
ElseIf (x > 6) And (x <= 8) Then y = (x — 6)^2 : Print y
Else Print "Введен неправильный x" : Goto M1
End If
End Sub

Кафедра прикладной математики

В линейной программе все операторы выполняются последовательно, один за другим. Таким способом можно записывать только очень простые алгоритмы. Для того чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов, применяются операторы ветвления if и case.

Оператор if обеспечивает передачу управления на одну из двух ветвей вычислений, а оператор case – на одну из произвольного числа ветвей.

Индивидуальные задания

Составить алгоритм и написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика. Параметр R вводится с клавиатуры. (Теоретический материал по данной теме изложен в лекциях № 6, 15).

Составить алгоритм и написать программу, которая определяет, попадет ли точка с заданными координатами в область, закрашенную на рисунке серым цветом. Результат работы программы вывести в виде текстового сообщения. (Теоретический материал по данной теме изложен в лекциях № 6, 15).

После выполнения данного практикума студент должен знать:

Если в одном условном операторе требуется проверить выполнение нескольких условий, они записываются после ключевого слова if и объединяются с помощью логических операций and, or, xor и not. Получившееся выражение вычисляется в соответствии с приоритетами операций.

Если в какой-либо ветви вычислений условного оператора if требуется выполнить более одного оператора, то они объединяются в блок с помощью ключевых слов begin и end.

Проверка вещественных величин на равенство опасна.

В операторе варианта выражение, стоящее после ключевого слова case, и константы, помечающие ветви, должны быть одного и того же порядкового типа.

Рекомендуется всегда описывать в операторе case ветвь else.

Оператор case предпочтительнее оператора if в тех случаях, когда количество направлений вычисления в программе больше двух, а выражение, по значению которого производится переход на ту или иную ветвь, имеет порядковый тип. Часто это справедливо даже для двух ветвей, поскольку повышает наглядность программы.

Приложение № 1.

ВЫЧИСЛЕНИЕ ЗНАЧЕНИЯ ФУНКЦИИ

Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика на интервале [-3, 3]:

Начинать решение даже простейшей задачи необходимо с четкого описания ее исходных данных и результатов. В данном случае это очевидно: исходными данными является вещественное значение аргумента x, который определен на интервале [-3, 3], а результатом – вещественное значение функции y. Поэтому для представления этих величин в программе следует выбирать тип real.

П еред написанием программы следует составить алгоритм ее решения – сначала в общем виде, а затем постепенно детализируя каждый шаг. Такой способ, называемый нисходящей разработкой, позволяет создавать простые по структуре программы. Сначала запишем функцию в виде формул (сделаем математическую постановку задачи):

Далее приведем описание алгоритма в неформальной словесной форме:

Ввести значение аргумента x.

Проверить, принадлежит ли оно области определения функции.

Если не принадлежит, вывести диагностическое сообщение и завершить программу.

Определить, какому интервалу из области определения функции принадлежит введенное значение, и вычислить значение функции y по соответствующей формуле.

Вывести значение y.

Опишем четвертый пункт алгоритма более подробно:

Если аргумент x принадлежит интервалу [-3; -2), то .

Если аргумент x принадлежит интервалу [-2; 0), то .

Если аргумент x принадлежит интервалу [0; 1), то .

Если аргумент x принадлежит интервалу [1; 3], то .

Структурная схема вычисления значения функции в виде блок-схемы

По такому алгоритму можно практически «один в один» написать программу:

Program FUNC;

Var X, Y : real;

Writeln(‘Введите значение аргумента’);

If (x<-3) or (x>3) then begin

Writeln(‘Значение должно принадлежать интервалу [-3; 3]’);

If x<-2 then y:=-2*x-5;

If (x>=-2) and (x<0) then y:=-sqrt(1-sqr(x+1))-1;

If (x>=0) and (x<1) then y:=x-1;

If x>=1 then y:=sqrt(1-sqr(x-2));

Writeln(‘Для x= ’, x:6:2, ‘значение функции y= ’, y:6:2)

Следует обратить внимание на запись условий, содержащих два сравнения. Начинающие часто записывают такие условия, просто воспроизводя математическую формулу, т.е. как a<x<b. Ошибка состоит в том, что операции отношения являются бинарными, т.е. должны иметь два операнда. И если надо проверить два условия (a<x и x<b), то и операций должно быть две. Поскольку необходимо, чтобы эти условия выполнялись одновременно, они объединены с помощью операции логического умножения И (and), т.е. выражение принимает вид (a<x) and (x<b). Заключать каждое условие в круглые скобки необходимо потому, что логические операции имеют более высокий приоритет, чем операции отношения. При отсутствии скобок сначала будет предпринята попытка выполнить операцию x and x 2 , что вряд ли соответствует замыслу.

Читать:
Hp truevision pavilion dv6 как включить

Первый и последний условные операторы записаны без двойных условий, потому что проверка того, что аргумент находится в диапазоне [-3; 3], выполнена раньше. Стандартная процедура exit обеспечивает выход из программной единицы, в которой она записана. Тестовые примеры для этой программы должны включать, по крайней мере, по одному значению аргумента из каждого интервала, а для проверки граничных условий – еще и все точки перегиба.

При работе приведенной выше программы всегда выполняется один за другим все четыре условных оператора, при этом истинным оказывается только одно условное выражение и, соответственно, присваивание значения переменной y выполняется один раз. Запишем условные операторы так, чтобы уменьшить количество проверок:

If x<-2 then y:=-2*x-5

else if x<0 then y:=-sqrt(1-sqr(x+1))-1

else if x<1 then y:=x-1

Этот вариант вычисления значения функции иллюстрирует следующая блок-схема:

Рис. 2. Второй вариант вычисления значения функции.

Во втором варианте проверка на принадлежность аргумента очередному интервалу выполняется только в том случае, если x не входит в предыдущий интервал. Программа получилась более компактной, более эффективной, но, возможно, менее наглядной. В отличие от предыдущей версии, порядок следования условных операторов имеет здесь большое значение. Какой же вариант лучше? Для решения данной задачи разница между ними несущественна, но цель состоит в том, чтобы на простых примерах продемонстрировать общие принципы, следование которым позволит впоследствии создавать надежные и красивые программы. Наиболее наглядным является первый вариант программы, поскольку по нему проще проследить логику ее работы.

В современной иерархии критериев качества программы на первом месте стоят надежность, простота поддержки и модификации, а эффективность и компактность отходят на второй план. Поэтому если нет специальных требований к быстродействию, следует выбирать наиболее наглядный вариант.

Приложение № 2.

ВЫСТРЕЛ ПО МИШЕНИ

Дана заштрихованная область и точка с координатами (x, y). Написать программу, определяющую, попадает ли точка в область. Результат вывести в виде текстового сообщения.

Запишем условия попадания точки в область в виде формул. Область можно описать как круг, пересекающийся с треугольником. Точка может попадать либо в круг, либо в треугольник, либо в их общую часть:

Первое условие задает попадание точки в круг, второе – в треугольник. Переменные x и y – вещественного типа. Программа для решения задачи выглядит следующим образом:

Program SHOT;

Var X, Y : real;

Writeln(‘Введите значения x и y’);

then writeln(‘Точка попадает в область’)

else writeln(‘Точка не попадает в область’);

Приоритет операций отношения самый низкий, поэтому они заключаются в скобки. Три условия попадания точки в треугольник должны выполняться одновременно, поэтому они объединяются с помощью операции and. Ее приоритет выше, чем or, поэтому дополнительных скобок не требуется.

Для удобочитаемости программы можно ставить скобки даже в тех местах, где они не обязательны, например, для визуальной группировки условий.

Приложение № 3.

Написать программу, которая по номеру месяца выводит время года.

Эта программа не нуждается в дополнительных комментариях:

Program SEASON;

Var month : word;

Writeln(‘Введите номер месяца’);

1, 2, 12 : writeln(‘ Зима ’);

3 . . 5 : writeln(‘ Весна ‘);

6 . . 8 : writeln(‘ Лето ‘);

9 . . 11: writeln(‘ Осень ‘);

else writeln( ‘ Такие месяцы встречаются редко ‘)

Приложение № 4.

Написать программу, реализующую калькулятор на четыре арифметических действия.

Исходными данными для этой программы являются два вещественных операнда и знак операции, представляющий собой символ. Алгоритм работы программы очевиден: в зависимости от значения введенного знака операции выполнить соответствующее действие над операндами:

Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика.

В таких задачах главное — это правильно составить функцию, а программная реализация проста.
Функция кусочная, состоит из пяти интервалов. Как видно из рисунка, она определена для любого х, поэтому условимся, что левые границы интервалов будут открытыми, а правые, за исключением последнего интервала, закрытыми.

begin
Write(‘Введите значение х: ‘); Readln(x);
if x<=-4 then Writeln(‘y=’,-3)
else if x<=-3 then Writeln(‘y=’,2*x+8)
else if x<=3 then Writeln(‘y=’,sqrt(9-sqr(x)))
else if x<=8 then Writeln(‘y=’,0.6*(x-3))
else Writeln(‘y=’,3)
end.

Тестовое решение:
Введите значение х: 2
y=2.23606797749979

Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика.

В таких задачах главное — это правильно составить функцию, а программная реализация проста.
Функция кусочная, состоит из пяти интервалов. Как видно из рисунка, она определена для любого х, поэтому условимся, что левые границы интервалов будут открытыми, а правые, за исключением последнего интервала, закрытыми.

begin
Write(‘Введите значение х: ‘); Readln(x);
if x<=-4 then Writeln(‘y=’,-3)
else if x<=-3 then Writeln(‘y=’,2*x+8)
else if x<=3 then Writeln(‘y=’,sqrt(9-sqr(x)))
else if x<=8 then Writeln(‘y=’,0.6*(x-3))
else Writeln(‘y=’,3)
end.

<u>Тестовое решение:</u>
Введите значение х: 2
y=2.23606797749979

Related Posts