Цель урока
образовательная
воспитательная
развивающая
Учащиеся должны:
Выдать задание на листочках (Приложение 1 ). Найти повторы.
Иногда в разных местах программы приходится выполнять практически одни и те же последовательности действий с разными исходными данными. Такие последовательности действий можно оформить в виде так называемых подпрограмм (от англ, subroutine) – сгруппировать операторы в блок, к которому можно обратиться по имени, причем неоднократно.
Подпрограммы сокращают текст программы, существенно уменьшают время их исполнения, облегчают жизнь программистам, которые могут создавать программы модульно, т. е. собирая сложную программу из законченных кусочков более простых составляющих. Это позволяет группе программистов создавать большие программы, а группе школьников разрабатывать и реализовывать какие-либо глобальные проекты
Подпрограммы делятся на процедуры и функции.
Встроенные (стандартные) процедуры и функции являются частью языка и могут вызываться по имени без предварительного описания. Например, abs, sqrt, ln, sin…- функции (возвращают результат), readln, write… – процедуры (не возвращают результат). Их наличие существенно облегчает разработку прикладных программ. Однако в большинстве случаев некоторые специфичные для данной программы действия не находят прямых аналогов в библиотеках Turbo Pascal, и тогда программисту приходится разрабатывать свои нестандартные процедуры и функции.
Процедуры пользователя пишутся самим программистом в соответствии с синтаксисом языка в разделе описания подпрограмм.
Структура процедуры повторяет структуру программы, это "программа в миниатюре" - она также представлена заголовком и телом.
Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры.
VAR … // раздел описания переменных главной программы
procedure ИмяПроцедуры;
//тело главной программы
Вызов процедуры для последующего выполнения записывается в теле главной программы.
Пример 1. Программа вычисления площади и периметра.
Достоинства подпрограмм:
Пример 2. Пользователь вводит две стороны трех прямоугольников. Вывести их площади.
Можно решить задачу так:
for i:=1 to 3 do
writeln(‘Введите a и b:’);
writeln(‘Площадь=’,a*b);
Хорошим стилем программирования считается использование процедур. Необходима процедура, которая будет вычислять площадь прямоугольника. Вот как схематично будет выглядеть главная программа:
вычисление
вычисление
вычисление
Процедура текста уже есть (см пример1). Создадим вторую процедуру, которая вычисляет площадь. Но для того чтобы вычислить S, надо знать 2 стороны, поэтому процедуре надо показать какие стороны она должна перемножать.
procedure pl (c,d: integer);
writeln(‘площадь прямоугольника со сторонами ’,c, ‘ ‘ ,d, ‘=‘,S);
Параметр – это переменная, которой присваивается некоторое значение. Существуют формальные параметры , определенные в заголовке подпрограммы, и фактические параметры – выражения, задающие конкретные значения при обращении к подпрограмме.
Процедура выполнится, если вызвать ее по имени и указать фактические параметры, отделенные друг от друга запятыми и заключенных в круглые скобки:
Фактические параметры должны совпадать по типу и количеству с формальными.
Итак, главная программа:
for i:=1 to 3 do
Замечание. При решении этой задачи необходимо проверять введенные пользователем числа (они не должны быть отрицательными, иначе работа программы прервется).
Составим процедуру проверки:
procedure error (f,g:integer);
if (f<0) or (g<0) then begin
writeln(‘стороны прямоугольника не могут быть отрицательными’);
halt; //прерывание программы
Итоговая программа – Приложение 4
Итак формат процедуры:
Procedure <имя> (формальные параметры);
<операторы>;
Пример 3. Составить программу обмена местами двух чисел с=5 и d=7.
program obmenDan;
var c,d:integer;
procedure obmen (a,b:integer);
m:=a; a:=b; b:=m;
writeln ("Введите 2 числа: ");
writeln(c," ",d);
После запуска программы видно, что поменялись местами формальные параметры (в процедуре), а фактические (которые используются в лавной программе) – не поменялись. Рассмотрим рисунок, на котором приведена часть оперативной памяти:
1) при вызове процедуры obmen с двумя параметрами 5 и 7, в переменные a и b помещаются тоже числа 5 и 7 соответственно:
3) но в переменных c и d данные не поменялись, т.к. они находятся в других ячейках памяти.
Для того чтобы переменные c и d, a и b ссылались на одни и те же ячейки памяти (если изменятся значения a и b, то изменятся значения и c, d) необходимо при описании формальных параметров, перед нужными переменными добавить слово VAR:
procedure obmen (var a,b:integer);
Измените программу obmenDan:
Ошибка из-за var. Числа – константы, которые нельзя изменять в процедуре.
Пример 4. Найти площадь круга с использованием процедуры, которая производит только вычисление, но не отображает результат на экране.
procedure circle (r:real);
Процедура должна возвращать результат:
procedure circle (r:real; var S:real);
readln(a, e);
Замечание: Переменная в процедуре S используется для возвращения результатов работы процедуры в основную программу. При ее изменении, изменяется и фактический параметр в вызывающей программе, т.е. переменная e.
Чаще для этого в Паскале вместо процедур используют функции (подпрограммы, которые что-то возвращают).
Функция аналогична процедуре, но имеются два отличия.
Например, sqr(x) – возведет в квадрат значение х и возвратит в точку вызова вычисленное значение квадрата числа х: y:=sqr(x);
Функция, определенная пользователем, состоит из заголовка и тела функции. Тело функции по структуре аналогично программе. Описание меток, констант, типов и т.д. действительны только в пределах данной процедуры.
Function <имя> (формальные параметры) : <тип результата>;
<операторы>;
В разделе операторов должен находиться хотя бы один оператор, присваивающий имени функции значение. В точку вызова возвращается результат последнего присваивания.
Пример 5. Переделаем задачу о площади круга .
function circle (r:real): real;
a:=circle(5); (ОБЯЗАТЕЛЬНО присваиваем)
Пример 6. Найти 1!+2!+…+n!
Используем функцию нахождения факториала, т.к подаем на вход и получаем результат.
function fact (a:integer): integer;
for i:=1 to a do
В строке fact:=fact*I;
компилятор найдет ошибку, т.к fact должна вызываться с параметрами. Поэтому обячно вводят дополнительную переменную, в которую помещают результат. А потом в переменную fact присваивают этот результат:
program factorial;
var sum,n,j: integer;
function fact (a: integer): integer;
var i,d: integer;
for i:=1 to a do
for j:=1 to n do
sum:=sum+fact(j);
В данное время процесс программирования превращается в промышленное изготовление программ на основе технологий программирования . Большинство специалистов придерживаются точки зрения, что метод нисходящего проектирования программ наиболее удобен для решения сложных проблем. Cначала задача определяется в общих чертах, затем происходит постепенное уточнение ее структуры. На очередном шаге каждая подзадача, в свою очередь, разбивается на ряд других. Решение отдельного фрагмента сложной задачи представляет собой самостоятельный программный блок – подпрограмму.
Решить задачи (письменно):
8 класс. Программирование на языке ABC Pascal
Учитель информатики НИШ г. Уральска ФМН Зеленов Борис Александрович
Ожидаемые результаты - Дескрипторы:
1.Знает определение «процедуры»
2.Знает определение «функции»
3.Определяет фактические и формальные параметры
4.Различает параметры значений и переменных
5.Находит обращение к процедуре или функции в программном коде
Стандартный план Эльвиры
1. Убрать бумажки
2. Полить цветы
3. Помыть парты
4. Вытереть стекла
Конец алгоритма
Как улучшить организацию этого процесса?
Тема урока
Подпрограммы:
Ішкі бағдарлама
Подпрограмма
Процедура
Процедура
Параметрлер
Полезные фразы:
Для передачи значений переменных в процедуру (функцию) используются фактические параметры …
Для того, чтобы описать процедуру, следует сначала…., потом …
Понятие подпрограммы
Определение
Подпрограмма - это отдельная функционально независимая часть программы.
Подпрограммы
Процедуры
В этой задаче можно создать процедуру которая будет выполнять алгоритм рисования одного фрагмента(штакетника), а затем постоянно обращаться к этой процедуре, меняя начальное положение пера
Взаимодействие основной программы и подпрограммы
Блок-схема
Имя подпрограммы (процедуры или функции)
Блок-схема
Описание процедуры имеет вид:
procedure имя(список формальных параметров); раздел описаний begin операторы end ;
Описание функции имеет вид:
function имя(список формальных параметров): тип возвращаемого значения;
раздел описаний begin операторы end ;
Расположение в программе
Program ...;
//Раздел описаний Uses, Const, Var, …
procedure A ;
begin ....... end ;
procedure B ;
begin ........ end ;
Function C ;
begin ........ end ;
//Основная программа
begin ........ end .
Процедуры
Функции
Может иметь несколько результатов или выполнять некоторое действие
Имеет только один результат, тип которого указывается отдельно при объявлении функции.
Результатами могут быть значения любого типа массивы, строки, числа и т.д.
Результат может быть только значением типа real, integer или char.
Команда вызова процедуры – отдельная команда, которая употребляется самостоятельно
Обращение к функции может использоваться только как компонент выражения соответствующего типа.
В теле функции должен быть хотя бы один оператор присваивания, в левой части которого указано имя функции.
Процедура или функция?
MaxNumber(a,b: integer): integer;
var max: integer;
MaxNumber:= max;
Процедура или функция?
MaxNumber(a,b: integer; var max: integer);
if ab then max:=a else max:=b;
Процедура или функция?
ChangeColor(C1, C2: Word);
TextBackGround(C2)
Процедура или функция?
Add(X, Y: Integer): Integer;
Фактические
Формальные
Вызов процедуры производится оператором, имеющим следующий формат:
имя процедуры(список фактических параметров);
Передача параметров. Формальные параметры
Переменные
Значения
Параметры по значению
Формальные параметры
Переменные
Формальные параметры
Параметры по значению
Процедура
Procedure Name (a, b: integer);
Основная программа
При изменении этих значений в ходе выполнения процедуры (функции) исходные данные (фактические параметры) измениться не могут
Var c, d: integer;
Процедура
Procedure Name (a, b: integer, Var c:real);
Основная программа
Изменения происходят с переменными вызывающего блока, поэтому по ссылке передаются выходные параметры. При вызове соответствующие им фактические параметры могут быть только переменными.
Выпишите:
1.Фактические параметры ___________
Procedure Kvad(R: real; var S: real);
2.Формальные параметры ___________
3.Формальные параметры-значения __________
5.Имя процедуры ___________
6.Обращение к процедуре из программы _____________________
Интерактивное задание
http://www.bzfar.net/load/podprogrammy_procedury_i_funkcii_parametry/23-1-0-498
Эльвира староста класса. Ей предстоит составить план выполнения генеральной уборки в классе: убрать бумажки, полить цветы, помыть парты, вытереть стекла. Как ей лучше организовать работу? Помогите Эльвире.
Продвинутый план Эльвиры
Подпрограммы:
Арсен – убирает бумажки
Мила – поливает цветы
Виталий – моет парты
Индира – вытирает стекла
1. Выполнить Арсен
2. Выполнить Мила
3. Выполнить Виталий
4. Выполнить Индира
Конец алгоритма
Встретимся
на следующем уроке!
Подпрограммы в Turbo Pascal
Причины использования подпрограмм
Виды подпрограмм
процедуры
функции
Процедуры без параметров
procedure ;
end ;
Пример . Составить программу нахождения объёма цилиндра.
Program cylinder;
Var R, H, V: real;
Procedure Input ; { процедура ввода данных }
Writeln (’введите значение радиуса’);
writeln (’введите значение высоты’);
Procedure formula; { процедура вычисления объёма }
V: =PI*sqr(R)*H;
Procedure Output ; { процедура вывода результатов }
writeln (’V=’,V);
Процедуры c параметрами
Процедуры c параметрами
Пример .
Program zadacha;
Var a, b: integer;
Procedure lokal;
Var a, x: char; Для процедуры lokal:
begin переменная x – локальная переменная
a:=’! ’; (программа не может изменить её значение)
b:= b +1; переменная b – глобальная переменная
end ; (все изменения значения этой переменной в процедуре
BEGIN сохраняются и после выхода из процедуры)
b:=100; переменная a в основной программе – целого типа,
lokal ; а в процедуре – символьного типа. Переменная а
writeln (’ a =’, a); целого типа недоступна в процедуре lokal .
writeln (’b=’,b);
Результат выполнения программы: а=0; b =101.
Передача параметров в Turbo Pascal
procedure (:
переменной);
end ;
Пример .
Program parametr;
Var m, n: integer;
Procedure summa (a, b: integer);
writeln (’S=’,S);
summa (m,n); или summa (100,10);
Переменные a и b являются формальными параметрами, а переменные m и n - фактическими. Значения фактических параметров m =100 и n =10 передаются формальным параметрам a и b .
Изменения фактических параметров происходит только внутри процедуры и не влияют на них вне данной процедуры.
Передача параметров в Turbo Pascal
procedure (:
переменной; Var
переменной:);
end ;
Var a1,b1,c1,a2,b2,c2, min1, min2, S: real;
Procedure minimum (a,b,c: real; Var min: real);
if min b then min:= b;
if min c then min:= c;
writeln (’введите три числа’);
readln (a1, b1, c1);
writeln (’ введите три числа ’);
readln (a2,b2,c2);
minimum (a1,b1,c1, min1);
minimum (a2,b2,c2, min2);
S:= min1 + min 2;
writeln (’S=’, S);
Пример . Даны две тройки чисел: a 1, b 1, c 1 и a 2, b 2, c 2. Найти значение суммы: S=min (a1, b1, c1) + min (a2, b2, c2)
Функция – это подпрограмма, результатом работы которой является некоторое значение.
function (:
end ;
Program vyrazenie;
function modul (a: real) : real;
writeln (’введите значение переменной’);
y:= modul (x-3) + modul (x+6);
writeln (’y=’, y);
Пример . Вычислить значение выражения: y = | x -3 | + | x +6 |
Чтобы пользоваться предварительным просмотром презентаций создайте себе аккаунт (учетную запись) Google и войдите в него: https://accounts.google.com
Процедуры и функции в Паскале. Рекурсия Выполнил учитель информатики ГБОУ школа 1362 Санина Марина Сергеевна
Подпрограмма - автономная часть программы, выполняющая определенный алгоритм и допускающая обращение к ней из различных частей общей программы. Использование подпрограмм позволяет реализовать один из самых современных методов программирования - структурное программирование.
Подпрограммы процедура функция PROCEDURE FUNCTION
Процедуры и функции в Паскале объявляются в разделе описания за разделом переменных.
У функций и процедур существуют параметры (переменные, которые передают какое - либо значение). Они бывают двух видов: 1) Формальные - те, которые находятся в описании подпрограммы 2) Фактические - те, которые передаются из основной программы в функцию или процедуру. Фактические параметры должны соответствовать формальным по количеству, порядку следования и типу.
Также у подпрограммы существую переменные. с которыми она в дальнейшем работает. Они делятся опять же на два типа: 1) Глобальные переменные, то есть действующие во всей программе 2) Локальные - те, которые действуют только в процедуре или функции
Процедуры Используются в случаях, когда в подпрогра м ме необходимо получить несколько результатов. Существует два вида процедур: с параметром; б ез параметра.
Структура процедуры аналогична структуре программы и состоит из заголовка и блока (тела процедуры). procedure ИмяПроцедуры; var … begin …//Тело процедуры end ; begin //тело главной программы end .
Процедуры без параметров procedure pr; var i: integer ; begin for i:=1 to 60 do write (‘ * "); writeln ; end . begin pr ; end. Данная программа выводит строку из 60 звездочек.
Процедура с параметром. Составить программу обмена местами двух чисел с=5 и d=7 program obmenDan ; var c,d:integer ; procedure obmen (a,b:integer); var m:integer; begin m:=a; a:=b; b:=m; writeln (a,b); end; begin writeln (" Введите 2 числа: "); readln (c,d); obmen (c,d) ; writeln (c," ",d); End.
Разбор задачи 1) при вызове процедуры obmen с двумя параметрами 5 и 7, в переменные a и b помещаются тоже числа 5 и 7 соответственно: с 5 d 7 a 5 b 7
Для того чтобы переменные c и d , a и b ссылались на одни и те же ячейки памяти (если изменятся значения a и b , то изменятся значения и c , d) необходимо при описании формальных параметров, перед нужными переменными добавить слово VAR: procedure obmen (var a,b:integer); с 5 d 7 a b
Функции Набор встроенных функций в языке Паскаль достаточно широк (ABS, SQR, TRUNC и т.д.). Если в программу включается новая, нестандартная функция, то ее необходимо описать в тексте программы, после чего можно обращаться к ней из программы. Обращение к функции осуществляется в правой части оператора присваивания, с указанием имени функции и фактических параметров. Функция может иметь собственные локальные константы, типы, переменные, процедуры и функции. Описание функций в Паскале аналогично описанию процедур.
Отличительные особенности функций: - результат выполнения - одно значение, которое присваивается имени функции и передается в основную программу; - имя функции может входить в выражение как операнд.
Описание функции: function () : тип; { раздел описания локальных имён } Begin { раздел выполняемых операторов } :=; { обязательный параметр } End;
Вызов функции: := (); 1 . В правой части оператора присваивания. 2. В выражении, стоящем в условии оператора разветвления. 3. В процедуре вывода, как результат работы функции.
Рекурсия Процедуры и функции в Паскале могут вызывать сами себя, т.е. обладать свойством рекурсивности. Рекурсивная функция обязательно должна содержать в себе условие окончания рекурсивности, чтобы не вызвать зацикливания программы. При каждом рекурсивном вызове создается новое множество локальных переменных. То есть переменные, расположенные вне вызываемой функции, не изменяются.
Составить рекурсивную функцию, вычисляющую факториал числа n следующим образом: n ! = 1 , если n= 1 n!= (n -1)! · n , если n > 1
function f (n: integer): integer ; begin if n = 1 then f:= 1 else f:= n * f (n -1); {функция f вызывает саму себя} end ;
Задания Поменять значения переменных a, b, c так, чтобы они были расположены в порядке неубывания (a ≤ b ≤ c). Дано n целых чисел. Найти среди них число, у которого сумма цифр имеет максимальное значение.