Функции. Функция- это подпрограмма, которая вычисляет и возвращает некоторое значение. Функции описываются в разделе описаний следующим образом: Function f (x1; x2;…xn):tr; D;Begin…..f:=e;End; Функции вызываются из раздела операторов программы следующим образом: f(a1,a2,…an), где a1,..,an – фактические параметры. Пример : writeln(f(5,6,d)); r:=f(a,b,c); Заголовок функции Имя функции Формальные параметры Тип результата функции Раздел описаний функции Раздел операторов Имени функции присваивают результат
Формальные и фактические параметры. Формальные параметры в функции описываются следующим образом: v1,v2,..,vk:tp;, где v1,v2,..,vk – имена переменных; tp – тип переменных. Фактическими параметрами могут быть выражения, значения которых передаются функции. Формальные параметры получают значения от фактических параметров. Фактические и формальные параметры должны соответствовать друг другу по количеству, порядку следования и типу. Пример: Function f(a:real; b:integer; c:char):boolean; Корректными являются вызовы: f(4,5,a) f(4,5,a) f(5.7,10+2,1) f(5.7,10+2,1) Некорректными являются вызовы: f(4,4.6, a) f(4,4.6, a) f(a,4,c) f(a,4,c) f(4,4, a1) f(4,4, a1)
Решение задач. Задача 1. Написать функцию и программу, которая вычисляет среднее арифметическое целых чисел i,j,k,m. Program p1; Var i1,j1,k1,m1:integer; Var i1,j1,k1,m1:integer; Function sr(i,j,k,m:integer):real; Function sr(i,j,k,m:integer):real; Begin Begin sr:=(i+j+k+m)/4; sr:=(i+j+k+m)/4; End; End;Begin Writeln(Введите 4 целых числа); Readln(i1,j1,k1,m1); Writeln(среднее чисел=,sr(i1,j1,k1,m1)); end.
Задача 2. Написать программу и функцию, которая находит количество появлений заданного символа в строке символов. Program p1; Var s:string; c:char; Var s:string; c:char; Function kl(s1:string;c1:char):integer; Function kl(s1:string;c1:char):integer; Var k,i:integer; Var k,i:integer; Begin Begin k:=0; k:=0; For i:=1 to length(s1) do if s1[i]=c1 then k:=k+1; For i:=1 to length(s1) do if s1[i]=c1 then k:=k+1; kl:=k; kl:=k; End; End; Begin writeln(введите строку); readln(s); Begin writeln(введите строку); readln(s); Writeln(введите символ); readln(c); Writeln(введите символ); readln(c); Writeln(количество символов, c,в строке,s, =,kl(s,c)); Writeln(количество символов, c,в строке,s, =,kl(s,c));end.
Задача 3. Даны описания : Const nmax=100; Type vector=array[1..nmax] of real; Написать функцию и программу, которая находит сумму элементов массива с чётными индексами. Program p3; Const nmax=100; Type vector=array[1..nmax] of real; Var v:vector; i,n:integer; Function sum(v1:vector;n1:integer):real; Function sum(v1:vector;n1:integer):real; Var i1:integer; s:real; Var i1:integer; s:real; begin begin s:=0; s:=0; For i1:=1 to n1 do if i1 mod 2=0 then s:=s+v1[i1]; For i1:=1 to n1 do if i1 mod 2=0 then s:=s+v1[i1]; sum:=s; sum:=s; End; End; Begin writeln( введите количество элементов массива); readln(n); readln(n); writeln( введите элементы массива); writeln( введите элементы массива); For i:=1 to n do readln(v[i]); For i:=1 to n do readln(v[i]); Writeln(Сумма элементов с нечётными индексами=,sum(v,n)); end.
Задача 4. Даны типы данных: type punct=record type punct=record x,y:real; x,y:real; end; end; Dreptunghi=record Dreptunghi=record a,b,c,d:punct; a,b,c,d:punct; end; end; Написать функцию и программу, которая найдёт площадь прямоугольника. Program p1; type punct=record x,y:real; x,y:real; end; end; Dreptunghi=record Dreptunghi=record a,b,c,d:punct; a,b,c,d:punct; end; end; Var z:dreptunghi; Function sq(z1:dreptunghi):real; begin begin sq:=sqrt(sqr(z1.a.x-z1.b.x)+sqr(z1.a.y-z1.b.y))* sqrt(sqr(z1.b.x- z1.c.x)+sqr(z1.b.y-z1.c.y)); sq:=sqrt(sqr(z1.a.x-z1.b.x)+sqr(z1.a.y-z1.b.y))* sqrt(sqr(z1.b.x- z1.c.x)+sqr(z1.b.y-z1.c.y));End; Begin writeln( введите координаты точки А) ; readln(z.a.x,z.a.y); writeln( введите координаты точки B) ; readln(z.b.x,z.b.y); writeln( введите координаты точки B) ; readln(z.b.x,z.b.y); writeln( введите координаты точки C) ; readln(z.c.x,z.c.y); writeln( введите координаты точки C) ; readln(z.c.x,z.c.y); writeln( введите координаты точки D) ; readln(z.d.x,z.d.y); writeln( введите координаты точки D) ; readln(z.d.x,z.d.y); Writeln(площадь прямоугольника=,sq(z)); end.