Цикл While: Анализ значений функции. Суммы, произведения.

В математике часто встречаются задачи на анализ значений функций: максимальное значение функции (экстремум), значения аргумента, при котором функция имеет определённое значение и т.д.
Перед ознакомлением с данным материалом в обязательном порядке нужно понять тему: Табуляция функций.
Как решить подобные задачи рассмотрим далее…
Алгоритм решения подобных задач следующий:
1. Получить значения промежутка [a,b] и шага h
2. Задать начальные значения переменным, в которых будем хранить результат
3. Начать цикл while
4. Вычислить значение функции
5. Вывести значения аргумента(Х) и функции(Y) на экран
6. Выполнить действие, требуемое в задаче
7. Увеличить значение счетчика
8. После окончания цикла — вывести результать на экран
9. Завершить программу
Одна из базовых задач данной темы:
Протабулировать функцию Y=sin(x) на промежутке [-5.5, 5.75], h=0.75 , найти минимальное значение функции и указать при каком аргументе Х это происходит.
Рассмотрим переменные:
var Y, X, A, B, H: Real;
MinY, SolutionX: Real;
Все наши переменные — действительные числа.
Разобьем задачу на блоки согласно нашего алгоритма.
1.BEGIN
A:=-5.5;
B:=5.75;
H:=0.75;
X:=A;
2. Примем за минимум значение функции от начала промежутка и запомним начальное значение Х
MaxY:=sin(A);
SolutionX:=A;
3. While X<=B do
4. Y:=sin(x);
Writeln(‘X=’,x:2:2,’ Y=’,Y:2:2);
5. После вычисления значения функции, сравниваем с значением переменной результата, если новое значение функции меньше текущего — перезапоминаем MinY и SolutionX
if Y < MinY then begin
MinY := Y;
SolutionX := X;
end;
6. Увеличиваем значение Х
7. X:=X+H;
8. Writeln(‘Минимальное значение функции=’, MinY,’при Х=’,SolutionX:=X);
9. END.
Теперь все вместе:

 

Uses crt;
var
 Y, X, A, B, H: real;
 MinY, SolutionX: real;

BEGIN
 A := -5.5;
 B := 5.75;
 H := 0.75;
 X := A;
 
 MinY := sin(A);
 SolutionX := X;
 
 while X <= B do
 begin
 Y := sin(x);
 Writeln('X=', x:2:2, ' Y=', Y:2:2);
 if Y < MinY then begin
 MinY := Y;
 SolutionX := X;
 end;
 X := X + H;
 end;
 
 Writeln('Минимальное значение функции=', MinY:2:2, ' при Х=', SolutionX);
END.

Найти максимальное значение, думаю, труда уже не составит. Если в программе не нужно искать значение Х, достаточно убрать строки с переменной SolutionX.
Рассмотрим следующие базовые задачи:
Протабулировать функцию
Y= sin(X) x>0
cos(X) x<=0
на промежутке [a,b], H=0.25.
и найти суму положительных Y и их количество, а также произведение отрицательных Y и их количество.
Для начала нужно вспомнить, что при поиске сумм и произведений числовых рядов ми писали следующее:</p>

 

Summa:=0;
Summa:=summa+i;

Multiplay:=1;
Multiplay:=Multiplay*i;

Count:=0;
Count:=Count+1;

В нашем же случае значение счетчика i мы заменим на значение функции Y.
Снова следуем нашему алгоритму:

Uses CRT;
var
 Y, X, A, B, H: real;
 SummYPol, MultYOtr: Real
 CountPol, CountOtr: Integer;
 T: real;

BEGIN
 {Начальные значения}
 Write('A=');readln(A);
 Write('B=');readln(B);
 if a < b then begin
 t := a;
 a := b;
 b := t;
 end;
 H := 0.75;
 X := A; 
 
 {Переменные результат}
 SummYPol := 0; 
 MultYOtr := 1; 
 CountPol := 0; 
 CountOtr := 0;
 
 while x <= B do 
 begin {табуляция функции} 
 if x > 0 then Y := Sin(x) else Y := Cos(x);
 Writeln('X=', x:2:2, ' Y=', Y:2:2);
 {поиск суммы положительных значений функции}
 if Y > 0 then begin
 SummYPol := SummYPol + Y;
 CountPol := CountPol + 1;
 end;
 {поиск произведения отрицательных значений функции}
 if Y < 0 then begin
 MultYOtr := MultYOtr + Y;
 CountOtr := CountOtr + 1;
 end; 
 
 X := X + H;
 end; 
 {Вывод результата}
 Writeln('Сумма положительных значений функции=', SummYPol:2:2, ' их количество=', CountPol);
 Writeln('Произведение отрицательных значений функции=', MultYOtr:2:2, ' их количество=', CountOtr);
END.

Для той же функции вывести на экран значения функции, которые попадают в пределы [M, N] и подсчитать их среднее арифметическое.
Для решения задачи нужно вспомнить, что среднее арифметическое — это результат деления суммы на количество.
Значит для решения нашей задачи нужно (уже коротко)
1. Рассчитать Y
2. Проверить или попадает Y в [M, N]. Если да — то считаем сумму и количество и выводим на экран
3. После расчетов проверить или количество не равно нулю. Если нет — то находим среднее арифметическое, иначе пишем — «Нет элементов что попадают в промежуток [M, N].»
Итак:

 

 Uses CRT;
var
 Y, X, A, B, H: real;
 M, N, SummY_MN: real;
 T: real;
 Count_MN: integer;

BEGIN
 {Начальные значения}
 Write('A=');readln(A);
 Write('B=');readln(B);
 if a < b then begin
 t := a;
 a := b;
 b := t;
 end;
 
 {Промежуток}
 Write('M=');readln(M);
 Write('N=');readln(N);
 if n < m then begin
 t := m;
 m := n;
 n := t;
 end; 
 
 H := 0.75;
 X := A; 
 
 {Переменные результат}
 SummY_MN := 0;
 Count_MN := 0;
 
 while x <= B do
 begin {табуляция функции} 
 if x < 0 then Y := Sin(x) else Y := Cos(x);
 
 {поиск суммы и количества значений функции в промежутке [M, N] }
 if (Y > M) and (Y < N) then begin
 Writeln('X=', x:2:2, ' Y=', Y:2:2);
 SummY_MN := SummY_MN + Y;
 Count_MN := Count_MN + 1;
 end;
 
 X := X + H;
 end; 
 {Вывод результата}
 Writeln('Количество Y c промежутка=', M, ' ', N, ' =', Count_MN, ' их сумма=', SummY_MN:2:2);
 if Count_MN = 0 then Writeln('Нет элементов что попадают в заданный промежуток');
 if Count_MN <> 0 then Writeln('Среднее арифметическое =', SummY_MN / Count_MN:2:2);
END.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии