Процедуры и функции
Содержание Глобальные и локальные переменные Формальные и фактические параметры Механизм передачи параметров в функции и процедуры Процедуры Функции Рекурсия
Подпрограммы: глобальные и локальные переменные Все подпрограммы должны быть описаны в разделе описаний. Каждая подпрограмма должна иметь имя. Информация между основной программой и подпрограммами передается глобальными параметрами (переменными), действующими в любой части программы, имеющими имя, описанное в основной программе.Внутри подпрограммы могут быть использованы локальные параметры (переменные), – их имена и значения имеют смысл только в пределах границ данной подпрограммы и недоступны вызывающей программе
Формальные и фактические параметры В описании подпрограмм параметры обозначены только именами, поэтому их называют формальными. До вызова подпрограммы они не имеют значений. Они лишь резервируют место для фактических параметров, фиксируя их число и тип данных.Типы фактических параметров:Параметры-значения показывают, какое значение надо присвоить определенному параметру подпрограммы. После завершения подпрограммы они принимают прежние значения, даже если были изменены в подпрограмме.Параметры-переменные в подпрограмме становятся на место формальных, могут в ходе исполнения подпрограммы изменить свое значение и сохраняют изменения при выходе из подпрограммы (перед параметрами-переменными стоит ключевое слово Var).
ПроцедурыРешение задач
Описание процедуры Program Pr1;Const …Type … Var … Procedure <имя процедуры>(<список формальных параметров>); Описательная часть Begin Тело процедуры End;Begin…<имя процедуры>(<список фактических параметров>);…end. При вызове процедуры формальные параметры заменяются фактическими.
Процедура вычисления суммы двух чисел program pr1;Uses crt;Var a,b,s:real;procedure summa(x,y:real;var z:real);beginz:=x+y;end;beginclrscr;writeln('введите a,b'); readln(a,b);summa(a,b,s);writeln(' сумма чисел ',a:3:1,' и ',b:3:1,' = ',s:3:1);readln; end. a,b,s – глобальные переменные x,y,z – формальные параметры, локальные переменные a,b,s – фактические параметры
Программа перестановки значений переменных a,b,c в порядке возрастания(a<b<c) program perest;var a,b,c: integer;procedure swap(var x,y: integer);var t: integer;begint:=x; x:=y; y:=t;end;beginwriteln(‘Введите три числа ');readln(a,b,c);if a>b then swap(a,b);if b>c then swap(b,c);if a>с then swap(a,с);writeln(a,' ',b,' ',c);readln; end. Найдите ошибку в этом решении. Для этого составьте полную систему тестов. Измените программу так, чтобы аналогичная задача решалась для четырех переменных
Программа перестановки значений переменных a,b,c в порядке возрастания(a<b<c) program perest;var a,b,c: integer;procedure swap(var x,y: integer);var t: integer;begint:=x; x:=y; y:=t;end;beginwriteln(‘Введите три числа ');readln(a,b,c);if a>b then swap(a,b);if b>c then swap(b,c);if a>с then swap(a,с);writeln(a,' ',b,' ',c);readln; end.
Вычислить значение выражения 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;beginclrscr;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
Ввод вывод элементов одномерного массива Задание: Оформить ввод элементов одномерного массива с помощью генератора случайных чисел (диапазон значений от -10 до 20) и вывод элементов как процедуры. Функция Random(X) формирует случайное число от 0 до Х целого или вещественного типа (перед обращением к функции ее необходимо инициализировать, использовав процедуру Randomize). Если параметр Х не задан, результат будет типа Real в пределах от 0.0 до 1.0. Для получения массива целых случайных чисел из диапазона [A,B] random(B-A+1)+A Для А=-10 В=20 random(20-(-10)+1)+(-10)
Ввод и вывод элементов одномерного массива
ФункцииРешение задач
Описание функции Функции предназначены для того, чтобы вычислять только одно значение,1. поэтому ее первое отличие состоит в том, что процедура может иметь новые значения у нескольких параметров, а функция только одно (оно и будет результатом).2. Второе отличие заключается в заголовке функции. Он состоит из слова FUNCTION, за которым идет имя функции, затем в круглых скобках идет список формальных параметров, после чего через двоеточие записывается тип результата функции. 3. В теле функции обязательно должен быть хотя бы один оператор присвоения, где в левой части стоит имя функции, а в правой – ее значение. Function <имя>(<список формальных параметров>):<тип результата> Описательная часть Begin Тело функции <имя>:=<значение>; End;
Вычислить значение выражения 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;beginclrscr;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.
Составить программу, которая будет находить а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; beginclrscr;writeln('введите значения a, b'); readln(a,b);C:=stepen(a,b);writeln('s=',s);readln;end. Составьте программу, заменив функцию процедурой
Механизм передачи параметров в функции и процедурыРазбор заданий
Механизм передачи параметров в функции и процедуры Что будет напечатано процедурой, а что программой?
Механизм передачи параметров в функции и процедуры Что будет напечатано функцией, а что программой?
Механизм передачи параметров в функции и процедуры Определите результат выполнения предложенной программы.
Механизм передачи параметров в функции и процедуры Определите результат выполнения предложенной программы.
Механизм передачи параметров в функции и процедуры Определите результат выполнения предложенной программы.
РекурсияПримеры задач
Понятие рекурсии Подпрограммы в Turbo Pascal могут обращаться к самим себе. Такое обращение называется рекурсией. Объект, который частично определяется через самого себя, называется рекурсивным. Рекурсивные определения как мощный аналитический аппарат используются во многих областях науки, особенно в математике. Для того, чтобы не было бесконечного обращения подпрограммы к самой себе, требуется наличие некоторого условия (условного оператора) в тексте программы, по достижении которого дальнейшее обращение не происходит. Таким образом, рекурсивное программирование может включаться только в одну из ветвей условного оператора, присутствующего в подпрограмме. Подпрограмма <имя>(<список формальных параметров>): Описательная часть Begin … if <условие> then < обращение к подпрограмме <имя>> else <операторы>; …End; if <условие> then <операторы> else < обращение к подпрограмме <имя>>;
Вычисление факториала натурального числа program fn2;Uses crt;Var n:integer; a:longint;;function factorial(n:integer) :longint; begin if n=1 then factorial:=1 else factorial:=n*factorial(n-1); end;beginclrscr;writeln('введите значение n:'); readln(n); a:=factorial(n); writeln('значение факториала ‘,n,‘!=‘,a:8);readln; end.