Рефераты. Основные понятия алгоритмического языка p> Перечисляемый тип описывается в разделе описания типов, который начинается со служебного слова type, например:

type

Rainbow = (RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET);

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

Описание переменных, принадлежащих к скалярным типам, которые объ- явлены в разделе описания типов, производится с помощью имен типов.

Например:

type Traffic_Light= (RED, YELLOW, GREEN); var Section: Traffic_Light;

Это означает, что переменная Section может принимать значения RED,

YELLOW или GREEN.

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

var Section: (RED, YELLOW, GREEN);

При этом имена типов отсутствуют, а переменные определяются сово- купностью значений, составляющих данный перечисляемый тип.

К переменным перечисляемого типа может быть применим оператор присваивания:

Section:= YELLOW;

Упорядоченная последовательность значений, составляющих перечисля- емый тип, автоматически нумеруется, начиная с нуля и далее через еди- ницу. Отсюда следует, что к перечисляемым переменным и константам мо- гут быть применены операции отношения и стандартные функции Pred,

Succ, Ord.

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

22. И Н Т Е Р В А Л Ь Н Ы Й Т И П Д А Н Н Ы Х

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

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

{}

Над переменными, относящимися к интервальному типу, могут выпол- няться все операции и применяться все стандартные функции, которые допустимы для соответствующего базового типа.

При использовании в программах интервальных типов данных может осущест- вляться контроль за тем, чтобы значения переменных не выходили за границы, введенные для этих переменных в описании интервального типа.

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;

Страницы: 1, 2, 3, 4, 5, 6, 7



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.