Ваш регион: Москва
ЕГЭ-пробный

Задача №21. Работа с циклами и подпрограммами.

Автор материалов - Лада Борисовна Есакова.

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

Подпрограммы бывают двух видов: процедуры и функции.

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

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

function F(x: integer):integer;

begin

  ...

F:= <результат функции>

end;

В заголовке функции записывают имя функции, в скобках – список параметров, далее через двоеточие – тип возвращаемого значения; в приведенном примере функция F принимает один целый параметр x, и возвращает целое число.

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

Поиск наименьшего значения функции:

Подпрограмма поиска наименьшего значение функции F(x) на интервале [a,b], выглядит следующим образом:

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

for t:=a to b do

  if F(t) < R then begin

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

            end;

Поиск наибольшего значения функции:

Подпрограмма поиска наименьшего значение функции F(x) на интервале [a,b], выглядит следующим образом:

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

for t:=a to b do

             if F(t) > R then begin

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

            end;

Поиск наибольшего значения функции

Пример 1.

Опре­де­ли­те, какое число будет на­пе­ча­та­но в ре­зуль­та­те вы­пол­не­ния сле­ду­ю­ще­го ал­го­рит­ма (для Ва­ше­го удоб­ства ал­го­ритм пред­став­лен на четырёх язы­ках):

 Бей­сик

Пас­каль

DIM A, B, T, M, R AS INTEGER

A = -7: B = 25

M = A: R = F(A)

FOR T = A TO B

IF F(T) > R THEN

M = T

R = F(T)

ENDIF

NEXT T

PRINT R

 

FUNCTION F(x)

F = 281 - 2 * (17 + x) * (17 + x);

END FUNCTION

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

Function F(x:integer):integer;

begin

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

end;

begin

a : = -7; b : = 25;

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.

Си

Ал­го­рит­ми­че­ский язык

#include<stdio.h>

int F(int x)

{

return 281 - 2 * (17 + x) * (17 + x);

}

void main()

{

int a, b, t, M, R;

a = -7; b = 25;

M = a; R = F(a);

for (t = a; t <= b; t++){

if (F(t) > R) {

M = t; R = F(t);

}

}

printf("%d", R);

}

алг

нач

цел a, b, t, R, M

a : = -7; b : = 25

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

нц для t от a до b

если F(t) > R

то

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

все

кц

вывод R

кон

алг цел F(цел x)

нач

знач : = 281 - 2 * (17 + x) * (17 + x)

кон

Решение:

Ал­го­ритм пред­на­зна­чен для по­ис­ка наи­боль­ше­го зна­че­ния функ­ции F(x) на от­рез­ке от a до b.

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

F(x) - квадратичная функция с отрицательным старшим коэффициентом. Ее график - парабола с ветвями вниз и вершиной в точке -17 (рисунок выполнен без соблюдения пропорций).

От -17 до бесконечности функция убывает, значит на отрезке [-7; 25] наибольшее зна­че­ние до­сти­га­ет­ся в левой границе ин­тер­ва­ла и равно F(−7) = 81.

 

Ответ: 81

 

Поиск наименьшего значения функции

Пример 2.

Опре­де­ли­те, какое число будет на­пе­ча­та­но в ре­зуль­та­те вы­пол­не­ния сле­ду­ю­ще­го ал­го­рит­ма (для Ва­ше­го удоб­ства ал­го­ритм пред­став­лен на четырёх язы­ках).

 

Бей­сик

Пас­каль

DIM A, B, T, M, R AS INTEGER

A = -20: B = 20

M = A: R = F(A)

FOR T = A TO B

IF F(T) < R THEN

M = T

R = F(T)

ENDIF

NEXT T

PRINT M

FUNCTION F(x)

F = 3*(x-8)*(x-8)

END FUNCTION

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

Function F(x:integer):integer;

begin

F := 3*(x-8)*(x-8)

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.

Си

Ал­го­рит­ми­че­ский язык

#include<stdio.h>

int F(int x)

{

return 3*(x-8)*(x-8);

}

void main()

{

int a, b, t, M, R;

a = -20; b = 20;

M = a; R = F(a);

for (t=a; t<=b; t++){

if (F(t) < R) {

M = t; R = F(t);

}

}

printf("%d", M);

}

алг

нач

цел a, b, t, R, M

a := -20; b := 20

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

нц для t от a до b

если F(t)< R

то

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

все

кц

вывод M

кон

алг цел F(цел x)

нач

знач := 3*(x-8)*(x-8)

кон

 

Решение:

Ал­го­ритм ищет значение аргумента t, при ко­то­ром функ­ция F(t) имеет наименьшее зна­че­ние на от­рез­ке от a до b. Если наименьшее значение будет достигнуто в нескольких точках, то выведется первая (левая), т.к. стоит строгий знак <.

F := 3*(x-8)*(x-8)

Функ­ция F(x) - квад­рат­ичная функция с по­ло­жи­тель­ным стар­шим ко­эф­фи­ци­ен­том. Ее график – парабола с вершиной в точке x = 8 и ветвями, направленными вверх (рисунок выполнен без соблюдения пропорций).

Наименьшее на интервале значение функции F(x) достигается в вершине х = 8.

Ответ: 8

 

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

Пример 3.

На­пи­ши­те в от­ве­те наи­мень­шее зна­че­ние вход­ной пе­ре­мен­ной k, при ко­то­ром про­грам­ма выдаёт тот же ответ, что и при вход­ном зна­че­нии k = 10. Для Ва­ше­го удоб­ства про­грам­ма при­ве­де­на на пяти язы­ках про­грам­ми­ро­ва­ния.

 

Бей­сик

Python

DIM K, I AS LONG

INPUT K

I = 1

WHILE F(I) < G(K)

I = I + 1

WEND

PRINT I

 

FUNCTION F(N)

F = N * N * N

END FUNCTION

 

FUNCTION G(N)

G = 2*N + 3

END FUNCTION

def f(n):

return n*n*n

 

def g(n):

return 2*n+3

 

k = int(input())

i = 1

while f(i) < g(k):

i+=1

print (i)

Пас­каль

Ал­го­рит­ми­че­ский язык

var

k, i : longint;

 

function f(n: longint): longint;

begin

f := n * n * n;

end;

 

function g(n: longint): longint;

begin

g := 2*n + 3;

end;

 

begin

readln(k);

i := 1;

while f(i) < g(k) do

i := i+1;

writeln(i)

end.

алг

нач

цел i, k

ввод k

i := 1

нц пока f(i) < g(k)

i := i + 1

кц

вывод i

кон

 

алг цел f(цел n)

нач

знач := n * n * n

кон

 

алг цел g(цел n)

нач

знач := 2*n + 3

кон

Си

#include

long f(long n) {

return n * n * n;

}

 

long g(long n) {

return 2*n + 3;

}

 

int main()

{

long k, i;

scanf("%ld", &k);

i = 1;

while(f(i) < g(k))

i++;

printf("%ld", i);

return 0;

}

Решение:

Про­грам­ма срав­ни­ва­ет значения функций f(i) = i3 и g(k) = 2*k +3, увеличивает i на единицу, если i<  2*k +3 и вы­во­дит пер­вое зна­че­ние пе­ре­мен­ной i при ко­то­ром

i≥  2*k +3.

При k = 10, про­грам­ма вы­ве­дет число 3.

2≤  2*k +3 < 33

Отсюда наименьшее k = 3.

 

Ответ: 3

Интенсивная подготовка

Бесплатные пробные ЕГЭ

Расписание курсов

Звоните нам: 8 (800) 775-06-82 (бесплатный звонок по России)
                       +7 (495) 984-09-27 (бесплатный звонок по Москве)

Или нажмите на кнопку «Узнать больше», чтобы заполнить контактную форму. Мы обязательно Вам перезвоним.

Полный онлайн-курс подготовки к ЕГЭ по математике. Структурировано. Четко. Без воды. Сдай ЕГЭ на 100 баллов!

Смотреть

Для нормального функционирования и Вашего удобства, сайт использует файлы cookies. Это совершенно обычная практика.Продолжая использовать портал, Вы соглашаетесь с нашей Политикой конфиденциальности.

Позвоните мне

Все поля обязательны для заполнения

Отправить