Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабораторные на Pasca (Кудрявцев)l

.pdf
Скачиваний:
32
Добавлен:
18.03.2015
Размер:
1.63 Mб
Скачать

Строковый тип данных

103

 

 

будет пробел, если Poz > 255, то возникнет ошибка при вы- полнении. Poz, N целочисленные выражения.

Пример: St := 'ABCDEF'; Copy (St, 2, 3) выделит 'BCD'.

Concat (Str1, Str2, ..., StrN) выполняет сцепление строк Str1, Str2, ¼

в том порядке, как они указаны в списке. Сумма символов сцеплен- ных строк не должна превышать 255.

Пример: Concat ('индекс', ' 656099') даст 'индекс 656099'.

Length (St) вычисляет длину в символах строки St. Результатиме- ет целочисленный тип.

Пример: St := '1234567890', Length (St) даст 10.

Роz (Str1, Str2) обнаруживает первое появление в строке Str2 под- строки Str1. Результат имеет целочисленный тип и равен номеру той позиции, где находится первый символ подстроки Str1. Если подстрока Str1 в строке Str2 не найдена, результатравен нулю.

Пример: Роs ('тройка', 'перестройка') будет равно 6.

UpCase (Ch) преобразует строчную букву в прописную (только латинский алфавит). Параметр и результатимеют литерный тип.

Обработка строковых данных необходимый элемент таких про- грамм, как текстовые редакторы. Ниже приведен пример програм- мы простейшей лингвистической обработки, в котором к строко-

вым данным применяются наиболее часто употребляемые функции и процедуры.

Program DemoStr;

{Программа формирует строку из трех исходных строк. Определяется номер позиции первого появления в результирующейстроке буквы 'а' и общая длина строки. }

Var А, В, С: string [12];

{А, В, С исходные строки}

Str, Str1: string [40];

{Str – результирующаястрока,

Ch1: string [1];

Str1 – инвертированная строка}

Ch: char ;

 

i, n: integer ;

 

104

Лабораторная работа № 9

 

 

Begin

A := 'electronic';

B := 'digit'; C := 'machine';

Ch1 := Copy (A, 1,1);

{Выделение первой буквы в А };

Writeln;

 

Ch := UpCase(Ch1[1]);

{Преобразование выделенной буквы

Writeln;

из строчной в прописную };

 

Str := Сoncat(A, В, C);

{Конкатенация строк А, В, С};

Writeln;

 

Delete(Str, 1, 1);

{Стирание первой буквы для последующей

Writeln(Str);

записи в первую позицию прописной буквы};

 

Insert(Ch, Str, 1);

{Вставка прописной буквы}

Insert(' ', Str, 11);

{Вставка первого пробела}

Insert(' ', Str, 17);

{Вставка второго пробела}

Writeln(Str);

{Вывод результирующейстроки}

Writeln('Первая буква “а” появилась в позиции ', Pos('a',Str)); n := Length(Str);

WriteIn('Длина строки = ', n); Str1 := ";

For i := 1 to n do

Str1 := Str1 + Copy(Str, n–i + 1, 1);

Writeln(Str1)

{Получение и вывод инвертированной строки}

End.

 

 

КОНТРОЛЬНЫЕ ЗАДАНИЯ

1.Дано несколько слов. Составить программу, которая определяет, одинако- вы ли длины слов или нет, и определяет наибольшее и наименьшее по длине слова.

2.Составить программу, которая меняет местами первые и последние буквы слов данного предложения.

3.Дано предложение. Составить программу, обращающую отдельные слова в предложении, но сохраняющую порядок слов.

4.Составить программу, которая подсчитывает количество сдвоенных букв в предложении.

5.В строке длиной 30 содержится имя, отчество и фамилия так, что каждая часть занимает 10 позиций. Напечатать фамилию и инициалы.

6.Целочисленные переменные i, j, k содержат информацию о длинах сторон треугольника. Напечатать фразу «Рассмотрим треугольник со сторонами ...

см, ... см,... см», где вместо многоточий указаны соответствующие значения.

Строковый тип данных

105

 

 

7.Составить программу, которая печатает отдельно каждое слово из заданно- го предложения.

8.Дана дата в виде «месяцчислогод». Напечатать дату в виде «числомесяцгод».

9.В переменной содержится существительное первого склонения, оканчи- вающееся на «а». Напечатать слово во всех падежах.

10.Дано несколько строковых переменных. В каждой из них даны имена и фамилии (например: Илья Муромец, Александр Невский). Напечатать от- дельно первые, а затем вторые слова из пар.

11.Определить, какая гласная встречается в заданной фразе наиболее часто.

12.Определить длину предъявленного слова. Напечатать «В этом слове N букв». Употребить форму «буква», «буквы» или «букв».

13.Дано предложение. Напечатать длины слов, встречающихся в предложе- нии.

14.Дано предложение. Напечатать все слова из этого предложения, которые содержат букву «а».

15.Составить слово, содержащее первые буквы слов заданного предложения.

106

Лабораторная работа № 10

ПРОЦЕДУРЫ И ФУНКЦИИ

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

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

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

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

Function F(q1: T1; q2: T2; ¼): T;

{Разделы определений и описаний локальных параметров и подпрограмм} begin

p1;

p2;

• • •

F:= < вычисленное начение >

end;

где F имя функции, q1, q2 имена формальных параметров, Т1, T2

типы параметров, Т тип имени функции, р1, p2 операторы тела функции.

Процедуры и функции

107

 

 

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

Обращение к функции осуществляется в правой части оператора присваивания указанием имени функции и фактических параметров в виде F(b1, b2, ¼), где F имя функции, bi фактические парамет- ры.

Пример 1. Составить программу для определения числа сочетаний

Cnm =

n!

 

,

m!(n m)!

 

 

используя функцию при вычислении факториала.

Program Number; Var

n, m: byte; nсm: longint;

Function Fact (k: byte): longint; Var

p:longint;

i:byte;

begin p:= 1;

for i:= 1 to k do p:= p*i;

Faсt:= p; end;

Begin

writeln('Введите данные для определения числа сочетаний'); readln(n, m);

nсm:= Fact(n) div Fact(m) div Fact(n–m); writeln('Число сочетаний = ', ncm);

End.

Пример 2. Составить программу для вычисления функции

 

20

20

40

y = ax2

+ bx + c, где a = å pi , b = åti , c = åri .

 

i=1

i=1

i =1

108

Лабораторная работа № 10

 

 

Решение. Функция для вычисления сумм в общем виде может быть

k

представлена как Sum = åzi .

i=1

Program Runy;

Const

MaxSize = 50; Type

md = 1..MaxSize;

mas = array [md] of real; Var

np, nt, nr, i: integer; p, t, r: mas;

х, y: real;

Function Sum(z: mas; nd: integer): real; Var

j: integer; s: real;

begin s:= 0;

for j:= 1 to nd do s := s + z [ j ];

Sum:= s; end;

Begin

write('Введите х:'); readln(x);

write('Введите число элементов в массивах p, t, r'); readln(np, nt, nr);

writeln('Вводите элементы массива p'); for i:= 1 to np do

read(p[i]);

writeln('Вводите элементы массива t'); for i:= 1 to nt do

read(t[i]);

writeln('Вводите элементы массива r'); for i:= 1 to nr do

read(r[i]);

Процедуры и функции

109

 

 

y:=Sum(p, np) x x + Sum(t, nt) x + Sum(r, nr); writeln('y= ', y);

End.

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

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

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

Procedure F(var q1: T1; q2: T2 ; ...);

{Разделы определений и описаний локальных параметров и подпрограмм} begin

p1;

p2

• • •

end;

где F имя процедуры, qi имена формальных параметров, Тi – типы формальных параметров, рi операторы тела процедуры.

Имена формальных параметров, являющихся результатами вычис- лений в процедуре, записываются после зарезервированного слова

var.

Обращение к процедуре осуществляется оператором процедуры, в котором записывается имя процедуры и фактические параметры:

F (b1, b2 , …);

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

Пример 3. Составить программу для вычисления функции

110

Лабораторная работа № 10

 

 

z =

th a + th2 (a b)

,

th(a2 b2 )

 

используя для вычисления процедуру

th x =

ex ex

=

e2x 1

.

 

 

 

ex + ex

e2x +1

 

 

 

Решение. Формальными параметрами процедуры будет переменная х и результат с именем R. Чтобы избежать двукратного вычисления e2x, вводится дополнительный оператор присваивания c:=ехр(2.0 х).

Program Fun1; Var

a, b, z, t1, t2, t3: real; Procedure Th(x: real; var r: real);

Var

c: real; begin

c:= exp(2 x); r:= (c–1)/(c+1);

end; Begin

writeln('Введите а и b'); read(a, b); Th(a, t1);

Th((a – b), t2); Th(sqr(a) – sqr(b), t3); z:= (t1 + sqr(t2))/sqrt(t3); writeln('z= ', z);

End.

Если в процедуре и главной программе используются одни и те же имена параметров (процедура связана с главной программой по- средством глобальных переменных), то процедура может быть ор- ганизована без параметров.

Процедуры и функции

111

 

 

Пример 4. Составить программу с процедурой без параметров для вычисления полярных координат ρ = x2 + y2 и ϕ = arctg( yx) по прямоугольнымх и у (х>0) координатам.

Program PolKorl; Var

х, у, r, f: real; n, i: integer;

Procedure Polar; begin

r:= sqrt(sqr(х) + sqr(y)); f:= arctan(y/x);

end; Begin

write('Введите количество точек'); readln(n); for i:= 1 to n do

begin

write('Введите координаты точки: '); readln(х, у);

Polar;

writeln(' Прямоугольным координатам:', x:6:1, y:6:1);

writeln('– соответствуют полярные координаты:', r:6:1, f:10:2);

end

End.

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

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

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

112

Лабораторная работа № 10

 

 

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

При организации процедур и функций в языке Turbo Pascal разли- чают параметрызначения и параметрыпеременные.

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

(q1: T1; q2 : T2) или (q1, q2 : T);

где qi имена параметров, T, Ti тип параметров.

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

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

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

(var q1, q2, …, qn: T);

где qi параметрыпеременные, Т их тип.

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

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

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