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

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

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

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

113

 

 

динамически создаются новые локальные переменные. Рекурсив-

ные вызовы процедуры и функции приводят к увеличению времени решения. Многие математические функции можно выразить рекур- сивно.

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

ì1,

если n = 0,

n!= í

если n > 0.

în(n -1)!,

Function Fact(n: integer): integer; begin

if n=0 then Fact:= 1

else Faсt:=Faсt(n–1) n

end;

При вычислении значения m! в программе нужно записать оператор mfac := Fact(m); при обращении к функции Fact фактический пара- метр m заменяет формальный параметр n. Если m>0, то возникает рекурсивное обращение к функции Fact со значением параметра m– 1. Создается копия тела функции и для нового параметра со значе- нием m–1 выделяется новая переменная, локальная по отношению к копии тела функции. Эта переменная получает вычисленное значе- ние. Затем вновь производится обращение к функции со значением m–2 и т.д., пока значение параметра не станет равным 1.

Однако в большинстве случаев рекурсивное решение может быть заменено на итерационное.

Вот как можно реализовать вычисление n! с помощью функции, ис- пользующей итерацию:

Function Fact(n: integer): integer; Var

i, p: integer; begin

if n = 0 then Fact:= 1 else

begin p:= 1;

for i:= 1 to n do

{Описание процедуры}

114

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

 

 

p:= p*i; Fact:= p

end

end;

Различные способы объявления процедур рассмотрим на примере задачи о вычислении площади выпуклого четырехугольникаABCD, заданного длинами четырех сторон и диагонали АС. Диагональ де- лит выпуклый четырехугольник на два треугольника, к которым

применима формула Герона

S = р(р – а)(p – b)(p – c),

где р=(а+b+с)/2 полупериметр треугольника, а а, b, с длины сто- рон треугольника. Простейшее решение дважды выписать в про- грамме операторы, задающие вычисления по формуле Герона. Мы же организуем процедуру и будемк ней обращаться.

Процедура без параметров

Program F1;

Var АВ, ВС, CD, DA, АC, s1, s, а, b, c, p: real; Procedure Str1;

begin

p := (a + b + c)/2;

s := sqrt(р (р – a) (p – b) (p – c)) end;

Begin

read(AB, ВС, CD, DA, AC); a := АВ; b := ВС; c := АС;

Str1;

{Первый вызов процедуры}

s1 := s;

 

а := DA; b := AC; с := CD;

 

Str1;

{Очередной вызов процедуры}

s1 := s1 + s;

 

writeln(s1)

 

End.

 

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

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

115

 

 

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

Procedure Str1;

Var

р: real; begin

р := (а + b + c)/2;

s := sqrt(p (p – a) (p – b) (p – c))

end;

После выполнения процедуры значение переменной р забудется.

Параметры переменные

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

Program P2;

Var

АВ, ВС, CD, DA, AC, s1, s2: real; Procedure Str2(Var a, b, c, s: real);

Var

p: real; begin

p := (a + b + c)/2;

s := sqrt(p*(p – a)*(p – b)*(p – c))

end; Begin

read(AB, ВС, CD, DA, AC); Str2(AB, ВС, АC, s1); Str2(CD, DA, AC, s2);

116

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

 

 

writeln(s1 + s2) End.

Указанные в скобках при описании процедуры параметры а, b, с, s

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

оператора

begin

р := (АВ + ВС + АС)/2;

s1 := sqrt(p (p – АВ) (р – ВС) (р – АС)) end;

Параметры значения

Заголовок процедуры может быть устроен так, что некоторые груп- пы формальных параметров не содержат слова Var. Например,

Procedure Str3(a, b, c: real; var s: real). Формальные параметры, кото-

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

мер, так: Str3(3.14 2, х, Sqrt(10 – Sqr(х)), у). Это обращение повлечет за собой вначале присвоения: а := 3.14 2; b := х; с := Sqrt(10 – Sqr(х));

а затем отработку самой процедуры.

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

1. Если координаты вершин треугольника в прямоугольной системе коорди- нат равны, соответственно (x1, y1 ) , (x2 , y2 ), (x3, y3 ), то площадь этого тре-

угольника равна

0.5(x1 y2 + x2 y3 + x3 y1 x1 y3 x2 y1 x3 y2 ).

Используя этот факт, написать программу вычисления площади выпуклого четырехугольника ABCD, заданного координатами четырех вершин (xA , yA ),

(xB , yB ), (xC , yC ), (xD , yD ).

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

117

 

 

2.Даны вершины треугольника А(x1, y1 ) , В(x2 , y2 ) и С(x3, y3 ). Найти длины медиан.

3.Даны длины сторон треугольника а, b, с. Найти длины медиан треугольни-

ка. Замечание: длина медианы, проведенной к стороне а, равна

0.52b2 + 2c2 a2 .

4.Даны координаты вершин двух треугольников. Определить, какой из них имеет большую площадь.

5.Составить программу, вычисляющую 1) скалярное, 2) векторное, 3) сме- шанное произведения векторов, заданных своими координатами. Составить программу, вычисляющую 4) сумму векторов и 5) угол между векторами.

6.Составить программу, вычисляющую следующие величины:

1)

s = gt2 ;

 

2)

v =

 

2gh

;

3)

p = nkT;

4)

l =

E

;

5)

Ek

=

mv2

 

;

6)

En = mgh;

R + r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Rобщ =

R1R2

7)

v =

 

kT

;

8)

E = mc2;

 

 

9)

 

 

 

R1 + R2

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7. Гиперболические функции определяются следующим образом:

1) sh x =

ex - ex

 

 

 

2) ch x =

ex + ex

2

;

 

 

 

 

2

;

 

 

 

 

 

 

 

 

 

3) th x = sh x

;

 

 

 

 

4) cth x = ch x

;

 

ch x

 

 

 

 

 

 

 

sh x

 

где х вещественно. Вычислить эти функции, а также:

5) sh x th (x +1) th2(2 +sh( x 1));

 

6) ch2 x - sh2 x;

8. Дано: вещественные х, у. Вычислить

 

 

 

 

 

1) z = (sign х + sign y) sign(x+y),

2) z = sign(x) sign(y) sign(x+y),

3) z = (sign x +

 

 

 

 

 

), где

 

sign2 y + 1) /(1+

 

 

3+ signx + signy

 

 

 

 

 

ì-1,

при

a < 0,

 

 

 

 

 

 

ï

0,

при

a = 0,

 

 

 

 

sign a = í

 

 

 

 

 

 

ï

1,

при

a > 0.

 

 

 

 

 

 

î

 

118

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

 

 

9. Даны действительные числа s, t. Получить

 

 

1) f(t, 2s, 1.17) + f(2.2, t, s–t), где

 

 

 

 

 

 

 

 

 

 

 

 

f (a,b,c) =

2a - b - sin c

,

 

 

 

 

 

 

5 +

c

 

 

 

 

 

 

 

 

 

 

 

 

 

2) g(1.2, –s) + g(t, s) – g(2s – 1, st), где

 

 

 

 

 

 

 

 

 

 

 

g(a,b) =

 

 

a2 + b2

 

.

 

 

 

 

 

a2 + 3ab + 3b2 + 4

10. Даны действительные числа a, b, c. Получить

 

 

1)

 

min(a,a + b)+ max(a ,b + c ),

 

 

 

 

 

 

 

 

 

1+ max(a + bc,1.15)

 

 

 

 

 

 

 

2) min(u + v2 ,3.14), где u = min(a,b),

v = min (ab,a +b),

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

1.7t + 2t (1+ a)

, где t (x) =

åx2k+1 (2k +1)!

 

 

3)

k=0

 

 

.

 

 

 

 

 

(

)

 

 

 

 

 

 

 

 

6 - t

10

 

2k

 

 

 

 

 

 

 

 

 

bc2 -1

 

(2k )!

 

 

 

 

 

 

 

 

åx

 

 

 

k=0

11.Даны действительные числа s, t. Получить

1)h (s,t)+ max(h2 (s - t,st ),h4 (s - t,s + t ))+ h (1,1),

2)h (t, s)+ max(h (t,s),h (s,t),h (t,t)),

где h (s,t) = 1+ab2 + 1+ba2 - (a - b3 ).

12. Даны массивы целых чисел хi, уi, zi, где i = 1..п.

n

Вычислить åxi yni+1zi .

i=1

13.Дано: натуральные m, n (m>1), целые a1, ..., an , b1, ..., bn, с1, ..., c30. Полу-

чить

ì

 

 

 

ïmin(b1 ,K,bm )+ min(c1 ,K,c30 ) , при min(a1K,an ) > 10,

l = í

+ (min(c1

,K,c30 ))2

 

ï1

, в противном случае.

î

 

 

 

14. Дано: натуральные k, l, m, действительные x1, ..., xk , y1, ..., yl, z1, ..., zm. По-

лучить

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

 

 

 

 

 

 

119

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ì

 

 

 

 

 

 

 

 

 

 

max(x1K,xk )

 

³ 0,

 

 

 

 

 

 

 

 

 

 

 

 

l =

ïmax( y1 ,K, yl ) + max(z1 ,K,zm ) , при

 

í

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ï1+ (max(x1 ,K,xk ))2 , в противном случае.

 

 

 

 

î

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15. Дано натуральное n, действительные а1, ..., а3n. Получить x + y2 + z3,

где x = a1a2 Kan ,

 

 

y = an+1an+2 Ka2n ,

z = a2n+1a2n+2 Ka3n.

16. Заданы массивы целых чисел. Вычислить:

 

 

 

 

 

 

 

 

20

 

 

 

15

 

 

 

 

 

 

 

 

 

 

 

ïìåxi2

 

при åxi yi > 0,

 

 

 

 

 

 

 

1)

u =

ï i=1

 

 

 

i=1

 

 

 

 

 

 

 

 

 

í

20

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ïïåyi2

 

иначе.

 

 

 

 

 

 

 

 

 

 

 

î i=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ì minbi

+

maxci

 

,

при mina

 

< maxb ,

 

 

 

min(b + c )

 

 

2)

t =

ïmaxa

i

 

 

 

 

i

i

 

í

 

 

 

i

i

 

 

 

 

 

 

 

 

 

 

ïmax

(b + c ) + minc ,

 

иначе.

 

 

 

 

 

 

 

î

 

 

 

i

i

i

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3) åxi yni+1.

 

 

 

 

 

 

 

 

 

 

 

i=1

17.Даны действительные числа a1, ..., an , b1, ..., bn. Образовать новые после- довательности, в которых

1)элементы последовательности {ai }, следующие за членом с наиболь- шим значением заменены на 0.5;

2)элементы последовательности {bi}, меньшие 1, заменены на 1.

18.Даны три целые матрицы размера N×N. Вывести ту из них,

1)у которой сумма диагональных элементов максимальна;

2)в которой присутствует максимальный элемент;

3)в которой присутствует строка с максимальной суммой элементов;

4)в которой присутствует столбец с минимальной суммой элементов.

19.Даны N слов. Напечатать:

1)те из них, которые начинаются с буквы 'а';

2)слово максимальной длины;

3)слова, заканчивающиеся на 'b';

4)буквы, входящие одновременно во все слова;

120

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

 

 

5)буквы, содержащиеся в первом слове и не содержащиеся в остальных.

20.Составить процедуру, позволяющую определить позиции

1)самого правого вхождения заданного символа в исходную строку;

2)крайнего левого вхождения символа в строку;

3)вхождения сдвоенных букв в слово. Если таковых нет, результа- том работы процедуры должна быть –1.

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

22.Вычислить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ò f (x)dx,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

где f (x) равно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1) ехр(х),

 

 

4) ln(x),

 

7) 1/(1+x2),

 

 

 

 

 

2) sin(x),

 

 

5) arctg(x),

 

 

8) ехр(х),

 

 

 

 

 

3) cos(x),

 

 

6) 1/x,

 

 

9) cos(ln(x)).

 

 

 

 

 

23. Вычислить Z – сумму значений функции

 

 

 

 

 

 

 

 

 

Z = f (a,b) + f (a2 ,b2 )+ f (a - b,b) + f (a2 + b2, b2 -1),

 

где f (u,t)

= íìu2 + t2 ,

если

 

u > 0,t > 0;

 

 

 

 

 

 

 

 

 

 

îu + t2 ,

если

 

u £ 0,t £ 0.

 

 

 

 

 

1) a = 2.5; b = –7.3;

 

 

 

 

 

 

 

 

3) a = –0.2; b = –0.42;

 

2) a = –0.2; b =

4.2;

 

 

 

 

 

 

 

4) a = 23.5; b = 41.2.

 

 

24. Вычислить Z сумму значений функции

(

 

)

 

Z = f

(

sin a,a

)

+ f

(

cosa,a

)

+ f

(

sin2 a,a

)

sin a - cosa,a2

+

 

 

 

 

 

 

-1 + f

 

-1

f

(

sin2

a -1,cosa +

 

)

 

 

 

 

 

 

 

 

 

 

 

 

1 ,

 

 

 

 

 

 

 

 

 

 

 

где f (u,t)

= íìu + sin t,

если

u > 0;

 

 

 

 

 

 

 

 

 

 

îu + t2 ,

если

u £ 0.

 

 

 

 

 

1) a = p/18; a = –2.1;

 

 

 

 

 

3) a = –p/14; a = –0.2;

 

 

2) α = 3.3; a = –2.1;

4) α = –π/10; a = 31.2;

121

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

МНОЖЕСТВА

Множества это структурированный тип данных, представляю- щий набор взаимосвязанных по какомулибо признаку или призна- кам объектов, которые можно рассматривать как единое целое. Ка- ждый объект множества называется элементом множества. Все

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

Базовый тип задается диапазоном или перечислением. Область зна- чений типа множество набор всевозможных подмножеств, со- ставленных из элементов базового типа.

Если базовый тип принимает n значений, то тип множество для не- го будет иметь 2n вариантов значений. В выражениях на языке Turbo Pascal значения элементов множества указываются в квад-

ратных скобках: [1, 2, 3, 4], ['a', 'b', 'c', 'd'], ['a'...'z'].

Если множество не имеет элементов, оно называется пустым и обо- значается как [ ]. Для описания множественного типа используется словосочетание Set of (множество из ...). Для задания типа множе- ство следует указать элементы этого множества, как правило, в ви- де перечисления или диапазона, например:

Пример 1.

Type

Alfa = Set of 'A'..'Z';

Count = Set of (Plus, Minus, Mult, Divid); Ten = Set of 0..9;

Number = Set of '0'..'9';

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

122

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

 

 

Пример 2.

Var

CharVal: Set of 'A'..'Z';

Operac: Sет of (Plus, Minus, Mult, Divid); Num: Ten;

Const

Index: Set of 0..9 = [0, 2, 4, 6, 8]; Digit: Set of '0'..'9' = ['0'..'9'];

Переменная CharVal может принимать значения 'A', 'B', 'C', ... – лю- бое значение от 'A' до 'Z', переменная Num может принимать значе- ние 0, 1, 2, 3, ..., т.е. любое значение в диапазоне 0..9. Попытка при- своить другие значения вызовет программное прерывание. Пере-

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

Пример 3.

[Plus, Minus] [1..K mod 12,15]

[Cur(0)..Cur(32),'A','B']

В каждое множество включается и так называемое пустое множест- во [ ], не содержащее никаких элементов. Конструктор множества можно использовать и непосредственно в операциях над мно- жествами.

Количество элементов (мощность) множества в Turbo Pascal не мо- жет быть больше 256, а порядковые номера элементов (т.е. значе- ние функции Ord) должны находиться в пределах от 0 до 255. Кон- троль диапазонов осуществляется директивой {$R+}. Объем памя- ти, занимаемый одним элементом множества, составляет 1 байт.

При работе co множествами Turbo Pascal допускает использование операций “=”, “<>”, “>=”, “<=”, объединения (+), пересечения (*), разности (–) и операции In. Результатомвыражений с применением этих операций является значение True или False, в зависимости от того, истинно это выражение или ложно.