Новые книги

Расширьте мощность и гибкость Блендера с помощью Питона: высокоуровневого, легкого для изучения скриптового языка
В курс включены сведения, необходимые специалистам в области информационной безопасности.Рассматривается технология инфраструктур открытых ключей (Public Key Infrastructure – PKI), которая позволяет использовать сервисы шифрования и цифровой подписи согласованно с широким кругом приложений, функционирующих в среде открытых ключей. Технология PKI считается единственной, позволяющей применять методы подтверждения цифровой идентичности при работе в открытых сетях.

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

25. Процедуры и функции

25. Процедуры и функции

   Алгоритм решения  задачи проектируется путем декомпозиции всей за-

дачи в отдельные подзадачи. Обычно подзадачи реализуются в виде подп-

рограмм.

   Подпрограмма - это последовательность операторов,  которые опреде-

лены и   записаны  только  в  одном месте программы,  однако их можно

вызвать для выполнения из одной или нескольких точек программы.  Каж-

дая подпрограмма определяется уникальным именем.  В языке ПАСКАЛЬ су-

ществуют два типа подпрограмм - процедуры и функции.

   Процедура и  функция - это именованная последовательность описаний

и операторов.  При использовании процедур или функций ПАСКАЛЬ - прог-

рамма должна содержать текст процедуры или функции и обращение к про-

цедуре или функции.  Тексты процедур и функций  помещаются  в  раздел

описаний процедур и функций.

{}

   Процедура может содержать такие - же разделы описаний,  что и ПАС-

КАЛЬ - программа,  а именно:  разделы описания модулей,  меток, конс-

тант, типов, переменных, процедур и функций.

{}

   ПЕРЕДАЧА ИМЕН ПРОЦЕДУР И ФУНКЦИЙ В КАЧЕСТВЕ ПАРАМЕТРОВ.  Во многих

задачах, особенно в задачах вычислительной математики, необходимо пе-

редавать имена процедур и функций в качестве параметров.  Для этого в

TURBO PASCAL   введен новый тип данных - процедурный или функциональ-

ный, в зависимости от того, что описывается.

   Описание процедурных и функциональных типов производится в разделе

описания типов:

   type

         FuncType = Function(z: Real): Real;

         ProcType = Procedure (a,b: Real; var x,y: Real);

 

   Функциональный и процедурный тип определяется как заголовок проце-

дуры и функции со списком формальных параметров,  но без имени. Можно

определить функциональный или процедурный тип без параметров,  напри-

мер:

   type

         Proc = Procedure;

 

   После объявления процедурного или функционального типа  его  можно

использовать для  описания  формальных  параметров  - имен процедур и

функций.

   Кроме того, необходимо написать те реальные процедуры или функции,

имена которых будут передаваться как фактические параметры.  Эти про-

цедуры и  функции должны компилироваться в режиме дальней адресации с

ключом {$F+}.

 

 

   Пример. Составить программу для вычисления определенного интеграла

                tk

                       2t

             I= S--------------- dt

                   sqrt(1-sin2t)

                tn

по методу Симпсона. Вычисление  подинтегральной функции реализовать с

помощью функции, имя которой передается как параметр.  Значение опре-

деленного интеграла по формуле Симпсона вычисляется по формуле:

 

      ISimps=2*h/3*(0.5*F(A)+2*F(A+h)+F(A+2*h)+2*F(A+3*h)+...

                                                +2*F(B-h)+0.5*F(B))

 

где A и B - нижняя и верхняя границы интервала интегрирования,

    N - число разбиений интервала интегрирования,

    h=(B-A)/N, причем N должно быть четным.

 

Program INTEGRAL;

 type

    Func= function(x: Real): Real;

 var

    I,TN,TK:Real;

    N:Integer;

{$F+}

 Function Q(t: Real): Real;

   begin

     Q:=2*t/Sqrt(1-Sin(2*t));

   end;

{$F-}

 Procedure Simps(F:Func; a,b:Real; N:Integer; var INT:Real);

   var

      sum, h: Real;

      j:Integer;

   begin

     if Odd(N) then N:=N+1;

     h:=(b-a)/N;

     sum:=0.5*(F(a)+F(b));

     for j:=1 to N-1 do

       sum:=sum+(j mod 2+1)*F(a+j*h);

       INT:=2*h*sum/3

   end;

 begin

   WriteLn(' ВВЕДИ TN,TK,N');

   Read(TN,TK,N);

   Simps(Q,TN,TK,N,I);

   WriteLn('I=',I:8:3)

 end.