Программирование

Автор работы: Пользователь скрыл имя, 11 Февраля 2013 в 13:32, лекция

Описание

Лекции по дисциплине "Информатика"

Работа состоит из  1 файл

Лекции по программированию.doc

— 312.50 Кб (Скачать документ)

может   быть определен как интервальный или  ограниченный

тип. Отрезок  задается диапазоном от  минимального  до  максимального

значения констант, разделенных двумя точками. В  качестве констант мо-

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

логическому или  перечисляемому типам. Скалярный тип, на котором стро-

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

   Минимальное  и  максимальное  значения констант  называются нижней и

верхней границами  отрезка,  определяющего интервальный  тип.   Нижняя

граница должна быть меньше верхней.

{}

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

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

допустимы для  соответствующего базового типа.

   При использовании  в программах интервальных типов  данных может  осущест-

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

границы, введенные для  этих переменных в описании интервального  типа.

23.   М А С С И  В Ы

 

   Массивы представляют  собой ограниченную упорядоченную  совокупность

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

массива. Тип   компонент  может быть любым,  принятым в  языке ПАСКАЛЬ,

кроме файлового типа. Тип  компонент называется базовым типом.

   Вся совокупность  компонент определяется одним  именем.  Для обозна-

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

менной с индексом или  с индексами:

 

          A[5]     S[k+1]     B[3,5].

 

   В качестве индекса  может быть использовано выражение.  Тип индексов

может быть только интервальным или перечисляемым.   Действительный  и

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

зовым является целый тип,  могут принимать отрицательные,  нулевое  и

положительные значения.{}

  В операторной  части

программы один массив может  быть присвоен другому, если их типы иден-

тичны, например:

 

         R1:=Z.

 

   Для ввода   или вывода массива в список  ввода или вывода помещается

переменная  с индексом,  а операторы ввода  или  вывода  выполняются  в

цикле.

{}

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

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

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

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

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

мер:

 

   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

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

Информация о работе Программирование