О с н о в н ы е п о н я т и я ал г о р и т м и ч е с к о г о я з ы к а

Автор: Пользователь скрыл имя, 27 Марта 2013 в 11:59, лекция

Краткое описание

СОСТАВ ЯЗЫКА. Обычный разговорный язык состоит из четырех основных
элементов: символов, слов, словосочетаний и предложений. Алгоритми-
ческий язык содержит подобные элементы, только слова называют элемен-
тарными конструкциями, словосочетания-выражениями, предложения-опера-
торами.

Файлы: 1 файл

Лекции по Паскалю.doc

— 405.00 Кб (Скачать)

цикле.

{}

   Первый  индекс  определяет  номер   строки,  второй - номер столбца.

Двумерные массивы хранятся в памяти ЭВМ  по строкам.

   Инициализация  массивов (присвоение начальных значений всем  компо-

нентам  массивов) осуществляется двумя способами.

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

мер:

 

   type Dim10= Array[1..10] of Real;

 

   const

    raM10: Dim10 = ( 0, 2.1, 4, 5.65, 6.1, 6.7, 7.2, 8, 8.7, 9.3 );

 

   При  инициализации двумерных массивов  значения компонент каждого из

входящих  в него одномерных массивов записывается в скобках:

 

   type Dim3x2= Array[1..3,1..2] of Integer;

 

   const

    iaM3x2: Dim3x2= ( (1, 2)

                      (3, 4)

                      (5, 6) );

 

   Второй способ инициализации  - использование разновидности процеду-

ры FillChar:

 

   FillChar( var V; NBytes: Word; B: Byte );

 

Эта процедура заполняет участок  памяти однобайтовым значением. Напри-

мер, для обнуления массива A[1..10] of Real можно записать:

 

   FillChar(A, 40, 0);

 

или

 

   FillChar(A, SizeOf(A), 0);

 

{}

24.   С Т Р О К И

 

   Особое место в языке  ПАСКАЛЬ занимают массивы символов.  Стандарт-

ный ПАСКАЛЬ допускает два способа  хранения символьных массивов в  па-

мяти ЭВМ: распакованный и упакованный. Распакованные массивы символов

хранятся в памяти ЭВМ по одному символу в машинном слове, упакованные

- по одному символу в байте.  При описании упакованного массива  симво-

лов используют служебное слово PACKED, например:

 

            var   MAS: Packed Array[1..20] of Char;

 

Описание распакованного массива  символов имеет вид:

 

            var   M: Array[1..20] of char;

 

   Для преобразования символьного  массива из  распакованной   формы  в

упакованную и наоборот,  из упакованной в распакованную,  в язык ПАС-

КАЛЬ введены две стандартные  функции Pack, UnPack.

   Упакованный  массив символов образует символьную  строку. Символьная

строка  может быть либо строковой константой, либо строковой  перемен-

ной. Строковая  константа, или строка, представляет собой совокупность

символов, заключенную  в апострофы.  Строка - это элементарная  конс-

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

ражений. Как  и числовые константы,  они могут  быть описаны в разделе

описания  констант.

   Строковые  переменные - это одномерные упакованные   массивы  симво-

лов, для  описания которых в TURBO PASCAL введен тип String.

   Например, если строка содержит до 30 символов,  ее тип будет опре-

делен как

 

    type   s= String[30];

 

   Длина строки не может  содержать более, чем 255 символов.

   В TURBO PASCAL определено понятие  строки переменной длины,  в  этом

случае ее описание задается как

 

    type  s= String;

 

   Тип String без указания  длины совместим со всеми типами  строк.

   Особенностью строковых  переменных является то, что к  ним можно об-

ращаться как к скалярным  переменным, так и к массивам. Во втором слу-

чае применяется конструкция "переменная с индексом", что обеспечивает

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

равна 1. Отдельный символ строки совместим  с типом Char.

   В памяти ЭВМ строка  занимает количество байтов, на  единицу большее

ее длины. Нулевой байт строки содержит ее длину.

   Для строк определены  операции присваивания, слияния (конкатенации)

и сравнения.

 

   Для сравнения строк применяются  все операции отношения.  Сравнение

строк происходит посимвольно,  начиная  с первого символа. Строки рав-

ны, если имеют одинаковую длину  и посимвольно эквивалентны.

   Строки могут быть элементами списка ввода - вывода, при этом запи-

сывается имя строки без индекса.

   При вводе  строковых  переменных количество вводимых  символов может

быть меньше,  чем длина строки. В этом случае вводимые символы разме-

щаются с начала строки, а оставшиеся байты заполняются пробелами. Ес-

ли количество  вводимых  символов  превышает  длину  строки,   лишние

символы отбрасываются.

   Инициализация строк может  производиться как с помощью  типизирован-

ных констант:

 

   const sName: String[9]= 'IBM PC/AT';

 

так и с использованием второй разновидности функции FillChar:

 

   FillChar( var V; NBytes: Word; C: Char );

 

например:

 

   FillChar(A, SizeOf(A), '0');

 

   Для работы  со  строками  в TURBO PASCAL включены процедуры и  функ-

ции, которые обеспечивают редактирование и преобразование строк.

{}

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.

   Использование составных  имен применяется не только  к именам  пере-

Информация о работе О с н о в н ы е п о н я т и я ал г о р и т м и ч е с к о г о я з ы к а