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

АтаП_лаб

.pdf
Скачиваний:
19
Добавлен:
23.02.2016
Размер:
557.11 Кб
Скачать

ЛАБОРАТОРНА РОБОТА № 8

СКЛАДАННЯ ПРОГРАМ З ВИКОРИСТАННЯМ ДОПОМІЖНИХ АЛГОРИТМІВ

Мета: вивчення способів виклику підпрограм, отримання навичок створення підпрограм.

Короткі теоретичні відомості

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

В мові Pascal є два види підпрограм – процедури та функції. Вони відрізняються між собою структурою та способом виклику.

На етапі проектування програми визначається, які частини алгоритму треба реалізувати у вигляді процедури, а де знадобиться функція. В головній програмі всі підпрограми розміщуються після розділу опису даних перед оператором Begin виконуваної частини, а викликаються у разі потреби в процесі виконання головної програми або іншої підпрограми.

Всі можливості, що описані в підпрограмах, доступні лише цим підпрограмам, не поширюється на всю програму і називаються локальними.

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

Схематичне представлення принципу дії глобальних та локальних змінних

основна програма А, В, С

підпрограма 1 X, Y

підпрограма 2 M, N

підпрограма 3 K, L

A, B, C – глобальні змінні;

X, Y – локальні змінні для підпрограми 1 та глобальні змінні для підпрограми 2;

M, N – локальні змінні для підпрограми 2;

K, L – локальні змінні для підпрограми 3.

Загальний вигляд процедури:

Procedure <ім’я> (список формальних параметрів); <описова частина>

Begin

... <виконувана частина>

End;

41

Усписку формальних параметрів перелічуються через «;» окремі параметри та інформація про їх тип. Деякі параметри призначені для передачі даних у процедуру, інші для повернення результатів з процедури до тієї програмної одиниці, яка її викликала.

В описовій частині (яка взагалі може бути відсутня) описують ті дані, які використовуються тільки для «службових» цілей в самій процедурі (параметри циклів, робочі змінні та масиви тощо).

Увиконуваній частині записується послідовність операторів, які реалізують потрібний алгоритм. При цьому вони оперують з формальними параметрами, локальними та глобальними даними.

Зв'язок між окремими програмними одиницями здійснюється через списки формальних/фактичних параметрів та за допомогою глобальних змінних.

Глобальні дані описуються в головній програмі, вони не є фактичними параметрами під час виклику підпрограм, не описані в підпрограмах, а використовуються в одній з них і в головній програмі.

Результати роботи підпрограми можуть бути передані до головної програми через формальні параметри та глобальні дані.

Приклад 8.1. Програма обчислення суми десяткових цифр.

Const N=5;

Var X:Array [1..N] of Integer;

SumX, Kill,I : Integer;

Procedure Sum(A:Integer; Var ISum:Integer);

Begin

ISum:=0;

While A<>0 do Begin

Kill:=Kill+1; ISum:=ISum+Abs(A) mod 10; A:=A div 10;

End;

End; Begin

Writeln(‘Введіть масив’); For I:=1 to N do

Read(X[i]);

Kill:=0;

For I:=1 to N do Begin

Sum(X[I], SumX); Writeln(X[I]:6, SumX:4);

End;

Writeln(‘Загальна кількість цифр’, Kill);

End.

42

Типове використання підпрограми-функції — реалізація алгоритму та повернення в головну програму одного результату в вигляді імені функції. Ім'я функції вибирається довільно (як ім'я змінної).

Загальний вигляд процедури:

Function <ім’я> (список формальних параметрів):<тип результату>;

<описова частина>

Begin

... <виконувана частина>

End;

Типом функції може бути скалярний тип, тобто: цілий, дійсний, логічний, символьний та рядковий.

Відносно формальних параметрів, локальних та глобальних даних в функції діють такі ж самі обмеження та вимоги, що і в процедурах.

У виконавчій частині підпрограми-функції повинен бути хоча б один оператор, в якому імені функції: надається значення.

Звернення до функції виконується як і до стандартних функцій типу sin(x), ln(x) тощо. Результат роботи функції передається в місце її виклику.

Приклад 8.2. Використання функції для обчислення степені.

Var x,y,z : Real ;

Function Step(a:real; b:real):real; begin

If a<=0 then Begin

Writeln( 'перевірте дані'); Halt(0);

End;

If b=0 then Step:=1

else Step:=exp(b*ln(a));

End;

Begin

Readln(x: y); Z:=Step(x,y)+Step(y,x); Writeln(x,y,z);

End.

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

формальними параметрами.

Змінні, імена яких підставляються в оператори виклику підпрограми при зверненні до неї, називаються фактичними параметрами.

Між формальними і фактичними параметрами повинні бути наступні відповідності:

кількість параметрів;

порядок слідування вхідних і вихідних параметрів;

тип даних.

43

Приклад 8.3. Дано три масиви А (20), В (30), С (25). Відсортувати елементи за зростанням. Використати процедури для формування масиву, виведення початковиних значень та виведення впорядкованих елементів масиву.

Підпрограма InputVector

Підпрограма OutputVector

початок

початок

 

randomize

i = 1, L

 

i = 1, L

(D[i])

D[i]:= random(101)-50;

кінець

кінець

Підпрограма SortVecto

Основна програма (сортування вибором)

початок

 

початок

i = 1, L-1

 

 

 

 

INPUTVECTOR (20,A)

 

 

 

 

INPUTVECTOR (30,B)

 

 

INPUTVECTOR (25,C)

J = I+1, L

D[J] > D[I]

T = D[I]

D[I] = D[J]

D[J] = T

кінець

OUTPUTVECTOR (20,A) OUTPUTVECTOR (30,B) OUTPUTVECTOR (25,C)

SORTVECTOR (20,A) SORTVECTOR (30,B) SORTVECTOR (25,C)

кінець

44

PROGRAM TASK; USES CRT; CONST N = 30;

TYPE VECTOR = ARRAY[1..N] OF INTEGER; VAR A, B, C : VECTOR;

PROCEDURE INPUTVECTOR(L:INTEGER;VAR D:VECTOR) VAR I : INTEGER;

BEGIN RANDOMIZE;

FOR I:=1 TO L DO D[I]:=RANDOM (101) - 50;

END;

PROCEDURE OUTPUTVECTOR (L:INTEGER;D:VECTOR); VAR I : INTEGER;

BEGIN

FOR I:=1 TO L DO

WRITELN (D[I]);

END;

PROCEDURE SORTVECTOR (L:INTEGER; D: VECTOR); VAR I, J, T : INTEGER;

BEGIN

FOR I:=1 TO L-1 DO FOR J:=I+1 TO L DO

IF D[J]>D[I] THEN

BEGIN

T:= D[I]; D[I]:= D[J]; D[J]:= T; END;

END;

BEGIN

CLRSCR;

INPUTVECTOR(20, A);

INPUTVECTOR(30, B);

INPUTVECTOR(25, C);

WRITELN (‘Сформований масив А: ’); OUTPUTVECTOR(20, A);

WRITELN (‘Сформований масив В: ’); OUTPUTVECTOR(30, B);

WRITELN (‘Сформований масив С: ’); OUTPUTVECTOR(25, C);

WRITELN (‘Відсортований масив А: ’); SORTVECTOR(20, A);

WRITELN (‘Відсортований масив В: ’); SORTVECTOR(30, B);

WRITELN (‘Відсортований масив С: ’); SORTVECTOR(25, C);

READLN;

END.

45

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Завдання до лабораторної роботи

 

Завдання 1. Відповідно до варіанту скласти програму, використовуючи

підпрограму-функцію.

1.

Дано дійсні числа s, t. Отримати f(t, -2s, 1.17)+f(2.2, t, s-t), де

 

f (a,b,c) =

2a b − sin c

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 +

 

c

 

 

 

 

 

 

 

 

2.

Дано дійсні числа s, t. Отримати g(1.2, s)+g( t, s)-g(2s-1, st), де

 

 

 

 

 

 

 

 

 

 

 

 

a2 + b2

 

g(a,b) =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

a2 + 2ab + 3b2 + 4

3.

Дано дійсні числа s, t. Отримати f(2t,-s,2.7)+f(1.3, s, s+t), де

 

f (a,b,c) =

a

 

b

 

 

 

+ ab

.

 

 

 

 

 

 

ab

 

+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.

Дано дійсні числа s, t. Отримати f(-s,3.7)+f(1.3t, s)+f(2s-t, s), де

 

f (a,b) =

 

 

 

2a

 

b

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a + b

 

+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.

Дано дійсні числа s, t. Отримати f(t-s,3.1+t)+f(2t, 2s-t)+f(-t, 1.2), де

 

 

 

 

 

 

 

 

 

 

 

 

a2 b

 

f (a,b) =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

a + ab + b

 

+ 5

 

 

 

6.

Дано дійсні числа s, t. Отримати f(t, t-2s, 2.1)+f(1.2, t-s, st), де

 

f (a,b,c) =

2a b

+ ab

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 +

ac

 

 

 

 

 

7.

Дано дійсні числа s, t. Отримати f( -2s, 2.1,t-s )+f(2.2, st, s-t), де

 

f (a,b,c) =

a

 

− 2

 

b + c

.

 

 

 

abc

 

+ 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8.

Дано дійсні числа s, t. Отримати f(2t-s, 3s, 1.7)+f(2.2, t, s+t), де

 

f (a,b,c) =

2a + b + c

.

 

 

 

 

 

 

 

 

 

 

 

 

5 +

a + c

 

 

9.

Дано дійсні числа s, t. Отримати f(t, -2s)+f( t, s-t)-f(st, 2s), де

 

f (a,b) =

 

a b + ab

.

 

 

 

 

b + a

+ 2

 

 

 

 

 

 

 

 

 

10.Дано дійсні числа s, t. Отримати f(t-2s,t+s)+f(t, s+t)-f(2st, s-t), де

 

 

 

 

 

 

ab

 

f (a,b) =

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

b a

 

+ 2

 

 

 

11.

Дано дійсні числа s, t. Отримати f(t, t-2s, s+1.2)+f(t, s+t, 2.5), де

 

 

 

 

 

 

 

 

ab

 

f (a,b,c) =

 

 

 

.

 

 

 

 

 

c2 + a

+1

12.

Дано дійсні числа s, t. Отримати f(t-s,-2s, 1.2)+f(t,2t, 2.5), де

 

 

 

 

 

 

 

 

 

ab

 

f (a,b,c) =

 

 

 

 

.

 

 

c2 + a2 + ac

 

+1

 

 

 

46

13.Дано дійсні числа s, t. Отримати f(t-2s, s+1.2t)+f(t, st+ 2.5), де

 

 

 

ab

f (a,b) =

 

 

 

 

 

.

 

 

b + a

 

+1

 

 

14.Дано дійсні числа s, t. Отримати f(t, t-2s, s+1.2)+f(t, s+t, 2.5), де

f (a,b,c) =

a

 

2 + b2

+ c2

.

 

 

 

 

 

b + a

 

+ 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15.Дано дійсні числа s, t. Отримати f(t, -2ts, s+2.2)+f(2.5t, s-t, 3.2), де

f (a,b,c) =

a + b2 +

c2

.

 

 

 

c + a + b

 

 

 

 

 

+1

 

 

 

 

 

 

 

 

 

 

 

 

æ1 0 0ö

 

Завдання 2. Дано матриці A, B,

ç

÷

. Обчислити С. Відповідно до

E = ç

0 1 0÷

 

 

 

 

 

 

 

 

 

ç

÷

 

 

 

 

 

 

 

 

 

 

è

0 0 1ø

 

варіанту скласти програму, використовуючи підпрограми-процедури.

 

æ1 7

1 ö

 

1.

ç

0

4 0

÷

B

A = ç

÷,

 

ç

 

 

 

÷

 

 

è1- 3 1ø

 

 

æ

2

2 3ö

 

2.

ç

 

4

0

÷

B

A = ç1

÷,

 

ç

 

 

 

 

÷

 

 

è1 -1 2

ø

 

 

æ

0 7 3ö

 

3.

ç

3 4 1

÷

B

A = ç

÷,

 

ç

 

 

 

÷

 

 

è1- 3 1

ø

 

 

æ1 2

3 ö

 

4.

ç

4

4 0

÷

B

A = ç

÷,

 

ç

 

 

 

÷

 

 

è

7 - 3 8ø

 

 

æ

2 7

3ö

 

5.

ç

5 4

1

÷

B

A = ç

÷,

 

ç

 

 

 

 

÷

 

 

è1-1 2

 

ø

 

 

æ

3 5 3 ö

 

6.

ç

3 0 1

÷

B

A = ç

÷,

 

ç

 

 

 

÷

 

 

è1- 3 0

ø

 

 

æ1 2

1 ö

 

7.

ç

4 1 0

÷

B

A = ç

÷,

 

ç

 

 

 

÷

 

 

è

2- 2 1ø

 

 

æ

2 2

1ö

 

8.

ç

-11 0

÷

 

A = ç

÷, B

 

ç

4- 3 5

÷

 

 

è

ø

 

æ1 0 -1ö

 

 

ç

0 2 1

÷

. C = A2

- B .

÷

ç

5 0 6

÷

 

 

è

ø

 

 

æ

3 0 - 2ö

 

ç

-1 2 -1

÷

+ B) .

= ç

÷. C = A(A

ç

0 1

2

÷

 

è

ø

 

æ

 

4 0 -1ö

 

 

ç

 

 

÷

 

 

= ç

5 2 -1÷. C = B(A - B) .

ç

3 0 5

÷

 

 

è

ø

 

 

æ

1 4 - 3ö

 

 

ç

2 0 5

÷

 

 

= ç

÷. C = A2 + B .

ç

 

÷

 

 

è3 6 1

ø

 

 

æ

2 0 - 3ö

 

 

ç

 

÷

 

 

= ç

5 0 -1 ÷. C = (A - E)B .

ç

3 4 5

÷

 

 

è

ø

 

 

æ

 

3 2 -1ö

 

 

ç

 

 

÷

 

+ B .

= ç1 3 -1÷. C = E + A2

ç

7 0 2

÷

 

 

è

ø

 

 

æ

 

0 6 -1ö

 

 

ç

2 1 5

÷

 

 

= ç

÷. C = A(E + B2 ) .

ç

4 3 1

÷

 

 

è

ø

 

 

æ

1 4 - 3ö

 

 

ç

2 0 1

÷

 

 

= ç

÷. C = A × B + B .

ç

3 2 1

÷

 

 

è

ø

 

 

47

 

æ1 2 1 ö

æ 7 0 2 ö

 

 

ç

4 1 0

÷

ç

 

÷

 

9. A = ç

÷, B = ç2 1 5

÷. C = A(B2 - A) .

 

ç

2

 

÷

ç

 

÷

 

 

è

- 2 6ø

è1 4 - 3ø

 

 

 

æ1 2 3

ö

æ

2 1 -1ö

10.

A =

ç

4 1 2

÷

ç

2 1 5

÷

ç

÷,

B = ç

÷. C = A(E - B2 ) .

 

 

ç

 

 

÷

ç

3 5 3

÷

 

 

è

7 - 3 1ø

è

ø

 

 

æ1 2

1

ö

æ

2 1 5ö

 

11.

A =

ç

3 4

5

÷

ç

 

÷

 

ç

÷,

B = ç

3 5 3÷. C = (E - A2 )B .

 

 

ç

 

 

÷

ç

4 3 1

÷

 

 

 

è

2- 4 1ø

è

ø

 

 

 

æ

3 1

2

ö

æ

1 4 3 ö

 

12.

A =

ç

 

 

÷

ç

2 3 2

÷

 

ç1 4 1

÷,

B = ç

÷. C = (E - B2 )A .

 

 

ç

2 3 4

÷

ç

3 5 1

÷

 

 

 

è

ø

è

ø

 

 

 

æ1 2 3

ö

æ

1 4 - 3ö

13.

A =

ç

4 3 0

÷

ç

2 0 5

÷

ç

÷,

B = ç

÷. C = A2 + B .

 

 

ç

 

 

÷

ç

3 6 1

÷

 

 

è

7 - 3 8ø

è

ø

 

 

æ1 2 1

ö

æ

0 6 - 5ö

14.

A =

ç

 

 

÷

ç

2 1 5

÷

ç1 3 1

÷,

B = ç

÷. C = A(E + B2 ) .

 

 

ç

2-1 5

÷

ç

4 3 1

÷

 

 

è

ø

è

ø

 

 

æ1 2 1

ö

æ 0 5 - 3ö

15.

A =

ç

 

 

÷

ç

 

÷

ç1 3 1

÷,

B = ç2 1 4

÷. C = B(E + A2 ) .

 

 

ç

 

 

÷

ç

 

÷

 

 

è

2- 3 4ø

è1 3 1

ø

Контрольні питання

1.Поняття підпрограм. Процедури.

2.Cтруктура процедури.

3.Як передаються результати роботи підпрограми до головної програми?

4.Поняття підпрограм. Функції.

5.Структура функції.

6.Типи функцій.

48

ЛАБОРАТОРНА РОБОТА № 9

РОБОТА З ЗАПИСАМИ ТА ФАЙЛОВИМИ ЗМІННИМИ

Мета: ознайомитись з комбінованим типом – запис та типами файлів. Навчитися реалізовувати функції створення файлу, читання даних з файлу, виведення даних на екран.

Короткі теоретичні відомості

Записи – це структурований тип даних, що дозволяє зберігати разом певну кількість елементів (полів або змінних), що мають різні типи даних.

Оголосити запис можна в розділі var і в розділі type. Для опису змінних типу «запис» використовується зарезервоване слово record.

Загальний вигляд повної форми оголошення змінної типу «запис»:

TYPE

<ім’я_типу> = RECORD ім’я_поля1 : тип; ім’я_поля2 : тип;

ім’я_поляN : тип;

END;

VAR

< ім’я_запису> : <ім’я_типу>;

Загальний вигляд скороченої форми оголошення змінної типу «запис»:

VAR

<ім’я_запису> : RECORD ім’я_поля1 : тип; ім’я_поля2 : тип;

ім’я_поляN : тип;

END;

<ім’я_типа>, <ім’я_запису> та им’я_поляN - правильні ідентифікатори.

Приклад оголошення:

type

CLIENT = record

: string[20];

family

name

: string[10];

patronymic

: string[15];

year_birthday : integer; address : string[30];

telephone

: integer;

end;

 

var

 

clients : CLIENT;

 

або

 

49

Group[i] do Begin
Writeln (name); Writeln (family);
Writeln (year_birthday);
With Valuation_of_last_half_year do Begin
Writeln (Predmet1);
Writeln (Predmet2);
Writeln (Predmet3);
Writeln (Predmet4);
End;

var

CLIENT : record

: string[20];

family

name

: string[10];

patronymic

: string[15];

year_birthday : integer;

address : string[30];

telephone

: integer;

end;

При сумісній обробці кількох полів запису використовується оператор приєднання.

Загальний вигляд оператора приєднання:

WITH <ім'я змінної типу record> DO <оператор>;

Приклад заповнення масиву, елементами якого є записи:

For i := 1 to n do begin

With

End;

End;

Приклад 9.1. Програми заповнення та редагування бази даних про домашній електронний телефонний довідник.

Program demoRecord; uses dos, crt;

const n

= 10;

Name : array[1..n] of string[15] = ('Петренко','Титаренко',

'Василенко','Носенко','Деричуб','Вернигора',

'Котигорошко','Iвасюк','Iваненко','Коваленко'); Type Abonent = Record

FName : string[15];

50