АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Тема №27 (время – 6 мин)

Читайте также:
  1. Тема №1 (время – 1 мин)
  2. Тема №11 (время – 3 мин)
  3. Тема №12 (время – 5 мин)
  4. Тема №14 (время – 1 мин)
  5. Тема №16 (время – 3 мин)
  6. Тема №17 (время – 2 мин)
  7. Тема №18 (время – 2 мин)
  8. Тема №19 (время – 2 мин)
  9. Тема №2 (время – 2 мин)
  10. Тема №20 (время – 6 мин)
  11. Тема №21 (время – 2 мин)
  12. Тема №22 (время – 3 мин)

Тема: Анализ программы с подпрограммами.

Что нужно знать:

· функция – это вспомогательный алгоритм, который возвращает некоторое значение–результат

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

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, и для каждого вычисляем соответствующее значение функции:

t -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1  
F                                          
                                           
t                                          
F   -4                                      

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

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.012 сек.)