Файл: лекции программирование ОЗО.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.05.2024

Просмотров: 108

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Процедуры и функции для работы со строками

Для работы со строковым типом данных в языке Pascal предусмотрены следующие стандартные процедуры и функции:

  1. function concat (S1[,S2,…,SN]:string):string;

(квадратные скобки здесь обозначают, что записанная в них часть является необязательной и может отсутствовать)

Склеивает строки S1,S2,…,SN.

Примеры: y:=concat(‘ка’,’ток’); {y=’каток’}

  1. functioncopy (S:string ; Index, Count:integer):string;

Копирует из строки S Count символов, начиная с символа с номером Index.

Примеры: s:=’информатика’; a:=copy(s,3,5); {a=’форма’}

  1. function length (S:string):integer ;

Вычисляет текущую длину строки S.

Примеры: n:=length(‘каникулы’); {n=8}

  1. functionpos (ST,S:string):integer ;

Отыскивает в строке S первое вхождение подстроки ST и возвращает номер позиции, с которой она начинается. Если подстрока не найдена, возвращает ноль.

Примеры: a:=pos(‘рок’,’строка’); {a=3}

b:=pos(‘программа’,’программирование’); {b=0}

  1. procedure delete (var S:string ; Index,Count:integer);

Удаляет Count символов из строки S, начиная с символа с номером Index.

Примеры: x:=’каток’; delete(x, 1, 2); {x=’ток’}

  1. procedure insert (ST:string ; var S:string ; Index:integer);

Вставляет подстроку ST в строку S, начиная с символа с номером Index.

Примеры: s:=’свет’; insert(‘рас’,s,1); {s=’рассвет’}

  1. procedure val (S:string ; var X: integer; var Code:integer);

или procedure val (S:string ; var X: real; var Code:integer);

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

Примеры: var a: string ; b,c: integer; d: real;

Begin a:=’58’; val(a,b,c);{b=58, c=0}

a:=’27d5k’; val(a,b,c);{b=0, c=3}

val(a,d,c);{d= 5.8000000000E+01, c=0}

end.

  1. procedurestr (X: integer ; var S:string);

или  procedure str (X: real ; var S:string);

Преобразует число X любого вещественного или целого типов в строку символов S. В процедуре str можно указать формат вывода, аналогично процедуре write или writeln.


Примеры: var s:string ; x:integer; y:real;

begin x:=123; str(x,s);{s=’123’}

y:=123; str(y,s);{s=’ 1.2300000000E+02’}

y:=-453.68; str(y:6:1,s);{s=’-453.7’}

end.

Описание и использование процедур и функций

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

Процедуры

Подпрограмма-процедура предназначена для выполнения некоторой законченной последовательности действий. Описание процедуры состоит из заголовка, раздела описаний и раздела операторов. Завершается описание процедуры точкой с запятой. Заголовок процедуры имеет вид:

procedure <имя процедуры>(<список формальных параметров>);

Формальные параметры подпрограммы указывают, с какими параметрами следует обращаться к этой подпрограмме (количество параметров, их последовательность, типы). Они задаются в заголовке подпрограммы в виде списка формальных параметров, разбитого на группы, разделённые точками с запятыми. В группу формальных параметров включаются однотипные параметры. Для каждого формального параметра указывается имя и тип. Имя формального параметра - идентификатор. Список формальных параметров может отсутствовать.

Примеры:

procedure summa(a: integer; b, c: real); {a,b,c формальные параметры}

procedure t;

При обращении к подпрограмме формальные параметры заменяются на соответствующие фактические параметры вызывающей программы или другой подпрограммы.

Оператор вызова процедуры имеет вид:

<имя процедуры> (<список фактических параметров>);

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

Например: t; {нет списка фактических параметров}

summa(x,y,z); {x,y,z –фактические параметры; x: integer; y, z: real}


Функции

Подпрограмма-функция предназначена для вычисления единственного значения порядкового, вещественного, стандартного типа string или указателя. Заголовок функции имеет вид:

function <имя функции> (<список формальных параметров>):< тип функции>;

Тип функции – это тип возвращаемого результата. При описании функции в разделе операторов имени функции должно быть присвоено значение возвращаемого результата.

Примеры: function f (x: integer): real;

begin

f :=sin (x) + sqr (x);

end;

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

Например: y :=f(a); {a- фактический параметр}

writeln(f(2+b)); {2+b –фактический параметр}

Формальные и фактические параметры

Формальные параметры можно разбить на несколько категорий. Рассмотрим две из них:

  • параметры-значения;

  • параметры-переменные.

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

Параметр-значение указывается в заголовке подпрограммы своим именем и через двоеточие – типом. Тип параметра-значения может быть любым за исключением файлового. В качестве фактического параметра на месте параметра-значения при вызове подпрограммы может выступать любое выражение совместимого для присваивания типа.

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


Параметр-переменная указывается в заголовке подпрограммы аналогично параметру-значению, но только перед именем параметра записывается зарезервированное слово var. Действие var распространяется до ближайшей точки с запятой, т.е. в пределах одной группы.

procedure summa (a: integer; b: real; var c: real);

begin c:=a+b; {a, b- параметры-значения; c – параметр-переменная.}

end;

Локальные и глобальные параметры

Параметры, объявленные внутри подпрограммы и доступные только ей самой, называются локальными.

В разделе описаний подпрограммы могут встретиться описания подпрограмм низшего уровня, а в них – описания других подпрограмм и т.д. При входе в подпрограмму низшего уровня становятся доступными не только объявленные в ней имена, но и сохраняется доступ ко всем именам верхнего уровня. Подпрограмме доступны только те объекты верхнего уровня, которые описаны до описания данной подпрограммы. Эти объекты называются глобальными по отношению к этой подпрограмме.

Параметры, объявленные до описания данной подпрограммы, доступны этой подпрограмме и называются глобальными параметрами.

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

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

Примеры:


1) Program prim1;

var x, y, z: integer;

procedure newval;

var x, y: integer; {x и y- локальные параметры}

begin

x:=1; y:=1

end;

Begin x:=0; y:=0; {основная программа}

newval;

z:=x+y;

writeln(z)

End.

Результат z=0, так как x и y, используемые в основной программе, остаются равными нулю.

2) program prim2;

var x, y, z: integer;

procedure newval;

begin

x:=1; y:=1

end;

Begin

x:=0; y:=0;

newval;

z:=x+y;

writeln(z)

End.

Результат z=2, так как x и y – глобальные параметры.

35