Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Раздел описания переменных




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

Раздел описания переменных начинается зарезервированным словом var / от variable - переменная/. Вслед за ним идет список, записи которого имеют следующую структуру: сначала через запятую перечисляется один или несколько идентификаторов переменных, затем ставится двоеточие и после двоеточия указывается тип перечисленных переменных. При обработке описания переменной транслятор создает новую переменную и присваивает ей определенный идентификатор.

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

Пример:

var

Result, Intermediate, SubTotal: Real;

I, J, X, Y: Integer;

Accepted, Valid: Boolean;

Period: Day;

Buffer: array[0..127] of Byte;

 

 

Раздел описания процедур и функций

В практике программирования часто возникает необходимость вы­полнения одной и той же последовательности операторов в различных частях программы. Наиболее простым способом реализации программы является запись последовательности операторов в тех участках прог­раммы, где это необходимо. Однако такой прием зачастую оказываетcя нерациональным. Целесообразно оформить эти операторы в виде подпрограммы - процедуры или подпрограммы - функции. Процедуры и функции позволяют записать повторяющиеся участки один раз, а в нужных местах программы приводить лишь обращение к ним. Использование процедур позволяет сократить объем, улучшить структуру программы и уменьшить ве­роятность наличия ошибок. Основные стандартные процедуры и функции приведены в приложении 1.

Подпрограмма - функция

Подпрограммы - функции описываются вслед за разделом описания глобальных переменных и располагаются перед группой операторов основной программы. Функция состоит из заголовка, описания локальных переменных и тела (группы операторов). Общий вид подпрограммы - функции таков:

Function имя (а1;...;аn): тип результата;

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

 


Группа операторов
Begin

 

 

End;,

где а1;...;an - список формальных параметров с указанием типа.

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

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

Пример А. Оформить в виде подпрограммы - функции алгоритм возведения в целочисленную степень у=хn.

Function rez1 (n:integer; x:real): real;

var i:integer;

begin

rez1:=1;

for i:=1 to n do

rez1:=rez1*x;

end;

 

Пример Б. Оформить в виде подпрограммы - функции алгоритм возведения вещественного числа в вещественную степень y=ax.

Function rez2(x:real; a:real): real;

begin

Rez2:=exp(x*ln(a));

end;

 

В примере Б подстепенное выражение не может принимать отрицательное значение или быть равным нулю. Впримере А может быть и отрицательным.

Переменные n, x, i примера A определены только в теле подпрограммы -функции. Вне тела функции они не определены, т.е. не существуют. Аналогичными пе­ременными являются параметры а, х впримере Б.

Обращение к подпрограмме-функции осуществляется по имени функ­ции с указанием в скобках вместо формальных параметров фактических. Причем имена формальных и фактических параметров могут и не совпа­дать, но их последовательность, количество и тип должны обязательно соответствовать друг другу. Так, обращение к функции rez2 примера Б может быть таким:

у:=а*rez2(n,х);,

что соответствует решению задачи у=а*хn. Здесь переменная n обяза­тельно должна быть описана как переменная вещественного типа.

В примере Б переменные х и а являются формальными параметрами - переменные, формально присутствующие в подпрограмме и опреде­ляющие тип и место подстановки фактических значений, передаваемых из вызывающей программы. Конкретные (фактические) значения передают фактические параметры при обращении в вызывающей программе. Так, при рассмотренном выше обращении к функции rez2 фактическими параметрами являются переменные n и x.

Описание функции служит для определения той части программы, которая выполняет определенные вычисления и передает полученный результат. Функция выполняется сразу, как только имя функции встречается как часть предложения программы.

 

Подпрограмма - процедура

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

Procedure имя (а1;...;аn);

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

 


Группа операторов
Begin

 

 

End;,

где a1;…an – список формальных параметров с указанием типа. Причем при указании типа параметра обязательно выделяют параметры, которые в ходе выполнения программы не меняют своего значения и которые могут его изменить. Если параметр меняет свое значение (обычно это результат), то перед ним ставится служебное слово Var.

Пример. Составить подпрограмму умножения двух квадратных матриц С=А*В m-го порядка.

 

Type Matr = array [1..10, 1..10] of real;

Var A, B, C: Matr;

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Procedure MultMat (n: integer; Mat1, Mat2:Matr; Var Mat3:Matr);

var i.k,j: integer;

begin

for 1:=1 to n do

for j:=1 to n do begin

Mat3[i,j]:=0.0;

for k:=l to n do

Mat3[i,j]:=Mat3[i,j]+Mat1[i.k]*Маt2[k,j];

end;

end;

 

Здесь массивы Mat1 и Mat2 в ходе выполнения процедуры не меняют своих значений, поэтому для них указывается только тип. Массив Mat3 формируется в процедуре, соответственно при описании его типа перед именем ставится ключевое слово Var. Переменные i, j, k задействованы только внутри процедуры, поэтому они описаны как локальные переменные.

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

MultMat (m. A, B, С);

Результат перемножения двух матриц располагается в массиве С.

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

 

Раздел операторов

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

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

 

Оператор присвоения

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

Оператор присваивания можно использовать для присваивания значений

переменной любого типа, кроме файлового. Единственным условием является,

чтобы переменная /или функция/ и выражение имели один и тот же тип. Исключение составляет случай, когда переменная имеет тип real, тогда выражение может быть и действительного и целочисленного типа.

 

Пример:

a:= b;

Здесь a – простая или индексная переменная; b – арифметическое или логическое выражение. Выполнение оператора состоит в вычислении выражения, находящегося справа от знака “:=”, и присвоения полученного значения левой части оператора с учетом типа находящейся там переменной. Примеры:

B:= a/z;

I:= i+1;

angle:= angle * p1;

AccessOK:= False;

SpherVol:= 4 * p1 * R * R;

 

Ввод – вывод данных

Ввод данных осуществляется бесформатными операторами ввода:

Read (a1,…,an); Readln (a1,…,an);,

где а1,…,аn – список переменных.

Ввод данных осуществляется с клавиатуры, при этом численные данные отделяются друг от друга пробелами, кроме данных символьного и строкового типов.

Ввод значений элементов массива осуществляется как перечислением элементов в списке, так и с использованием операторов цикла, например:

 

 

Read (a[1, 1], a[1, 2], a[1, 3],…)

или

for i:=1 to n do

 

 

for j:=1 to m do

read (a[i, j]);.

 

При большой размерности массива ввод данных с клавиатуры становится трудоемкой операцией. В этом случае значения элементов массива удобнее задавать в разделе описания констант.

Пример: ввести значения элементов вектора Х и матрицы А, которые соответственно равны:

4, 5, 10, 8, 0

7, 9, 25, 0, 1

Х = (5, 1.2, 0.1, 7, 8.6) А = 3, 0, 6, 14, 5

0, 0, 0, 99, 12

Значения элементов могут быть определены путем их инициализации:

 

Const X: array [1..5] of real = (5.0, 1.2, 0.1, 7.0, 8.6);

A: array [1..4, 1..5] of integer = ((4, 5, 10, 8, 0),

(7, 9, 25, 0, 1),

(3, 0, 6, 14, 5),

(0, 0, 0, 99, 12));.

 

Вывод данных на дисплей осуществляется операторами write и writeln, например:

write (‘x=’, x:3, ‘ y=’, y:8:3);

 

На экран дисплея выводятся: значения переменной целого типа X, для которой выделяется 3 позиции, переменной Y вещественного типа, занимает 8 позиций. При атом под дробную часть переменной Y отводится 3 позиции; у переменной Х выводится только целая часть. Перед числовыми значениями переменных выводятся поясняющие их информации, состоящие из имен переменных.

Таким образом, как следует из примера, формат вывода переменных целого типа имеет вид , переменных вещественного типа :а:р, где а - общее количество позиций, отводимых под число, из них р - по­зиций отводится под дробную часть. В общее количество позиций а включаются позиции для знака числа и десятичное точки. Разделителя­ми в формате является символ ":". Если в операторе вывода формат не указан, то вывод будет осуществляться в нормализованной форме пред­ставления вещественного числа. Выводимый текст поясняющей информа­ции заключается в апострофы.

При использовании оператора write переход на следующую строку произойдет только в случае заполнения текущей строки. Если требует­ся организовать переход от неполной текущей строки к началу следую­щей строки, используют оператор writeln. Например, при выполнении операторов вывода:

Write (‘ Кафедра вычислительной техники и’);

Write (‘ инженерной кибернетики’);

Получим на экране:

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...