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

АтаП_пр

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

Завдання 8. Що буде результатом виконання програми:

PROGRAM PRIMER;

VAR S,S1,S2,S3,S4: STRING[50]; N: INTEGER; BEGIN

WRITELN(’Введить початковій текст’); READLN(S); WRITELN(’Що заміняти’); READLN(S1);

WRITELN(’На що заміняти’); READLN(S2); WHILE POS(S1,S)>0 DO BEGIN

N:=POS(S1,S);

DELETE(S,N,LENGTH(S1));INSERT(S2,S,N);

END;

WRITELN(’’);

END.

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

1.Дайте визначення символьних змінних?

2.Які операції застосовують над символьними змінними?

3.Які можна здійснити операції з елементами рядка?

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

21

ПРАКТИЧНЕ ЗАНЯТТЯ № 7

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

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

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

В мові 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;

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

22

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

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

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

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

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

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

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

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

Begin

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

End;

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

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

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

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

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

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

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

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

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

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

тип даних.

23

Завдання до практичного заняття

Завдання 1. Чи можна будь-яку функцію оформити як процедуру і будьяку процедуру представити як функцію.

Завдання 2. Як можна спростити запис:

1)max(a, 1, 15);

2)min(-1, n, -m, 10);

3)min(1, max(sin(a+b), π, 5), a-b)?;

Завдання 3. Нехай в програмі описано такі процедури:

Procedure P(x,y: integer); Begin

y:=x+1

end;

Procedure Q(x: integer, var y: integer); Begin

y:=x+1

end;

Procedure R(var x, y: integer); Begin

y:=x+1

end;

1) визначити, що буде надруковано в результаті виконання таких операторів:

c:=2;

d:=1;

P(c,d);

writeln(d);

c:=2;

d:=1;

Q(c,d);

writeln(d);

c:=2;

d:=1;

R(c,d);

writeln(d);

2) чи припустиме таке звертання до процедур:

P(sqrt(c),d); P(1,d); P(c,2); Q(sqrt(c),d); R(sqrt(c),d); Q(c,2); R(1,d); R(c,2)?

3) для кожної з процедур вказати які з її параметрів є параметрамизначеннями,а які – параметри-змінні.

Завдання 4. Знайти і пояснити помилки в записі процедур:

1)Procedure P(x,y: integer); Begin

y:=x+1

end;

2)Procedure Q(x: integer, var y: integer); Begin

y:=x+1

end;

Завдання 5. Знайти і пояснити помилки в записі функцій:

1) Function max(n: integer): real; Var a,max: real;

begin read(max);

24

for i:=1 to n-1 do begin

read(a)

if a>max then max:=a; end;

end;

2) Function max(n: integer): real; Var a: real;

begin read(a); max:=a;

for i:=1 to n-1 do begin

read(a)

if a>max then max:=a; end;

end;

Завдання 6. Заповнити таблицю, використовуючи наведені нижче програми

1) program SW;

var m1, m2, mm: integer;

procedure max (x,y:integer; var m:integer); begin

if x>y then m:=x else m:=y;

end; begin

max (5,1,m1); max(1,5,m2); mm:=m1+m2; write(mm);

end.

2) program MD;

var b1, b2, : integer;

procedure wub (a:integer; var b:boolean); begin

case a mod 5 of 1,2: b:=false; 3,4: b:=true;

end;

end; begin wub(63,b1); wub(24,b2);

write(b1,b2);

end.

25

 

 

Ім′я

 

Формальні

Параметри

Параметри-

 

Фактичні

Результат

 

 

 

процедури

 

параметри

-значення

змінні

 

параметри

виконання

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

програми

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Завдання 7. Заповнити таблицю, використовуючи наведені нижче

програми

 

 

 

 

 

 

 

 

 

 

 

1) program MID;

 

 

 

 

 

 

 

 

 

 

 

 

var m : real;

 

 

 

 

 

 

 

 

 

 

 

 

function

min (x1,x1:real):real;

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

if x1<x2 then min:=x1 else min:=x2 ;

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

m:=min(min(2,5),14);

 

 

 

 

 

 

 

 

 

 

write(m);

 

 

 

 

 

 

 

 

 

 

 

end.

 

 

 

 

 

 

 

 

 

 

 

2) program MAN;

 

 

 

 

 

 

 

 

 

 

 

 

var d: integer;

 

 

 

 

 

 

 

 

 

 

 

 

function dd (a1,b1:integer):integer;

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

dd:=sqr(a1)+sqr(b1);

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

d:=dd(1,4)-dd(2,1);

 

 

 

 

 

 

 

 

 

 

write(d);

 

 

 

 

 

 

 

 

 

 

 

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ім′я

 

Тип результату

 

Формальні

 

Фактичні

 

Результат

 

 

функції

 

 

 

 

параметри

 

параметри

 

виконання

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

програми

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

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

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

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

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

26

ПРАКТИЧНЕ ЗАНЯТТЯ № 8

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

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

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

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

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

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

VAR

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

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

END;

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

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

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

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

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

Мовою Pascal можна створювати три типи файлів: текстовий, типізований, нетипізований, котрі в програмі (у розділі VAR) визначаються наступним чином:

<файлова змінна> : text;

<файлова змінна> : file of < тип компоненти >; <файлова змінна> : file.

де <файлова змінна> – це логічне ім'я файлу, що використовується в програмі; <тип компоненти> - компонентом файлу може бути як змінна базового типу, так і структурного.

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

ASSIGN (< ф.з.>, < ім'я файлу>);

де < ф.з.> - файлова змінна; < ім'я файлу > - це повне ім'я файлу, яке містить у собі шлях доступу, безпосереднє ім'я файлу і розширення.

27

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

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

Ця сукупність операцій називається ініціацією файлу чи "відкриттям" файлу. Ініціюється файл за допомогою процедур Reset і ReWrite. За допомогою процедури Reset ініціюється, тобто відкривається раніше створений файл. За допомогою процедури ReWrite ініціюється файл для запису, тобто файл, що створюється.

Синтаксис:

Reset(< ф.з.> [,< розмір запису в байтах >]); ReWrite(< ф.з.> [,< розмір запису в байтах >]);

Другий аргумент вказується тільки для нетипізованих файлів. Текстові файли можна ініціювати також і процедурою Append:

Append(< ф.з.>);

У цьому випадку раніше створений файл відкривається для додавання даних у кінець файлу.

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

Close(< ф.з.>);

При зчитуванні даних з раніше створеного файлу кінець файлу можна визначити з допомогою функції EOF: EOF(< ф.з.>);

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

while not EOF(F1) do begin

...

< зчитування й обробка компонент файлу >

...

end;

Безпосереднє введення інформації здійснюється процедурами READ і READLN, а вивід (запис) інформації – WRITE і WRITELN. Особливістю їхнього застосування до файлу є обов'язковість вказівки файлової змінної як першого параметра у списку елементів:

Read(< файлова змінна >, < список введення >); ReadLn(< файлова змінна >, < список введення >); Write(< файлова змінна >, < список виводу >); WriteLn(< файлова змінна >,< список виводу >).

Текстовий файл – це сукупність рядків змінної довжини. Змінна довжина рядків визначає наявність маркерів, що відзначають кінець рядка. Як маркери використовуються два керуючі символу "Перехід рядка" і "Повернення каретки", їх десяткові коди: #10, #13. Назви керуючих символів "Перехід

28

рядка"(LF – Line Feed) і "Повернення каретки"(CR - Carriage Return) узяті за аналогією роботи з пишучою машинкою.

Кінець рядка можна визначити за допомогою функції EOLn:

EOLn(< ф.з.>);

Для запису даних у файл використовуються процедури WRITE і WRITELN:

Write(< ф.з.>, < список виводу >); Writeln(< ф.з.>, < список виводу >).

За процедурою WRITE значення даних зі списку запишуться у файл підряд без усяких роздільників. За процедурою WRITELN у файлі після кожного виведеного значення будуть записані ознаки кінця рядка.

Для читання даних з файлу використовуються процедури READ і READLN:

Read(< ф.з.>, < список вводу >); Readln(< ф.з.>, < список вводу >);

Завдання до практичного заняття

Завдання 1. Як виглядатиме опис змінної типу record, якщо вона повинна містити інформацію:

1)координати точки на площині;

2)вартість у гривнях та копійках;

3)прізвище, ім’я, по-батькові студента.

Завдання 2. У програмі описані дані:

Var x: array[1..100] of integer;

y:array[1..100] of integer;

a:array[1..100] of string[20];

Замінити цей опис описом змінної типу record.

Завдання 3. Нехай у програмі описано змінну:

Var a:record

x, y: integer;

z:record

n:real;

m:char

end;

end;

Яка група операторів присвоювання буде некоректною і чому:

1) a.x:=10;

 

a.z.n:=0.5;

a.y:=5;

 

a.z.m:=’A’;

 

with z do

3)

with a do

 

begin

 

begin

 

n:=0; m:=’A’

 

x:=10;

y:=5;

end;

 

n:=0.5; m:=A

2) a.x:=10;

 

end;

 

a.y:=5;

4)

a.x:=10.5;

a.y:=5;

29

a.z.n:=0.5;

a.z.m:=’A’;

begin

5) with a do

 

n:=0.5; m:=’д’

begin x:=10; y:=5;

end;

with z

do

end;

Завдання 4. Які з тверджень є вірними:

1)Логічний файл – це файл на зовнішньому носії інформації;

2)У типізованому файлі відома кількість його елементів;

3)Файл складається з елементів різного типу;

4) Для перегляду інформації типізованого файлу необхідна спеціальна програма;

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

Завдання 5. Відповісти на наступні питання:

1)Чи можуть бути елементи файла різнотипними величинами?

2)Який максимальний номер елемента типізованого файла, що складається з 50 елементів?

3)Як описати файл, якщо в ньому необхідно розмістити однакові групи елементів з величин різного типу?

4)Чи можуть два елементи одного і того самого файла мати однаковий порядковий номер?

5)Чи можна одночасно читати з файла і записувати в нього інформацію?

6)В яке місце файла можна дописувати інформацію: на початок; в середину; в кінець?

7)Чи можна на місце одного елемента файла записати два таких самих елементів?

Завдання 6. Нехай файл з цілочисловими елементами містить два числа –1 та 1. Визначити значення змінної y таких послідовностей операторів:

1)

reset(f);y:=0;

read(f,x); y:=y*x;

 

While not eof(f) do

untileof(f);

 

begin

3) reset(f);

 

read(f,x); y:=y+x;

if not eof(f) then

 

end;

read(f,y);

2)

reset(f);y:=1;

if not eof(f) then

 

repeat

read(f,y);

Завдання 7. Визначити вміст цілочислового файла f після виконання таких дій:

rewrite(f);

if eof(f) then write(f,1) else write(f,2); if eof(f) then write(f,3) else write(f,4);

rewrite(f);

for i:=3 downto 1 do write(f,sqr(i));

30