Задача №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 на единицу, если i3 < 2*k +3 и выводит первое значение переменной i при котором
i3 ≥ 2*k +3.
При k = 10, программа выведет число 3.
23 ≤ 2*k +3 < 33
Отсюда наименьшее k = 3.
Ответ: 3
Спасибо за то, что пользуйтесь нашими публикациями.
Информация на странице «Задача №21. Работа с циклами и подпрограммами.» подготовлена нашими редакторами специально, чтобы помочь вам в освоении предмета и подготовке к экзаменам.
Чтобы успешно сдать нужные и поступить в ВУЗ или техникум нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий.
Также вы можете воспользоваться другими материалами из данного раздела.
Публикация обновлена:
08.06.2023