- •1 Виділення слів у текстових файлах
- •1.1 Підготовка до лабораторної роботи
- •Теоретичні відомості
- •Варіанти завдань
- •1.4 Контрольні питання
- •2 Комбінований тип даних
- •2.1 Підготовка до лабораторної роботи
- •2.2 Теоретичні відомості
- •2.3 Варіанти завдань
- •2.4 Контрольні питання
- •3 Сортування масивів комбінованого типу даних
- •3.1 Підготовка до лабораторної роботи
- •3.2 Теоретичні відомості
- •3.3 Варіанти завдань
- •3.4 Контрольні питання
- •4 Підпрограми-процедури
- •4.1 Підготовка до лабораторної роботи
- •4.2 Теоретичні відомості
- •4.3 Варіанти завдань
- •4.4 Контрольні питання
- •5 Підпрограми-функції
- •5.1 Підготовка до лабораторної роботи
- •5.2 Теоретичні відомості
- •5.3 Варіанти завдань
- •Контрольні питання
- •6 Організація односпрямованого списку
- •6.1 Підготовка до лабораторної роботи
- •6.2 Теоретичні відомості
- •6.3 Варіанти завдань
- •6.4 Контрольні питання
- •7 Обробка матриць у середовищі lazarus
- •7.1 Теоретичні відомості
- •7.2 Варіанти завдань
- •7.3 Контрольні питання
- •Перелік посилань
3.4 Контрольні питання
У чому полягає сортування масивів комбінованого типу?
Як виконується сортування методом вибору?
Як виконується сортування методом обміну ("бульбашкова")?
Що зміниться в наведеному вище прикладі, якщо сортування буде виконана за спаданням, а не за зростанням?
Як виконується порівняння рядків?
Яким чином виконується обробка відсортованого масиву для знаходження суми значень деякого числового поля?
Як визначити поле, за яким необхідно сортувати масив? Наведіть приклади.
Яким чином можна зберегти результати обробки відсортованого масиву записів в новому файлі?
4 Підпрограми-процедури
Мета роботи - оволодіння навичками написання процедур та звернення до них, вивчення способів передачі параметрів.
4.1 Підготовка до лабораторної роботи
При підготовці до лабораторної роботи необхідно ознайомитися зі структурою програм, що включають в себе підпрограми; вивчити способи передачі параметрів в підпрограму; правила узгодження формальних і фактичних параметрів; особливості виклику процедур.
4.2 Теоретичні відомості
Підпрограмою називають самостійний фрагмент програми, що реалізує окремий алгоритм, оформлений особливим способом і забезпечений ім'ям. Підпрограми призначені для реалізації алгоритмів вирішення окремих під задач. Вони дають можливість зменшувати кількість повторень однієї і тієї ж послідовності операторів, а також конструювати програму як набір окремих підпрограм. Застосування підпрограм дозволяє реалізовувати концепцію структурного програмування. У результаті цього створюються програмні одиниці з ієрархічною структурою.
Підпрограми поділяються на стандартні та підпрограми користувача. Стандартні підпрограми користувач не створює, вони знаходяться в стандартних модулях. Підпрограма користувача - це пойменована група операторів, яку створюють і описують в основній програмі в розділах procedure або function. Підпрограму можна викликати з будь-якого місця програми необхідну кількість разів.
Описи підпрограм знаходяться в описовій частині програми, в розділі процедур і функцій. Кожна підпрограма описується один раз, але при необхідності до неї можна багато разів звертатися.
У мові Паскаль є 2 види підпрограм: функції і процедури які розрізняються призначенням і способом їх використання..
Процедури (рrocedure) використовуються при отриманні одного або декількох результатів (можуть не мати результатів). Загальний вигляд запису процедури:
рrocedure <iм’я> (<список формальних параметрів >); <розділи описів і оголошень процедури >; begin <розділ операторів процедури > end; |
Припустимо, що є такий опис процедури:
PROCEDURE PR(P1:T1;P2:T2;VAR PN:TN);
< розділи описів >
BEGIN
< Оператори >
END;
Виклик процедури з основної програми:
PR(A1,A2,AN),
де PR - ім'я підпрограми;
P1,P2,PN - імена формальних параметрів;
Т1,Т2,ТN - типи цих параметрів;
A1,A2,AN - фактичні параметри.
Формальні параметри представляють не якісь конкретні значення, і позначають лише типи змінних й те, як ці змінні використовуються у процедурі.
При кожному зверненні до процедури формальні параметри мають конкретизуватися. Тому в операторі виклику процедури після її імені потрібно задати список фактичних параметрів у круглих дужках.
Таким чином, при зверненні до процедури в ній вводяться у використання свої внутрішні змінні, імена яких збігаються з формальними параметрами. При вході в процедуру цим внутрішнім змінним присвоюються значення, задані фактичними параметрами. Саме тому формальні і фактичні параметри повинні бути узгоджені за кількістю, типом та порядком слідування.
Розрізняють 3 види формальних параметрів :
параметри-значення;
параметри-змінні;
параметри-константи.
Для першого типу параметрів у формальний параметр записується значення фактичного параметра, а в другому випадку - адреса фактичного параметра. Тому тоді, коли параметр змінюється в підпрограмі, (іншими словами, є результатом роботи підпрограми) його описують як параметр-змінну. Для цього перед ім'ям параметра-змінної має вказуватися службове слово VAR (параметр PN).
Параметри-константи доцільно використовувати у випадках, якщо потрібно передавати структури даних, що займають великий розмір пам'яті, але змінювати вихідні значення параметрів з алгоритмічної точки зору неприпустимо. В результаті економно використовується оперативна пам'ять і одночасно гарантується цілісність вихідних даних. В заголовках підпрограм перед ідентифікаторами параметрів-констант повинне бути ключове слово const.
Типи формальних параметрів обов'язково повинні позначатися ідентифікаторами. Отже, при використанні типів, що визначаються програмістом, ці типи повинні бути попередньо описані.
TYPE
MS=ARRAY[1..100] OF REAL;
STROKA=STRING[50];
. . .
PROCEDURE PR(VAR A:MS; ST:STROKA; S:STRING);
Приклад. Розглянемо процедуру CENA, що визначає вартість телефонної розмови з оплатою 0.6 гр. + 20% ПДВ.
PROCEDURE CENA (K : INTEGER; VAR C : REAL);
BEGIN
C := K * 0.6;
C := C + 0.2 * C;
END;
У наведеному прикладі K - формальний параметр-значення (це кількість хвилин розмови), C - формальний параметр-змінна (сума, яку необхідно сплатити за k хвилин розмови).
Приклад. Замінити елементи, розташовані вище головної діагоналі матриці А (N, N), на мінімальний елемент. Для вирішення завдання використовувати процедуру. Вихідні дані ввести з текстового файлу, а результати вивести в іншій текстовий файл в основній програмі. Всі дані передати в процедуру через список формальних / фактичних параметрів.
Програма має вигляд:
PROGRAM LAB;
TYPE
AR=ARRAY[1..10,1..10] OF INTEGER;
VAR
A:AR; { массив А }
N,I, J: INTEGER; {індекси рядків, стовпців }
FI, FO: TEXT; {файлові змінні }
PROCEDURE PROC(VAR B:AR; M:INTEGER);
VAR
K, L: INTEGER; {індекси рядків, стовпців }
Bmin: INTEGER; {мінімальний елемент }
BEGIN
{пошук мінімального елемента }
Bmin:=B[1,1];
FOR K:=1 TO M DO
FOR L:=1 TO M DO
IF B[K,L]<Bmin THEN Bmin:=B[K,L];
{заміна елементів вище головної діагоналі }
FOR K:=1 TO M-1 DO
FOR L:=K+1 TO M DO
B[K,L]:=Bmin;
END; { PROC }
{ оператори головної програми }
BEGIN
WRITELN (‘Введіть розмірність матриці’);
READLN(N);
{ідкриття файлу вихідних даних і читання їх }
ASSIGN(FI, 'lab.inp');
RESET(FI);
FOR I:=1 TO N DO BEGIN
FOR J:=1 TO N DO READ(FI,A[I,J]);
READLN(FI)
END;
CLOSE(FI);
{відкриття результуючого файлу }
ASSIGN (FO,'lab.out');
REWRITE(FO);
WRITELN(FO ,' Вихідний масив A:');
FOR I:=1 TO N DO BEGIN
FOR J:=1 TO N DO WRITE(FO,A[I,J]:3);
WRITELN(FO)
END;
{виклик процедури }
PROC(A,N);
APPEND(FO);
WRITELN (FO ,' Змінений масив A:');
FOR I:=1 TO N DO BEGIN
FOR J:=1 TO N DO WRITE(FO,A[I,J]:3);
WRITELN(FO)
END;
CLOSE(FO);
END.
Файл вихідних даних:
1 2 3
-4 -5 6
7 8 9
Результуючий файл:
Вихідний масив A:
1 2 3
-4 -5 6
7 8 9
Змінений масив A:
1 -5 -5
-4 -5 -5
7 8 9
