Процедуры и функции в Паскале. Рекурсия. Подпрограммы Часто в задаче требуется повторить определенную последовательность операторов в разных частях программы. Процедуры и функции в Паскале презентация к уроку по информатике и икт (11 класс) на тему III. О

Рекурсия в Паскале Учитель: Тлехурай Ю.В. МОУ «Лицей №8» Что вы видите на картинах? Это явление в искусстве называется рекурсией «Чтобы понять рекурсию, нужно сначала понять рекурсию.» рекурсия - частичное определение объекта через себя, определение объекта с использованием ранее определённых. Научно выражаясь: Рекурсия - метод определения класса объектов или методов предварительным заданием одного или нескольких (обычно простых) его базовых случаев или методов, а затем заданием на их основе правила построения определяемого класса. Питер Дойч Питер Дойч

Итерация от человека.

Рекурсия – от Бога.

Рекурсия в физике Рекурсия в языке и литературе Классическим примером бесконечной рекурсии являются два поставленные друг напротив друга зеркала : в них образуются два коридора из затухающих отражений зеркал. Другим примером бесконечной рекурсии является эффект самовозбуждения (положительной обратной связи) у электронных схем усиления , когда сигнал с выхода попадает на вход, усиливается, снова попадает на вход схемы и снова усиливается. Усилители, для которых такой режим работы является штатным, называются автогенераторы. Пример рекурсивной словарной статьи: «У попа была собака…» - типичная рекурсия Несколько рассказов Станислава Лема посвящены казусам при бесконечной рекурсии: Рассказ о сепульках («Звёздные дневники Йона Тихого»), в котором герой последовательно переходит от статьи о сепульках к статье о сепуляции, оттуда к статье о сепулькариях, в которой снова стоит отсылка к статье «сепульки». Рассказ о разумной машине, которая обладала достаточным умом и ленью, чтобы для решения поставленной задачи построить себе подобную, и поручить решение ей (итогом стала бесконечная рекурсия, когда каждая новая машина строила себе подобную и передавала задание ей). Рекурсия в программировании - это такой способ организации вычислительного процесса, при котором процедура или функция в ходе выполнения составляющих ее операторов обращается сама к себе. Для того, чтобы такое обращение не было бесконечным, в тексте подпрограммы должно быть условие, по достижению которого дальнейшего обращения не происходит. таким образом, рекурсивное обращение может включаться только в одну из ветвей подпрограммы. Пример. Вычисление факториала натурального числа Составить рекурсивную функцию, вычисляющую факториал числа n следующим образом: function f (n: integer): longint; begin if n = 1 then f:= 1 else f:= n * f(n -1); { функция fвызывает саму себя} end Программа на Паскале используя рекурсию: Var n: integer; a: longint; function factorial (n: integer): longint; begin if n = 1 then factorial:= 1 else factorial:= n * factorial (n -1); End; Begin Write(‘n=’); Readln(n); A:= factorial (n); Write (‘n!=’,a); Readln; end. Леонардо Пиза́нский Фибоначчи

Числа Фибоначчи – это элементы числовой последовательности

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …, в которой каждое последующее число равно сумме двух предыдущих.

Задача: Вывести на экран ряд чисел Фибоначчи, состоящий из n элементов. Описание переменных: n – количество элементов ряда; a, b – значения двух последних элементов ряда; c – буферная («запасная») переменная; i – счетчик. Алгоритм решения задачи: 1. Получить значение n. 2. Присвоить a и b значения 0 и 1 соответственно (это первые числа ряда Фибоначчи). Вывести их на экран. 3. Начиная с 3-го элемента по n: a) выводить на экран сумму a и b, b) сохранить значение переменной b в c, c) записать в b сумму a и b, d) присвоить a значение с. Программа на языке Паскаль используя итерацию: program Fibonacci; var a,b,c,i,n: integer; begin write("n = "); readln(n); a:= 0; write(a," "); b:= 1; write(b," "); for i:=3 to n do begin write(a+b," "); c:= b; b:= a + b; a:= c; end; readln; end. Программа на языке Паскаль используя рекурсию: Рекурсивное определение для вычисления чисел Фибоначчи выглядит следующим образом: Это определение чисел Фибоначчи легко преобразовать в рекурсивную функцию: function f(n: Integer) : longint; begin If n <= 1 Then f:= n else f:= f(n– 1) + f(n - 2); end; Program chislaFibonacci; var n,i: integer; a: longint; function fib (n: integer): longint; begin If n <= 1 Then fib:= n else fib:= fib(n– 1) + fib(n - 2); End; begin write(‘n=’); readln(n); for i:=0 to n do begin A:= fib (n); write (‘ ’,a); end; readln; end. Домашнее задание Написать программу нахождения НОД двух натуральных чисел, используя алгоритм Евклида и рекурсию Даны два натуральных числа а и b. Если а = b, то нод (а ,b)=а. Если а >b, то нод (а ,b)= нод (а -b ,b). Если а < b, то нод (а ,b)= нод (а ,b-а). Program noddvyxchisel; var a,b: longint; function nod(a,b:longint): longint; begin If a = b Then nod:= a else if a>b then nod:= nod(a-b,b) else nod:= nod(a,b-a) End; begin write(‘a=’); readln(a); write(‘b=’); readln(b); A:= nod(a,b); write(‘nod=’,a); readln; end. Задача о Ханойских башнях. При этом неукоснительно должны соблюдаться следующие правила:

  • за один раз можно перемещать только один диск;
  • больший диск нельзя располагать на меньшем диске;
  • снятый диск необходимо надеть на какой-либо шпиль перед тем, как будет снят другой диск.
  • Трудолюбивые буддийские монахи день и ночь переносят диски со шпиля на шпиль. Легенда утверждает, что когда монахи закончат свою работу, наступит конец света. Можно было бы подсчитать, что для решения задачи с 64 дисками потребуется264– 1 перемещений. Поэтому что касается конца света, то он произойдет по истечении пяти миллиардов веков, если считать, что один диск перемещается за одну секунду. Впрочем, и задачу, и легенду для неё придумал в 1883 году математик Эдуард Люка из колледжа Сен-Луи.

На одном из трех алмазных шпилей надето 64 круглых золотых диска. Диски имеют разные радиусы и расположены на шпиле в порядке убывания радиусов от основания к вершине. Требуется перенести диски с первого шпиля на второй, используя при необходимости и третий шпиль.

Задача. Составить рекурсивную программу, которая бы решала поставленную выше задачу о Ханойских башнях при количестве дисков, равном n (n = 1, 2, …). Решение. Введем имена для шпилей: a, b, c . Пусть hanoi(n,a,b,c) - искомая функция, возвращающая последовательность перемещений дисков с a на b c использованием c по вышеописанным правилам. При n=1 решать задачу мы умеем. Необходимо просто произвести операцию “переместить a на b ”. Предположим, что мы умеем решать эту задачу для n – 1 диска. Переместим n–1 диск с a на с . Далее, переместим один оставшийся диск с a на b и, наконец, переместим n–1 диск с c на b . Входные данные : количество дисков, находящихся на колышке a; Выходные данные : последовательность действий; Шаг0:{определение типа переменных}; Шаг1:{описание процедуры hanoi, которая выводит последовательность действий}; Шаг1.1:{переместить (n-1) дисков с колышка a на колышек b}; Шаг1.2:{переместить n-ый диск с a на c}; Шаг1.3:{переместить (n-1) диск с b на c}; (шаги 1.2-1.3 выполняются рекурсивно); Шаг2:{основная программа}; Шаг2.1:{ввод количества дисков}; Шаг2.2:{вызов процедуры hanoi}. Решение задачи в Паскале Program bahnya; var n: integer; a,b,c: char; procedure hanoi(n: integer;a,b,c: char); begin if n>0 then begin hanoi(n-1,a,c,b); writeln ("Peremestit disk so sterzhnya ",a," na sterzhen" ",b); hanoi(n-1,c,b,a); end; end; Begin write ("Vvedite naturalnoe chislo n"); readln (n); a:="a"; b:="b"; c:="c"; hanoi (n,a,c,b); readln; end. Домашнее задание Написать программу вычисления степени с натуральным показателем Дано: основание степени х Показатель степени к Если к=0, тогда степень(к,х)=1, Иначе степень (к,х)= х· степень (к-1,х) Program stepen; var y: real; n: integer; function step(k:integer, x:real): real; begin If k = 0 Then step:= 1 else step:= x * step(k-1,x) End; begin write(‘vvedite osnovanie stepeni x=’); readln(y); write(‘vvedite pokazatel stepeni k=’); Readln(n); write(‘x v stepeni k=’,step(n,y)); readln; end. Самостоятельная работа

  • Найти сумму цифр числа
  • Определить, является ли заданное натуральное число простым
  • Найти первую цифру числа
  • Перевести натуральное число из десятичной с.с. в двоичную
  • Найти сумму элементов целочисленного массива, состоящего из 20 элементов
  • Поменять местами значения двух целых чисел
  • Упорядочить значения трех переменных а, в, с в порядке их возрастания
  • Найти количество цифр в натуральном числе n
  • Найти наибольшее из трех данных чисел
  • Найти количество положительных чисел среди четырех А, В, С, Д
Ответы самостоятельной работы №2 Program prostoe; var n, m, s: integer; function prost(m, n:integer): boolean; begin If n = m Then prost:= true else prost:= (n mod m <> 0) and prost (m+1, n); End; begin write(‘n=’); Readln(n); M:=2; If prost(m,n) then write (n,’prostoechislo’) Else write (n,’sostavnoe’); readln; end.

program perevod;

procedure dvd(n:longint);

If n >1 Then dvd (n div 2);

write (n mod 2);

Цель урока

образовательная

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

воспитательная

  • воспитать аккуратность, внимание, организованность;
  • культура вычислительных навыков;

развивающая

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

Учащиеся должны:

  • знать правила записи процедур без параметров и с параметрами;
  • знать правила записи функций;
  • уметь применять процедуры и функции при решении простых задач.

Ход урока

I. Орг. момент

II. Вступление. Актуальность

Выдать задание на листочках (Приложение 1 ). Найти повторы.

Иногда в разных местах программы приходится выполнять практически одни и те же последовательности действий с разными исходными данными. Такие последовательности действий можно оформить в виде так называемых подпрограмм (от англ, subroutine) – сгруппировать операторы в блок, к которому можно обратиться по имени, причем неоднократно.

Подпрограммы сокращают текст программы, существенно уменьшают время их исполнения, облегчают жизнь программистам, которые могут создавать программы модульно, т. е. собирая сложную программу из законченных кусочков более простых составляющих. Это позволяет группе программистов создавать большие программы, а группе школьников разрабатывать и реализовывать какие-либо глобальные проекты

Подпрограммы делятся на процедуры и функции.

Встроенные (стандартные) процедуры и функции являются частью языка и могут вызываться по имени без предварительного описания. Например, abs, sqrt, ln, sin…- функции (возвращают результат), readln, write… – процедуры (не возвращают результат). Их наличие существенно облегчает разработку прикладных программ. Однако в большинстве случаев некоторые специфичные для данной программы действия не находят прямых аналогов в библиотеках Turbo Pascal, и тогда программисту приходится разрабатывать свои нестандартные процедуры и функции.

III. Объяснение нового материала

Процедуры пользователя пишутся самим программистом в соответствии с синтаксисом языка в разделе описания подпрограмм.

Структура процедуры повторяет структуру программы, это "программа в миниатюре" - она также представлена заголовком и телом.

Заголовок состоит из зарезервированного слова 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);

IV. Итог урока

В данное время процесс программирования превращается в промышленное изготовление программ на основе технологий программирования . Большинство специалистов придерживаются точки зрения, что метод нисходящего проектирования программ наиболее удобен для решения сложных проблем. Cначала задача определяется в общих чертах, затем происходит постепенное уточнение ее структуры. На очередном шаге каждая подзадача, в свою очередь, разбивается на ряд других. Решение отдельного фрагмента сложной задачи представляет собой самостоятельный программный блок – подпрограмму.

V. Домашнее задание

Решить задачи (письменно):

  1. Составить процедуру, которая во введенной строке заменяет все буквы a на *.
  2. Даны два предложения. Найти общее количество букв “н” в них. (Определить функцию для расчета количества букв “н” в предложении.)

Cлайд 1

Cлайд 3

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

Cлайд 4

Формальные и фактические параметры В описании подпрограмм параметры обозначены только именами, поэтому их называют формальными. До вызова подпрограммы они не имеют значений. Они лишь резервируют место для фактических параметров, фиксируя их число и тип данных. Типы фактических параметров: Параметры-значения показывают, какое значение надо присвоить определенному параметру подпрограммы. После завершения подпрограммы они принимают прежние значения, даже если были изменены в подпрограмме. Параметры-переменные в подпрограмме становятся на место формальных, могут в ходе исполнения подпрограммы изменить свое значение и сохраняют изменения при выходе из подпрограммы (перед параметрами-переменными стоит ключевое слово Var).

Cлайд 5

Cлайд 6

Описание процедуры Program Pr1; Const … Type … Var … Procedure (); Описательная часть Begin Тело процедуры End; Begin … (); … end. При вызове процедуры формальные параметры заменяются фактическими.

Cлайд 7

Процедура вычисления суммы двух чисел program pr1; Uses crt; Var a,b,s:real; procedure summa(x,y:real;var z:real); begin z:=x+y; end; begin clrscr; writeln("введите a,b"); readln(a,b); summa(a,b,s); writeln(" сумма чисел ",a:3:1," и ",b:3:1," = ",s:3:1); readln; end. x,y,z – формальные параметры, локальные переменные a,b,s – глобальные переменные a,b,s – фактические параметры х y z a b s Параметры-значения Параметр-переменная

Cлайд 8

Cлайд 9

Cлайд 10

Вычислить значение выражения a:=(3n!+2m!)/(m+n)! Для нахождения факториала какой тип переменных целесообразно использовать? program pr2; Uses crt; Var m,n,x,y,z:integer; a:real; procedure fact(d:integer;var q:integer); var i:integer; begin q:=1; for i:=1 to d do q:=q*i; end; begin clrscr; writeln("введите значения n, m "); readln(n,m); fact(n,x); fact(m,y); fact(m+n,z); a:=(3*x+2*y)/z; writeln("значение выражения при m= ",m:4," и n= ",n:4,"равно",a:8:3); readln; end. N!=1·2·3·…· N

Cлайд 11

Ввод вывод элементов одномерного массива Функция Random(X) формирует случайное число от 0 до Х целого или вещественного типа (перед обращением к функции ее необходимо инициализировать, использовав процедуру Randomize). Если параметр Х не задан, результат будет типа Real в пределах от 0.0 до 1.0. Для получения массива целых случайных чисел из диапазона random(B-A+1)+A Задание: Оформить ввод элементов одномерного массива с помощью генератора случайных чисел (диапазон значений от -10 до 20) и вывод элементов как процедуры. Для А=-10 В=20 random(20-(-10)+1)+(-10)

Cлайд 12

Cлайд 13

Cлайд 14

Описание функции Функции предназначены для того, чтобы вычислять только одно значение, 1. поэтому ее первое отличие состоит в том, что процедура может иметь новые значения у нескольких параметров, а функция только одно (оно и будет результатом). 2. Второе отличие заключается в заголовке функции. Он состоит из слова FUNCTION, за которым идет имя функции, затем в круглых скобках идет список формальных параметров, после чего через двоеточие записывается тип результата функции. 3. В теле функции обязательно должен быть хотя бы один оператор присвоения, где в левой части стоит имя функции, а в правой – ее значение. Function (): Описательная часть Begin Тело функции:=; End;

Cлайд 15

Вычислить значение выражения a:=(3n!+2m!)/(m+n)! program fn2; Uses crt; Var m,n:integer; a:real; function fact(d:integer) :longint; var i:integer; q:longint; begin q:=1; for i:=1 to d do q:=q*i; fact:=q; end; begin clrscr; writeln("введите значения n, m "); readln(n,m); a:=(3*fact(n)+2*fact(m))/fact(m+n);; writeln("значение выражения при m= ",m:4," и n= ",n:4,"равно",a:8:3); readln; end.

Cлайд 16

Составить программу, которая будет находить аb, то есть b-ю степень числа А, где А и В – это целые числа и В>0, вводимые с клавиатуры. Составьте программу, заменив функцию процедурой program pr2; Uses crt; Var a,b:integer; c:longint; Function stepen(x,y:integer):longint; var i:integer; s:longint; begin s:=1; for i:=1 to y do s:=s*x; Stepen:=s; end; begin clrscr; writeln("введите значения a, b"); readln(a,b); C:=stepen(a,b); writeln("s=",s); readln; end.

Cлайд 17

Cлайд 18

Механизм передачи параметров в функции и процедуры Что будет напечатано процедурой, а что программой? Глобальные переменные Локальные переменные a b 3 3 -3 Адрес с a b c 48 Адрес с A:=b+3 B:=3*a C:=a+b Состояние С 24 5 8 Ответ

Cлайд 19


Подпрограммы в Turbo Pascal


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

Причины использования подпрограмм

  • упростить разработку больших программ методом декомпозиции (разделения) задачи на несколько подзадач;
  • большая наглядность программы;
  • экономия памяти.

Виды подпрограмм

процедуры

функции

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

Процедуры без параметров

  • Формат записи :

procedure ;

end ;

  • Все переменные, которые используются в процедурах без параметров, описываются в основной программе (в модуле Var).

Пример . Составить программу нахождения объёма цилиндра.

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.


); begin ; end ; " width="640"

Передача параметров в Turbo Pascal

  • 1. Передача параметров по значению
  • Параметры-значения переменные, описанные после имени процедуры в круглых скобках. Перед ними отсутствует служебное слово Var .
  • Формат записи :

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 .

Изменения фактических параметров происходит только внутри процедуры и не влияют на них вне данной процедуры.


; Var переменной:); begin ; end ; " width="640"

Передача параметров в Turbo Pascal

  • 2. Передача параметров по имени
  • Параметры-переменные переменные, описанные после имени процедуры в круглых скобках и перед которыми записано служебное слово Var .
  • Формат записи :

procedure (:

переменной; Var

переменной:);

end ;



b then min:= b; if min c then min:= c; end ; BEGIN 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); END . Пример. Даны две тройки чисел: a 1, b 1, c 1 и a 2, b 2, c 2. Найти значение суммы: S=min (a1, b1, c1) + min (a2, b2, c2) " width="640"

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 |