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

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



НазваниеТема : Анализ программы с подпрограммами
Дата конвертации17.09.2012
Размер171.72 Kb.
ТипПрограмма

© К. Поляков, 2009-2012

B14 (повышенный уровень, время – 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;

  • находим производную

  • приравниваем ее к нулю: .

  • если квадратный трехчлен задан в виде , то абсцисса, соответствующая точке минимума, вычисляется по формуле

gif" name="object6" align=absmiddle width=81 height=38>
^

Пример задания:


Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

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)

M:=t;

R:=F(t);

end;

end;

write(M);

END.

Решение (способ 1, ручная прокрутка, перебор):

  1. заметим, что в программе есть цикл, в котором переменная t принимает последовательно все целые значения в интервале от a до b:

for t:=a to b do begin

...

end;

  1. до начала цикла в переменную M записывается значение a, а в переменную R – значение функции в точке a:

M:=a; R:=F(a);

  1. внутри цикла есть условный оператор, в котором вычисляется значение функции ^ F(t) и сравнивается со значением переменной R:

if (F(t)

M:=t;

R:=F(t);

end;

если новое значение функции меньше, чем значение R, в R записывается значение функции в точке t, а в переменной M запоминается само значение t (аргумент функции, соответствующий значению в R)

  1. в результате анализа пп. 1-3 можно сделать вывод, что цикл ищет минимум функции ^ F(t) на интервале от a до b, и после выполнения цикла в переменной M оказывается значение аргумента t, при котором функция достигает минимума на заданном интервале (здесь это интервал [-20, 20])

  2. функция ^ F вычисляет значение

F:=4*(x-1)*(x-3);

  1. перебираем все значения t от a до b, и для каждого вычисляем соответствующее значение функции:

    t

    -20

    -19

    -18

    -17

    -16

    -15

    -14

    -13

    -12

    -11

    -10

    -9

    -8

    -7

    -6

    -5

    -4

    -3

    -2

    -1

    0

    F

    1932

    1760

    1596

    1440

    1292

    1152

    1020

    896

    780

    672

    572

    480

    396

    320

    252

    192

    140

    96

    60

    32

    12



































































    t

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20




    F

    0

    -4

    0

    12

    32

    60

    96

    140

    192

    252

    320

    396

    480

    572

    672

    780

    896

    1020

    1152

    1292




  2. по таблице находим, что минимальное значение –4 достигается при t=2

  3. таким образом, ответ: 2.

Возможные проблемы:

    • заполнение таблицы, особенно при большом интервале, очень трудоемко, велика возможность ошибки

^ Решение (способ 2, математический анализ):

  1. повторяя рассуждения пп. 1-5 из предыдущего способа решения, находим, что программа ищет значение t, при котором функция F(t) принимает минимальное значение на интервале от a до b.

  2. запишем функцию в виде квадратного трёхчлена:



  1. график этой функции – парабола, оси которой направлены вверх, поэтому функция имеет минимум

  2. найдем абсциссу точки минимума, которая совпадает с абсциссой точки минимума функции



  1. таким образом, ответ: 2.

Решение (способ 3, математический анализ, свойства параболы):

  1. повторяя рассуждения пп. 1-5 из первого способа решения, находим, что программа ищет значение t, при котором функция F(t) принимает минимальное значение на интервале от a до b.

  2. заданная функция имеет корни в точках

  3. график этой функции – парабола, оси которой направлены вверх (коэффициент при равен 4 > 0), поэтому функция имеет минимум

  4. парабола симметрична относительно вертикальной прямой, проходящей через вершину, поэтому абсцисса вершины – это среднее арифметическое корней:



  1. таким образом, ответ: 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);

  1. график заданной функции – это парабола, ветви которой направлены вверх, то есть она имеет точку минимума, но не точку максимума

  2. поэтому нужно проверить значения функции на концах отрезка и выбрать из них наибольшее

  3. при t=-10 получаем F(t)=68

  4. при t=10 получаем F(t)=148

  5. таким образом, ответ: 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)

M:=t;

R:=F(t);

end;

end;

write(M);

END.

Решение:

  1. рассуждая так же, как и в примере 1, определяем, что программа ищет значение t, при котором функция F(t) принимает минимальное значение на интервале от a до b.

  2. запишем функцию в виде квадратного трёхчлена:



  1. график этой функции – парабола, оси которой направлены вверх, поэтому функция имеет минимум

  2. найдем абсциссу точки минимума, которая совпадает с абсциссой точки минимума функции



  1. однако это значение не входит в интервал [-20; 0], поэтому нужно проверить значения функции на концах отрезка и выбрать из них наименьшее; ответом будет соответствующее значение t.

  2. при t=-20 получаем F(-20)=4*(-21)*(-23)=1932

  3. при t=0 получаем F(0)= 4*(-1)*(-3)=12, это значение меньше, чем F(-20), поэтому минимум на заданном интервале достигается при t=0

  1. таким образом, ответ: 0



^

Задачи для тренировки1:


  1. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:=4*(x-5)*(x+3);

end;

BEGIN

a:=-20; b:=20;

M:=a; R:=F(a);

for t:=a to b do begin

if (F(t)

M:=t;

R:=F(t);

end;

end;

write(M);

END.

  1. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:=-(x+4)*(x+2);

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. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:=3*(x-2)*(x+6);

end;

BEGIN

a:=-20; b:=20;

M:=a; R:=F(a);

for t:=a to b do begin

if (F(t)

M:=t;

R:=F(t);

end;

end;

write(R);

END.

  1. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:=(5-x)*(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(R);

END.

  1. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:=(x-5)*(x+3);

end;

BEGIN

a:=-5; b:=5;

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. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:=(x+5)*(x+3);

end;

BEGIN

a:=-5; b:=5;

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. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:=(x+7)*(1-x);

end;

BEGIN

a:=-5; b:=5;

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. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:=(x+5)*(1-x);

end;

BEGIN

a:=-5; b:=5;

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. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:=(x+3)*(1-x);

end;

BEGIN

a:=-5; b:=5;

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. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:= 2*x*x + 8*x + 10;

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(M);

END.

  1. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:= x*x + 6*x + 10;

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(M);

END.

  1. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:= x*x - 8*x + 10;

end;

BEGIN

a:=-5; b:=5;

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. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:= x*x + 2*x + 10;

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(M);

END.

  1. (Л.А. Тумарина) Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:=4*(x-5)*(x+3);

end;

BEGIN

a:=-20; b:=0;

M:=a; R:=F(a);

for t:=a to b do begin

if (F(t)

M:=t;

R:=F(t);

end;

end;

write(M);

END.

  1. (Л.А. Тумарина) Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:= 2*x*x + 8*x + 10;

end;

BEGIN

a:=0; 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. (Л.А. Тумарина) Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

^ Var a,b,t,M,R :integer;

Function F(x:integer):integer;

begin

F:=-(x+4)*(x+2);

end;

BEGIN

a:=-2; 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. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

var a,b,t,M,R :integer;

Function F(x: integer):integer;

begin

F := 2*(x-9)*(x-9)+12;

end;

BEGIN

a := -20; b := 20;

M := a; R := F(a);

for t := a to b do

if (F(t)

M := t;

R := F(t);

end;

write(M);

END.

  1. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

var a,b,t,M,R :integer;

Function F(x: integer):integer;

begin

F := 9*(x-15)*(x+17)+2;

end;

BEGIN

a := -20; b := 20;

M := a; R := F(a);

for t := a to b do

if (F(t)

M := t;

R := F(t);

end;

write(M);

END.

  1. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

var a,b,t,M,R :integer;

Function F(x: integer):integer;

begin

F := -3*(x-10)*(x+2)+2;

end;

BEGIN

a := -20; b := 20;

M := a; R := F(a);

for t := a to b do

if (F(t)>R) then begin

M := t;

R := F(t);

end;

write(M);

END.

  1. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

var a,b,t,M,R :integer;

Function F(x: integer):integer;

begin

F := 5*(x+10)*(x+2)+2;

end;

BEGIN

a := -20; b := 20;

M := a; R := F(a);

for t := a to b do

if (F(t)

M := t;

R := F(t);

end;

write(M);

END.

  1. (А. Лаздин) Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

var a,b,t,M,R :integer;

Function F(x: integer):integer;

begin

F := -2*(x+2)*(x-6);

end;

Begin

a := -11; b := 11;

M := a; R := F(a);

t:=a;

while t < b do

begin

if (F(t)>R) then

begin

M := t;

R := F(t);

end;

t:=t+2;

end;

write(R);

End.

  1. (А. Лаздин) Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

var a,b,t,M,R :integer;

Function F(x: integer):integer;

begin

F := -2*(x+2)*(x-6);

end;

Begin

a := -11; b := 11;

M := a; R := F(a);

t:=a;

while t < b do

begin

if (F(t)>R) then

begin

M := t;

R := F(t);

end;

t:=t+2;

end;

write(M);

End.

  1. (А. Лаздин) Определите, какое число будет напечатано в результате выполнения следующего алгоритма:

var a,b,t,M,R :integer;

Function F(x: integer):integer;

begin

F := -2*(x+2)*(x-6);

end;

Begin

a := -11; b := 11;

M := a; R := F(a);

t:=a;

while t < b do

begin

if (F(t)>=R) then

begin

M := t;

R := F(t);

end;

t:=t+2;

end;

write(M);

End.



1 Источники заданий:

  1. Тренировочные работы МИОО 2011-2012.

  2. Авторские разработки.




Похожие:

Тема : Анализ программы с подпрограммами iconТема : Анализ программы с подпрограммами
...
Тема : Анализ программы с подпрограммами iconТема : Анализ программы
Определите, что будет напечатано в результате работы следующего фрагмента программы
Тема : Анализ программы с подпрограммами iconТема : Анализ программы
Определите, что будет напечатано в результате работы следующего фрагмента программы
Тема : Анализ программы с подпрограммами iconТема : Анализ программы, содержащей подпрограммы, циклы и ветвления
Ниже записана программа. Получив на вход число, эта программа печатает два числа, и. Укажите наибольшее из таких чисел, при вводе...
Тема : Анализ программы с подпрограммами iconТема : Анализ программы, содержащей подпрограммы, циклы и ветвления
Ниже записана программа. Получив на вход число, эта программа печатает два числа, и. Укажите наибольшее из таких чисел, при вводе...
Тема : Анализ программы с подпрограммами icon«Опыт. Проблемы. Перспективы»
Анализ и формирование программы деятельности оу на основе Программы развития учреждения (опыт работы сош №17)
Тема : Анализ программы с подпрограммами iconДокументы
1. /анализ/Лекции/1 задачи анализа.doc
2. /анализ/Лекции/10...

Тема : Анализ программы с подпрограммами iconАнализ реализации программы информатизации Кодинской сош №2 за 2007-2008 уч г
Анализ общего состояния использования икт показал, что внедрение информатизации в образовательный процесс школы и организация единого...
Тема : Анализ программы с подпрограммами iconСправка-анализ индивидуальной работы учителей-предметников с одаренными учащимися Цель проверки
Цель проверки: Анализ работы учителей по реализации программы «Одаренные дети»
Тема : Анализ программы с подпрограммами iconТема программы

Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©podelise.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов