- •Інформація та інформаційні процеси Поняття інформації.
- •Одиниці вимірювання інформації.
- •Подання інформації та типи комп'ютерів.
- •Способи пересилання інформації.
- •Будова комп'ютера
- •Пристрої введення-виведення інформації.
- •Процесор
- •Принципи функціонування комп'ютера Фізичні принципи
- •Поняття про середовища програмування
- •Програмний принцип
- •Загальна характеристика мови паскаль
- •Поняття інтегрованого середовища
- •Команда New
- •Команда Open
- •Основи алгоритмізації Алгоритми та їх властивості
- •Блок-схеми
- •Загальна характеристика Паскаль-програми
- •Структура Паскаль-програми
- •Елементи мови Паскаль
- •Прості типи даних
- •Стандартні типи даних
- •Дійсний тип
- •Логічний тип
- •Символьний тип
- •Конструйовані типи
- •Перелічуваний тип
- •Оператори надання значень змінним Оператор присвоєння
- •Уведення-виведення
- •Порядок виконання операцій
- •Складений оператор
- •Стиль запису програми
- •Структури керування
- •Структура послідовного виконання
- •Структура розгалуження
- •Умовний оператор
- •Оператор варіанта
- •Оператор безумовного переходу
- •Структура повторення
- •Цикл з параметром
- •Цикл з передумовою
- •Цикл з післяумовою
- •Ітераційні цикли
- •Обчислення суми знакозмінного ряду із заданою точністю
- •Процедури і функції
- •Процедури з параметрами. Параметри-значення
- •Одномірні масиви
- •Поняття масиву. Одномірний масив та його опис в програмі
- •Обчислення скалярного добутку двох векторів
- •Знаходження найбільшого (найменшого) значень серед елементів масиву
- •Обчислення суми та добутку елементів масиву
- •Перетворення масиву по заданому закону
- •Впорядкування одномірних масивів
- •Впорядкування шляхом вибору
- •Впорядкування обмінами
- •Впорядкування вставками
- •Зливання впорядкованих масивів
- •Двомірні масиви Поняття двомірного масиву та його опис у програмі
- •Ввід та вивід значень елементів двомірного масиву Ввід значень елементів двомірного масиву
- •Вивід значень елементів двомірного масиву a[m,n]
- •Рядковий тип (string)
- •Комбіновані типи Організація комбінованих типів у Паскалі
- •Оператор приєднання
- •Множинні типи Організація множин
- •Файлові типи Організація файлів
- •Підготовчі та завершальні операції
- •Операції уведення-виведення
- •Стандартні файли input і output
- •Модулі Модуль і його структура
- •Стандартні модулі
- •Наближене знаходження коренів рівнянь Дослідження рівняння. Відокремлення коренів
- •Метод поділу проміжку пополам
- •Метод хорд
- •Метод дотичних
- •Чисельне інтегрування
- •Квадратурні формули прямокутників
- •Загальні формули прямокутників
- •Квадратурна формула трапецій
- •Практичні оцінки точності квадратурних формул. Вибір кроку інтегрування
- •Список літератури
Стандартні файли input і output
Стандартні файли input та output є текстовими. У програмі їх не описують. З ними не можна використовувати процедури reset та rewrite. Уважають, що ці файли описані й на початку програми ці процедури виконані. Операційна система пов'язує файл input з пристроєм уведення (у режимі діалогу це клавіатура), а файл output - з пристроєм виведення (у режимі діалогу це екран дисплея).
У процесі читання з файлу input і записування у файл output імена цих файлів можна пропускати. Наприклад, еквівалентні такі записи:
read(x) і read(input.x); write(x) і write(output,x).
Те ж саме стосується і функцій Eoln і Eof:
Eoln і Eoln(input); Eof і Eof(output).
Для текстових файлів визначена стандартна функція page, яка виконує перехід на наступну сторінку під час виведення інформації на пристрій виведення.
Далі розглянемо використання стандартного текстового файлу output для виведення даних за допомогою стандартної процедури
write(x1,x2 хn),
яка еквівалентна
write(x1), write(x2),…,write(xn).
Послідовності символів, що виводяться у файл output, будуть розділені на рядки по 80 символів у випадку виведення на екран дисплея.
Для виведення даних використовують буфер, у якому формується рядок (80 символів), перш ніж буде виведений. Перед початком програми і після цілковитого заповнення буфера він очищується, тобто заповнюється пропусками. Оператор процедури write вводить у вільні позиції буфера певну кількість символів, яка залежить від типу фактичного параметра процедури і його значення. Як тільки весь буфер заповнений, тобто чергова літера для виведення є в останній позиції буфера, сформований рядок з буфера буде виведений у черговий рядок дисплея. Після цього буфер очиститься і почне формуватися наступний рядок символів для виведення.
Може трапитись ситуація, що буфер заповниться в той момент, коли в ньому є лише частина групи символів, які відображають певне значення. Тоді на екрані дисплея це значення буде розірване. Щоб уникнути такої ситуації, у деяких реалізаціях передбачена перевірка того, чи повністю поміщається задане значення в рядку. Якщо ні, то це значення переходить на наступний рядок, а цей доповнюється пропусками.
Для керування розміщенням даних по рядках застосовують процедуру writeln. Звертання до цієї процедури без параметрів полягає в заповненні всіх решти незаповнених позицій буфера пропусками, після чого сформований у буфері рядок буде виведений, і буфер очиститься.
Модулі Модуль і його структура
Модуль - це сукупність сталих, типів даних, змінних, процедур і функцій, які можна використати у програмі або в іншому модулі. Сам модуль не є виконуваною програмою. Модульний підхід до проектування дає змогу розділити програму на частини, які компілюють окремо. Модулі можна створювати самостійно, а також використовувати стандартні, що їх надає Турбо Паскаль.
Структура модуля має такий вигляд:
unit <ім'я>
interface
uses <список модулів>
{відкриті оголошення}
implementation
uses <список модулів>
{власні оголошення}
{реалізація процедур і функцій}
begin
{коди ініціалізації}
end
Модуль починається зі слова unit, яке разом з іменем є заголовком модуля. Наступне службове слово interface означає початок секції інтерфейсу модуля, доступного для всіх інших модулів і програм, які використовують цей модуль. В інтерфейсі модуля можуть бути оголошені сталі, типи даних, змінні, процедури і функції. Будь-яка програма, що застосовує цей модуль, має доступ до всіх елементів, оголошених у його інтерфейсі. Щодо процедур і функцій, то в секції інтерфейсу зазначені тільки їхні заголовки, а самі оператори, що реалізують їх, описані в наступній секції реалізації.
Секція інтерфейсу закінчується словом implementation, яке одночасно розпочинає секцію реалізації. Все, що описане в І секції інтерфейсу, є доступним секції реалізації. Крім цього, в секції реалізації можуть бути свої описи, уже недоступні програмам, що використовують цей модуль. Ці описи використовують процедури і функції, зазначені у секції інтерфейсу. Ці процедури і функції повторно описують в секції реалізації, їхній заголовок може бути такий же, як у секції інтерфейсу, або мати коротку форму, що містить слово procedure (function), після якого йде ім'я без зазначення параметрів і типу. Підпрограми секції реалізації, не описані в секції інтерфейсу, повинні мати повний заголовок.
Слово uses можна застосовувати як у секції інтерфейсу, так і в секції реалізації. В першому випадку його записують відразу після слова interface і воно означає те, що сталі, типи даних і змінні, оголошені в інтерфейсі модулів, імена яких пелічені після слова uses, можна використати в будь-якому оголошенні в інтерфейсі цього модуля. В другому випадку слово uses записують відразу після слова implementation і воно означає те, що сталі, типи даних і змінні, оголошені в інтерфейсі перелічених після uses модулів, доступні тільки в секції реалізації цього модуля.
Секція реалізації розміщена між словами implementation і end. Якщо ж перед end є слово begin і деякі оператори, то одержаний складений оператор стає секцією ініціалізації модуля. В цій секції відбувається ініціалізація структур даних, що їх використовує модуль або які доступні програмам, що застосовують цей модуль. Також тут відкриваються файли, які використовуються в програмах. Під час виконання програми секцію ініціалізації викликає тіло програми, що застосовує модуль. Якщо ж у програмі є декілька модулів, то спочатку будуть викликані секції ініціалізації всіх модулів, а потім послідовно виконуються оператори з тіла програми.
Відтрансльовані модулі зберігаються в спеціальному двійковому форматі, стандартні - у файлі TURBO.TPL (вони автоматично завантажуються в пам'ять разом з Турбо Паскалем).
Для використання модулів треба, щоб після заголовка програми було речення uses, а далі зазначений список імен усіх модулів, що їх використовує програма. Наприклад:
program PRG;
uses MOD1, MOD2, MODS;
Імена модулів розділяють комами, вони можуть бути оголошені в будь-якому порядку. Якщо ж речення uses нема, то Турбо Паскаль приєднує стандартний модуль System, який забезпечує виконання стандартних підпрограм (процедур і функцій).
Наведемо приклад використання модулів і посилання на елементи, оголошені в модулі. Нехай є модуль
unit MODL;
interface
const
MV=75;
type
MS=(A,B,C);
var
MW: string[30];
procedure SMW(s: MS);
function ТА: integer;
implementation
...............................
end.
Наведена нижче програма використовує елементи, оголошені в секції interface цього модуля:
program TS;
uses MODL;
const
MV=12;
type
TP=1..30;
var
i: integer;
AS: MS;
function ТА: ТР;
begin
TA:=-1;
end;
begin
AS:=A;
SMW(AS);
writeln(MODL.MV);
writeln(MV);
I:=TA;
writeln(l);
end.
У програмі деякі індентифікатори, оголошені у використовуваному нею модулі, можна перевизначити (MV, ТА). Під час виконання програма застосовує свої власні описи, оскільки вони зроблені пізніше, ніж у модулі. Якщо ж треба використати . оголошення ідентифікатора з модуля, то для цього перед ідентифікатором зазначають ім'я модуля з крапкою. В нашому прикладі в програмі TS для функції ТА використано її опис у самій програмі, тоді як для сталої MV має сенс її визначення, оголошене в секторі інтерфейсу модуля MODUL.
Може трапитися, що описи перетинаються в модулях, які використовує програма чи модуль. Тоді дійсні ті описи (видимі), які містяться в інтерфейсній частині модуля, зазначеного пізніше в списку uses цієї програми чи модуля.
В Турбо Паскалі можна робити рекурсивні посилання модулів. У секції реалізації кожного з двох модулів може бути звертання до процедури, оголошеної в секції реалізації іншого з цих двох модулів. Для забезпечення такої можливості потрібно в реченні uses секції реалізації кожного модуля зазначити ім'я іншого модуля, на який є посилання.
Приклад програми опрацювання матриць (множення матриць, додавання вектора до рядка матриці):
unit MODI;
interface
const
М=100;
t=2;
type
VECT=array [1..M] of integer,
TABL=array [1..M, 1..M] of integer;
var
i,j,r: integer;
procedure MULT(var A,B,C: TABL; m,n,k: integer);
procedure ADD(var A: TABL; var Q: VECT; m,n: integer);
implementation
procedure MULT;
{Множення матриць}
begin
for i:=1 to m do
for j:=1 to k do
begin
C[i,j]:=0;
for r:=1 to n do C[I,j]:=C[I,j]+A[I,r]*B[r,j]
end
end;
procedure ADD;
{Додавання вектора до 1-го рядка матриці}
begin
for i:=1 to n do A[l,i]:=A[l,i]+Q[i];
end
end.
unit MOD2;
interface
uses MOD1 ;
procedure VVD(var A: TABL; m,n: integer);
procedure VYV(var A: TABL; m,n: integer);
implementation
procedure VVD;
{Уведення матриці}
begin
for i:=1 to m do
for j:=1 to n do read(A[i,j])
end; {ofVV}
procedure VYV;
{Виведення матриці}
begin
for i:=1 to m do
begin
for j:=1 to n do write(A[i,j]);
writeln
end;
end; {of VYV}
end. {of MOD2}
program MATR(input.output);
uses MOD1,MOD2;
{Опрацювання матриць}
var
A1,B1,C1:TABL;
P: VECT;
m1,n1,k1: integer;
t,i: integer;
begin
VVD(A1,m1,n1);
VVD(B1,n1,k1);
MULT(A1,B1,C1,m1,n1,k1);
VYV(C1,m1,k1);
for i:=1 to n1 do read(P[i]);
read(t);
ADD(A1,P,t,n1);
{Якщо в ADD замість t записати MODl.t, то відповідний ідентифікатор t буде переданий з модуля MOD1}
VYV(C1,m1,n1)
end.
