Описание подпрограммы-процедуры



Procedure Имя (Список формальных параметров); {Заголовок процедуры} Label Const                     {раздел описаний локальных (внутренних) данных} Typе Var Procedure Function Begin     {операторы процедуры} . . . End;                                                                                      


Описание подпрограммы-функции

Function Имя (Список формальных параметров):тип результата; {Заголовок функции} Label Const                     {раздел описаний локальных ( внутренних) данных} Type Var Procedure Function Begin     {операторы функции}      … Имя:= выражение;    End;

 


      

где

Procedure , Functionслужебные слова;

Имя имя пользовательской процедуры/функции;

Список формальных параметров – состоит из имен параметров с указанием типов параметров, которые перечисляются через «;».       Если несколько параметров имеют один тип, то их можно сгруппировать, разделив имена запятой. Если в качестве параметра используется структурированный тип данных (массив, множество, запись или файл), то он должен быть описан в разделе описаний типов Type головной программы. Список формальных параметров может отсутствовать.

Например:   type ff=array[1..5,1..10] of real;

            Procedure Max( s:ff; k,n:integer);

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

Например: Function Factorial (x:byte) :real;

Результатом вычисления процедуры могут быть несколько величин, в том числе и структурированных типов (массив, множество, запись, файл или строка). Результат присваивается параметрам-переменным. Перед такими параметрами в списке формальных параметров ставится служебное слово Var, действие которого распространяется до ближайшей тоски с запятой.

Например: Procedure Kol ( st:string[100]; var k1,k2:integer; var L:Boolean);


                                                                         Выходные параметры

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

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

- количество формальных и фактических параметров должно быть одинаковым;

- должен совпадать порядок следования параметров;

- должны совпадать их типы.

 

Классификация способов передачи параметров (формальных):

1) по механизму передачи:

a) передача по значению – value;

b) передача по адресу (ссылке) – adr;

2) по взаимодействию вызываемой и вызывающей подпрограмм:

a) только как входной параметр- in (input);

b) только как выходной параметр – out (output);

c) как входной и как выходной параметр – inout (input|output).

Язык Pascal поддерживает 3 способа передачи параметров: value-in (параметры значения), adr-in (параметры-константы),  adr-inout (параметры-переменные).

 

I.Перед параметрами- (value-in) в списке формальных параметров дополнительных служебных слов не ставится. В ячейки памяти формального параметра, выделенные при вызове подпрограммы, передается копия значения фактического параметра и обратно не возвращается. В качестве фактических параметров нельзя использовать файловый тип данных.

II.Перед параметрами-константами (adr-in) в списке формальных параметров ставится служебное слово Const. В ячейки памяти формального параметра, выделенные при вызове подпрограммы, передается копия адреса фактического параметра. По имеющемуся адресу разрешено только считывать значение фактического параметра, а изменять запрещено. В качестве фактических параметров нельзя использовать файловый тип данных.

III.Перед параметрами-переменными (adr-inout) в списке формальных параметров ставится служебное слово Var. В ячейки памяти формального параметра, выделенные при вызове подпрограммы, передается копия адреса фактического параметра. По имеющемуся адресу разрешено считывать значение фактического параметра и изменять их. Измерение значений в ячейках памяти фактических параметров происходит во время выполнения операторов подпрограммы. В качестве фактических параметров можно использовать любой тип данных.

Например:

Type ff=file of real;

massiv= array[1..20,1..30] of char;

 . . .

Procedure poisk ( Const   a:massiv;    n,k:integer;     Var  x:ff ); 

   

                              параметры-             параметры-      параметры-

                                     константы               значения       переменные

 

Процедура Exit( ) –используется для досрочного выхода из подпрограммы.

Например:Описать функцию, определяющую первое отрицательное число в массиве.

 

Type mas=array[1..100] of real;

Function minus ( Const b:mas; n:integer) : real;

Var i:integer;        {описание локальных данных}

Begin  

minus:=0;      {функции присваивается значение}

For i:=1 to n do

If b[i]<0 then begin

           minus:=b[i]; {функции присваивается значение}

           Exit   {досрочное завершение функции}

              end;

End; 

Пример 1: Используя подпрограмму вычисления факториала вычислить биноминальный коэффициент для натуральных чисел n и m.

 

С использованием подпрограммы-процедуры Fact

 

конец
головная
Fact(n, Fn)
Ввод n,m  
Fact(m, Fm)
Fact(n-m, p)
C=Fn/(Fm*P)
п/п fact
p=1
i=1,x,1
p=p*i
конец

 

  Program z1; Var n,m:integer; C,P,Fn,Fm: real;   {процедура нахождения факториала числа х} Procedure fact(x:integer; var p:real); Var i:integer; {локальные данные} Begin P:=1; For i:=1 to x do P:=P*i{p-результат выполнения процедуры} End;   {операторы головной программы} Begin Writeln(‘введите n, m’); Readln(n,m); Fact(n,Fn); {Fn -факториал числа n} Fact(m,Fm); {Fm- факториал числа m} Fact(n-m,P); { p- факториал числа n-m} C:=Fn/(Fm*P); Writeln(‘биноминальный коэффициент =’, C:8:1) End.    

С использованием подпрограммы-функции Factor

 
factor
p=1
i=1,x,1
p=p*i
конец
factor=p
конец
головная
Ввод n,m  
C=Factor(n) / (Factor(m)*Factor(n-m))

 

 

  Program z2; Var n,m:integer; C: real;   {функция нахождения факториала числа х} Function factor(x:integer):real; Var i,p:integer; {локальные данные} Begin P:=1; For i:=1 to x do P:=P*i; Factor:=p {функции присваивается значение} End;     {операторы головной программы} Begin Writeln(‘введите n, m’); Readln(n,m); C:=Factor(n) / (Factor(m)*Factor(n-m)); Writeln(‘биноминальный коэффициент =’, C:8:1) End.  

 

Тема 2.7 Строки символов

Строка – это последовательность символов кодовой таблицы ASCII, заключенная в апострофы (одинарные кавычки), длинной от 0 до 255 символов.

Тип STRING (строка символов) в языке Pascal широко используется для обработки текстовой информации. Он во многом похож на одномерный массив символов. Массив символов имеет фиксированную длину(количество элементов), которая определяется при описании (Var C:array [0..N] of char).

 

Способы описания строк

Var имя перем : string[n];  
1.

 

Type имя типа=string[n]; Var имя перем : имя типа;  
2.

 

 

где n-максимальное количество символов в строке (по умолчанию n =255). Может быть любой константой порядкового типа.

       Ввод строк осуществляется процедурой Readln. За одну процедуру можно ввести только одну строку. К символу строки можно обратиться как к элементу одномерного массива. Любой символ занимает в оперативной памяти 1 байт. Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки.

 

Например:

Var st : string[11]; x:byte;

Begin

Readln(st); {ввод строки st=’молоко’}

if st[ 5 ]=’A’ then . . .

x:= ord(st[0]);   {x – текущая длина строки}

...

End.

           

6 м о л о к о          

  i = 0    1         2    3    4    5   6     7     8     9  10   11     (номер байта)

 

                  

       Операции над строками

1) Объединение строк (конкатененация) à +

Например:

Var s,s1,s2: string;

S1:=’ком’;

S2:=’пот’;

S:=S1 + S2; {s=‘компот’}

2) Сравнение строк (>, <, <=, >=, = < >)

Выполняется посимвольное сравнение строк по кодам таблицы ASCII. Символ с большим кодом дает большее значение всей величине (строке). Перед сравнением автоматически выравниваются длины сравниваемых строк. К более короткой строке справа добавляется недостающее количество пробелов.

Например:

       ‘Солома ‘ < ‘Соль ’  

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

 


Дата добавления: 2018-06-01; просмотров: 275; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!