Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Лекции по программированию на Паскале

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.

{}
26.   О П Е Р А Т О Р Ы    В Ы Х О Д А

   Для завершения  работы программ,  процедур и функций без предвари-
тельного перехода по меткам к закрывающему end в TURBO PASCAL введены
процедуры Exit и Halt.
   Вызов Exit завершает работу своего программного блока  и  передает
управление вызывающей программе.  Если Exit выполняется в подпрограм-
ме, то выполнение этой подпрограммы прекратится, и далее будет выпол-
няться следующий за вызовом этой подпрограммы оператор. Если Exit вы-
полняется в основной программе,  выход из нее будет  эквивалентен  ее
нормальному завершению.
   Вызов процедуры Halt,  где бы она не находилась,  завершает работу
программы и передает управление операционной системе.
   Процедура Halt имеет структуру Halt(n),  где n - код возврата, ко-
торый может  быть проанализирован операционной системой с помощью ко-
манды IF ERRORLEVEL.  Значение n=0 соответствует нормальному заверше-
нию работы программы. Вызов процедуры Halt без параметра эквивалентен
вызову Halt(0).

27.   М О Д У Л И

   Модуль (UNIT) в TURBO PASCAL - это особым образом оформленная биб-
лиотека подпрограмм.  Модуль в отличие от программы не может быть за-
пущен на выполнение самостоятельно,  он может  только  участвовать  в
построении программ и других модулей.
   Модули позволяют создавать личные библиотеки процедур и функций  и
строить программы практически любого размера.
   Модуль в TURBO PASCAL представляет собой отдельно хранимую и неза-
висимо компилируемую программную единицу.
   В общем случае модуль -  это  совокупность  программных  ресурсов,
предназначенных для использования другими программами.  Под программ-
ными ресурсами понимаются любые элементы языка TURBO PASCAL: констан-
ты, типы,  переменные,  подпрограммы.  Модуль сам по себе не является
выполняемой программой, его элементы используются другими программны-
ми единицами.
   Все программные элементы модуля можно разбить на две части:
   - программные элементы,  предназначенные для использования другими
программами или модулями,  такие элементы называют видимыми вне моду-
ля;
   - программные элементы, необходимые только для работы самого моду-
ля, их называют невидимыми или скрытыми.
   В соответствии с этим модуль, кроме заголовка, содержит две основ-
ные части, называемые интерфейсом и реализацией.
   В общем случае модуль имеет следующую структуру:

   unit <имя модуля>;         {заголовок модуля}

    interface
     { описание видимых программных элементов модуля }

     { описание скрытых программных элементов модуля }

    begin
     { операторы инициализации элементов модуля }
    end.

   В частном случае модуль может не содержать части реализации и час-
ти инициализации, тогда структура модуля будет такой:

   unit <имя модуля>;         {заголовок модуля}

    interface
     { описание видимых программных элементов модуля }

    implementation

    end.

   Использование в модулях процедур и функций имеет свои особенности.
Заголовок подпрограммы содержит все сведения,  необходимые для ее вы-
зова: имя, перечень и тип параметров, тип результата для функций, эта
информация должна быть доступна для других программ и модулей. С дру-
гой стороны,   текст подпрограммы,  реализующий ее алгоритм,  другими
программами и модулями не может быть использован.  Поэтому  заголовок
процедур и функций помещают в интерфейсную часть модуля,  а текст - в
часть реализации.
   Интерфейсная часть  модуля  содержит только видимые (доступные для
других программ и модулей)  заголовки процедур и функций (без служеб-
ного слова   forward).  Полный текст процедуры или функции помещают в
часть реализации, причем заголовок может не содержать список формаль-
ных параметров.
   Исходный текст модуля должен быть откомпилирован с помощью  дирек-
тивы Make  подменю Compile и записан на диск.  Результатом компиляции
модуля является файл с расширением .TPU (Turbo Pascal Unit). Основное
имя модуля берется из заголовка модуля.
   Для подключения  модуля  к  программе необходимо указать его имя в
разделе описания модулей, например:

           uses  CRT, Graph;

   В том случае,  если имена переменных в интерфейсной части модуля и
в программе,   использующей этот модуль,  совпадают,  обращение будет
происходить к переменной,  описанной в программе. Для обращения к пе-
ременной, описанной  в  модуле,   необходимо применить составное имя,
состоящее из имени модуля и имени переменной, разделенных точкой.
   Например, пусть имеется модуль, в котором описана переменная К:

   unit M;
    interface
     var K: Integer;
    implementation
   .................
    end.

   Пусть программа, использующая этот модуль, также содержит перемен-
ную К:

   Program P;
    uses M;
    var K: Char;
    begin
   .............
    end.

   Для того, чтобы в программе P иметь доступ к переменной K из моду-
ля M, необходимо задать составное имя M.K.
   Использование составных имен применяется не только к именам  пере-
менных, а ко всем именам, описанным в интерфейсной части модуля.
   Рекурсивное использование модулей запрещено.
   Если в модуле имеется раздел инициализации,  то операторы из этого
раздела будут выполнены перед началом выполнения программы, в которой
используется этот модуль.

28.   М Н О Ж Е С Т В А

   Понятие множества в языке ПАСКАЛЬ основывается  на  математическом
представлении о  множествах:  это ограниченная совокупность различных
элементов. Для построения конкретного множественного типа использует-
ся перечисляемый или интервальный тип данных.  Тип элементов, состав-
ляющих множество, называется базовым типом.
   Множественный тип  описывается  с  помощью  служебных слов Set of,
например:

         type  M= Set of B;

Здесь М - множественный тип, В - базовый тип.
   Пример описания переменной множественного типа:

         type
             M= Set of 'A'..'D';
         var
            MS: M;

   Принадлежность переменных к множественному типу может быть опреде-
лена прямо в разделе описания переменных:

         var
            C: Set of 0..7;

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

         ['A', 'C']    [0, 2, 7]    [3, 7, 11..14].

Константа вида

         [ ]

означает пустое подмножество.
   Множество включает в себя набор элементов базового типа, все подм-
ножества данного множества, а также пустое подмножество. Если базовый
тип, на котором строится множество, имеет К элементов, то число подм-
ножеств, входящих в это множество, равно 2 в степени К. Пусть имеется
переменная Р интервального типа:

         var P: 1..3;

   Эта переменная может принимать три различных значения  -  либо  1,
либо 2, либо 3. Переменная Т множественного типа

         var T: Set of 1..3;

может принимать восемь различных значений:

         [ ]        [1,2]
         [1]        [1,3]
         [2]        [2,3]
         [3]        [1,2,3]

   Порядок перечисления элементов базового типа в константах  безраз-
личен.
   Значение переменной  множественного  типа  может быть задано конс-
трукцией вида [T], где T - переменная базового типа.
   К переменным и константам множественного типа  применимы  операции
присваивания(:=), объединения(+), пересечения(*) и вычитания(-):

         ['A','B'] + ['A','D']      даст  ['A','B','D']
         ['A'] * ['A','B','C']      даст  ['A']
         ['A','B','C'] - ['A','B']  даст  ['C'].

   Результат выполнения  этих  операций  есть величина множественного
типа.
   К множественным величинам применимы операции: тождественность (=),
нетождественность (<>), содержится  в (<=), содержит (>=).  Результат
выполнения этих операций имеет логический тип, например:

         ['A','B'] = ['A','C']  даст FALSE
         ['A','B'] <> ['A','C'] даст TRUE
         ['B'] <= ['B','C']     даст TRUE
         ['C','D'] >= ['A']     даст FALSE.

   Кроме этих операций для работы с величинами множественного типа  в
языке ПАСКАЛЬ используется операция

         in

проверяющая  принадлежность  элемента  базового типа,  стоящего слева
от знака операции,  множеству, стоящему справа от знака операции. Ре-
зультат выполнения этой операции - булевский.  Операция проверки при-
надлежности элемента множеству часто используется вместо операций от-
ношения, например:

         A in ['A', 'B'] даст  TRUE,
         2 in [1, 3, 6]  даст  FALSE.
   
   При использовании  в   программах   данных   множественного   типа
выполнение операций происходит над битовыми строками данных.  Каждому
значению множественного типа в памяти ЭВМ соответствует один двоичный
разряд. Например, множество

         ['A','B','C','D']

представлено в памяти ЭВМ битовой строкой

         1 1 1 1.

Подмножества этого множества представлены строками:

         ['A','B','D']   1 1 0 1
         ['B','C']       0 1 1 0
         ['D']           0 0 0 1

   Величины  множественного типа не могут быть элементами списка вво-
да - вывода.
   В каждой  конкретной  реализации транслятора с языка ПАСКАЛЬ коли-
чество элементов базового типа,  на котором строится множество, огра-
ничено. В  TURBO PASCAL количество базовых элементов не должно превы-
шать 256.
   Инициализация величин  множественного  типа производится с помощью
типизированных констант:
   
   const  seLit: Set of 'A'..'D'= [];
   
   Проиллюстрируем применение  данных множественного типа на примере.
   Пример. Составить программу, которая вырабатывает и выводит на эк-
ран дисплея наборы случайных чисел для игры в "Спортлото 5 из 36".
   Для заполнения каждой карточки спортлото необходимо получить набор
из пяти псевдослучайных чисел. К этим числам предъявляются два требо-
вания:
    -числа должны находиться в диапазоне 1..36;
    -числа не должны повторяться.
   
    Program Lotto;
     var
         nb, k: Set of 1..36;
         kol, l, i, n: Integer;
     begin
        Randomize;
        WriteLn('ВВЕДИ kol');
        ReadLn(kol);
        nb:=[1..36];
        for i:=1 to kol do
          begin
           k:=[];
           for l:=1 to 5 do
             begin
               repeat
                 n:=Random(36)
               until (n in nb) and not (n in k);
               k:=k+[n];
               Write(n:4)
             end;
           WriteLn
          end
         end.

    
29.   З А П И С И

   Запись представляет собой совокупность ограниченного  числа  логи-
чески связанных компонент,  принадлежащих к разным типам.  Компоненты
записи называются полями, каждое из которых определяется именем. Поле
записи содержит имя поля, вслед за которым через двоеточие указывает-
ся тип этого поля. Поля записи могут относиться к любому типу, допус-
тимому в языке Паскаль, за исключением файлового типа.
   Описание записи   в   языке   ПАСКАЛЬ   осуществляется  с  помощью
служебного слова RECORD,  вслед за которым описываются компоненты за-
писи. Завершается описание записи служебным словом END.
   Например, записная книжка содержит фамилии,  инициалы и номера те-
лефона, поэтому отдельную строку в записной книжке удобно представить
в виде следующей записи:
   
         type   Row=Record
                     FIO: String[20];
                     TEL: String[7]
                    end;
         var    str: Row;

   Описание записей возможно и без использования имени типа,   напри-
мер:
         var  str: Record
                    FIO: String[20];
                    TEL: String[7]
                   end;

   Обращение к записи в целом допускается только в операторах присва-
ивания, где  слева и справа от знака присваивания используются  имена
записей одинакового типа. Во всех остальных случаях оперируют отдель-
ными полями записей.  Чтобы обратиться к отдельной компоненте записи,
необходимо задать  имя записи и через точку указать имя нужного поля,
например:
   
         str.FIO,   str.TEL

   Такое имя называется составным. Компонентой записи может быть так-
же запись,    в таком случае составное имя будет содержать не два,  а
большее количество имен.
   Обращение к  компонентам записей можно упростить,  если воспользо-
ваться оператором присоединения with.
   Он позволяет заменить составные имена,  характеризующие каждое по-
ле, просто на имена полей, а имя записи определить в операторе присо-
единения:
   
         with M do OP;

   Здесь М  -  имя  записи,   ОР  - оператор,  простой или составной.
Оператор ОР представляет собой область действия оператора присоедине-
ния, в пределах которой можно не использовать составные имена.
   Иногда содержимое отдельной записи зависит от значения  одного  из
ее полей.  В языке ПАСКАЛЬ допускается описание записи,  состоящей из
общей и вариантной частей.  Вариантная часть задается с помощью конс-
трукции
         case P of,

где Р - имя  поля из общей  части  записи. Возможные значения, прини-
маемые этим полем,  перечисляются так же, как и в операторе варианта.
Однако вместо указания выполняемого действия, как это делается в опе-
раторе варианта,    указываются поля варианта,  заключенные в круглые
скобки. Описание вариантной части завершается служебным словом end.
   Тип поля Р можно указать в заголовке вариантной части, например:
   
         case P: Integer of
   
   Инициализация записей  осуществляется  с  помощью   типизированных
констант:
   
   type
     RecType= Record
               x,y: Word;
               ch: Char;
               dim: Array[1..3] of Byte
              end;
   
   const
     Rec: RecType= ( x: 127; y: 255;
                     ch: 'A';
                     dim: (2, 4, 8) );

{}

Часть 1 | Часть 2 | Часть 3 | Часть 4 | Часть 5 | Часть 6

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог