АтаП_пр
.pdfЗавдання 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