|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Тема №27 (время – 6 мин)
Тема: Анализ программы с подпрограммами. Что нужно знать: · функция – это вспомогательный алгоритм, который возвращает некоторое значение–результат · в Паскале функция располагается выше основной программы и оформляется следующим образом (вместо многоточия могут быть любые операторы): function F(x: integer):integer; Begin ... F:= < результат функции > end; · в заголовке функции записывают имя функции, в скобках – список параметров, далее через двоеточие – тип возвращаемого значения; в приведенном примере функция F принимает один целый параметр, к которому внутри функции нужно обращаться по имени x, и возвращает целое число · результат функции записывается в специальную переменную, имя которой совпадает с именем функции; объявлять эту переменную не нужно · если параметров несколько, для каждого из них указывают тип: function F(x: integer; y: integer):integer; · если несколько соседних параметров имеют одинаковый тип, можно их объединить в список: function F(x, y: integer):integer; · следующая программа ищет наименьшее значение функции F(x) на интервале [a,b], просматривая значения от a до b с шагом 1: M:=a; R:=F(a); for t:=a to b do if F(t) < R then begin R:=F(t); M:=t; end; · цикл для поиска наибольшего значения выглядит точно так же, только знак < нужно заменить на знак > · если функция представляет собой квадратный трехчлен вида , то абсцисса, соответствующая точке минимума, вычисляется по формуле этот результат можно получить (вывести, если забыли), например, так: § в критической точке (точке минимума, точке максимума или точке перегиба) производная функции обращается в 0; § находим производную § приравниваем ее к нулю: . · если квадратный трехчлен задан в виде , то абсцисса, соответствующая точке минимума, вычисляется по формуле Пример задания: Определите, какое число будет напечатано в результате выполнения следующего алгоритма: Var a,b,t,M,R:integer; Function F(x:integer):integer; Begin F:=4*(x-1)*(x-3); end; BEGIN a:=-20; b:=20; M:=a; R:=F(a); for t:=a to b do begin if (F(t)<R)then begin M:=t; R:=F(t); end; end; write(M); END. Решение (способ 1, ручная прокрутка, перебор): 1) заметим, что в программе есть цикл, в котором переменная t принимает последовательно все целые значения в интервале от a до b: for t:=a to b do begin ... end; 2) до начала цикла в переменную M записывается значение a, а в переменную R – значение функции в точке a: M:=a; R:=F(a); 3) внутри цикла есть условный оператор, в котором вычисляется значение функции F(t) и сравнивается со значением переменной R: if (F(t)<R)then begin M:=t; R:=F(t); end; если новое значение функции меньше, чем значение R, в R записывается значение функции в точке t, а в переменной M запоминается само значение t (аргумент функции, соответствующий значению в R) 4) в результате анализа пп. 1-3 можно сделать вывод, что цикл ищет минимум функции F(t) на интервале от a до b, и после выполнения цикла в переменной M оказывается значение аргумента t, при котором функция достигает минимума на заданном интервале (здесь это интервал [-20, 20]) 5) функция F вычисляет значение F:=4*(x-1)*(x-3); 6) перебираем все значения t от a до b, и для каждого вычисляем соответствующее значение функции:
7) по таблице находим, что минимальное значение –4 достигается при t=2 8) таким образом, ответ: 2.
Решение (способ 2, математический анализ): 1) повторяя рассуждения пп. 1-5 из предыдущего способа решения, находим, что программа ищет значение t, при котором функция F(t) принимает минимальное значение на интервале от a до b. 2) запишем функцию в виде квадратного трёхчлена: 3) график этой функции – парабола, оси которой направлены вверх, поэтому функция имеет минимум 4) найдем абсциссу точки минимума, которая совпадает с абсциссой точки минимума функции 5) таким образом, ответ: 2. Решение (способ 3, математический анализ, свойства параболы): 1) повторяя рассуждения пп. 1-5 из первого способа решения, находим, что программа ищет значение t, при котором функция F(t) принимает минимальное значение на интервале от a до b. 2) заданная функция имеет корни в точках 3) график этой функции – парабола, оси которой направлены вверх (коэффициент при равен 4 > 0), поэтому функция имеет минимум 4) парабола симметрична относительно вертикальной прямой, проходящей через вершину, поэтому абсцисса вершины – это среднее арифметическое корней: 5) таким образом, ответ: 2. Ещё пример задания: Определите, какое число будет напечатано в результате выполнения следующего алгоритма: Var a,b,t,M,R:integer; Function F(x:integer):integer; Begin F:=x*x + 4*x + 8; end; BEGIN a:=-10; b:=10; M:=a; R:=F(a); for t:=a to b do begin if (F(t)> R)then begin M:=t; R:=F(t); end; end; write(R); END. Решение: 1) рассуждая так же, как и в предыдущем примере, можно показать, что программа ищет наибольшее значение функции F(t) на интервале от a до b 2) заметим, что выводится не абсцисса, а именно это найденное наибольшее з начение функции: write(R); 3) график заданной функции – это парабола, ветви которой направлены вверх, то есть она имеет точку минимума, но не точку максимума 4) поэтому нужно проверить значения функции на концах отрезка и выбрать из них наибольшее 5) при t=-10 получаем F(t)=68 6) при t=10 получаем F(t)=148 7) таким образом, ответ: 148. Еще пример задания (Л.А. Тумарина, г. Электросталь): Определите, какое число будет напечатано в результате выполнения следующего алгоритма: Var a,b,t,M,R:integer; Function F(x:integer):integer; Begin F:=4*(x-1)*(x-3); end; BEGIN a:=-20; b:=0; M:=a; R:=F(a); for t:=a to b do begin if (F(t)<R)then begin M:=t; R:=F(t); end; end; write(M); END. Решение: 1) рассуждая так же, как и в примере 1, определяем, что программа ищет значение t, при котором функция F(t) принимает минимальное значение на интервале от a до b. 2) запишем функцию в виде квадратного трёхчлена: 3) график этой функции – парабола, оси которой направлены вверх, поэтому функция имеет минимум 4) найдем абсциссу точки минимума, которая совпадает с абсциссой точки минимума функции 8) однако это значение не входит в интервал [-20; 0], поэтому нужно проверить значения функции на концах отрезка и выбрать из них наименьшее; ответом будет соответствующее значение t. 9) при t=-20 получаем F(-20)=4*(-21)*(-23)=1932 10) при t=0 получаем F(0)= 4*(-1)*(-3)=12, это значение меньше, чем F(-20), поэтому минимум на заданном интервале достигается при t=0 5) таким образом, ответ: 0
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.021 сек.) |