Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ОТ-1.doc
Скачиваний:
0
Добавлен:
25.12.2019
Размер:
1.17 Mб
Скачать

Підпрограми на мові "паскаль"

Мета практикуму – розробка програмного забезпечення на мові програмування "Паскаль" з використанням методів структурного програмування та багатовіконного інтерфейсу, а також детальне вивчення та практичне застосування пунктів меню Windows, Debug інтегрованого середовища мови.

  1. Теоретичні відомості

1.1. Підпрограма – це логічно завершена група операторів, що має ім'я та яку можна викликати будь-яку кількість разів із різних місць програми. Для реалізації підпрограм на мові “Паскаль” використовується функція та процедура.

Структурно підпрограма складається із заголовка, описуючої та виконавчої частини. Останні дві мають такий само вигляд, як і у звичайної програми, проте всі елементи, що об'явлені в описуючій частині діють тільки у межах підпрограми. Спроба їх використання за межами підпрограми призводить до помилки.

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

Function <ім’я> (<формальні параметри>):<тип даних>;

Список <формальні параметри> забезпечує механізм обчислення значення функції для різних значень вхідних даних у вигляді фактичних параметрів, які передаються з основної програми. Між формальним та фактичним списком параметрів установлюється однозначний зв'язок при перелічуванні їх зліва направо. Формальні параметри записуються через символ крапка з комою “;” з указуванням через двокрапку типу даних. Змінні одного типу можна записувати через кому. Наприклад,

Function Alfha(a,b:real; c:byte):real;

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

Function Beta:integer;

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

x:=2.5;

y:=3.9;

z:=7;

t:=2*Alfha(x,y,z);

Приклад 1. Обчислити значення виразу z=xy+(2y)3x. Уведення в степінь оформити у вигляді підпрограми-функції за формулою ab=e(b*ln(a)).

Program Function_Program;

Uses Crt;

Var

x,y,z :real;

Function Stepin (a,b:real):real;

Begin

Stepin:=Exp(b*Ln(a));

End;

Begin

TextBackGround (lightgray);

ClrScr;

TextColor (blue);

GotoXY (6,2);

Writeln ('ПРОГРАМА ОБЧИСЛЕННЯ ЗНАЧЕННЯ ВИРАЗУ');

TextColor (red);

GotoXY (9,4);

Write ('Введiть значення Х та Y: ');

TextColor (black);

Readln (x,y);

z:=Stepin(x,y)+Stepin(2*y,3*x);

TextColor (yellow);

GotoXY (9,7);

Writeln ('z= ',z:9:2);

Readln;

End.

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

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

Список <формальні параметри> забезпечує, як і у підпрограмі-функції, механізм обчислення значень змінних для різних значень вхідних даних. Правила запису формальних параметрів такі ж, як для функції, проте у процедурі вони складаються з параметрів-значень та параметрів-змінних. Параметри-значення – це вхідні дані, які передаються з основної програми для проведення обчислень. Параметри-змінні – це результати роботи процедури, які повертаються у основну програму після обчислень. Для позначення параметрів-змінних перед ними записується слово Var, наприклад,

Procedure Sorter (a,b:real; c:byte; Var x,y:real);

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

Procedure Beep;

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

t:=2.5;

h:=3.9;

z:=7;

Sorter(t,h,z,Alfha,Beta);

Приклад 2. Знайти максимальний елемент дійсної матриці А3х5. Знаходження максимуму оформити у вигляді процедури.

Program Max_Array;

Uses Crt;

Const

n=3; m=5;

Type

Masiv=array [1..n,1..m] of real;

Var

A :Masiv;

Amax :real;

I,J :byte;

Procedure Max (X:Masiv; Var Xmax:real);

Var

k,p:byte;

Begin

Xmax:=x[1,1];

for k:=1 to n do

for p:=1 to m do

if x[k,p]>Xmax then Xmax:=x[k,p];

End;

Begin

TextColor (blue);

TextBackground (lightgray);

ClrScr;

GotoXY (21,2);

Writeln ('ПОШУК МАКСИМУМУ МАТРИЦI');

Window (1,3,80,25);

for I:= 1 to n do

for J:= 1 to m do

begin

GotoXY (21,2);

TextColor (red);

Write ('Введiть елемент матрицi А[',i,',',j,']= ');

TextColor (black);

Read (a[i,j]);

ClrScr;

end;

Max (A,Amax);

GotoXY (21,2);

TextColor (red);

Write ('Максимум= ',Amax:9:2);

Repeat Until KeyPressed;

End.

1.4. Текстовий режим екрана включено за згодою. Він призначений для виводу символів кодової таблиці ASCII. Найчастіше екран умовно розбивається на 25 рядків та 80 стовпців із координатою верхнього лівого кута (1,1) та нижнього правого (80,25)

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

Uses CRT;

За допомогою оператора

Window (x1,y1,x2,y2);

відкривається текстове вікно з координатою верхнього лівого кута x1,y1 та нижнього правого x2,y2, наприклад,

Window (10,5,45,15);

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

Для відновлення повного екрану потрібно задати вікно на весь екран

Window (1,1,80,25);

1.6. При роботі в текстовому режимі кожен символ на екрані може мати 16 кольорів, а фон під ним – 8. Колір змінюється тільки після виконання у програмі команд виводу Write, Writeln.

Колір символу задається командою бібліотеки CRT

TextColor (<колір символу>);

а колір фону – командою

TextBackGround (<колір фону>);

Кольори можна задавати цифрами або відповідними англомовними словами згідно табл. 1.1. За згодою встановлено білий колір символів на чорному фоні.

Колір символу або фону

Колір тільки символу

Значення

Назва

Значення

Назва

0

Black (чорний)

8

DarckGray (темносірий)

1

Blue (синій)

9

LightBlue (світлосиній)

2

Green (зелений)

10

LightGreen (світлозелений)

3

Cian (бірюзовий)

11

LightCian (світлобірюзовий)

4

Red (червоний)

12

LightRed (світлочервоний)

5

Magenta (малиновий)

13

LightMagenta (світло малиновий)

6

Brown (коричневий)

14

Yellow (жовтий)

7

LightGray (світлосірий)

15

White (білий)

Наприклад, жовтий колір символів задається командою

TextColor (yellow);

або

TextColor (14);

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

TextBackGround (blue);

ClrScr;

Мерехтіння символів задається за допомогою константи blink, що має значення 128, шляхом додавання до кольору символу, наприклад

TextColor (red+blink);

Write ('Mерехтіння червоних символів');

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

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

Program Menu;

Uses Crt;

Const

K= 3;

NameRegime: array[1..K] of string[50]=

(' 1 – Перша програма меню ',

' 2 – Друга програма меню ',

' 3 - Вихід ');

Var

J :integer;

I :Char;

Procedure Windows (X1, Y1, X2, Y2:integer);

Begin

TextBackGround (blue);

ClrSCr;

Window (X1+2, Y1+1, X2+2, Y2+1);

TextBackGround (black);

ClrScr;

Window (X1, Y1, X2, Y2);

TextBackGround (red);

ClrScr;

end;

Procedure Menu1;

Begin

Window (1,1,80,25);

ClrScr;

GotoXY (25, 13);

writeln ('Це - перша програма меню');

repeat until KeyPressed;

End;

Procedure Menu2;

Begin

Window (1,1,80,25);

ClrScr;

GotoXY (25, 13);

writeln ('Це - друга програма меню');

repeat until KeyPressed;

End;

BEGIN

while True do

begin

Windows (20, 7, 60, 17);

GotoXY (15, 3);

Write ('ГОЛОВНЕ МЕНЮ');

for J:= 1 to K do

begin

GotoXY (9,4+J);

write (NameRegime[J])

end;

repeat

I:= ReadKey;

until ((I='1')or(I='2')or(I='3'));

Case I of

'1': Menu1;

'2': Menu2;

'3': begin

ClrScr;

TextMode (LastMode);

Halt

end;

end;

end;

END.