Слайд 1Разработка алгоритмов
с использованием подпрограмм.
(Примеры программ рассматриваются на языке Pascal)
Подготовил
учитель информатики и ИКТ
лицея г. Красный Лиман Донецкой области:
Заруднев Андрей Николаевич
Слайд 2Целесообразность использования подпрограмм
Одним из важных факторов эффективности алгоритма является использование подпрограмм
(вспомогательных алгоритмов): процедур или функций. Достаточно сказать, что все промежуточные вычисления хранятся в регистровой памяти процессора, а не в оперативной, что повышает скорость работы программы (скорость работы регистровой памяти выше, чем оперативной) и использует меньшее количество оперативной памяти.
Использование подпрограмм делает удобней разработку программ для сложных задач, когда могут появляться повторяемые группы действий или возникает необходимость разделить программу на функциональные модули. Рекомендуется нисходящее программирование (от более общего плана к детальному).
Слайд 3Виды подпрограмм
В Паскале различают два вида подпрограмм: процедуры и функции. Основное
различие между ними состоит в том, что процедура может иметь любое количество входных и выходных данных (параметров), а функция – любое количество входных и только одно выходное значение.
Работа с подпрограммой состоит из двух этапов:
Описание подпрограммы - запись алгоритма решения задачи в специальной форме; данные, которые используются только в подпрограмме - локальные, а данные, используемые и в вызывающей программе - глобальные.
Вызов подпрограммы – передача ей данных для обработки из вызывающей программы и получение результатов.
Слайд 4Процедуры
Процедуры могут быть описаны без параметров и с параметрами.
Процедура без параметров
может реализовать любой алгоритм. Все входные и выходные данные, с которыми производят действия операторы процедуры, – глобальные. Для промежуточных результатов используют локальные переменные.
Описание процедуры без параметров имеет вид:
Procedure имя;
{описание локальных переменных};
Begin
{операторы – тело подпрограммы}
End;
Слайд 5Процедуры без параметров
Процедуры без параметров можно использовать, когда сложную программу необходимо
разделить на функциональные модули.
Рассмотрим пример использования таких процедур:
Вычислить длину катета прямоугольного треугольника, если известны длины двух других сторон треугольника.
Составим алгоритм этой задачи с использованием функциональных модулей: ВВОД ДАННЫХ, РЕШЕНИЕ, ВЫВОД РЕЗУЛЬТАТА. Для каждого модуля напишем процедуры без параметров с именами, соответственно: VVOD, RESHENIE, VYVOD.
Слайд 6Пример записи процедур без параметров на Pascal
Сделаем описание процедуры VVOD.
Var
a, b, c: real; {глобальные переменные}
Procedure vvod;
Begin {начало тела процедуры}
Write(‘Введите длину гипотенузы’);
Readln(c); {глобальная переменная}
Write(‘Введите длину катета’);
Readln(а); {глобальная переменная}
End; {возврат в основную программу}
Слайд 7Процедуры RESHENIE и VYVOD
Procedure reshenie;
Begin
b := sqrt(sqr(c) - sqr(a)); {глобальные переменные}
End;
{возврат в основную программу}
Procedure vyvod;
Begin
Write(‘длина второго катета b=‘, b);
End; {возврат в основную программу}
Слайд 8Основная программа
Для вызова процедуры без параметров в основной программе записывается имя
этой процедуры.
BEGIN
VVOD; {переход в тело процедуры}
RESHENIE; {переход в тело процедуры}
VYVOD; {переход в тело процедуры}
END.
Слайд 9Процедуры с параметрами
Процедуры с параметрами используют тогда, когда появляются повторяемые группы
действий для различных входных данных. Количество различных значений (данных и результатов) в группе действий определяет количество параметров процедуры. С их помощью происходит передача данных в процедуру и получение из нее результатов.
Переменные, которые используются в описании процедуры, называются формальными параметрами.
Значения и переменные, которые используются в операторе вызова процедуры в основной программе, называются фактическими.
Слайд 10Процедуры с параметрами
Тетрадь
по алгебре
Ученика 7-А класса
Иванова Ивана
Тетрадь
по геометрии
Ученицы 7-А
класса
Ивановой Анны
Реализация задачи
Например: Необходимо составить программу для вывода на экран текста двух обложек тетрадей:
Слайд 11Анализ решения
Для получения результата необходимо для одного титульного листа использовать группу
из четырех операторов вывода на экран:
Writeln(‘Тетрадь’);
Writeln(‘по алгебре’);
Writeln(‘Ученика 7-А класса’);
Writeln(‘Иванова Ивана’);
Writeln(‘Тетрадь’);
Writeln(‘по геометрии’);
Writeln(‘Ученицы 7-А класса’);
Writeln(‘Ивановой Анны’);
Слайд 12Определение параметров процедуры
Как видно, в группах часть текста одинаковая, но некоторые
фрагменты текста разные, а именно: название предмета (алгебре/геометрии), название учащегося (ученика/ученицы), фамилия имя (Иванова Ивана/Ивановой Анны).
Эти три фрагмента текста и будут параметрами процедуры, которые для записи процедуры мы заменим переменными: p, s, n – это формальные параметры.
Их описание делается в заголовке процедуры:
Procedure (переменные – входные данные: тип; var переменные результатов: тип);
Слайд 13Описание процедуры с параметрами
Переменные p, s, n являются входными данными, а
для результата в программе не используются переменные. Запишем описание процедуры:
Procedure oblozhka(p, s, n: string);
begin
Writeln(‘Тетрадь’);
Writeln(‘по ’, p);
Writeln(s, ‘ 7-А класса’);
Writeln(n);
end;
Слайд 14Основная программа
Для вызова процедуры, в основной программе записывается имя процедуры, а
в скобках через запятую фактические параметры, их последовательность, количество и тип должны соответствовать формальным параметрам.
BEGIN
oblozhka(‘алгебре’, ‘Ученика’, ‘Иванова Ивана’);
oblozhka(‘геометрии’, ‘Ученицы’, ‘Ивановой Анны’);
END.
Слайд 15Рассмотрим пример задачи.
Составить алгоритм, который из вещественных чисел a, b,
c отрицательные числа возводит в квадрат.
Запишем программу с применением процедуры.
Var a, b, c: real;
procedure kvadrat(x: real; var y: real);
begin
if x <0 then y:=SQR(x);
End;
BEGIN
READ(a,b,c);
kvadrat(a,a);
kvadrat(b,b);
kvadrat(c,c);
writeln(a,b,c);
END.
Входные данные
результат
Так как происходит замена значения переменной, то данными для передачи в процедуру и переменной результата является имя переменной, для которой производится замена.
Слайд 16Подпрограммы-функции
Подпрограмма, имеющая единственный результат, может быть оформлена как функция. Количество входных
данных (аргументов функции) определяет количество формальных параметров. В заголовке необходимо указать тип результата, т.е. тип самой функции. Переменная, в которую записывается результат работы подпрограммы, должна иметь имя функции.
Function имя_функции(входные данные: тип): тип результата;
{описание локальных переменных}
Begin
{операторы подпрограммы}
Имя_функции := результат;
End;
Слайд 17Вызов функции
В основной программе для вызова функции используется указатель – это
имя функции, после которого в круглых скобках, через запятую, перечисляются фактические параметры (аргументы функции). Указатель функции не является самостоятельным оператором, как процедура. Он записывается как значение в других операторах языка Паскаль. Примером вызова функции являются математические функции, например: write(sin(x)), у := sqr(x).
Рассмотрим несколько задач, в которых можно использовать подпрограмму-функцию.
Слайд 18Накопление результата
1) Дано три вещественных числа a, b, c. Составить алгоритм,
который определяет сумму квадратов отрицательных чисел.
Идея решения: сумма будет складываться из трех чисел – если число отрицательное, то добавляться будет квадрат этого числа, иначе ничего не добавляется, т.е. ноль.
S := chislo(a) + chislo(b) + chislo(c);
Запишем программу с использованием вспомогательного алгоритма-функции chislo(х). Аргументом функции является формальное число х, а результатом имя функции chislo.
Слайд 19Var a, b, c, s: real;
function chislo(x: real): real;
begin
if x
<0
then chislo := SQR(х)
else chislo :=0;
end;
BEGIN
READ(a, b, c);
s := chislo(a) + chislo(b) + chislo(c);
Write(s);
END.
Программа на Pascal
Слайд 202) Дано три вещественных числа a, b, c. Составить алгоритм, который
определяет произведение квадратов отрицательных чисел.
Основной алгоритм этой задачи: (с использованием подпрограммы-функции) - будет отличаться от суммы.
Если число отрицательное, то будем умножать на квадрат этого числа, иначе ничего не добавляется, т.е. умножать надо на единицу! Но тогда, если все числа не будут отрицательными произведение должно быть равно нулю, а в нашем случае оно получится равным единицы, следовательно необходимо вначале сделать проверку всех чисел и выбрать один из вариантов решения: по формуле или присвоить ноль.
Слайд 21Текст программы
Var a, b, c, P: real;
function chislo(x: real): real;
begin
if
x <0 then chislo := SQR(х) else chislo := 1;
end;
BEGIN
READ(a, b, c);
If (a >= 0) and (b >= 0) and (c >= 0)
Then P := 0
Else P := chislo(a) * chislo(b) * chislo(c);
Write(P);
END.
Слайд 22Задачи с несколькими числами, с промежуточными вычислениями максимума или минимума этих
чисел
Найти разность максимального и минимального среди четырех любых чисел a, b, c, d.
Промежуточными вычислениями в этой задаче являются максимум и минимум этих четырех чисел, т.е. необходимо три раза найти экстремум для двух чисел: 1) а и b; 2) c и d; 3) значение (1-ой пары) и значение (второй пары).
Используем подпрограммы-функции максимума и минимума для двух чисел (числа – параметры функции могут быть заданы в виде арифметических выражений или функций). Разность запишем в операторе вывода:
Write(max-min);
Слайд 23VAR a, b, c, d: real;
FUNCTION max(x, y: real): real;
begin
if x
>y then max:=x else max:=y;
end;
FUNCTION min(x, y: real): real;
begin
if x
end;
BEGIN
READLN(a, b, c, d);
WRITE(‘max-min = ', max(max(a, b), max(c,d)) - min(min(a, b), min(c, d)));
END.
Текст программы
Слайд 24Использованная литература:
Дмитриева М.В., Кубанский А.А. Элементы современного программирования. – С.-Пб.: Изд-во
С.-Петербургского университета, 1991.
Основы информатики и вычислительной техники: Проб. учеб. пособие для сред. учеб. Заведений. В 2-х частях/ Под ред. А.П.Ершова, В.М. Монахова. – М.: Просвещение. – Ч. 1, 1985, Ч. 2, 1986.
Окулов С.М. Основы программирования. – М.: Лаборатория базовых знаний, 2001.
Остер Г. Задачник. – Росмэн, 1998. – 128 с.