Смекни!
smekni.com

Програмування в середовищі Pascal (стр. 10 из 16)

ТАБУЛЯЦІЯ ФУНКЦІЇ І ПОШУК ЕКСТРЕМУМІВ

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

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

Змінні, що змінюються в циклі, називаються параметрами циклу.

Кожний алгоритм циклічної структури містить такі елементи:

а) підготовка циклу – визначення початкових значень параметрів

циклу;

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

параметрів циклу;

в) модифікація циклу – зміна значень параметрів циклу;

г) управління циклом – перевірка умови виходу з циклу.

Оператор циклу з лічильником має дві модифікації наступного формату:

For I := M1 To M2 Do <Оператор>;

For I := M1 To M2 Downto <Оператор>; де i - змінна порядкового типу, яка змінюється при повторенні циклу

(параметр циклу, або лічильник); m1 – вираз, що задає початкове значення лічильника; m2 – вираз, що задає кінцеве значення лічильника;

DO вказує на те, що зміна параметра циклу здійснюється в прямому порядку: для чергового витка циклу береться наступне значення. Зарезервоване слово DOWNTO вказує на зміну в зворотному порядку

береться попереднє значення. Найчастіше в якості параметра циклу береться змінна цілого типу. А для цілих типів наступне та попереднє значення відрізняються на 1. Тому при використанні в якості параметра циклу змінної цілого типу ця змінна змінюється з шагом 1.

При виконанні цього оператора спочатку обчислюється вираз m1 і одержане значення присвоюється лічильнику (параметру циклу). Потім циклічно виконується наступна послідовність дій:

Перевірка умови, чи не перевищує поточне значення лічильника кінцевого значення, заданого виразом m2 (цей виразобчислюється ). Якщопоточне значення перевищує кінцеве значення (становиться меншим у випадку модифікації DOWNTO) цикл завершується.

Управління одержує оператор, який іде слідом за оператором циклу.

Виконання тіла циклу (оператора <Оператор>). Це може бути складовий оператор, тобто оператор, складений з декількох операторів, заключних в операторні дужки BEGIN … END.

Нарощування змінної циклу (береться наступне або попереднє значення у залежності від напряму його зміни).

Приклад: а:=5;

for i:= -1 to 1 do begin а:=a*i; writeln(а:3,’ ’, i:2) end;

Оператор циклу з попередньою перевіркою умови (WHILE) має наступний формат:

WHILE <умова> DO <Оператор>;

Доти поки дотримується умова, послідовно виконується тіло циклу (<оператор>). Якщо умова не дотримується, то виконання програми продовжується, починаючи з оператора, наступного за циклом.

Якщо в циклі необхідно виконати більше одного оператора, то їх слід укласти в операторні дужки BEGIN і END, тобто утворити з них складовий оператор.

Безумовно, для коректного виходу із циклу умова виходу повинна змінюватися усередині тіла циклу.

Приклад:

while z > 0 do begin у := у + sqr(z); z := z - 1 end;

Оператор циклу з наступною перевіркою умови (REPEAT) має такий формат:

REPEAT <Оператори> UNTIL <умова>;

Спочатку виконується тіло циклу. Потім перевіряється умова (логічний вираз). Якщо вона не виконується (тобто має значення FALSE), виконання циклу продовжується, інакше – вихід з циклу, тобто перехід до оператора, наступного за оператором циклу. У будь-якому випадку тіло циклу виконається хоча б один раз.

Слід звернути увагу, що в цьому операторі пара слів Repeat…Until грають роль операторних дужок, тому перед Until ставити ознаку кінця оператора (символ крапка з комою) необов’язково.

Як і в попередньому операторі для коректного виходу із циклу умова виходу повинна змінюватися усередині тіла циклу.

Приклад:

repeat у := у + sqr(z); z := z - 1 until z < 0;

Для гнучкого керування циклами Pascal в своєму складі має дві процедури без параметрів:

Break – реалізує негайний вихід з циклу; дія цієї процедури полягає в передачі управління оператору, який стоїть зразу за оператором циклу.

Continue – забезпечує дострокове завершення чергового проходу

циклу; еквівалент передачі управління в самий кінець оператора циклу.

Табуляція функційце формування і виведення (на екран або принтер) таблиці значень функції для значень аргументу (х), що змінюється від деякого початкового значення (xn) до кінцевого (xk) із заданим кроком (h). Для цього використовується цикл. При підготовці циклу аргумент спочатку приймає початкове значення (x:=xn), в тілі циклу обчислюються і виводяться значення функції для поточного значення аргументу. Модифікація циклу полягає в зміні значення аргументу на величину крока (x:=x+h). Цикл завершується, коли після чергової зміни значення аргументу воно перевищить кінцеве значення (x>xk).

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

5.2 Приклад виконання лабораторної роботи 2

Обчислити таблицю значень і знайти екстремуми функції

1, якщо x0

Y

3, якщо x0

Блок-схеми (рис. 7,8)

Рисунок 7 - Блок-схема алгоритму функції

Блок-схема алгоритму основної програми

Рисунок 8 - Блок-схема алгоритму основної програми

Текст програми Program Lab2;

{Лабораторна Робота №2.Табуляція І Пошук Екстремумів}

Uses Crt;

Var Xn,Xk,Hx,X,Y,Max,Min : Real;

{-------------Обчислення Функції---------}

Function F(X:Real):Real;

Begin

If X>0 Then F:=Sqrt(Sin(X)+1)

Else F:=Sqr(X)+2*X+3;

End;

{---------------Основна Програма---------}

Begin

Clrscr;

Write(' Введіть Початкове Значення Відрізка ’); Readln(Xn);

Write(' Введіть Кінцеве Значення Відрізка '); Readln(Xk);

Write(' Введіть Крок '); Readln(Hx);

X:=Xn;

Max:=F(X);

Min:=F(X);

Writeln(' Таблиця Функції ');

Writeln('***************************');

Writeln('* X * У *');

Writeln('***************************');

While X<=Xk Do

Begin

У:=F(X);

Writeln('* ',X:10:5,' * ',Y:10:5,' *');

If Y>Max Then Max:=Y;

If Y<Min Then Min:=Y;

X:=X+Hx;

End;

Writeln('***************************');

Writeln(' Max= ',Max:10:5,' Min= ',Min:10:5); Readkey; End.

5.3 Завдання до лабораторної роботи 2

1 Обчислити таблицю значень функції, заданої в табл. 7

(див. лаб.роб. № 1).

2 Методом перебору знайти екстремуми даної функції.

Початкове і кінцеве значення відрізка, а також крок табуляції, запрошувати в діалозі.

6 ЛАБОРАТОРНА РОБОТА №3 СЕЛЕКТИВНА ОБРОБКА

МАСИВУ

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

До цих пір ми мали справу з простими типами даних. Базуючись на простих типах, можна будувати більш складніші – структуровані типи даних.

Зокрема, масиви.

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

Загальний вид опису типу «масив»:

TYPE T = ARRAY[T1,T2,...,Tk] OF TC; де T - ім'я типу «масив»;

T1 ,..., Tk - типи індексів;

TC - тип компонентів масмву / базовий тип.

Кількість індексів k – розмірність масиву. Індекси можуть бути будьякого типу, окрім REAL і INTEGER. Звичайно для індексів використовується тип «діапазон».

Кількість індексів k, необхідних при зверненні до елемента масиву, визначає к-розмірність масиву. При k=1 масив називається одновимірним. При k=2 – двовимірним і т.д. Одновимірний масив відповідає поняттю вектора (лінійної таблиці, рядка), двовимірний масив – поняттю матриці (набору векторів, прямокутної таблиці).

Після об’явлення типу масиву можна вводити змінні цього типу:

VAR M: T; де M - ідентифікатор масиву.

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

VAR M: ARRAY[T1, T2 ... Tn] OF TC.

Приклад:

VAR M: ARRAY[1..8] OF REAL;

Тут масив з ім'ям М складається з восьми елементів (М1, М2 ..., М8) дійсного типу.

Доступ до будь-якого елемента масиву здійснюється вказівкою ідентифікатора масиву, за яким в квадратних дужках йдуть індексні вирази. Індексний вираз повинен давати значення, що лежать в діапазоні, визначуваному типом індексу. Для оголошеного вище масиву М у програмі доступні наступні індексні змінні: M[1], M[2] ..., M[8].

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

(найменшим). Інакше найбільше (найменше) зберігає старе значення, тобто: